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.
- package/lib/apply.js +1 -1
- package/lib/apply.js.map +1 -1
- package/lib/destroy.js +9 -3
- package/lib/destroy.js.map +1 -1
- package/package.json +1 -2
- package/src/apply.ts +1 -1
- package/src/aws/table.ts +30 -8
- package/src/cloudflare/kv-namespace.ts +34 -15
- package/src/cloudflare/worker.ts +66 -41
- package/src/destroy.ts +15 -10
- package/src/utils/retry.ts +1 -0
- package/README.md +0 -334
- package/lib/$.d.ts +0 -12
- package/lib/$.d.ts.map +0 -1
- package/lib/$.js +0 -42
- package/lib/$.js.map +0 -1
- package/lib/alchemize.d.ts +0 -43
- package/lib/alchemize.d.ts.map +0 -1
- package/lib/alchemize.js +0 -112
- package/lib/alchemize.js.map +0 -1
- package/lib/apply.d.ts +0 -23
- package/lib/aws/account-id.d.ts +0 -5
- package/lib/aws/account-id.d.ts.map +0 -1
- package/lib/aws/account-id.js +0 -10
- package/lib/aws/account-id.js.map +0 -1
- package/lib/aws/bucket.d.ts +0 -21
- package/lib/aws/bucket.d.ts.map +0 -1
- package/lib/aws/bucket.js +0 -114
- package/lib/aws/bucket.js.map +0 -1
- package/lib/aws/function.d.ts +0 -53
- package/lib/aws/function.d.ts.map +0 -1
- package/lib/aws/function.js +0 -195
- package/lib/aws/function.js.map +0 -1
- package/lib/aws/index.d.ts +0 -9
- package/lib/aws/index.d.ts.map +0 -1
- package/lib/aws/index.js +0 -9
- package/lib/aws/index.js.map +0 -1
- package/lib/aws/oidc/github-oidc-provider.d.ts +0 -11
- package/lib/aws/oidc/github-oidc-provider.d.ts.map +0 -1
- package/lib/aws/oidc/github-oidc-provider.js +0 -22
- package/lib/aws/oidc/github-oidc-provider.js.map +0 -1
- package/lib/aws/oidc/index.d.ts +0 -3
- package/lib/aws/oidc/index.d.ts.map +0 -1
- package/lib/aws/oidc/index.js +0 -3
- package/lib/aws/oidc/index.js.map +0 -1
- package/lib/aws/oidc/oidc-provider.d.ts +0 -60
- package/lib/aws/oidc/oidc-provider.d.ts.map +0 -1
- package/lib/aws/oidc/oidc-provider.js +0 -140
- package/lib/aws/oidc/oidc-provider.js.map +0 -1
- package/lib/aws/policy.d.ts +0 -46
- package/lib/aws/policy.d.ts.map +0 -1
- package/lib/aws/policy.js +0 -139
- package/lib/aws/policy.js.map +0 -1
- package/lib/aws/queue.d.ts +0 -62
- package/lib/aws/queue.d.ts.map +0 -1
- package/lib/aws/queue.js +0 -167
- package/lib/aws/queue.js.map +0 -1
- package/lib/aws/role.d.ts +0 -27
- package/lib/aws/role.d.ts.map +0 -1
- package/lib/aws/role.js +0 -197
- package/lib/aws/role.js.map +0 -1
- package/lib/aws/ses.d.ts +0 -75
- package/lib/aws/ses.d.ts.map +0 -1
- package/lib/aws/ses.js +0 -189
- package/lib/aws/ses.js.map +0 -1
- package/lib/aws/table.d.ts +0 -26
- package/lib/aws/table.d.ts.map +0 -1
- package/lib/aws/table.js +0 -142
- package/lib/aws/table.js.map +0 -1
- package/lib/cloudflare/api.d.ts +0 -88
- package/lib/cloudflare/api.d.ts.map +0 -1
- package/lib/cloudflare/api.js +0 -184
- package/lib/cloudflare/api.js.map +0 -1
- package/lib/cloudflare/asset-manifest.d.ts +0 -15
- package/lib/cloudflare/asset-manifest.d.ts.map +0 -1
- package/lib/cloudflare/asset-manifest.js +0 -2
- package/lib/cloudflare/asset-manifest.js.map +0 -1
- package/lib/cloudflare/auth.d.ts +0 -52
- package/lib/cloudflare/auth.d.ts.map +0 -1
- package/lib/cloudflare/auth.js +0 -114
- package/lib/cloudflare/auth.js.map +0 -1
- package/lib/cloudflare/bindings.d.ts +0 -259
- package/lib/cloudflare/bindings.d.ts.map +0 -1
- package/lib/cloudflare/bindings.js +0 -2
- package/lib/cloudflare/bindings.js.map +0 -1
- package/lib/cloudflare/durable-object-namespace.d.ts +0 -20
- package/lib/cloudflare/durable-object-namespace.d.ts.map +0 -1
- package/lib/cloudflare/durable-object-namespace.js +0 -21
- package/lib/cloudflare/durable-object-namespace.js.map +0 -1
- package/lib/cloudflare/generate-asset-manifest.d.ts +0 -3
- package/lib/cloudflare/generate-asset-manifest.d.ts.map +0 -1
- package/lib/cloudflare/generate-asset-manifest.js +0 -69
- package/lib/cloudflare/generate-asset-manifest.js.map +0 -1
- package/lib/cloudflare/index.d.ts +0 -7
- package/lib/cloudflare/index.d.ts.map +0 -1
- package/lib/cloudflare/index.js +0 -7
- package/lib/cloudflare/index.js.map +0 -1
- package/lib/cloudflare/kv-namespace.d.ts +0 -64
- package/lib/cloudflare/kv-namespace.d.ts.map +0 -1
- package/lib/cloudflare/kv-namespace.js +0 -97
- package/lib/cloudflare/kv-namespace.js.map +0 -1
- package/lib/cloudflare/state.d.ts +0 -83
- package/lib/cloudflare/state.d.ts.map +0 -1
- package/lib/cloudflare/state.js +0 -109
- package/lib/cloudflare/state.js.map +0 -1
- package/lib/cloudflare/static-site-router.d.ts +0 -19
- package/lib/cloudflare/static-site-router.d.ts.map +0 -1
- package/lib/cloudflare/static-site-router.js +0 -110
- package/lib/cloudflare/static-site-router.js.map +0 -1
- package/lib/cloudflare/static-site.d.ts +0 -166
- package/lib/cloudflare/static-site.d.ts.map +0 -1
- package/lib/cloudflare/static-site.js +0 -150
- package/lib/cloudflare/static-site.js.map +0 -1
- package/lib/cloudflare/types.d.ts +0 -52
- package/lib/cloudflare/types.d.ts.map +0 -1
- package/lib/cloudflare/types.js +0 -21
- package/lib/cloudflare/types.js.map +0 -1
- package/lib/cloudflare/upload-asset-manifest.d.ts +0 -12
- package/lib/cloudflare/upload-asset-manifest.d.ts.map +0 -1
- package/lib/cloudflare/upload-asset-manifest.js +0 -55
- package/lib/cloudflare/upload-asset-manifest.js.map +0 -1
- package/lib/cloudflare/worker-metadata.d.ts +0 -130
- package/lib/cloudflare/worker-metadata.d.ts.map +0 -1
- package/lib/cloudflare/worker-metadata.js +0 -2
- package/lib/cloudflare/worker-metadata.js.map +0 -1
- package/lib/cloudflare/worker-migration.d.ts +0 -110
- package/lib/cloudflare/worker-migration.d.ts.map +0 -1
- package/lib/cloudflare/worker-migration.js +0 -11
- package/lib/cloudflare/worker-migration.js.map +0 -1
- package/lib/cloudflare/worker.d.ts +0 -108
- package/lib/cloudflare/worker.d.ts.map +0 -1
- package/lib/cloudflare/worker.js +0 -384
- package/lib/cloudflare/worker.js.map +0 -1
- package/lib/destroy.d.ts +0 -19
- package/lib/error.d.ts +0 -2
- package/lib/error.d.ts.map +0 -1
- package/lib/error.js +0 -13
- package/lib/error.js.map +0 -1
- package/lib/esbuild.d.ts +0 -152
- package/lib/esbuild.d.ts.map +0 -1
- package/lib/esbuild.js +0 -67
- package/lib/esbuild.js.map +0 -1
- package/lib/fs.d.ts +0 -12
- package/lib/fs.d.ts.map +0 -1
- package/lib/fs.js +0 -41
- package/lib/fs.js.map +0 -1
- package/lib/github/client.d.ts +0 -34
- package/lib/github/client.d.ts.map +0 -1
- package/lib/github/client.js +0 -91
- package/lib/github/client.js.map +0 -1
- package/lib/github/index.d.ts +0 -2
- package/lib/github/index.d.ts.map +0 -1
- package/lib/github/index.js +0 -2
- package/lib/github/index.js.map +0 -1
- package/lib/github/secret.d.ts +0 -46
- package/lib/github/secret.d.ts.map +0 -1
- package/lib/github/secret.js +0 -103
- package/lib/github/secret.js.map +0 -1
- package/lib/global.d.ts +0 -16
- package/lib/global.d.ts.map +0 -1
- package/lib/global.js +0 -42
- package/lib/global.js.map +0 -1
- package/lib/index.d.ts +0 -10
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -9
- package/lib/index.js.map +0 -1
- package/lib/input.d.ts +0 -6
- package/lib/input.d.ts.map +0 -1
- package/lib/input.js +0 -2
- package/lib/input.js.map +0 -1
- package/lib/main.d.ts +0 -3
- package/lib/main.d.ts.map +0 -1
- package/lib/main.js +0 -32
- package/lib/main.js.map +0 -1
- package/lib/output.d.ts +0 -24
- package/lib/output.d.ts.map +0 -1
- package/lib/output.js +0 -23
- package/lib/output.js.map +0 -1
- package/lib/print.d.ts +0 -7
- package/lib/print.d.ts.map +0 -1
- package/lib/print.js +0 -10
- package/lib/print.js.map +0 -1
- package/lib/resource.d.ts +0 -71
- package/lib/resource.d.ts.map +0 -1
- package/lib/resource.js +0 -276
- package/lib/resource.js.map +0 -1
- package/lib/scope.d.ts +0 -18
- package/lib/scope.d.ts.map +0 -1
- package/lib/scope.js +0 -30
- package/lib/scope.js.map +0 -1
- package/lib/slug.d.ts +0 -2
- package/lib/slug.d.ts.map +0 -1
- package/lib/slug.js +0 -4
- package/lib/slug.js.map +0 -1
- package/lib/state.d.ts +0 -40
- package/lib/state.d.ts.map +0 -1
- package/lib/state.js +0 -73
- package/lib/state.js.map +0 -1
- package/lib/stripe/index.d.ts +0 -4
- package/lib/stripe/index.d.ts.map +0 -1
- package/lib/stripe/index.js +0 -4
- package/lib/stripe/index.js.map +0 -1
- package/lib/stripe/price.d.ts +0 -109
- package/lib/stripe/price.d.ts.map +0 -1
- package/lib/stripe/price.js +0 -112
- package/lib/stripe/price.js.map +0 -1
- package/lib/stripe/product.d.ts +0 -86
- package/lib/stripe/product.d.ts.map +0 -1
- package/lib/stripe/product.js +0 -90
- package/lib/stripe/product.js.map +0 -1
- package/lib/stripe/webhook.d.ts +0 -73
- package/lib/stripe/webhook.d.ts.map +0 -1
- package/lib/stripe/webhook.js +0 -94
- package/lib/stripe/webhook.js.map +0 -1
- package/lib/utils/content-type.d.ts +0 -8
- package/lib/utils/content-type.d.ts.map +0 -1
- package/lib/utils/content-type.js +0 -41
- package/lib/utils/content-type.js.map +0 -1
- package/lib/utils/retry.d.ts +0 -13
- package/lib/utils/retry.d.ts.map +0 -1
- package/lib/utils/retry.js +0 -31
- package/lib/utils/retry.js.map +0 -1
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
|
package/lib/aws/role.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/aws/role.ts"],"names":[],"mappings":"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"}
|
package/lib/aws/ses.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { type DeliveryOptions, type ReputationOptions, type SendingOptions, type SuppressionOptions, type TrackingOptions } from "@aws-sdk/client-sesv2";
|
|
2
|
-
/**
|
|
3
|
-
* Properties for configuring AWS SES resources
|
|
4
|
-
*/
|
|
5
|
-
export interface SESProps {
|
|
6
|
-
/**
|
|
7
|
-
* Name of the configuration set
|
|
8
|
-
*/
|
|
9
|
-
configurationSetName?: string;
|
|
10
|
-
/**
|
|
11
|
-
* Email identity to verify (email address or domain)
|
|
12
|
-
*/
|
|
13
|
-
emailIdentity?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Whether to enable DKIM signing for the email identity
|
|
16
|
-
*/
|
|
17
|
-
enableDkim?: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Sending options for the configuration set
|
|
20
|
-
*/
|
|
21
|
-
sendingOptions?: SendingOptions;
|
|
22
|
-
/**
|
|
23
|
-
* Reputation options for the configuration set
|
|
24
|
-
*/
|
|
25
|
-
reputationOptions?: ReputationOptions;
|
|
26
|
-
/**
|
|
27
|
-
* Tracking options for the configuration set
|
|
28
|
-
*/
|
|
29
|
-
trackingOptions?: TrackingOptions;
|
|
30
|
-
/**
|
|
31
|
-
* Suppression options for the configuration set
|
|
32
|
-
*/
|
|
33
|
-
suppressionOptions?: SuppressionOptions;
|
|
34
|
-
/**
|
|
35
|
-
* Delivery options for the configuration set
|
|
36
|
-
*/
|
|
37
|
-
deliveryOptions?: DeliveryOptions;
|
|
38
|
-
/**
|
|
39
|
-
* Tags to apply to the SES resources
|
|
40
|
-
*/
|
|
41
|
-
tags?: Record<string, string>;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Output returned after SES resource creation/update
|
|
45
|
-
*/
|
|
46
|
-
export interface SESOutput extends SESProps {
|
|
47
|
-
/**
|
|
48
|
-
* Resource ID
|
|
49
|
-
*/
|
|
50
|
-
id: string;
|
|
51
|
-
/**
|
|
52
|
-
* ARN of the configuration set if created
|
|
53
|
-
*/
|
|
54
|
-
configurationSetArn?: string;
|
|
55
|
-
/**
|
|
56
|
-
* Email identity verification status if an identity was created
|
|
57
|
-
*/
|
|
58
|
-
emailIdentityVerificationStatus?: string;
|
|
59
|
-
/**
|
|
60
|
-
* DKIM verification status if DKIM was enabled
|
|
61
|
-
*/
|
|
62
|
-
dkimVerificationStatus?: string;
|
|
63
|
-
/**
|
|
64
|
-
* Email identity ARN if an identity was created
|
|
65
|
-
*/
|
|
66
|
-
emailIdentityArn?: string;
|
|
67
|
-
}
|
|
68
|
-
declare const SES_base: import("../resource").Provider<"aws::SES", [props: SESProps], SESOutput>;
|
|
69
|
-
/**
|
|
70
|
-
* AWS SES resource for creating and configuring Simple Email Service
|
|
71
|
-
*/
|
|
72
|
-
export declare class SES extends SES_base {
|
|
73
|
-
}
|
|
74
|
-
export {};
|
|
75
|
-
//# sourceMappingURL=ses.d.ts.map
|
package/lib/aws/ses.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ses.d.ts","sourceRoot":"","sources":["../../src/aws/ses.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EAUpB,KAAK,iBAAiB,EAEtB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAI/B;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;OAEG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAEzC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;;AAED;;GAEG;AACH,qBAAa,GAAI,SAAQ,QA0OxB;CAAG"}
|
package/lib/aws/ses.js
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { CreateConfigurationSetCommand, CreateEmailIdentityCommand, DeleteConfigurationSetCommand, DeleteEmailIdentityCommand, GetConfigurationSetCommand, GetEmailIdentityCommand, NotFoundException, PutConfigurationSetDeliveryOptionsCommand, PutConfigurationSetReputationOptionsCommand, PutConfigurationSetSendingOptionsCommand, PutConfigurationSetSuppressionOptionsCommand, PutConfigurationSetTrackingOptionsCommand, PutEmailIdentityDkimAttributesCommand, SESv2Client, } from "@aws-sdk/client-sesv2";
|
|
2
|
-
import { ignore } from "../error";
|
|
3
|
-
import { Resource } from "../resource";
|
|
4
|
-
/**
|
|
5
|
-
* AWS SES resource for creating and configuring Simple Email Service
|
|
6
|
-
*/
|
|
7
|
-
export class SES extends Resource("aws::SES", async (ctx, props) => {
|
|
8
|
-
// Create SES client
|
|
9
|
-
const client = new SESv2Client({});
|
|
10
|
-
// Resource ID is either based on the configuration set name or email identity
|
|
11
|
-
const id = props.configurationSetName || props.emailIdentity || ctx.resourceID;
|
|
12
|
-
// Handle deletion
|
|
13
|
-
if (ctx.event === "delete") {
|
|
14
|
-
const output = ctx.output;
|
|
15
|
-
// Delete configuration set if it exists
|
|
16
|
-
if (output?.configurationSetName) {
|
|
17
|
-
await ignore(NotFoundException.name, () => client.send(new DeleteConfigurationSetCommand({
|
|
18
|
-
ConfigurationSetName: output.configurationSetName,
|
|
19
|
-
})));
|
|
20
|
-
}
|
|
21
|
-
// Delete email identity if it exists
|
|
22
|
-
if (output?.emailIdentity) {
|
|
23
|
-
await ignore(NotFoundException.name, () => client.send(new DeleteEmailIdentityCommand({
|
|
24
|
-
EmailIdentity: output.emailIdentity,
|
|
25
|
-
})));
|
|
26
|
-
}
|
|
27
|
-
// Return empty output for delete
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
// Created resources
|
|
31
|
-
let configurationSetArn;
|
|
32
|
-
let emailIdentityArn;
|
|
33
|
-
let emailIdentityVerificationStatus;
|
|
34
|
-
let dkimVerificationStatus;
|
|
35
|
-
// Create or update configuration set if specified
|
|
36
|
-
if (props.configurationSetName) {
|
|
37
|
-
try {
|
|
38
|
-
// Check if configuration set exists
|
|
39
|
-
let configSetExists = false;
|
|
40
|
-
try {
|
|
41
|
-
await client.send(new GetConfigurationSetCommand({
|
|
42
|
-
ConfigurationSetName: props.configurationSetName,
|
|
43
|
-
}));
|
|
44
|
-
configSetExists = true;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
if (error instanceof NotFoundException) {
|
|
48
|
-
configSetExists = false;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (configSetExists) {
|
|
55
|
-
// Update existing configuration set using appropriate update commands
|
|
56
|
-
if (props.sendingOptions) {
|
|
57
|
-
await client.send(new PutConfigurationSetSendingOptionsCommand({
|
|
58
|
-
ConfigurationSetName: props.configurationSetName,
|
|
59
|
-
SendingEnabled: props.sendingOptions.SendingEnabled,
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
if (props.reputationOptions) {
|
|
63
|
-
await client.send(new PutConfigurationSetReputationOptionsCommand({
|
|
64
|
-
ConfigurationSetName: props.configurationSetName,
|
|
65
|
-
ReputationMetricsEnabled: props.reputationOptions.ReputationMetricsEnabled,
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
if (props.trackingOptions) {
|
|
69
|
-
await client.send(new PutConfigurationSetTrackingOptionsCommand({
|
|
70
|
-
ConfigurationSetName: props.configurationSetName,
|
|
71
|
-
CustomRedirectDomain: props.trackingOptions.CustomRedirectDomain,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
if (props.suppressionOptions) {
|
|
75
|
-
await client.send(new PutConfigurationSetSuppressionOptionsCommand({
|
|
76
|
-
ConfigurationSetName: props.configurationSetName,
|
|
77
|
-
SuppressedReasons: props.suppressionOptions.SuppressedReasons,
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
80
|
-
if (props.deliveryOptions) {
|
|
81
|
-
await client.send(new PutConfigurationSetDeliveryOptionsCommand({
|
|
82
|
-
ConfigurationSetName: props.configurationSetName,
|
|
83
|
-
TlsPolicy: props.deliveryOptions.TlsPolicy,
|
|
84
|
-
SendingPoolName: props.deliveryOptions.SendingPoolName,
|
|
85
|
-
}));
|
|
86
|
-
}
|
|
87
|
-
// In SESv2, the ARN isn't directly returned in the response
|
|
88
|
-
configurationSetArn = `arn:aws:ses:${process.env.AWS_REGION}:${process.env.AWS_ACCOUNT_ID}:configuration-set/${props.configurationSetName}`;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
// Create new configuration set
|
|
92
|
-
await client.send(new CreateConfigurationSetCommand({
|
|
93
|
-
ConfigurationSetName: props.configurationSetName,
|
|
94
|
-
SendingOptions: props.sendingOptions,
|
|
95
|
-
ReputationOptions: props.reputationOptions,
|
|
96
|
-
TrackingOptions: props.trackingOptions,
|
|
97
|
-
SuppressionOptions: props.suppressionOptions,
|
|
98
|
-
DeliveryOptions: props.deliveryOptions,
|
|
99
|
-
Tags: Object.entries(props.tags || {}).map(([Key, Value]) => ({
|
|
100
|
-
Key,
|
|
101
|
-
Value,
|
|
102
|
-
})),
|
|
103
|
-
}));
|
|
104
|
-
// In SESv2, the ARN isn't directly returned in the response
|
|
105
|
-
configurationSetArn = `arn:aws:ses:${process.env.AWS_REGION}:${process.env.AWS_ACCOUNT_ID}:configuration-set/${props.configurationSetName}`;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
throw error;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Create or verify email identity if specified
|
|
113
|
-
if (props.emailIdentity) {
|
|
114
|
-
try {
|
|
115
|
-
// Check if identity exists
|
|
116
|
-
let getIdentityResult;
|
|
117
|
-
try {
|
|
118
|
-
getIdentityResult = await client.send(new GetEmailIdentityCommand({
|
|
119
|
-
EmailIdentity: props.emailIdentity,
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
catch (error) {
|
|
123
|
-
if (error instanceof NotFoundException) {
|
|
124
|
-
getIdentityResult = null;
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
throw error;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
if (!getIdentityResult) {
|
|
131
|
-
// Create new email identity
|
|
132
|
-
const createIdentityResult = await client.send(new CreateEmailIdentityCommand({
|
|
133
|
-
EmailIdentity: props.emailIdentity,
|
|
134
|
-
Tags: Object.entries(props.tags || {}).map(([Key, Value]) => ({
|
|
135
|
-
Key,
|
|
136
|
-
Value,
|
|
137
|
-
})),
|
|
138
|
-
}));
|
|
139
|
-
// If it's an email address, we don't need to explicitly verify in v2
|
|
140
|
-
// The verification email is automatically sent by SES in v2
|
|
141
|
-
// Store the identity information
|
|
142
|
-
emailIdentityArn = `arn:aws:ses:${process.env.AWS_REGION}:${process.env.AWS_ACCOUNT_ID}:identity/${props.emailIdentity}`;
|
|
143
|
-
emailIdentityVerificationStatus =
|
|
144
|
-
createIdentityResult.VerifiedForSendingStatus
|
|
145
|
-
? "VERIFIED"
|
|
146
|
-
: "PENDING";
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
// Store the identity information
|
|
150
|
-
emailIdentityArn = `arn:aws:ses:${process.env.AWS_REGION}:${process.env.AWS_ACCOUNT_ID}:identity/${props.emailIdentity}`;
|
|
151
|
-
emailIdentityVerificationStatus =
|
|
152
|
-
getIdentityResult.VerifiedForSendingStatus ? "VERIFIED" : "PENDING";
|
|
153
|
-
// Update DKIM settings if requested
|
|
154
|
-
if (props.enableDkim !== undefined) {
|
|
155
|
-
if (props.enableDkim) {
|
|
156
|
-
await client.send(new PutEmailIdentityDkimAttributesCommand({
|
|
157
|
-
EmailIdentity: props.emailIdentity,
|
|
158
|
-
SigningEnabled: true,
|
|
159
|
-
}));
|
|
160
|
-
// We can check the current status of DKIM
|
|
161
|
-
dkimVerificationStatus = "PENDING"; // Default to pending
|
|
162
|
-
// Get the updated identity to check DKIM status
|
|
163
|
-
const updatedIdentity = await client.send(new GetEmailIdentityCommand({
|
|
164
|
-
EmailIdentity: props.emailIdentity,
|
|
165
|
-
}));
|
|
166
|
-
if (updatedIdentity.DkimAttributes?.Status) {
|
|
167
|
-
dkimVerificationStatus = updatedIdentity.DkimAttributes.Status;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
console.error(`Error configuring email identity ${props.emailIdentity}:`, error);
|
|
175
|
-
throw error;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
// Return the resource output
|
|
179
|
-
return {
|
|
180
|
-
...props,
|
|
181
|
-
id,
|
|
182
|
-
configurationSetArn,
|
|
183
|
-
emailIdentityArn,
|
|
184
|
-
emailIdentityVerificationStatus,
|
|
185
|
-
dkimVerificationStatus,
|
|
186
|
-
};
|
|
187
|
-
}) {
|
|
188
|
-
}
|
|
189
|
-
//# sourceMappingURL=ses.js.map
|
package/lib/aws/ses.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ses.js","sourceRoot":"","sources":["../../src/aws/ses.ts"],"names":[],"mappings":"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"}
|
package/lib/aws/table.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface TableProps {
|
|
2
|
-
tableName: string;
|
|
3
|
-
partitionKey: {
|
|
4
|
-
name: string;
|
|
5
|
-
type: "S" | "N" | "B";
|
|
6
|
-
};
|
|
7
|
-
sortKey?: {
|
|
8
|
-
name: string;
|
|
9
|
-
type: "S" | "N" | "B";
|
|
10
|
-
};
|
|
11
|
-
billingMode?: "PROVISIONED" | "PAY_PER_REQUEST";
|
|
12
|
-
readCapacity?: number;
|
|
13
|
-
writeCapacity?: number;
|
|
14
|
-
tags?: Record<string, string>;
|
|
15
|
-
}
|
|
16
|
-
export interface TableOutput extends TableProps {
|
|
17
|
-
id: string;
|
|
18
|
-
arn: string;
|
|
19
|
-
streamArn?: string;
|
|
20
|
-
tableId: string;
|
|
21
|
-
}
|
|
22
|
-
declare const Table_base: import("../resource").Provider<"dynamo::Table", [props: TableProps], TableOutput>;
|
|
23
|
-
export declare class Table extends Table_base {
|
|
24
|
-
}
|
|
25
|
-
export {};
|
|
26
|
-
//# sourceMappingURL=table.d.ts.map
|
package/lib/aws/table.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/aws/table.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;;AAED,qBAAa,KAAM,SAAQ,UAsK1B;CAAG"}
|
package/lib/aws/table.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { CreateTableCommand, DeleteTableCommand, DescribeTableCommand, DynamoDBClient, ResourceInUseException, ResourceNotFoundException, } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
import { ignore } from "../error";
|
|
3
|
-
import { Resource } from "../resource";
|
|
4
|
-
import { withExponentialBackoff } from "../utils/retry";
|
|
5
|
-
export class Table extends Resource("dynamo::Table", async (ctx, props) => {
|
|
6
|
-
const client = new DynamoDBClient({});
|
|
7
|
-
if (ctx.event === "delete") {
|
|
8
|
-
await ignore(ResourceNotFoundException.name, () => client.send(new DeleteTableCommand({
|
|
9
|
-
TableName: props.tableName,
|
|
10
|
-
})));
|
|
11
|
-
// Wait for table to be deleted
|
|
12
|
-
let tableDeleted = false;
|
|
13
|
-
while (!tableDeleted) {
|
|
14
|
-
try {
|
|
15
|
-
await client.send(new DescribeTableCommand({
|
|
16
|
-
TableName: props.tableName,
|
|
17
|
-
}));
|
|
18
|
-
// If we get here, table still exists
|
|
19
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
if (error instanceof ResourceNotFoundException) {
|
|
23
|
-
tableDeleted = true;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
throw error;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// Setup for table creation
|
|
34
|
-
const attributeDefinitions = [
|
|
35
|
-
{
|
|
36
|
-
AttributeName: props.partitionKey.name,
|
|
37
|
-
AttributeType: props.partitionKey.type,
|
|
38
|
-
},
|
|
39
|
-
];
|
|
40
|
-
const keySchema = [
|
|
41
|
-
{
|
|
42
|
-
AttributeName: props.partitionKey.name,
|
|
43
|
-
KeyType: "HASH",
|
|
44
|
-
},
|
|
45
|
-
];
|
|
46
|
-
if (props.sortKey) {
|
|
47
|
-
attributeDefinitions.push({
|
|
48
|
-
AttributeName: props.sortKey.name,
|
|
49
|
-
AttributeType: props.sortKey.type,
|
|
50
|
-
});
|
|
51
|
-
keySchema.push({
|
|
52
|
-
AttributeName: props.sortKey.name,
|
|
53
|
-
KeyType: "RANGE",
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
// Attempt to create the table with exponential backoff for ResourceInUseException
|
|
57
|
-
await withExponentialBackoff(async () => {
|
|
58
|
-
try {
|
|
59
|
-
// First check if table already exists
|
|
60
|
-
const describeResponse = await client.send(new DescribeTableCommand({
|
|
61
|
-
TableName: props.tableName,
|
|
62
|
-
}));
|
|
63
|
-
// If table exists and is ACTIVE, no need to create it
|
|
64
|
-
if (describeResponse.Table?.TableStatus === "ACTIVE") {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// If table exists but not ACTIVE, wait for it in the polling loop below
|
|
68
|
-
if (describeResponse.Table) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
if (error instanceof ResourceNotFoundException) {
|
|
74
|
-
// Table doesn't exist, try to create it
|
|
75
|
-
await client.send(new CreateTableCommand({
|
|
76
|
-
TableName: props.tableName,
|
|
77
|
-
AttributeDefinitions: attributeDefinitions,
|
|
78
|
-
KeySchema: keySchema,
|
|
79
|
-
BillingMode: props.billingMode || "PAY_PER_REQUEST",
|
|
80
|
-
ProvisionedThroughput: props.billingMode === "PROVISIONED"
|
|
81
|
-
? {
|
|
82
|
-
ReadCapacityUnits: props.readCapacity || 5,
|
|
83
|
-
WriteCapacityUnits: props.writeCapacity || 5,
|
|
84
|
-
}
|
|
85
|
-
: undefined,
|
|
86
|
-
Tags: props.tags
|
|
87
|
-
? Object.entries(props.tags).map(([Key, Value]) => ({
|
|
88
|
-
Key,
|
|
89
|
-
Value,
|
|
90
|
-
}))
|
|
91
|
-
: undefined,
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
throw error;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}, (error) => error instanceof ResourceInUseException, 10, // Max attempts
|
|
99
|
-
200);
|
|
100
|
-
// Wait for table to be active with timeout
|
|
101
|
-
let tableActive = false;
|
|
102
|
-
let tableDescription;
|
|
103
|
-
let retryCount = 0;
|
|
104
|
-
const maxRetries = 60; // Wait up to 60 seconds
|
|
105
|
-
while (!tableActive && retryCount < maxRetries) {
|
|
106
|
-
try {
|
|
107
|
-
const response = await client.send(new DescribeTableCommand({
|
|
108
|
-
TableName: props.tableName,
|
|
109
|
-
}));
|
|
110
|
-
tableActive = response.Table?.TableStatus === "ACTIVE";
|
|
111
|
-
if (tableActive) {
|
|
112
|
-
tableDescription = response.Table;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
retryCount++;
|
|
116
|
-
// Increasing delay for each retry with some jitter
|
|
117
|
-
const delay = Math.min(1000 * (1 + 0.1 * Math.random()), 5000);
|
|
118
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
retryCount++;
|
|
123
|
-
if (!(error instanceof ResourceNotFoundException)) {
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
if (!tableActive) {
|
|
130
|
-
throw new Error(`Timed out waiting for table ${props.tableName} to become active`);
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
...props,
|
|
134
|
-
id: props.tableName,
|
|
135
|
-
arn: tableDescription.TableArn,
|
|
136
|
-
streamArn: tableDescription.LatestStreamArn,
|
|
137
|
-
tableId: tableDescription.TableId,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
}) {
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=table.js.map
|