@stacksjs/ts-cloud 0.1.8 → 0.1.9

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 (75) hide show
  1. package/dist/bin/cli.js +1 -1
  2. package/package.json +18 -16
  3. package/src/aws/acm.ts +768 -0
  4. package/src/aws/application-autoscaling.ts +845 -0
  5. package/src/aws/bedrock.ts +4074 -0
  6. package/src/aws/client.ts +891 -0
  7. package/src/aws/cloudformation.ts +896 -0
  8. package/src/aws/cloudfront.ts +1531 -0
  9. package/src/aws/cloudwatch-logs.ts +154 -0
  10. package/src/aws/comprehend.ts +839 -0
  11. package/src/aws/connect.ts +1056 -0
  12. package/src/aws/deploy-imap.ts +384 -0
  13. package/src/aws/dynamodb.ts +340 -0
  14. package/src/aws/ec2.ts +1385 -0
  15. package/src/aws/ecr.ts +621 -0
  16. package/src/aws/ecs.ts +615 -0
  17. package/src/aws/elasticache.ts +301 -0
  18. package/src/aws/elbv2.ts +942 -0
  19. package/src/aws/email.ts +928 -0
  20. package/src/aws/eventbridge.ts +248 -0
  21. package/src/aws/iam.ts +1689 -0
  22. package/src/aws/imap-server.ts +2100 -0
  23. package/src/aws/index.ts +213 -0
  24. package/src/aws/kendra.ts +1097 -0
  25. package/src/aws/lambda.ts +786 -0
  26. package/src/aws/opensearch.ts +158 -0
  27. package/src/aws/personalize.ts +977 -0
  28. package/src/aws/polly.ts +559 -0
  29. package/src/aws/rds.ts +888 -0
  30. package/src/aws/rekognition.ts +846 -0
  31. package/src/aws/route53-domains.ts +359 -0
  32. package/src/aws/route53.ts +1046 -0
  33. package/src/aws/s3.ts +2334 -0
  34. package/src/aws/scheduler.ts +571 -0
  35. package/src/aws/secrets-manager.ts +769 -0
  36. package/src/aws/ses.ts +1081 -0
  37. package/src/aws/setup-phone.ts +104 -0
  38. package/src/aws/setup-sms.ts +580 -0
  39. package/src/aws/sms.ts +1735 -0
  40. package/src/aws/smtp-server.ts +531 -0
  41. package/src/aws/sns.ts +758 -0
  42. package/src/aws/sqs.ts +382 -0
  43. package/src/aws/ssm.ts +807 -0
  44. package/src/aws/sts.ts +92 -0
  45. package/src/aws/support.ts +391 -0
  46. package/src/aws/test-imap.ts +86 -0
  47. package/src/aws/textract.ts +780 -0
  48. package/src/aws/transcribe.ts +108 -0
  49. package/src/aws/translate.ts +641 -0
  50. package/src/aws/voice.ts +1379 -0
  51. package/src/config.ts +35 -0
  52. package/src/deploy/index.ts +7 -0
  53. package/src/deploy/static-site-external-dns.ts +945 -0
  54. package/src/deploy/static-site.ts +1175 -0
  55. package/src/dns/cloudflare.ts +548 -0
  56. package/src/dns/godaddy.ts +412 -0
  57. package/src/dns/index.ts +205 -0
  58. package/src/dns/porkbun.ts +362 -0
  59. package/src/dns/route53-adapter.ts +414 -0
  60. package/src/dns/types.ts +119 -0
  61. package/src/dns/validator.ts +369 -0
  62. package/src/generators/index.ts +5 -0
  63. package/src/generators/infrastructure.ts +1660 -0
  64. package/src/index.ts +163 -0
  65. package/src/push/apns.ts +452 -0
  66. package/src/push/fcm.ts +506 -0
  67. package/src/push/index.ts +58 -0
  68. package/src/security/pre-deploy-scanner.ts +655 -0
  69. package/src/ssl/acme-client.ts +478 -0
  70. package/src/ssl/index.ts +7 -0
  71. package/src/ssl/letsencrypt.ts +747 -0
  72. package/src/types.ts +2 -0
  73. package/src/utils/cli.ts +398 -0
  74. package/src/validation/index.ts +5 -0
  75. package/src/validation/template.ts +405 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * AWS DynamoDB Client
3
+ * Direct API calls for DynamoDB operations
4
+ */
5
+
6
+ import { AWSClient } from './client'
7
+
8
+ export interface AttributeValue {
9
+ S?: string
10
+ N?: string
11
+ B?: string
12
+ SS?: string[]
13
+ NS?: string[]
14
+ BS?: string[]
15
+ M?: Record<string, AttributeValue>
16
+ L?: AttributeValue[]
17
+ NULL?: boolean
18
+ BOOL?: boolean
19
+ }
20
+
21
+ export interface KeySchemaElement {
22
+ AttributeName: string
23
+ KeyType: 'HASH' | 'RANGE'
24
+ }
25
+
26
+ export interface AttributeDefinition {
27
+ AttributeName: string
28
+ AttributeType: 'S' | 'N' | 'B'
29
+ }
30
+
31
+ export interface GlobalSecondaryIndex {
32
+ IndexName: string
33
+ KeySchema: KeySchemaElement[]
34
+ Projection: {
35
+ ProjectionType: 'ALL' | 'KEYS_ONLY' | 'INCLUDE'
36
+ NonKeyAttributes?: string[]
37
+ }
38
+ ProvisionedThroughput?: {
39
+ ReadCapacityUnits: number
40
+ WriteCapacityUnits: number
41
+ }
42
+ }
43
+
44
+ export interface TableDescription {
45
+ TableName: string
46
+ TableStatus: 'CREATING' | 'UPDATING' | 'DELETING' | 'ACTIVE' | 'INACCESSIBLE_ENCRYPTION_CREDENTIALS' | 'ARCHIVING' | 'ARCHIVED'
47
+ TableArn: string
48
+ ItemCount: number
49
+ TableSizeBytes: number
50
+ CreationDateTime: string
51
+ KeySchema: KeySchemaElement[]
52
+ AttributeDefinitions: AttributeDefinition[]
53
+ GlobalSecondaryIndexes?: GlobalSecondaryIndex[]
54
+ }
55
+
56
+ /**
57
+ * DynamoDB client for direct API calls
58
+ */
59
+ export class DynamoDBClient {
60
+ private client: AWSClient
61
+ private region: string
62
+
63
+ constructor(region: string = 'us-east-1') {
64
+ this.region = region
65
+ this.client = new AWSClient()
66
+ }
67
+
68
+ private async request<T>(action: string, params: Record<string, any>): Promise<T> {
69
+ return this.client.request({
70
+ service: 'dynamodb',
71
+ region: this.region,
72
+ method: 'POST',
73
+ path: '/',
74
+ headers: {
75
+ 'Content-Type': 'application/x-amz-json-1.0',
76
+ 'X-Amz-Target': `DynamoDB_20120810.${action}`,
77
+ },
78
+ body: JSON.stringify(params),
79
+ })
80
+ }
81
+
82
+ /**
83
+ * Create a new DynamoDB table
84
+ */
85
+ async createTable(params: {
86
+ TableName: string
87
+ KeySchema: KeySchemaElement[]
88
+ AttributeDefinitions: AttributeDefinition[]
89
+ BillingMode?: 'PROVISIONED' | 'PAY_PER_REQUEST'
90
+ ProvisionedThroughput?: {
91
+ ReadCapacityUnits: number
92
+ WriteCapacityUnits: number
93
+ }
94
+ GlobalSecondaryIndexes?: GlobalSecondaryIndex[]
95
+ Tags?: Array<{ Key: string; Value: string }>
96
+ TimeToLiveSpecification?: {
97
+ AttributeName: string
98
+ Enabled: boolean
99
+ }
100
+ }): Promise<{ TableDescription: TableDescription }> {
101
+ return this.request('CreateTable', params)
102
+ }
103
+
104
+ /**
105
+ * Delete a DynamoDB table
106
+ */
107
+ async deleteTable(params: { TableName: string }): Promise<{ TableDescription: TableDescription }> {
108
+ return this.request('DeleteTable', params)
109
+ }
110
+
111
+ /**
112
+ * Describe a DynamoDB table
113
+ */
114
+ async describeTable(params: { TableName: string }): Promise<{ Table: TableDescription }> {
115
+ return this.request('DescribeTable', params)
116
+ }
117
+
118
+ /**
119
+ * List all DynamoDB tables
120
+ */
121
+ async listTables(params?: {
122
+ ExclusiveStartTableName?: string
123
+ Limit?: number
124
+ }): Promise<{ TableNames: string[]; LastEvaluatedTableName?: string }> {
125
+ return this.request('ListTables', params || {})
126
+ }
127
+
128
+ /**
129
+ * Put an item into a table
130
+ */
131
+ async putItem(params: {
132
+ TableName: string
133
+ Item: Record<string, AttributeValue>
134
+ ConditionExpression?: string
135
+ ExpressionAttributeNames?: Record<string, string>
136
+ ExpressionAttributeValues?: Record<string, AttributeValue>
137
+ ReturnValues?: 'NONE' | 'ALL_OLD'
138
+ }): Promise<{ Attributes?: Record<string, AttributeValue> }> {
139
+ return this.request('PutItem', params)
140
+ }
141
+
142
+ /**
143
+ * Get an item from a table
144
+ */
145
+ async getItem(params: {
146
+ TableName: string
147
+ Key: Record<string, AttributeValue>
148
+ ProjectionExpression?: string
149
+ ExpressionAttributeNames?: Record<string, string>
150
+ ConsistentRead?: boolean
151
+ }): Promise<{ Item?: Record<string, AttributeValue> }> {
152
+ return this.request('GetItem', params)
153
+ }
154
+
155
+ /**
156
+ * Update an item in a table
157
+ */
158
+ async updateItem(params: {
159
+ TableName: string
160
+ Key: Record<string, AttributeValue>
161
+ UpdateExpression: string
162
+ ConditionExpression?: string
163
+ ExpressionAttributeNames?: Record<string, string>
164
+ ExpressionAttributeValues?: Record<string, AttributeValue>
165
+ ReturnValues?: 'NONE' | 'ALL_OLD' | 'UPDATED_OLD' | 'ALL_NEW' | 'UPDATED_NEW'
166
+ }): Promise<{ Attributes?: Record<string, AttributeValue> }> {
167
+ return this.request('UpdateItem', params)
168
+ }
169
+
170
+ /**
171
+ * Delete an item from a table
172
+ */
173
+ async deleteItem(params: {
174
+ TableName: string
175
+ Key: Record<string, AttributeValue>
176
+ ConditionExpression?: string
177
+ ExpressionAttributeNames?: Record<string, string>
178
+ ExpressionAttributeValues?: Record<string, AttributeValue>
179
+ ReturnValues?: 'NONE' | 'ALL_OLD'
180
+ }): Promise<{ Attributes?: Record<string, AttributeValue> }> {
181
+ return this.request('DeleteItem', params)
182
+ }
183
+
184
+ /**
185
+ * Query items from a table
186
+ */
187
+ async query(params: {
188
+ TableName: string
189
+ IndexName?: string
190
+ KeyConditionExpression: string
191
+ FilterExpression?: string
192
+ ProjectionExpression?: string
193
+ ExpressionAttributeNames?: Record<string, string>
194
+ ExpressionAttributeValues?: Record<string, AttributeValue>
195
+ Limit?: number
196
+ ExclusiveStartKey?: Record<string, AttributeValue>
197
+ ScanIndexForward?: boolean
198
+ ConsistentRead?: boolean
199
+ }): Promise<{
200
+ Items: Array<Record<string, AttributeValue>>
201
+ Count: number
202
+ ScannedCount: number
203
+ LastEvaluatedKey?: Record<string, AttributeValue>
204
+ }> {
205
+ return this.request('Query', params)
206
+ }
207
+
208
+ /**
209
+ * Scan items from a table
210
+ */
211
+ async scan(params: {
212
+ TableName: string
213
+ IndexName?: string
214
+ FilterExpression?: string
215
+ ProjectionExpression?: string
216
+ ExpressionAttributeNames?: Record<string, string>
217
+ ExpressionAttributeValues?: Record<string, AttributeValue>
218
+ Limit?: number
219
+ ExclusiveStartKey?: Record<string, AttributeValue>
220
+ ConsistentRead?: boolean
221
+ }): Promise<{
222
+ Items: Array<Record<string, AttributeValue>>
223
+ Count: number
224
+ ScannedCount: number
225
+ LastEvaluatedKey?: Record<string, AttributeValue>
226
+ }> {
227
+ return this.request('Scan', params)
228
+ }
229
+
230
+ /**
231
+ * Batch write items
232
+ */
233
+ async batchWriteItem(params: {
234
+ RequestItems: Record<string, Array<{
235
+ PutRequest?: { Item: Record<string, AttributeValue> }
236
+ DeleteRequest?: { Key: Record<string, AttributeValue> }
237
+ }>>
238
+ }): Promise<{
239
+ UnprocessedItems: Record<string, Array<{
240
+ PutRequest?: { Item: Record<string, AttributeValue> }
241
+ DeleteRequest?: { Key: Record<string, AttributeValue> }
242
+ }>>
243
+ }> {
244
+ return this.request('BatchWriteItem', params)
245
+ }
246
+
247
+ /**
248
+ * Batch get items
249
+ */
250
+ async batchGetItem(params: {
251
+ RequestItems: Record<string, {
252
+ Keys: Array<Record<string, AttributeValue>>
253
+ ProjectionExpression?: string
254
+ ExpressionAttributeNames?: Record<string, string>
255
+ ConsistentRead?: boolean
256
+ }>
257
+ }): Promise<{
258
+ Responses: Record<string, Array<Record<string, AttributeValue>>>
259
+ UnprocessedKeys: Record<string, {
260
+ Keys: Array<Record<string, AttributeValue>>
261
+ }>
262
+ }> {
263
+ return this.request('BatchGetItem', params)
264
+ }
265
+
266
+ /**
267
+ * Update time to live settings
268
+ */
269
+ async updateTimeToLive(params: {
270
+ TableName: string
271
+ TimeToLiveSpecification: {
272
+ AttributeName: string
273
+ Enabled: boolean
274
+ }
275
+ }): Promise<{ TimeToLiveSpecification: { AttributeName: string; Enabled: boolean } }> {
276
+ return this.request('UpdateTimeToLive', params)
277
+ }
278
+
279
+ /**
280
+ * Helper: Marshal a JavaScript object to DynamoDB format
281
+ */
282
+ static marshal(obj: Record<string, any>): Record<string, AttributeValue> {
283
+ const result: Record<string, AttributeValue> = {}
284
+ for (const [key, value] of Object.entries(obj)) {
285
+ result[key] = DynamoDBClient.marshalValue(value)
286
+ }
287
+ return result
288
+ }
289
+
290
+ /**
291
+ * Helper: Marshal a single value to DynamoDB format
292
+ */
293
+ static marshalValue(value: any): AttributeValue {
294
+ if (value === null || value === undefined) {
295
+ return { NULL: true }
296
+ }
297
+ if (typeof value === 'string') {
298
+ return { S: value }
299
+ }
300
+ if (typeof value === 'number') {
301
+ return { N: String(value) }
302
+ }
303
+ if (typeof value === 'boolean') {
304
+ return { BOOL: value }
305
+ }
306
+ if (Array.isArray(value)) {
307
+ return { L: value.map(v => DynamoDBClient.marshalValue(v)) }
308
+ }
309
+ if (typeof value === 'object') {
310
+ return { M: DynamoDBClient.marshal(value) }
311
+ }
312
+ return { S: String(value) }
313
+ }
314
+
315
+ /**
316
+ * Helper: Unmarshal DynamoDB format to JavaScript object
317
+ */
318
+ static unmarshal(item: Record<string, AttributeValue>): Record<string, any> {
319
+ const result: Record<string, any> = {}
320
+ for (const [key, value] of Object.entries(item)) {
321
+ result[key] = DynamoDBClient.unmarshalValue(value)
322
+ }
323
+ return result
324
+ }
325
+
326
+ /**
327
+ * Helper: Unmarshal a single DynamoDB value
328
+ */
329
+ static unmarshalValue(value: AttributeValue): any {
330
+ if (value.S !== undefined) return value.S
331
+ if (value.N !== undefined) return Number(value.N)
332
+ if (value.BOOL !== undefined) return value.BOOL
333
+ if (value.NULL !== undefined) return null
334
+ if (value.L !== undefined) return value.L.map(v => DynamoDBClient.unmarshalValue(v))
335
+ if (value.M !== undefined) return DynamoDBClient.unmarshal(value.M)
336
+ if (value.SS !== undefined) return value.SS
337
+ if (value.NS !== undefined) return value.NS.map(Number)
338
+ return null
339
+ }
340
+ }