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.
Files changed (225) hide show
  1. package/README.md +179 -0
  2. package/bin/alchemy-effect.js +15 -0
  3. package/bin/alchemy-effect.js.map +1 -0
  4. package/bin/alchemy-effect.ts +10 -0
  5. package/lib/aws/account.d.ts +17 -0
  6. package/lib/aws/account.d.ts.map +1 -0
  7. package/lib/aws/account.js +18 -0
  8. package/lib/aws/account.js.map +1 -0
  9. package/lib/aws/arn.d.ts +6 -0
  10. package/lib/aws/arn.d.ts.map +1 -0
  11. package/lib/aws/arn.js +1 -0
  12. package/lib/aws/arn.js.map +1 -0
  13. package/lib/aws/assets.d.ts +8 -0
  14. package/lib/aws/assets.d.ts.map +1 -0
  15. package/lib/aws/assets.js +4 -0
  16. package/lib/aws/assets.js.map +1 -0
  17. package/lib/aws/bundle.d.ts +4 -0
  18. package/lib/aws/bundle.d.ts.map +1 -0
  19. package/lib/aws/bundle.js +4 -0
  20. package/lib/aws/bundle.js.map +1 -0
  21. package/lib/aws/client.d.ts +8 -0
  22. package/lib/aws/client.d.ts.map +1 -0
  23. package/lib/aws/client.js +20 -0
  24. package/lib/aws/client.js.map +1 -0
  25. package/lib/aws/credentials.d.ts +146 -0
  26. package/lib/aws/credentials.d.ts.map +1 -0
  27. package/lib/aws/credentials.js +170 -0
  28. package/lib/aws/credentials.js.map +1 -0
  29. package/lib/aws/iam.d.ts +23 -0
  30. package/lib/aws/iam.d.ts.map +1 -0
  31. package/lib/aws/iam.js +7 -0
  32. package/lib/aws/iam.js.map +1 -0
  33. package/lib/aws/index.d.ts +22 -0
  34. package/lib/aws/index.d.ts.map +1 -0
  35. package/lib/aws/index.js +28 -0
  36. package/lib/aws/index.js.map +1 -0
  37. package/lib/aws/lambda/consume.d.ts +17 -0
  38. package/lib/aws/lambda/consume.d.ts.map +1 -0
  39. package/lib/aws/lambda/consume.js +30 -0
  40. package/lib/aws/lambda/consume.js.map +1 -0
  41. package/lib/aws/lambda/function.client.d.ts +8 -0
  42. package/lib/aws/lambda/function.client.d.ts.map +1 -0
  43. package/lib/aws/lambda/function.client.js +7 -0
  44. package/lib/aws/lambda/function.client.js.map +1 -0
  45. package/lib/aws/lambda/function.d.ts +38 -0
  46. package/lib/aws/lambda/function.d.ts.map +1 -0
  47. package/lib/aws/lambda/function.handler.d.ts +7 -0
  48. package/lib/aws/lambda/function.handler.d.ts.map +1 -0
  49. package/lib/aws/lambda/function.handler.js +8 -0
  50. package/lib/aws/lambda/function.handler.js.map +1 -0
  51. package/lib/aws/lambda/function.invoke.d.ts +10 -0
  52. package/lib/aws/lambda/function.invoke.d.ts.map +1 -0
  53. package/lib/aws/lambda/function.invoke.js +31 -0
  54. package/lib/aws/lambda/function.invoke.js.map +1 -0
  55. package/lib/aws/lambda/function.js +3 -0
  56. package/lib/aws/lambda/function.js.map +1 -0
  57. package/lib/aws/lambda/function.provider.d.ts +9 -0
  58. package/lib/aws/lambda/function.provider.d.ts.map +1 -0
  59. package/lib/aws/lambda/function.provider.js +375 -0
  60. package/lib/aws/lambda/function.provider.js.map +1 -0
  61. package/lib/aws/lambda/index.d.ts +9 -0
  62. package/lib/aws/lambda/index.d.ts.map +1 -0
  63. package/lib/aws/lambda/index.js +9 -0
  64. package/lib/aws/lambda/index.js.map +1 -0
  65. package/lib/aws/lambda/serve.d.ts +14 -0
  66. package/lib/aws/lambda/serve.d.ts.map +1 -0
  67. package/lib/aws/lambda/serve.js +7 -0
  68. package/lib/aws/lambda/serve.js.map +1 -0
  69. package/lib/aws/parse-ini.d.ts +4 -0
  70. package/lib/aws/parse-ini.d.ts.map +1 -0
  71. package/lib/aws/parse-ini.js +67 -0
  72. package/lib/aws/parse-ini.js.map +1 -0
  73. package/lib/aws/profile.d.ts +6 -0
  74. package/lib/aws/profile.d.ts.map +1 -0
  75. package/lib/aws/profile.js +4 -0
  76. package/lib/aws/profile.js.map +1 -0
  77. package/lib/aws/region.d.ts +18 -0
  78. package/lib/aws/region.d.ts.map +1 -0
  79. package/lib/aws/region.js +21 -0
  80. package/lib/aws/region.js.map +1 -0
  81. package/lib/aws/s3.d.ts +8 -0
  82. package/lib/aws/s3.d.ts.map +1 -0
  83. package/lib/aws/s3.js +7 -0
  84. package/lib/aws/s3.js.map +1 -0
  85. package/lib/aws/sqs/index.d.ts +6 -0
  86. package/lib/aws/sqs/index.d.ts.map +1 -0
  87. package/lib/aws/sqs/index.js +6 -0
  88. package/lib/aws/sqs/index.js.map +1 -0
  89. package/lib/aws/sqs/queue.client.d.ts +12 -0
  90. package/lib/aws/sqs/queue.client.d.ts.map +1 -0
  91. package/lib/aws/sqs/queue.client.js +11 -0
  92. package/lib/aws/sqs/queue.client.js.map +1 -0
  93. package/lib/aws/sqs/queue.consume.d.ts +21 -0
  94. package/lib/aws/sqs/queue.consume.d.ts.map +1 -0
  95. package/lib/aws/sqs/queue.consume.js +21 -0
  96. package/lib/aws/sqs/queue.consume.js.map +1 -0
  97. package/lib/aws/sqs/queue.d.ts +87 -0
  98. package/lib/aws/sqs/queue.d.ts.map +1 -0
  99. package/lib/aws/sqs/queue.js +3 -0
  100. package/lib/aws/sqs/queue.js.map +1 -0
  101. package/lib/aws/sqs/queue.provider.d.ts +6 -0
  102. package/lib/aws/sqs/queue.provider.d.ts.map +1 -0
  103. package/lib/aws/sqs/queue.provider.js +79 -0
  104. package/lib/aws/sqs/queue.provider.js.map +1 -0
  105. package/lib/aws/sqs/queue.send-message.d.ts +11 -0
  106. package/lib/aws/sqs/queue.send-message.d.ts.map +1 -0
  107. package/lib/aws/sqs/queue.send-message.js +32 -0
  108. package/lib/aws/sqs/queue.send-message.js.map +1 -0
  109. package/lib/aws/sts.d.ts +8 -0
  110. package/lib/aws/sts.d.ts.map +1 -0
  111. package/lib/aws/sts.js +7 -0
  112. package/lib/aws/sts.js.map +1 -0
  113. package/lib/aws/zip.d.ts +3 -0
  114. package/lib/aws/zip.d.ts.map +1 -0
  115. package/lib/aws/zip.js +12 -0
  116. package/lib/aws/zip.js.map +1 -0
  117. package/lib/cli/approve.d.ts +4 -0
  118. package/lib/cli/approve.d.ts.map +1 -0
  119. package/lib/cli/approve.js +18 -0
  120. package/lib/cli/approve.js.map +1 -0
  121. package/lib/cli/clack.d.ts +14 -0
  122. package/lib/cli/clack.d.ts.map +1 -0
  123. package/lib/cli/clack.js +12 -0
  124. package/lib/cli/clack.js.map +1 -0
  125. package/lib/cli/components/ApprovePlan.d.ts +8 -0
  126. package/lib/cli/components/ApprovePlan.d.ts.map +1 -0
  127. package/lib/cli/components/ApprovePlan.js +30 -0
  128. package/lib/cli/components/ApprovePlan.js.map +1 -0
  129. package/lib/cli/components/Plan.d.ts +7 -0
  130. package/lib/cli/components/Plan.d.ts.map +1 -0
  131. package/lib/cli/components/Plan.js +98 -0
  132. package/lib/cli/components/Plan.js.map +1 -0
  133. package/lib/cli/components/PlanProgress.d.ts +9 -0
  134. package/lib/cli/components/PlanProgress.d.ts.map +1 -0
  135. package/lib/cli/components/PlanProgress.js +166 -0
  136. package/lib/cli/components/PlanProgress.js.map +1 -0
  137. package/lib/cli/index.d.ts +361 -0
  138. package/lib/cli/index.d.ts.map +1 -0
  139. package/lib/cli/index.js +25260 -0
  140. package/lib/cli/index.js.map +1 -0
  141. package/lib/cli/main.d.ts +2 -0
  142. package/lib/cli/main.d.ts.map +1 -0
  143. package/lib/cli/main.js +1 -0
  144. package/lib/cli/main.js.map +1 -0
  145. package/lib/cli/plan.d.ts +13 -0
  146. package/lib/cli/plan.d.ts.map +1 -0
  147. package/lib/cli/plan.js +1 -0
  148. package/lib/cli/plan.js.map +1 -0
  149. package/lib/cli/progress.d.ts +7 -0
  150. package/lib/cli/progress.d.ts.map +1 -0
  151. package/lib/cli/progress.js +29 -0
  152. package/lib/cli/progress.js.map +1 -0
  153. package/lib/cli/spinner.d.ts +2 -0
  154. package/lib/cli/spinner.d.ts.map +1 -0
  155. package/lib/cli/spinner.js +13 -0
  156. package/lib/cli/spinner.js.map +1 -0
  157. package/lib/cloudflare/api.d.ts +24 -0
  158. package/lib/cloudflare/api.d.ts.map +1 -0
  159. package/lib/cloudflare/api.js +34 -0
  160. package/lib/cloudflare/api.js.map +1 -0
  161. package/lib/cloudflare/index.d.ts +5 -0
  162. package/lib/cloudflare/index.d.ts.map +1 -0
  163. package/lib/cloudflare/index.js +5 -0
  164. package/lib/cloudflare/index.js.map +1 -0
  165. package/lib/cloudflare/kv.d.ts +29 -0
  166. package/lib/cloudflare/kv.d.ts.map +1 -0
  167. package/lib/cloudflare/kv.js +3 -0
  168. package/lib/cloudflare/kv.js.map +1 -0
  169. package/lib/cloudflare/kv.provider.d.ts +4 -0
  170. package/lib/cloudflare/kv.provider.d.ts.map +1 -0
  171. package/lib/cloudflare/kv.provider.js +39 -0
  172. package/lib/cloudflare/kv.provider.js.map +1 -0
  173. package/lib/cloudflare/worker.d.ts +33 -0
  174. package/lib/cloudflare/worker.d.ts.map +1 -0
  175. package/lib/cloudflare/worker.js +4 -0
  176. package/lib/cloudflare/worker.js.map +1 -0
  177. package/lib/index.d.ts +3 -0
  178. package/lib/index.d.ts.map +1 -1
  179. package/lib/index.js +3 -0
  180. package/lib/index.js.map +1 -1
  181. package/package.json +70 -3
  182. package/src/aws/account.ts +35 -0
  183. package/src/aws/arn.ts +7 -0
  184. package/src/aws/assets.ts +8 -0
  185. package/src/aws/bundle.ts +5 -0
  186. package/src/aws/client.ts +33 -0
  187. package/src/aws/credentials.ts +408 -0
  188. package/src/aws/iam.ts +30 -0
  189. package/src/aws/index.ts +55 -0
  190. package/src/aws/lambda/consume.ts +64 -0
  191. package/src/aws/lambda/function.client.ts +14 -0
  192. package/src/aws/lambda/function.handler.ts +30 -0
  193. package/src/aws/lambda/function.invoke.ts +40 -0
  194. package/src/aws/lambda/function.provider.ts +563 -0
  195. package/src/aws/lambda/function.ts +39 -0
  196. package/src/aws/lambda/index.ts +12 -0
  197. package/src/aws/lambda/serve.ts +29 -0
  198. package/src/aws/parse-ini.ts +80 -0
  199. package/src/aws/profile.ts +6 -0
  200. package/src/aws/region.ts +35 -0
  201. package/src/aws/s3.ts +10 -0
  202. package/src/aws/sqs/index.ts +5 -0
  203. package/src/aws/sqs/queue.client.ts +20 -0
  204. package/src/aws/sqs/queue.consume.ts +46 -0
  205. package/src/aws/sqs/queue.provider.ts +94 -0
  206. package/src/aws/sqs/queue.send-message.ts +51 -0
  207. package/src/aws/sqs/queue.ts +86 -0
  208. package/src/aws/sts.ts +13 -0
  209. package/src/aws/zip.ts +17 -0
  210. package/src/cli/approve.tsx +30 -0
  211. package/src/cli/clack.ts +22 -0
  212. package/src/cli/components/ApprovePlan.tsx +44 -0
  213. package/src/cli/components/Plan.tsx +152 -0
  214. package/src/cli/components/PlanProgress.tsx +206 -0
  215. package/src/cli/index.ts +6 -0
  216. package/src/cli/main.ts +0 -0
  217. package/src/cli/plan.ts +16 -0
  218. package/src/cli/progress.tsx +45 -0
  219. package/src/cli/spinner.ts +14 -0
  220. package/src/cloudflare/api.ts +72 -0
  221. package/src/cloudflare/index.ts +4 -0
  222. package/src/cloudflare/kv.provider.ts +51 -0
  223. package/src/cloudflare/kv.ts +20 -0
  224. package/src/cloudflare/worker.ts +34 -0
  225. 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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"}
@@ -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"}
@@ -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,3 @@
1
+ import { Policy, Runtime } from "alchemy-effect";
2
+ export const Function = Runtime("AWS.Lambda.Function")();
3
+ //# sourceMappingURL=function.js.map
@@ -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"}