alchemy 0.1.14 → 0.1.16

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 (222) hide show
  1. package/lib/apply.js +1 -1
  2. package/lib/apply.js.map +1 -1
  3. package/lib/destroy.js +9 -3
  4. package/lib/destroy.js.map +1 -1
  5. package/package.json +1 -2
  6. package/src/apply.ts +1 -1
  7. package/src/aws/table.ts +30 -8
  8. package/src/cloudflare/kv-namespace.ts +34 -15
  9. package/src/cloudflare/worker.ts +66 -41
  10. package/src/destroy.ts +15 -10
  11. package/src/utils/retry.ts +1 -0
  12. package/README.md +0 -334
  13. package/lib/$.d.ts +0 -12
  14. package/lib/$.d.ts.map +0 -1
  15. package/lib/$.js +0 -42
  16. package/lib/$.js.map +0 -1
  17. package/lib/alchemize.d.ts +0 -43
  18. package/lib/alchemize.d.ts.map +0 -1
  19. package/lib/alchemize.js +0 -112
  20. package/lib/alchemize.js.map +0 -1
  21. package/lib/apply.d.ts +0 -23
  22. package/lib/aws/account-id.d.ts +0 -5
  23. package/lib/aws/account-id.d.ts.map +0 -1
  24. package/lib/aws/account-id.js +0 -10
  25. package/lib/aws/account-id.js.map +0 -1
  26. package/lib/aws/bucket.d.ts +0 -21
  27. package/lib/aws/bucket.d.ts.map +0 -1
  28. package/lib/aws/bucket.js +0 -114
  29. package/lib/aws/bucket.js.map +0 -1
  30. package/lib/aws/function.d.ts +0 -53
  31. package/lib/aws/function.d.ts.map +0 -1
  32. package/lib/aws/function.js +0 -195
  33. package/lib/aws/function.js.map +0 -1
  34. package/lib/aws/index.d.ts +0 -9
  35. package/lib/aws/index.d.ts.map +0 -1
  36. package/lib/aws/index.js +0 -9
  37. package/lib/aws/index.js.map +0 -1
  38. package/lib/aws/oidc/github-oidc-provider.d.ts +0 -11
  39. package/lib/aws/oidc/github-oidc-provider.d.ts.map +0 -1
  40. package/lib/aws/oidc/github-oidc-provider.js +0 -22
  41. package/lib/aws/oidc/github-oidc-provider.js.map +0 -1
  42. package/lib/aws/oidc/index.d.ts +0 -3
  43. package/lib/aws/oidc/index.d.ts.map +0 -1
  44. package/lib/aws/oidc/index.js +0 -3
  45. package/lib/aws/oidc/index.js.map +0 -1
  46. package/lib/aws/oidc/oidc-provider.d.ts +0 -60
  47. package/lib/aws/oidc/oidc-provider.d.ts.map +0 -1
  48. package/lib/aws/oidc/oidc-provider.js +0 -140
  49. package/lib/aws/oidc/oidc-provider.js.map +0 -1
  50. package/lib/aws/policy.d.ts +0 -46
  51. package/lib/aws/policy.d.ts.map +0 -1
  52. package/lib/aws/policy.js +0 -139
  53. package/lib/aws/policy.js.map +0 -1
  54. package/lib/aws/queue.d.ts +0 -62
  55. package/lib/aws/queue.d.ts.map +0 -1
  56. package/lib/aws/queue.js +0 -167
  57. package/lib/aws/queue.js.map +0 -1
  58. package/lib/aws/role.d.ts +0 -27
  59. package/lib/aws/role.d.ts.map +0 -1
  60. package/lib/aws/role.js +0 -197
  61. package/lib/aws/role.js.map +0 -1
  62. package/lib/aws/ses.d.ts +0 -75
  63. package/lib/aws/ses.d.ts.map +0 -1
  64. package/lib/aws/ses.js +0 -189
  65. package/lib/aws/ses.js.map +0 -1
  66. package/lib/aws/table.d.ts +0 -26
  67. package/lib/aws/table.d.ts.map +0 -1
  68. package/lib/aws/table.js +0 -142
  69. package/lib/aws/table.js.map +0 -1
  70. package/lib/cloudflare/api.d.ts +0 -88
  71. package/lib/cloudflare/api.d.ts.map +0 -1
  72. package/lib/cloudflare/api.js +0 -184
  73. package/lib/cloudflare/api.js.map +0 -1
  74. package/lib/cloudflare/asset-manifest.d.ts +0 -15
  75. package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
  76. package/lib/cloudflare/asset-manifest.js +0 -2
  77. package/lib/cloudflare/asset-manifest.js.map +0 -1
  78. package/lib/cloudflare/auth.d.ts +0 -52
  79. package/lib/cloudflare/auth.d.ts.map +0 -1
  80. package/lib/cloudflare/auth.js +0 -114
  81. package/lib/cloudflare/auth.js.map +0 -1
  82. package/lib/cloudflare/bindings.d.ts +0 -259
  83. package/lib/cloudflare/bindings.d.ts.map +0 -1
  84. package/lib/cloudflare/bindings.js +0 -2
  85. package/lib/cloudflare/bindings.js.map +0 -1
  86. package/lib/cloudflare/durable-object-namespace.d.ts +0 -20
  87. package/lib/cloudflare/durable-object-namespace.d.ts.map +0 -1
  88. package/lib/cloudflare/durable-object-namespace.js +0 -21
  89. package/lib/cloudflare/durable-object-namespace.js.map +0 -1
  90. package/lib/cloudflare/generate-asset-manifest.d.ts +0 -3
  91. package/lib/cloudflare/generate-asset-manifest.d.ts.map +0 -1
  92. package/lib/cloudflare/generate-asset-manifest.js +0 -69
  93. package/lib/cloudflare/generate-asset-manifest.js.map +0 -1
  94. package/lib/cloudflare/index.d.ts +0 -7
  95. package/lib/cloudflare/index.d.ts.map +0 -1
  96. package/lib/cloudflare/index.js +0 -7
  97. package/lib/cloudflare/index.js.map +0 -1
  98. package/lib/cloudflare/kv-namespace.d.ts +0 -64
  99. package/lib/cloudflare/kv-namespace.d.ts.map +0 -1
  100. package/lib/cloudflare/kv-namespace.js +0 -97
  101. package/lib/cloudflare/kv-namespace.js.map +0 -1
  102. package/lib/cloudflare/state.d.ts +0 -83
  103. package/lib/cloudflare/state.d.ts.map +0 -1
  104. package/lib/cloudflare/state.js +0 -109
  105. package/lib/cloudflare/state.js.map +0 -1
  106. package/lib/cloudflare/static-site-router.d.ts +0 -19
  107. package/lib/cloudflare/static-site-router.d.ts.map +0 -1
  108. package/lib/cloudflare/static-site-router.js +0 -110
  109. package/lib/cloudflare/static-site-router.js.map +0 -1
  110. package/lib/cloudflare/static-site.d.ts +0 -166
  111. package/lib/cloudflare/static-site.d.ts.map +0 -1
  112. package/lib/cloudflare/static-site.js +0 -150
  113. package/lib/cloudflare/static-site.js.map +0 -1
  114. package/lib/cloudflare/types.d.ts +0 -52
  115. package/lib/cloudflare/types.d.ts.map +0 -1
  116. package/lib/cloudflare/types.js +0 -21
  117. package/lib/cloudflare/types.js.map +0 -1
  118. package/lib/cloudflare/upload-asset-manifest.d.ts +0 -12
  119. package/lib/cloudflare/upload-asset-manifest.d.ts.map +0 -1
  120. package/lib/cloudflare/upload-asset-manifest.js +0 -55
  121. package/lib/cloudflare/upload-asset-manifest.js.map +0 -1
  122. package/lib/cloudflare/worker-metadata.d.ts +0 -130
  123. package/lib/cloudflare/worker-metadata.d.ts.map +0 -1
  124. package/lib/cloudflare/worker-metadata.js +0 -2
  125. package/lib/cloudflare/worker-metadata.js.map +0 -1
  126. package/lib/cloudflare/worker-migration.d.ts +0 -110
  127. package/lib/cloudflare/worker-migration.d.ts.map +0 -1
  128. package/lib/cloudflare/worker-migration.js +0 -11
  129. package/lib/cloudflare/worker-migration.js.map +0 -1
  130. package/lib/cloudflare/worker.d.ts +0 -108
  131. package/lib/cloudflare/worker.d.ts.map +0 -1
  132. package/lib/cloudflare/worker.js +0 -384
  133. package/lib/cloudflare/worker.js.map +0 -1
  134. package/lib/destroy.d.ts +0 -19
  135. package/lib/error.d.ts +0 -2
  136. package/lib/error.d.ts.map +0 -1
  137. package/lib/error.js +0 -13
  138. package/lib/error.js.map +0 -1
  139. package/lib/esbuild.d.ts +0 -152
  140. package/lib/esbuild.d.ts.map +0 -1
  141. package/lib/esbuild.js +0 -67
  142. package/lib/esbuild.js.map +0 -1
  143. package/lib/fs.d.ts +0 -12
  144. package/lib/fs.d.ts.map +0 -1
  145. package/lib/fs.js +0 -41
  146. package/lib/fs.js.map +0 -1
  147. package/lib/github/client.d.ts +0 -34
  148. package/lib/github/client.d.ts.map +0 -1
  149. package/lib/github/client.js +0 -91
  150. package/lib/github/client.js.map +0 -1
  151. package/lib/github/index.d.ts +0 -2
  152. package/lib/github/index.d.ts.map +0 -1
  153. package/lib/github/index.js +0 -2
  154. package/lib/github/index.js.map +0 -1
  155. package/lib/github/secret.d.ts +0 -46
  156. package/lib/github/secret.d.ts.map +0 -1
  157. package/lib/github/secret.js +0 -103
  158. package/lib/github/secret.js.map +0 -1
  159. package/lib/global.d.ts +0 -16
  160. package/lib/global.d.ts.map +0 -1
  161. package/lib/global.js +0 -42
  162. package/lib/global.js.map +0 -1
  163. package/lib/index.d.ts +0 -10
  164. package/lib/index.d.ts.map +0 -1
  165. package/lib/index.js +0 -9
  166. package/lib/index.js.map +0 -1
  167. package/lib/input.d.ts +0 -6
  168. package/lib/input.d.ts.map +0 -1
  169. package/lib/input.js +0 -2
  170. package/lib/input.js.map +0 -1
  171. package/lib/main.d.ts +0 -3
  172. package/lib/main.d.ts.map +0 -1
  173. package/lib/main.js +0 -32
  174. package/lib/main.js.map +0 -1
  175. package/lib/output.d.ts +0 -24
  176. package/lib/output.d.ts.map +0 -1
  177. package/lib/output.js +0 -23
  178. package/lib/output.js.map +0 -1
  179. package/lib/print.d.ts +0 -7
  180. package/lib/print.d.ts.map +0 -1
  181. package/lib/print.js +0 -10
  182. package/lib/print.js.map +0 -1
  183. package/lib/resource.d.ts +0 -71
  184. package/lib/resource.d.ts.map +0 -1
  185. package/lib/resource.js +0 -276
  186. package/lib/resource.js.map +0 -1
  187. package/lib/scope.d.ts +0 -18
  188. package/lib/scope.d.ts.map +0 -1
  189. package/lib/scope.js +0 -30
  190. package/lib/scope.js.map +0 -1
  191. package/lib/slug.d.ts +0 -2
  192. package/lib/slug.d.ts.map +0 -1
  193. package/lib/slug.js +0 -4
  194. package/lib/slug.js.map +0 -1
  195. package/lib/state.d.ts +0 -40
  196. package/lib/state.d.ts.map +0 -1
  197. package/lib/state.js +0 -73
  198. package/lib/state.js.map +0 -1
  199. package/lib/stripe/index.d.ts +0 -4
  200. package/lib/stripe/index.d.ts.map +0 -1
  201. package/lib/stripe/index.js +0 -4
  202. package/lib/stripe/index.js.map +0 -1
  203. package/lib/stripe/price.d.ts +0 -109
  204. package/lib/stripe/price.d.ts.map +0 -1
  205. package/lib/stripe/price.js +0 -112
  206. package/lib/stripe/price.js.map +0 -1
  207. package/lib/stripe/product.d.ts +0 -86
  208. package/lib/stripe/product.d.ts.map +0 -1
  209. package/lib/stripe/product.js +0 -90
  210. package/lib/stripe/product.js.map +0 -1
  211. package/lib/stripe/webhook.d.ts +0 -73
  212. package/lib/stripe/webhook.d.ts.map +0 -1
  213. package/lib/stripe/webhook.js +0 -94
  214. package/lib/stripe/webhook.js.map +0 -1
  215. package/lib/utils/content-type.d.ts +0 -8
  216. package/lib/utils/content-type.d.ts.map +0 -1
  217. package/lib/utils/content-type.js +0 -41
  218. package/lib/utils/content-type.js.map +0 -1
  219. package/lib/utils/retry.d.ts +0 -13
  220. package/lib/utils/retry.d.ts.map +0 -1
  221. package/lib/utils/retry.js +0 -31
  222. package/lib/utils/retry.js.map +0 -1
@@ -1,140 +0,0 @@
1
- import { CreateOpenIDConnectProviderCommand, DeleteOpenIDConnectProviderCommand, GetOpenIDConnectProviderCommand, GetRoleCommand, IAMClient, UpdateAssumeRolePolicyCommand, } from "@aws-sdk/client-iam";
2
- import { Resource } from "../../resource";
3
- import { getAccountId } from "../account-id";
4
- /**
5
- * Unique identifier for our trust policy statement
6
- * Used to track and remove our specific statement without affecting others
7
- */
8
- const TRUST_POLICY_SID = "GitHubOIDCTrust";
9
- /**
10
- * Resource for configuring AWS OIDC provider for GitHub Actions
11
- */
12
- export class OIDCProvider extends Resource("aws::OIDCProvider", async (ctx, props) => {
13
- // Initialize AWS SDK client
14
- const client = new IAMClient({
15
- region: props.region,
16
- });
17
- if (ctx.event === "delete") {
18
- if (ctx.output?.providerArn) {
19
- try {
20
- // First, remove our trust policy statement from the role
21
- const getRole = await client.send(new GetRoleCommand({
22
- RoleName: props.roleArn.split("/").pop(),
23
- }));
24
- if (getRole.Role?.AssumeRolePolicyDocument) {
25
- const policy = JSON.parse(decodeURIComponent(getRole.Role.AssumeRolePolicyDocument));
26
- // Remove our specific statement while preserving others
27
- policy.Statement = policy.Statement.filter((stmt) => stmt.Sid !== TRUST_POLICY_SID);
28
- await client.send(new UpdateAssumeRolePolicyCommand({
29
- RoleName: props.roleArn.split("/").pop(),
30
- PolicyDocument: JSON.stringify(policy),
31
- }));
32
- }
33
- // Then delete the OIDC provider if we're the last user
34
- const provider = await client.send(new GetOpenIDConnectProviderCommand({
35
- OpenIDConnectProviderArn: ctx.output.providerArn,
36
- }));
37
- // Only delete the provider if it exists and has no other tags
38
- if (provider && (!provider.Tags || provider.Tags.length === 0)) {
39
- await client.send(new DeleteOpenIDConnectProviderCommand({
40
- OpenIDConnectProviderArn: ctx.output.providerArn,
41
- }));
42
- }
43
- }
44
- catch (error) {
45
- // Log but don't throw on cleanup errors
46
- console.error("Error during cleanup:", error);
47
- }
48
- }
49
- return;
50
- }
51
- try {
52
- const url = "https://token.actions.githubusercontent.com";
53
- const thumbprint = props.thumbprint;
54
- // Create or get existing OIDC provider
55
- let providerArn;
56
- try {
57
- const createProvider = await client.send(new CreateOpenIDConnectProviderCommand({
58
- Url: url,
59
- ClientIDList: ["sts.amazonaws.com"],
60
- ThumbprintList: [thumbprint],
61
- Tags: [
62
- {
63
- Key: "ManagedBy",
64
- Value: "alchemy",
65
- },
66
- ],
67
- }));
68
- providerArn = createProvider.OpenIDConnectProviderArn;
69
- }
70
- catch (error) {
71
- if (error.name === "EntityAlreadyExistsException") {
72
- // Provider exists, use its ARN
73
- providerArn = `arn:aws:iam::${await getAccountId()}:oidc-provider/${url}`;
74
- }
75
- else {
76
- throw error;
77
- }
78
- }
79
- // Get current role policy
80
- const getRole = await client.send(new GetRoleCommand({
81
- RoleName: props.roleArn.split("/").pop(),
82
- }));
83
- let policy;
84
- if (getRole.Role?.AssumeRolePolicyDocument) {
85
- policy = JSON.parse(decodeURIComponent(getRole.Role.AssumeRolePolicyDocument));
86
- }
87
- else {
88
- policy = {
89
- Version: "2012-10-17",
90
- Statement: [],
91
- };
92
- }
93
- // Construct the trust policy conditions
94
- const conditions = {
95
- StringEquals: {
96
- "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
97
- "token.actions.githubusercontent.com:sub": `repo:${props.owner}/${props.repository}:`,
98
- },
99
- };
100
- if (props.branches?.length) {
101
- conditions.StringEquals["token.actions.githubusercontent.com:sub"] =
102
- props.branches.map((branch) => `repo:${props.owner}/${props.repository}:ref:refs/heads/${branch}`);
103
- }
104
- if (props.environments?.length) {
105
- conditions.StringEquals["token.actions.githubusercontent.com:sub"] =
106
- props.environments.map((env) => `repo:${props.owner}/${props.repository}:environment:${env}`);
107
- }
108
- // Create our policy statement
109
- const ourStatement = {
110
- Sid: TRUST_POLICY_SID,
111
- Effect: "Allow",
112
- Principal: {
113
- Federated: providerArn,
114
- },
115
- Action: "sts:AssumeRoleWithWebIdentity",
116
- Condition: conditions,
117
- };
118
- // Remove any existing statement with our SID and add the new one
119
- policy.Statement = [
120
- ...policy.Statement.filter((stmt) => stmt.Sid !== TRUST_POLICY_SID),
121
- ourStatement,
122
- ];
123
- // Update the role's trust policy
124
- await client.send(new UpdateAssumeRolePolicyCommand({
125
- RoleName: props.roleArn.split("/").pop(),
126
- PolicyDocument: JSON.stringify(policy),
127
- }));
128
- return {
129
- ...props,
130
- providerArn,
131
- createdAt: Date.now(),
132
- };
133
- }
134
- catch (error) {
135
- console.error("Error configuring OIDC provider:", error);
136
- throw error;
137
- }
138
- }) {
139
- }
140
- //# sourceMappingURL=oidc-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oidc-provider.js","sourceRoot":"","sources":["../../../src/aws/oidc/oidc-provider.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- export type Effect = "Allow" | "Deny";
2
- export interface PolicyStatement {
3
- Sid?: string;
4
- Effect: Effect;
5
- Action: string | string[];
6
- Resource?: string | string[];
7
- Condition?: Record<string, Record<string, string | string[]>>;
8
- Principal?: Record<string, string | string[]>;
9
- NotPrincipal?: Record<string, string | string[]>;
10
- NotAction?: string | string[];
11
- NotResource?: string | string[];
12
- }
13
- export interface PolicyDocument {
14
- Version: "2012-10-17";
15
- Statement: PolicyStatement[];
16
- }
17
- export interface PolicyProps {
18
- policyName: string;
19
- document: PolicyDocument;
20
- description?: string;
21
- path?: string;
22
- tags?: Record<string, string>;
23
- }
24
- export interface PolicyOutput extends PolicyProps {
25
- id: string;
26
- arn: string;
27
- defaultVersionId: string;
28
- attachmentCount: number;
29
- createDate: Date;
30
- updateDate: Date;
31
- isAttachable: boolean;
32
- }
33
- declare const Policy_base: import("../resource").Provider<"iam::Policy", [props: PolicyProps], PolicyOutput>;
34
- export declare class Policy extends Policy_base {
35
- }
36
- export interface PolicyAttachmentProps {
37
- policyArn: string;
38
- roleName: string;
39
- }
40
- export interface PolicyAttachmentOutput extends PolicyAttachmentProps {
41
- }
42
- declare const PolicyAttachment_base: import("../resource").Provider<"iam::PolicyAttachment", [props: PolicyAttachmentProps], PolicyAttachmentProps>;
43
- export declare class PolicyAttachment extends PolicyAttachment_base {
44
- }
45
- export {};
46
- //# sourceMappingURL=policy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/aws/policy.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,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,GAAG,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAGD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;;AAED,qBAAa,MAAO,SAAQ,WA0J3B;CAAG;AAGJ,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;CAAG;;AAExE,qBAAa,gBAAiB,SAAQ,qBAyBrC;CAAG"}
package/lib/aws/policy.js DELETED
@@ -1,139 +0,0 @@
1
- import { AttachRolePolicyCommand, CreatePolicyCommand, CreatePolicyVersionCommand, DeletePolicyCommand, DeletePolicyVersionCommand, DetachRolePolicyCommand, GetPolicyCommand, GetPolicyVersionCommand, IAMClient, ListPolicyVersionsCommand, NoSuchEntityException, } from "@aws-sdk/client-iam";
2
- import { ignore } from "../error";
3
- import { Resource } from "../resource";
4
- export class Policy extends Resource("iam::Policy", async (ctx, props) => {
5
- const client = new IAMClient({});
6
- const policyArn = `arn:aws:iam::${process.env.AWS_ACCOUNT_ID}:policy${props.path || "/"}${props.policyName}`;
7
- if (ctx.event === "delete") {
8
- try {
9
- // List and delete all non-default versions first
10
- const versions = await client.send(new ListPolicyVersionsCommand({
11
- PolicyArn: policyArn,
12
- }));
13
- for (const version of versions.Versions || []) {
14
- if (!version.IsDefaultVersion) {
15
- await client.send(new DeletePolicyVersionCommand({
16
- PolicyArn: policyArn,
17
- VersionId: version.VersionId,
18
- }));
19
- }
20
- }
21
- // Delete the policy
22
- await client.send(new DeletePolicyCommand({
23
- PolicyArn: policyArn,
24
- }));
25
- }
26
- catch (error) {
27
- if (error.name !== NoSuchEntityException.name) {
28
- throw error;
29
- }
30
- }
31
- return {
32
- ...props,
33
- id: props.policyName,
34
- arn: policyArn,
35
- defaultVersionId: "v1",
36
- attachmentCount: 0,
37
- createDate: new Date(),
38
- updateDate: new Date(),
39
- isAttachable: true,
40
- };
41
- }
42
- else {
43
- try {
44
- // Check if policy exists
45
- const existingPolicy = await client.send(new GetPolicyCommand({
46
- PolicyArn: policyArn,
47
- }));
48
- // Get current policy version
49
- const currentVersion = await client.send(new GetPolicyVersionCommand({
50
- PolicyArn: policyArn,
51
- VersionId: existingPolicy.Policy.DefaultVersionId,
52
- }));
53
- const currentDocument = JSON.parse(decodeURIComponent(currentVersion.PolicyVersion.Document));
54
- // If policy document changed, create new version
55
- if (JSON.stringify(currentDocument) !== JSON.stringify(props.document)) {
56
- // List versions to check if we need to delete old ones
57
- const versions = await client.send(new ListPolicyVersionsCommand({
58
- PolicyArn: policyArn,
59
- }));
60
- // Delete oldest version if we have 5 versions (maximum allowed)
61
- if (versions.Versions?.length === 5) {
62
- const oldestVersion = versions.Versions.sort((a, b) => a.CreateDate.getTime() - b.CreateDate.getTime())[0];
63
- if (!oldestVersion.IsDefaultVersion) {
64
- await client.send(new DeletePolicyVersionCommand({
65
- PolicyArn: policyArn,
66
- VersionId: oldestVersion.VersionId,
67
- }));
68
- }
69
- }
70
- // Create new version
71
- await client.send(new CreatePolicyVersionCommand({
72
- PolicyArn: policyArn,
73
- PolicyDocument: JSON.stringify(props.document),
74
- SetAsDefault: true,
75
- }));
76
- }
77
- const policy = await client.send(new GetPolicyCommand({
78
- PolicyArn: policyArn,
79
- }));
80
- return {
81
- ...props,
82
- id: props.policyName,
83
- arn: policy.Policy.Arn,
84
- defaultVersionId: policy.Policy.DefaultVersionId,
85
- attachmentCount: policy.Policy.AttachmentCount,
86
- createDate: policy.Policy.CreateDate,
87
- updateDate: policy.Policy.UpdateDate,
88
- isAttachable: policy.Policy.IsAttachable,
89
- };
90
- }
91
- catch (error) {
92
- if (error.name === "NoSuchEntity") {
93
- // Create new policy
94
- const newPolicy = await client.send(new CreatePolicyCommand({
95
- PolicyName: props.policyName,
96
- PolicyDocument: JSON.stringify(props.document),
97
- Description: props.description,
98
- Path: props.path,
99
- Tags: props.tags
100
- ? Object.entries(props.tags).map(([Key, Value]) => ({
101
- Key,
102
- Value,
103
- }))
104
- : undefined,
105
- }));
106
- return {
107
- ...props,
108
- id: props.policyName,
109
- arn: newPolicy.Policy.Arn,
110
- defaultVersionId: newPolicy.Policy.DefaultVersionId,
111
- attachmentCount: newPolicy.Policy.AttachmentCount,
112
- createDate: newPolicy.Policy.CreateDate,
113
- updateDate: newPolicy.Policy.UpdateDate,
114
- isAttachable: newPolicy.Policy.IsAttachable,
115
- };
116
- }
117
- throw error;
118
- }
119
- }
120
- }) {
121
- }
122
- export class PolicyAttachment extends Resource("iam::PolicyAttachment", async (ctx, props) => {
123
- const client = new IAMClient({});
124
- if (ctx.event === "delete") {
125
- await ignore(NoSuchEntityException.name, () => client.send(new DetachRolePolicyCommand({
126
- PolicyArn: props.policyArn,
127
- RoleName: props.roleName,
128
- })));
129
- }
130
- else {
131
- await client.send(new AttachRolePolicyCommand({
132
- PolicyArn: props.policyArn,
133
- RoleName: props.roleName,
134
- }));
135
- }
136
- return props;
137
- }) {
138
- }
139
- //# sourceMappingURL=policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/aws/policy.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- export interface QueueProps {
2
- /**
3
- * Name of the queue
4
- * For FIFO queues, the name must end with the .fifo suffix
5
- */
6
- queueName: string;
7
- /**
8
- * Whether this is a FIFO queue.
9
- * If true, the queueName must end with .fifo suffix
10
- */
11
- fifo?: boolean;
12
- visibilityTimeout?: number;
13
- messageRetentionPeriod?: number;
14
- maximumMessageSize?: number;
15
- delaySeconds?: number;
16
- receiveMessageWaitTimeSeconds?: number;
17
- /**
18
- * Enables content-based deduplication for FIFO queues.
19
- * Only applicable when fifo is true.
20
- */
21
- contentBasedDeduplication?: boolean;
22
- deduplicationScope?: "messageGroup" | "queue";
23
- fifoThroughputLimit?: "perQueue" | "perMessageGroupId";
24
- tags?: Record<string, string>;
25
- }
26
- export interface QueueOutput extends QueueProps {
27
- id: string;
28
- arn: string;
29
- url: string;
30
- }
31
- declare const Queue_base: import("../resource").Provider<"sqs::Queue", [props: QueueProps], {
32
- id: string;
33
- arn: string;
34
- url: string;
35
- /**
36
- * Name of the queue
37
- * For FIFO queues, the name must end with the .fifo suffix
38
- */
39
- queueName: string;
40
- /**
41
- * Whether this is a FIFO queue.
42
- * If true, the queueName must end with .fifo suffix
43
- */
44
- fifo?: boolean;
45
- visibilityTimeout?: number;
46
- messageRetentionPeriod?: number;
47
- maximumMessageSize?: number;
48
- delaySeconds?: number;
49
- receiveMessageWaitTimeSeconds?: number;
50
- /**
51
- * Enables content-based deduplication for FIFO queues.
52
- * Only applicable when fifo is true.
53
- */
54
- contentBasedDeduplication?: boolean;
55
- deduplicationScope?: "messageGroup" | "queue";
56
- fifoThroughputLimit?: "perQueue" | "perMessageGroupId";
57
- tags?: Record<string, string>;
58
- }>;
59
- export declare class Queue extends Queue_base {
60
- }
61
- export {};
62
- //# sourceMappingURL=queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/aws/queue.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,kBAAkB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAC9C,mBAAmB,CAAC,EAAE,UAAU,GAAG,mBAAmB,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;;;;;IAjCC;;;OAGG;eACQ,MAAM;IAEjB;;;OAGG;WACI,OAAO;wBAEM,MAAM;6BACD,MAAM;yBACV,MAAM;mBACZ,MAAM;oCACW,MAAM;IAEtC;;;OAGG;gCACyB,OAAO;yBAEd,cAAc,GAAG,OAAO;0BACvB,UAAU,GAAG,mBAAmB;WAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;AAS/B,qBAAa,KAAM,SAAQ,UAsM1B;CAAG"}
package/lib/aws/queue.js DELETED
@@ -1,167 +0,0 @@
1
- import { CreateQueueCommand, DeleteQueueCommand, GetQueueAttributesCommand, GetQueueUrlCommand, SQSClient, } from "@aws-sdk/client-sqs";
2
- import { Resource } from "../resource";
3
- export class Queue extends Resource("sqs::Queue", async (ctx, props) => {
4
- const client = new SQSClient({});
5
- // Don't automatically add .fifo suffix - user must include it in queueName
6
- const queueName = props.queueName;
7
- // Validate that FIFO queues have .fifo suffix
8
- if (props.fifo && !queueName.endsWith(".fifo")) {
9
- throw new Error("FIFO queue names must end with .fifo suffix");
10
- }
11
- if (ctx.event === "delete") {
12
- try {
13
- // Get queue URL first
14
- const urlResponse = await client.send(new GetQueueUrlCommand({
15
- QueueName: queueName,
16
- }));
17
- // Delete the queue
18
- await client.send(new DeleteQueueCommand({
19
- QueueUrl: urlResponse.QueueUrl,
20
- }));
21
- // Wait for queue to be deleted
22
- let queueDeleted = false;
23
- while (!queueDeleted) {
24
- try {
25
- await client.send(new GetQueueUrlCommand({
26
- QueueName: queueName,
27
- }));
28
- // If we get here, queue still exists
29
- await new Promise((resolve) => setTimeout(resolve, 1000));
30
- }
31
- catch (error) {
32
- if (error.name === "QueueDoesNotExist") {
33
- queueDeleted = true;
34
- }
35
- else {
36
- throw error;
37
- }
38
- }
39
- }
40
- }
41
- catch (error) {
42
- if (error.name !== "QueueDoesNotExist") {
43
- throw error;
44
- }
45
- }
46
- return {
47
- ...props,
48
- id: props.queueName,
49
- arn: `arn:aws:sqs:${client.config.region}:${process.env.AWS_ACCOUNT_ID}:${queueName}`,
50
- url: "",
51
- };
52
- }
53
- else {
54
- // Create queue with attributes
55
- const attributes = {};
56
- if (props.visibilityTimeout !== undefined) {
57
- attributes["VisibilityTimeout"] = props.visibilityTimeout.toString();
58
- }
59
- if (props.messageRetentionPeriod !== undefined) {
60
- attributes["MessageRetentionPeriod"] =
61
- props.messageRetentionPeriod.toString();
62
- }
63
- if (props.maximumMessageSize !== undefined) {
64
- attributes["MaximumMessageSize"] = props.maximumMessageSize.toString();
65
- }
66
- if (props.delaySeconds !== undefined) {
67
- attributes["DelaySeconds"] = props.delaySeconds.toString();
68
- }
69
- if (props.receiveMessageWaitTimeSeconds !== undefined) {
70
- attributes["ReceiveMessageWaitTimeSeconds"] =
71
- props.receiveMessageWaitTimeSeconds.toString();
72
- }
73
- // FIFO specific attributes
74
- if (props.fifo) {
75
- attributes["FifoQueue"] = "true";
76
- if (props.contentBasedDeduplication) {
77
- attributes["ContentBasedDeduplication"] = "true";
78
- }
79
- if (props.deduplicationScope) {
80
- attributes["DeduplicationScope"] = props.deduplicationScope;
81
- }
82
- if (props.fifoThroughputLimit) {
83
- attributes["FifoThroughputLimit"] = props.fifoThroughputLimit;
84
- }
85
- }
86
- // Convert tags to AWS format
87
- const tags = props.tags
88
- ? Object.entries(props.tags).reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})
89
- : undefined;
90
- try {
91
- // Create the queue
92
- const createResponse = await client.send(new CreateQueueCommand({
93
- QueueName: queueName,
94
- Attributes: attributes,
95
- tags,
96
- }));
97
- // Get queue attributes
98
- const attributesResponse = await client.send(new GetQueueAttributesCommand({
99
- QueueUrl: createResponse.QueueUrl,
100
- AttributeNames: ["QueueArn"],
101
- }));
102
- return {
103
- ...props,
104
- id: props.queueName,
105
- arn: attributesResponse.Attributes.QueueArn,
106
- url: createResponse.QueueUrl,
107
- };
108
- }
109
- catch (error) {
110
- if (error.name === "QueueAlreadyExists") {
111
- // Get existing queue URL
112
- const urlResponse = await client.send(new GetQueueUrlCommand({
113
- QueueName: queueName,
114
- }));
115
- // Get queue attributes
116
- const attributesResponse = await client.send(new GetQueueAttributesCommand({
117
- QueueUrl: urlResponse.QueueUrl,
118
- AttributeNames: ["QueueArn"],
119
- }));
120
- return {
121
- ...props,
122
- id: props.queueName,
123
- arn: attributesResponse.Attributes.QueueArn,
124
- url: urlResponse.QueueUrl,
125
- };
126
- }
127
- else if (error.name === "QueueDeletedRecently") {
128
- // Queue was recently deleted, wait and retry
129
- const maxRetries = 3;
130
- let retryCount = 0;
131
- while (retryCount < maxRetries) {
132
- try {
133
- // Wait for 60 seconds before retrying
134
- await new Promise((resolve) => setTimeout(resolve, 61000));
135
- // Retry creating the queue
136
- const createResponse = await client.send(new CreateQueueCommand({
137
- QueueName: queueName,
138
- Attributes: attributes,
139
- tags,
140
- }));
141
- // Get queue attributes
142
- const attributesResponse = await client.send(new GetQueueAttributesCommand({
143
- QueueUrl: createResponse.QueueUrl,
144
- AttributeNames: ["QueueArn"],
145
- }));
146
- return {
147
- ...props,
148
- id: props.queueName,
149
- arn: attributesResponse.Attributes.QueueArn,
150
- url: createResponse.QueueUrl,
151
- };
152
- }
153
- catch (retryError) {
154
- if (retryError.name !== "QueueDeletedRecently" ||
155
- retryCount === maxRetries - 1) {
156
- throw retryError;
157
- }
158
- retryCount++;
159
- }
160
- }
161
- }
162
- throw error;
163
- }
164
- }
165
- }) {
166
- }
167
- //# sourceMappingURL=queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/aws/queue.ts"],"names":[],"mappings":"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"}
package/lib/aws/role.d.ts DELETED
@@ -1,27 +0,0 @@
1
- import type { PolicyDocument } from "./policy";
2
- export interface RoleProps {
3
- roleName: string;
4
- assumeRolePolicy: PolicyDocument;
5
- description?: string;
6
- path?: string;
7
- maxSessionDuration?: number;
8
- permissionsBoundary?: string;
9
- policies?: Array<{
10
- policyName: string;
11
- policyDocument: PolicyDocument;
12
- }>;
13
- managedPolicyArns?: string[];
14
- tags?: Record<string, string>;
15
- }
16
- export interface RoleOutput extends RoleProps {
17
- id: string;
18
- arn: string;
19
- uniqueId: string;
20
- roleId: string;
21
- createDate: Date;
22
- }
23
- declare const Role_base: import("../resource").Provider<"iam::Role", [props: RoleProps], RoleOutput>;
24
- export declare class Role extends Role_base {
25
- }
26
- export {};
27
- //# sourceMappingURL=role.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../src/aws/role.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC,CAAC;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB;;AAED,qBAAa,IAAK,SAAQ,SA6QzB;CAAG"}