alchemy 0.1.15 → 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 (217) 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 -1
  6. package/src/apply.ts +1 -1
  7. package/src/destroy.ts +15 -10
  8. package/lib/$.d.ts +0 -12
  9. package/lib/$.d.ts.map +0 -1
  10. package/lib/$.js +0 -42
  11. package/lib/$.js.map +0 -1
  12. package/lib/alchemize.d.ts +0 -43
  13. package/lib/alchemize.d.ts.map +0 -1
  14. package/lib/alchemize.js +0 -112
  15. package/lib/alchemize.js.map +0 -1
  16. package/lib/apply.d.ts +0 -23
  17. package/lib/aws/account-id.d.ts +0 -5
  18. package/lib/aws/account-id.d.ts.map +0 -1
  19. package/lib/aws/account-id.js +0 -10
  20. package/lib/aws/account-id.js.map +0 -1
  21. package/lib/aws/bucket.d.ts +0 -21
  22. package/lib/aws/bucket.d.ts.map +0 -1
  23. package/lib/aws/bucket.js +0 -114
  24. package/lib/aws/bucket.js.map +0 -1
  25. package/lib/aws/function.d.ts +0 -53
  26. package/lib/aws/function.d.ts.map +0 -1
  27. package/lib/aws/function.js +0 -195
  28. package/lib/aws/function.js.map +0 -1
  29. package/lib/aws/index.d.ts +0 -9
  30. package/lib/aws/index.d.ts.map +0 -1
  31. package/lib/aws/index.js +0 -9
  32. package/lib/aws/index.js.map +0 -1
  33. package/lib/aws/oidc/github-oidc-provider.d.ts +0 -11
  34. package/lib/aws/oidc/github-oidc-provider.d.ts.map +0 -1
  35. package/lib/aws/oidc/github-oidc-provider.js +0 -22
  36. package/lib/aws/oidc/github-oidc-provider.js.map +0 -1
  37. package/lib/aws/oidc/index.d.ts +0 -3
  38. package/lib/aws/oidc/index.d.ts.map +0 -1
  39. package/lib/aws/oidc/index.js +0 -3
  40. package/lib/aws/oidc/index.js.map +0 -1
  41. package/lib/aws/oidc/oidc-provider.d.ts +0 -60
  42. package/lib/aws/oidc/oidc-provider.d.ts.map +0 -1
  43. package/lib/aws/oidc/oidc-provider.js +0 -140
  44. package/lib/aws/oidc/oidc-provider.js.map +0 -1
  45. package/lib/aws/policy.d.ts +0 -46
  46. package/lib/aws/policy.d.ts.map +0 -1
  47. package/lib/aws/policy.js +0 -139
  48. package/lib/aws/policy.js.map +0 -1
  49. package/lib/aws/queue.d.ts +0 -62
  50. package/lib/aws/queue.d.ts.map +0 -1
  51. package/lib/aws/queue.js +0 -167
  52. package/lib/aws/queue.js.map +0 -1
  53. package/lib/aws/role.d.ts +0 -27
  54. package/lib/aws/role.d.ts.map +0 -1
  55. package/lib/aws/role.js +0 -197
  56. package/lib/aws/role.js.map +0 -1
  57. package/lib/aws/ses.d.ts +0 -75
  58. package/lib/aws/ses.d.ts.map +0 -1
  59. package/lib/aws/ses.js +0 -189
  60. package/lib/aws/ses.js.map +0 -1
  61. package/lib/aws/table.d.ts +0 -26
  62. package/lib/aws/table.d.ts.map +0 -1
  63. package/lib/aws/table.js +0 -154
  64. package/lib/aws/table.js.map +0 -1
  65. package/lib/cloudflare/api.d.ts +0 -88
  66. package/lib/cloudflare/api.d.ts.map +0 -1
  67. package/lib/cloudflare/api.js +0 -184
  68. package/lib/cloudflare/api.js.map +0 -1
  69. package/lib/cloudflare/asset-manifest.d.ts +0 -15
  70. package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
  71. package/lib/cloudflare/asset-manifest.js +0 -2
  72. package/lib/cloudflare/asset-manifest.js.map +0 -1
  73. package/lib/cloudflare/auth.d.ts +0 -52
  74. package/lib/cloudflare/auth.d.ts.map +0 -1
  75. package/lib/cloudflare/auth.js +0 -114
  76. package/lib/cloudflare/auth.js.map +0 -1
  77. package/lib/cloudflare/bindings.d.ts +0 -259
  78. package/lib/cloudflare/bindings.d.ts.map +0 -1
  79. package/lib/cloudflare/bindings.js +0 -2
  80. package/lib/cloudflare/bindings.js.map +0 -1
  81. package/lib/cloudflare/durable-object-namespace.d.ts +0 -20
  82. package/lib/cloudflare/durable-object-namespace.d.ts.map +0 -1
  83. package/lib/cloudflare/durable-object-namespace.js +0 -21
  84. package/lib/cloudflare/durable-object-namespace.js.map +0 -1
  85. package/lib/cloudflare/generate-asset-manifest.d.ts +0 -3
  86. package/lib/cloudflare/generate-asset-manifest.d.ts.map +0 -1
  87. package/lib/cloudflare/generate-asset-manifest.js +0 -69
  88. package/lib/cloudflare/generate-asset-manifest.js.map +0 -1
  89. package/lib/cloudflare/index.d.ts +0 -7
  90. package/lib/cloudflare/index.d.ts.map +0 -1
  91. package/lib/cloudflare/index.js +0 -7
  92. package/lib/cloudflare/index.js.map +0 -1
  93. package/lib/cloudflare/kv-namespace.d.ts +0 -64
  94. package/lib/cloudflare/kv-namespace.d.ts.map +0 -1
  95. package/lib/cloudflare/kv-namespace.js +0 -114
  96. package/lib/cloudflare/kv-namespace.js.map +0 -1
  97. package/lib/cloudflare/state.d.ts +0 -83
  98. package/lib/cloudflare/state.d.ts.map +0 -1
  99. package/lib/cloudflare/state.js +0 -109
  100. package/lib/cloudflare/state.js.map +0 -1
  101. package/lib/cloudflare/static-site-router.d.ts +0 -19
  102. package/lib/cloudflare/static-site-router.d.ts.map +0 -1
  103. package/lib/cloudflare/static-site-router.js +0 -110
  104. package/lib/cloudflare/static-site-router.js.map +0 -1
  105. package/lib/cloudflare/static-site.d.ts +0 -166
  106. package/lib/cloudflare/static-site.d.ts.map +0 -1
  107. package/lib/cloudflare/static-site.js +0 -150
  108. package/lib/cloudflare/static-site.js.map +0 -1
  109. package/lib/cloudflare/types.d.ts +0 -52
  110. package/lib/cloudflare/types.d.ts.map +0 -1
  111. package/lib/cloudflare/types.js +0 -21
  112. package/lib/cloudflare/types.js.map +0 -1
  113. package/lib/cloudflare/upload-asset-manifest.d.ts +0 -12
  114. package/lib/cloudflare/upload-asset-manifest.d.ts.map +0 -1
  115. package/lib/cloudflare/upload-asset-manifest.js +0 -55
  116. package/lib/cloudflare/upload-asset-manifest.js.map +0 -1
  117. package/lib/cloudflare/worker-metadata.d.ts +0 -130
  118. package/lib/cloudflare/worker-metadata.d.ts.map +0 -1
  119. package/lib/cloudflare/worker-metadata.js +0 -2
  120. package/lib/cloudflare/worker-metadata.js.map +0 -1
  121. package/lib/cloudflare/worker-migration.d.ts +0 -110
  122. package/lib/cloudflare/worker-migration.d.ts.map +0 -1
  123. package/lib/cloudflare/worker-migration.js +0 -11
  124. package/lib/cloudflare/worker-migration.js.map +0 -1
  125. package/lib/cloudflare/worker.d.ts +0 -108
  126. package/lib/cloudflare/worker.d.ts.map +0 -1
  127. package/lib/cloudflare/worker.js +0 -399
  128. package/lib/cloudflare/worker.js.map +0 -1
  129. package/lib/destroy.d.ts +0 -19
  130. package/lib/error.d.ts +0 -2
  131. package/lib/error.d.ts.map +0 -1
  132. package/lib/error.js +0 -13
  133. package/lib/error.js.map +0 -1
  134. package/lib/esbuild.d.ts +0 -152
  135. package/lib/esbuild.d.ts.map +0 -1
  136. package/lib/esbuild.js +0 -67
  137. package/lib/esbuild.js.map +0 -1
  138. package/lib/fs.d.ts +0 -12
  139. package/lib/fs.d.ts.map +0 -1
  140. package/lib/fs.js +0 -41
  141. package/lib/fs.js.map +0 -1
  142. package/lib/github/client.d.ts +0 -34
  143. package/lib/github/client.d.ts.map +0 -1
  144. package/lib/github/client.js +0 -91
  145. package/lib/github/client.js.map +0 -1
  146. package/lib/github/index.d.ts +0 -2
  147. package/lib/github/index.d.ts.map +0 -1
  148. package/lib/github/index.js +0 -2
  149. package/lib/github/index.js.map +0 -1
  150. package/lib/github/secret.d.ts +0 -46
  151. package/lib/github/secret.d.ts.map +0 -1
  152. package/lib/github/secret.js +0 -103
  153. package/lib/github/secret.js.map +0 -1
  154. package/lib/global.d.ts +0 -16
  155. package/lib/global.d.ts.map +0 -1
  156. package/lib/global.js +0 -42
  157. package/lib/global.js.map +0 -1
  158. package/lib/index.d.ts +0 -10
  159. package/lib/index.d.ts.map +0 -1
  160. package/lib/index.js +0 -9
  161. package/lib/index.js.map +0 -1
  162. package/lib/input.d.ts +0 -6
  163. package/lib/input.d.ts.map +0 -1
  164. package/lib/input.js +0 -2
  165. package/lib/input.js.map +0 -1
  166. package/lib/main.d.ts +0 -3
  167. package/lib/main.d.ts.map +0 -1
  168. package/lib/main.js +0 -32
  169. package/lib/main.js.map +0 -1
  170. package/lib/output.d.ts +0 -24
  171. package/lib/output.d.ts.map +0 -1
  172. package/lib/output.js +0 -23
  173. package/lib/output.js.map +0 -1
  174. package/lib/print.d.ts +0 -7
  175. package/lib/print.d.ts.map +0 -1
  176. package/lib/print.js +0 -10
  177. package/lib/print.js.map +0 -1
  178. package/lib/resource.d.ts +0 -71
  179. package/lib/resource.d.ts.map +0 -1
  180. package/lib/resource.js +0 -276
  181. package/lib/resource.js.map +0 -1
  182. package/lib/scope.d.ts +0 -18
  183. package/lib/scope.d.ts.map +0 -1
  184. package/lib/scope.js +0 -30
  185. package/lib/scope.js.map +0 -1
  186. package/lib/slug.d.ts +0 -2
  187. package/lib/slug.d.ts.map +0 -1
  188. package/lib/slug.js +0 -4
  189. package/lib/slug.js.map +0 -1
  190. package/lib/state.d.ts +0 -40
  191. package/lib/state.d.ts.map +0 -1
  192. package/lib/state.js +0 -73
  193. package/lib/state.js.map +0 -1
  194. package/lib/stripe/index.d.ts +0 -4
  195. package/lib/stripe/index.d.ts.map +0 -1
  196. package/lib/stripe/index.js +0 -4
  197. package/lib/stripe/index.js.map +0 -1
  198. package/lib/stripe/price.d.ts +0 -109
  199. package/lib/stripe/price.d.ts.map +0 -1
  200. package/lib/stripe/price.js +0 -112
  201. package/lib/stripe/price.js.map +0 -1
  202. package/lib/stripe/product.d.ts +0 -86
  203. package/lib/stripe/product.d.ts.map +0 -1
  204. package/lib/stripe/product.js +0 -90
  205. package/lib/stripe/product.js.map +0 -1
  206. package/lib/stripe/webhook.d.ts +0 -73
  207. package/lib/stripe/webhook.d.ts.map +0 -1
  208. package/lib/stripe/webhook.js +0 -94
  209. package/lib/stripe/webhook.js.map +0 -1
  210. package/lib/utils/content-type.d.ts +0 -8
  211. package/lib/utils/content-type.d.ts.map +0 -1
  212. package/lib/utils/content-type.js +0 -41
  213. package/lib/utils/content-type.js.map +0 -1
  214. package/lib/utils/retry.d.ts +0 -13
  215. package/lib/utils/retry.d.ts.map +0 -1
  216. package/lib/utils/retry.js +0 -32
  217. package/lib/utils/retry.js.map +0 -1
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"}
package/lib/aws/role.js DELETED
@@ -1,197 +0,0 @@
1
- import { AttachRolePolicyCommand, CreateRoleCommand, DeleteRoleCommand, DeleteRolePolicyCommand, DetachRolePolicyCommand, EntityAlreadyExistsException, GetRoleCommand, IAMClient, ListAttachedRolePoliciesCommand, NoSuchEntityException, PutRolePolicyCommand, TagRoleCommand, UpdateAssumeRolePolicyCommand, UpdateRoleCommand, } from "@aws-sdk/client-iam";
2
- import { ignore } from "../error";
3
- import { Resource } from "../resource";
4
- export class Role extends Resource("iam::Role", async (ctx, props) => {
5
- const client = new IAMClient({});
6
- if (ctx.event === "delete") {
7
- // Delete any inline policies first
8
- if (props.policies) {
9
- for (const policy of props.policies) {
10
- await ignore(NoSuchEntityException.name, () => client.send(new DeleteRolePolicyCommand({
11
- RoleName: props.roleName,
12
- PolicyName: policy.policyName,
13
- })));
14
- }
15
- }
16
- // We need to detach managed policies before deleting the role
17
- // First, get all attached policies
18
- try {
19
- const attachedPoliciesResponse = await client.send(new ListAttachedRolePoliciesCommand({
20
- RoleName: props.roleName,
21
- }));
22
- // Detach all managed policies
23
- const attachedPolicies = attachedPoliciesResponse.AttachedPolicies || [];
24
- for (const policy of attachedPolicies) {
25
- await client.send(new DetachRolePolicyCommand({
26
- RoleName: props.roleName,
27
- PolicyArn: policy.PolicyArn,
28
- }));
29
- }
30
- }
31
- catch (error) {
32
- if (error.name !== NoSuchEntityException.name) {
33
- throw error;
34
- }
35
- }
36
- await ignore(NoSuchEntityException.name, () => client.send(new DeleteRoleCommand({
37
- RoleName: props.roleName,
38
- })));
39
- return {
40
- ...props,
41
- id: props.roleName,
42
- arn: `arn:aws:iam::${process.env.AWS_ACCOUNT_ID}:role/${props.roleName}`,
43
- uniqueId: "",
44
- roleId: "",
45
- createDate: new Date(),
46
- };
47
- }
48
- const assumeRolePolicyDocument = JSON.stringify(props.assumeRolePolicy);
49
- let role;
50
- try {
51
- if (ctx.event === "create") {
52
- // Try to create the role
53
- await client.send(new CreateRoleCommand({
54
- RoleName: props.roleName,
55
- AssumeRolePolicyDocument: assumeRolePolicyDocument,
56
- Description: props.description,
57
- Path: props.path,
58
- MaxSessionDuration: props.maxSessionDuration,
59
- PermissionsBoundary: props.permissionsBoundary,
60
- Tags: [
61
- ...Object.entries(props.tags || {}).map(([Key, Value]) => ({
62
- Key,
63
- Value,
64
- })),
65
- {
66
- Key: "alchemy_stage",
67
- Value: ctx.stage,
68
- },
69
- {
70
- Key: "alchemy_resource",
71
- Value: ctx.resourceID,
72
- },
73
- ],
74
- }));
75
- }
76
- }
77
- catch (error) {
78
- if (error instanceof EntityAlreadyExistsException &&
79
- ctx.event === "create") {
80
- // Check if we were the ones who created it
81
- const existingRole = await client.send(new GetRoleCommand({
82
- RoleName: props.roleName,
83
- }));
84
- const roleTags = existingRole.Role?.Tags?.reduce((acc, tag) => {
85
- acc[tag.Key] = tag.Value;
86
- return acc;
87
- }, {}) || {};
88
- if (roleTags.alchemy_stage !== ctx.stage ||
89
- roleTags.alchemy_resource !== ctx.resourceID) {
90
- throw error;
91
- }
92
- }
93
- else if (error.name !== NoSuchEntityException.name) {
94
- throw error;
95
- }
96
- }
97
- // Get or update the role
98
- role = await client.send(new GetRoleCommand({
99
- RoleName: props.roleName,
100
- }));
101
- // Update assume role policy if it changed
102
- if (role.Role?.AssumeRolePolicyDocument !== assumeRolePolicyDocument) {
103
- await client.send(new UpdateAssumeRolePolicyCommand({
104
- RoleName: props.roleName,
105
- PolicyDocument: assumeRolePolicyDocument,
106
- }));
107
- }
108
- // Update role description and max session duration if they changed
109
- if (role.Role?.Description !== props.description ||
110
- role.Role?.MaxSessionDuration !== props.maxSessionDuration) {
111
- await client.send(new UpdateRoleCommand({
112
- RoleName: props.roleName,
113
- Description: props.description,
114
- MaxSessionDuration: props.maxSessionDuration,
115
- }));
116
- }
117
- // Update tags
118
- const newTags = {
119
- ...props.tags,
120
- alchemy_stage: ctx.stage,
121
- alchemy_resource: ctx.resourceID,
122
- };
123
- const tags = Object.entries(newTags).map(([Key, Value]) => ({
124
- Key,
125
- Value,
126
- }));
127
- await client.send(new TagRoleCommand({
128
- RoleName: props.roleName,
129
- Tags: tags,
130
- }));
131
- // Handle policy changes
132
- const previousPolicies = ctx.event === "update" ? ctx.output.policies || [] : [];
133
- const currentPolicies = props.policies || [];
134
- // Delete policies that were removed
135
- for (const oldPolicy of previousPolicies) {
136
- if (!currentPolicies.some((p) => p.policyName === oldPolicy.policyName)) {
137
- await ignore(NoSuchEntityException.name, () => client.send(new DeleteRolePolicyCommand({
138
- RoleName: props.roleName,
139
- PolicyName: oldPolicy.policyName,
140
- })));
141
- }
142
- }
143
- // Update or create policies
144
- for (const policy of currentPolicies) {
145
- const oldPolicy = previousPolicies.find((p) => p.policyName === policy.policyName);
146
- if (!oldPolicy ||
147
- JSON.stringify(oldPolicy.policyDocument) !==
148
- JSON.stringify(policy.policyDocument)) {
149
- await client.send(new PutRolePolicyCommand({
150
- RoleName: props.roleName,
151
- PolicyName: policy.policyName,
152
- PolicyDocument: JSON.stringify(policy.policyDocument),
153
- }));
154
- }
155
- }
156
- // Handle managed policy attachments
157
- // Get currently attached policies
158
- const attachedPoliciesResponse = await client.send(new ListAttachedRolePoliciesCommand({
159
- RoleName: props.roleName,
160
- }));
161
- const currentAttachedPolicies = attachedPoliciesResponse.AttachedPolicies || [];
162
- const currentPolicyArns = currentAttachedPolicies.map((p) => p.PolicyArn);
163
- // If we're updating, use an empty array as default when managedPolicyArns is undefined
164
- // to ensure we detach all managed policies
165
- const desiredPolicyArns = props.managedPolicyArns || [];
166
- // Detach policies that are no longer needed
167
- for (const policyArn of currentPolicyArns) {
168
- if (!desiredPolicyArns.includes(policyArn)) {
169
- await client.send(new DetachRolePolicyCommand({
170
- RoleName: props.roleName,
171
- PolicyArn: policyArn,
172
- }));
173
- }
174
- }
175
- // Attach new policies that weren't attached before
176
- for (const policyArn of desiredPolicyArns) {
177
- if (!currentPolicyArns.includes(policyArn)) {
178
- await client.send(new AttachRolePolicyCommand({
179
- RoleName: props.roleName,
180
- PolicyArn: policyArn,
181
- }));
182
- }
183
- }
184
- if (!role?.Role) {
185
- throw new Error(`Failed to create or update role ${props.roleName}`);
186
- }
187
- return {
188
- ...props,
189
- id: props.roleName,
190
- arn: role.Role.Arn,
191
- uniqueId: role.Role.RoleId,
192
- roleId: role.Role.RoleId,
193
- createDate: role.Role.CreateDate,
194
- };
195
- }) {
196
- }
197
- //# sourceMappingURL=role.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/aws/role.ts"],"names":[],"mappings":"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"}