@stacksjs/ts-cloud 0.1.2 → 0.1.5

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 (187) hide show
  1. package/README.md +98 -13
  2. package/dist/aws/acm.d.ts +129 -0
  3. package/dist/aws/application-autoscaling.d.ts +282 -0
  4. package/dist/aws/bedrock.d.ts +2292 -0
  5. package/dist/aws/client.d.ts +79 -0
  6. package/dist/aws/cloudformation.d.ts +105 -0
  7. package/dist/aws/cloudfront.d.ts +265 -0
  8. package/dist/aws/cloudwatch-logs.d.ts +48 -0
  9. package/dist/aws/comprehend.d.ts +505 -0
  10. package/dist/aws/connect.d.ts +377 -0
  11. package/dist/aws/deploy-imap.d.ts +14 -0
  12. package/dist/aws/dynamodb.d.ts +176 -0
  13. package/dist/aws/ec2.d.ts +272 -0
  14. package/dist/aws/ecr.d.ts +149 -0
  15. package/dist/aws/ecs.d.ts +162 -0
  16. package/dist/aws/elasticache.d.ts +71 -0
  17. package/dist/aws/elbv2.d.ts +248 -0
  18. package/dist/aws/email.d.ts +175 -0
  19. package/dist/aws/eventbridge.d.ts +142 -0
  20. package/dist/aws/iam.d.ts +638 -0
  21. package/dist/aws/imap-server.d.ts +119 -0
  22. package/{src/aws/index.ts → dist/aws/index.d.ts} +62 -83
  23. package/{src/aws/kendra.ts → dist/aws/kendra.d.ts} +71 -386
  24. package/dist/aws/lambda.d.ts +232 -0
  25. package/dist/aws/opensearch.d.ts +87 -0
  26. package/dist/aws/personalize.d.ts +516 -0
  27. package/dist/aws/polly.d.ts +214 -0
  28. package/dist/aws/rds.d.ts +240 -0
  29. package/dist/aws/rekognition.d.ts +543 -0
  30. package/dist/aws/route53-domains.d.ts +113 -0
  31. package/dist/aws/route53.d.ts +215 -0
  32. package/dist/aws/s3.d.ts +212 -0
  33. package/dist/aws/scheduler.d.ts +140 -0
  34. package/dist/aws/secrets-manager.d.ts +170 -0
  35. package/dist/aws/ses.d.ts +288 -0
  36. package/dist/aws/setup-phone.d.ts +0 -0
  37. package/dist/aws/setup-sms.d.ts +115 -0
  38. package/dist/aws/sms.d.ts +304 -0
  39. package/dist/aws/smtp-server.d.ts +61 -0
  40. package/dist/aws/sns.d.ts +117 -0
  41. package/dist/aws/sqs.d.ts +65 -0
  42. package/dist/aws/ssm.d.ts +179 -0
  43. package/dist/aws/sts.d.ts +15 -0
  44. package/dist/aws/support.d.ts +104 -0
  45. package/dist/aws/test-imap.d.ts +0 -0
  46. package/dist/aws/textract.d.ts +403 -0
  47. package/dist/aws/transcribe.d.ts +60 -0
  48. package/dist/aws/translate.d.ts +358 -0
  49. package/dist/aws/voice.d.ts +219 -0
  50. package/dist/bin/cli.js +1724 -0
  51. package/dist/config.d.ts +7 -0
  52. package/dist/deploy/index.d.ts +2 -0
  53. package/dist/deploy/static-site-external-dns.d.ts +51 -0
  54. package/dist/deploy/static-site.d.ts +71 -0
  55. package/dist/dns/cloudflare.d.ts +52 -0
  56. package/dist/dns/godaddy.d.ts +38 -0
  57. package/dist/dns/index.d.ts +45 -0
  58. package/dist/dns/porkbun.d.ts +18 -0
  59. package/dist/dns/route53-adapter.d.ts +38 -0
  60. package/{src/dns/types.ts → dist/dns/types.d.ts} +26 -63
  61. package/dist/dns/validator.d.ts +78 -0
  62. package/dist/generators/index.d.ts +1 -0
  63. package/dist/generators/infrastructure.d.ts +30 -0
  64. package/{src/index.ts → dist/index.d.ts} +70 -93
  65. package/dist/index.js +7881 -0
  66. package/dist/push/apns.d.ts +60 -0
  67. package/dist/push/fcm.d.ts +117 -0
  68. package/dist/push/index.d.ts +14 -0
  69. package/dist/security/pre-deploy-scanner.d.ts +69 -0
  70. package/dist/ssl/acme-client.d.ts +67 -0
  71. package/dist/ssl/index.d.ts +2 -0
  72. package/dist/ssl/letsencrypt.d.ts +48 -0
  73. package/dist/types.d.ts +1 -0
  74. package/dist/utils/cli.d.ts +123 -0
  75. package/dist/validation/index.d.ts +1 -0
  76. package/dist/validation/template.d.ts +23 -0
  77. package/package.json +8 -8
  78. package/bin/cli.ts +0 -133
  79. package/bin/commands/analytics.ts +0 -328
  80. package/bin/commands/api.ts +0 -379
  81. package/bin/commands/assets.ts +0 -221
  82. package/bin/commands/audit.ts +0 -501
  83. package/bin/commands/backup.ts +0 -682
  84. package/bin/commands/cache.ts +0 -294
  85. package/bin/commands/cdn.ts +0 -281
  86. package/bin/commands/config.ts +0 -202
  87. package/bin/commands/container.ts +0 -105
  88. package/bin/commands/cost.ts +0 -208
  89. package/bin/commands/database.ts +0 -401
  90. package/bin/commands/deploy.ts +0 -674
  91. package/bin/commands/domain.ts +0 -397
  92. package/bin/commands/email.ts +0 -423
  93. package/bin/commands/environment.ts +0 -285
  94. package/bin/commands/events.ts +0 -424
  95. package/bin/commands/firewall.ts +0 -145
  96. package/bin/commands/function.ts +0 -116
  97. package/bin/commands/generate.ts +0 -280
  98. package/bin/commands/git.ts +0 -139
  99. package/bin/commands/iam.ts +0 -464
  100. package/bin/commands/index.ts +0 -48
  101. package/bin/commands/init.ts +0 -120
  102. package/bin/commands/logs.ts +0 -148
  103. package/bin/commands/network.ts +0 -579
  104. package/bin/commands/notify.ts +0 -489
  105. package/bin/commands/queue.ts +0 -407
  106. package/bin/commands/scheduler.ts +0 -370
  107. package/bin/commands/secrets.ts +0 -54
  108. package/bin/commands/server.ts +0 -629
  109. package/bin/commands/shared.ts +0 -97
  110. package/bin/commands/ssl.ts +0 -138
  111. package/bin/commands/stack.ts +0 -325
  112. package/bin/commands/status.ts +0 -385
  113. package/bin/commands/storage.ts +0 -450
  114. package/bin/commands/team.ts +0 -96
  115. package/bin/commands/tunnel.ts +0 -489
  116. package/bin/commands/utils.ts +0 -202
  117. package/build.ts +0 -15
  118. package/cloud +0 -2
  119. package/src/aws/acm.ts +0 -768
  120. package/src/aws/application-autoscaling.ts +0 -845
  121. package/src/aws/bedrock.ts +0 -4074
  122. package/src/aws/client.ts +0 -878
  123. package/src/aws/cloudformation.ts +0 -896
  124. package/src/aws/cloudfront.ts +0 -1531
  125. package/src/aws/cloudwatch-logs.ts +0 -154
  126. package/src/aws/comprehend.ts +0 -839
  127. package/src/aws/connect.ts +0 -1056
  128. package/src/aws/deploy-imap.ts +0 -384
  129. package/src/aws/dynamodb.ts +0 -340
  130. package/src/aws/ec2.ts +0 -1385
  131. package/src/aws/ecr.ts +0 -621
  132. package/src/aws/ecs.ts +0 -615
  133. package/src/aws/elasticache.ts +0 -301
  134. package/src/aws/elbv2.ts +0 -942
  135. package/src/aws/email.ts +0 -928
  136. package/src/aws/eventbridge.ts +0 -248
  137. package/src/aws/iam.ts +0 -1689
  138. package/src/aws/imap-server.ts +0 -2100
  139. package/src/aws/lambda.ts +0 -786
  140. package/src/aws/opensearch.ts +0 -158
  141. package/src/aws/personalize.ts +0 -977
  142. package/src/aws/polly.ts +0 -559
  143. package/src/aws/rds.ts +0 -888
  144. package/src/aws/rekognition.ts +0 -846
  145. package/src/aws/route53-domains.ts +0 -359
  146. package/src/aws/route53.ts +0 -1046
  147. package/src/aws/s3.ts +0 -2318
  148. package/src/aws/scheduler.ts +0 -571
  149. package/src/aws/secrets-manager.ts +0 -769
  150. package/src/aws/ses.ts +0 -1081
  151. package/src/aws/setup-phone.ts +0 -104
  152. package/src/aws/setup-sms.ts +0 -580
  153. package/src/aws/sms.ts +0 -1735
  154. package/src/aws/smtp-server.ts +0 -531
  155. package/src/aws/sns.ts +0 -758
  156. package/src/aws/sqs.ts +0 -382
  157. package/src/aws/ssm.ts +0 -807
  158. package/src/aws/sts.ts +0 -92
  159. package/src/aws/support.ts +0 -391
  160. package/src/aws/test-imap.ts +0 -86
  161. package/src/aws/textract.ts +0 -780
  162. package/src/aws/transcribe.ts +0 -108
  163. package/src/aws/translate.ts +0 -641
  164. package/src/aws/voice.ts +0 -1379
  165. package/src/config.ts +0 -35
  166. package/src/deploy/index.ts +0 -7
  167. package/src/deploy/static-site-external-dns.ts +0 -906
  168. package/src/deploy/static-site.ts +0 -1125
  169. package/src/dns/godaddy.ts +0 -412
  170. package/src/dns/index.ts +0 -183
  171. package/src/dns/porkbun.ts +0 -362
  172. package/src/dns/route53-adapter.ts +0 -414
  173. package/src/dns/validator.ts +0 -369
  174. package/src/generators/index.ts +0 -5
  175. package/src/generators/infrastructure.ts +0 -1660
  176. package/src/push/apns.ts +0 -452
  177. package/src/push/fcm.ts +0 -506
  178. package/src/push/index.ts +0 -58
  179. package/src/ssl/acme-client.ts +0 -478
  180. package/src/ssl/index.ts +0 -7
  181. package/src/ssl/letsencrypt.ts +0 -747
  182. package/src/types.ts +0 -2
  183. package/src/utils/cli.ts +0 -398
  184. package/src/validation/index.ts +0 -5
  185. package/src/validation/template.ts +0 -405
  186. package/test/index.test.ts +0 -128
  187. package/tsconfig.json +0 -18
@@ -1,571 +0,0 @@
1
- /**
2
- * AWS EventBridge Scheduler Operations
3
- * Direct API calls without AWS CLI dependency
4
- */
5
-
6
- import { AWSClient } from './client'
7
-
8
- export interface Schedule {
9
- Name: string
10
- Arn?: string
11
- State?: 'ENABLED' | 'DISABLED'
12
- ScheduleExpression?: string
13
- ScheduleExpressionTimezone?: string
14
- Target?: {
15
- Arn: string
16
- RoleArn: string
17
- Input?: string
18
- }
19
- FlexibleTimeWindow?: {
20
- Mode: 'OFF' | 'FLEXIBLE'
21
- MaximumWindowInMinutes?: number
22
- }
23
- GroupName?: string
24
- Description?: string
25
- StartDate?: string
26
- EndDate?: string
27
- CreationDate?: string
28
- LastModificationDate?: string
29
- }
30
-
31
- export interface CreateScheduleInput {
32
- Name: string
33
- GroupName?: string
34
- ScheduleExpression: string
35
- ScheduleExpressionTimezone?: string
36
- Description?: string
37
- State?: 'ENABLED' | 'DISABLED'
38
- FlexibleTimeWindow: {
39
- Mode: 'OFF' | 'FLEXIBLE'
40
- MaximumWindowInMinutes?: number
41
- }
42
- Target: {
43
- Arn: string
44
- RoleArn: string
45
- Input?: string
46
- }
47
- StartDate?: Date
48
- EndDate?: Date
49
- }
50
-
51
- export interface UpdateScheduleInput {
52
- Name: string
53
- GroupName?: string
54
- ScheduleExpression?: string
55
- ScheduleExpressionTimezone?: string
56
- Description?: string
57
- State?: 'ENABLED' | 'DISABLED'
58
- FlexibleTimeWindow?: {
59
- Mode: 'OFF' | 'FLEXIBLE'
60
- MaximumWindowInMinutes?: number
61
- }
62
- Target?: {
63
- Arn: string
64
- RoleArn: string
65
- Input?: string
66
- }
67
- }
68
-
69
- export interface ScheduleGroup {
70
- Name: string
71
- Arn?: string
72
- State?: string
73
- CreationDate?: string
74
- LastModificationDate?: string
75
- }
76
-
77
- export interface CreateScheduleOptions {
78
- name: string
79
- scheduleExpression: string
80
- targetArn: string
81
- roleArn: string
82
- input?: string
83
- groupName?: string
84
- state?: 'ENABLED' | 'DISABLED'
85
- description?: string
86
- flexibleTimeWindow?: {
87
- mode: 'OFF' | 'FLEXIBLE'
88
- maxWindowMinutes?: number
89
- }
90
- }
91
-
92
- export interface SchedulerRule {
93
- Name: string
94
- Arn: string
95
- EventPattern?: string
96
- ScheduleExpression?: string
97
- State: 'ENABLED' | 'DISABLED'
98
- Description?: string
99
- }
100
-
101
- export interface SchedulerTarget {
102
- Id: string
103
- Arn: string
104
- RoleArn?: string
105
- Input?: string
106
- InputPath?: string
107
- }
108
-
109
- /**
110
- * EventBridge Scheduler management using direct API calls
111
- */
112
- export class SchedulerClient {
113
- private client: AWSClient
114
- private region: string
115
-
116
- constructor(region: string = 'us-east-1', profile?: string) {
117
- this.region = region
118
- this.client = new AWSClient()
119
- }
120
-
121
- /**
122
- * Create a new schedule (EventBridge rule)
123
- */
124
- async createRule(options: {
125
- name: string
126
- scheduleExpression: string
127
- description?: string
128
- state?: 'ENABLED' | 'DISABLED'
129
- }): Promise<{ RuleArn: string }> {
130
- const params: Record<string, any> = {
131
- Action: 'PutRule',
132
- Name: options.name,
133
- ScheduleExpression: options.scheduleExpression,
134
- Version: '2015-10-07',
135
- }
136
-
137
- if (options.description) {
138
- params.Description = options.description
139
- }
140
-
141
- if (options.state) {
142
- params.State = options.state
143
- }
144
- else {
145
- params.State = 'ENABLED'
146
- }
147
-
148
- const result = await this.client.request({
149
- service: 'events',
150
- region: this.region,
151
- method: 'POST',
152
- path: '/',
153
- headers: {
154
- 'X-Amz-Target': 'AWSEvents.PutRule',
155
- 'Content-Type': 'application/x-amz-json-1.1',
156
- },
157
- body: JSON.stringify({
158
- Name: options.name,
159
- ScheduleExpression: options.scheduleExpression,
160
- State: options.state || 'ENABLED',
161
- Description: options.description,
162
- }),
163
- })
164
-
165
- return { RuleArn: result.RuleArn }
166
- }
167
-
168
- /**
169
- * Add target to a rule
170
- */
171
- async putTargets(ruleName: string, targets: SchedulerTarget[]): Promise<void> {
172
- await this.client.request({
173
- service: 'events',
174
- region: this.region,
175
- method: 'POST',
176
- path: '/',
177
- headers: {
178
- 'X-Amz-Target': 'AWSEvents.PutTargets',
179
- 'Content-Type': 'application/x-amz-json-1.1',
180
- },
181
- body: JSON.stringify({
182
- Rule: ruleName,
183
- Targets: targets,
184
- }),
185
- })
186
- }
187
-
188
- /**
189
- * List all rules
190
- */
191
- async listRules(namePrefix?: string): Promise<{ Rules: SchedulerRule[] }> {
192
- const payload: any = {}
193
-
194
- if (namePrefix) {
195
- payload.NamePrefix = namePrefix
196
- }
197
-
198
- const result = await this.client.request({
199
- service: 'events',
200
- region: this.region,
201
- method: 'POST',
202
- path: '/',
203
- headers: {
204
- 'X-Amz-Target': 'AWSEvents.ListRules',
205
- 'Content-Type': 'application/x-amz-json-1.1',
206
- },
207
- body: JSON.stringify(payload),
208
- })
209
-
210
- return { Rules: result.Rules || [] }
211
- }
212
-
213
- /**
214
- * Describe a rule
215
- */
216
- async describeRule(name: string): Promise<SchedulerRule> {
217
- const result = await this.client.request({
218
- service: 'events',
219
- region: this.region,
220
- method: 'POST',
221
- path: '/',
222
- headers: {
223
- 'X-Amz-Target': 'AWSEvents.DescribeRule',
224
- 'Content-Type': 'application/x-amz-json-1.1',
225
- },
226
- body: JSON.stringify({
227
- Name: name,
228
- }),
229
- })
230
-
231
- return {
232
- Name: result.Name,
233
- Arn: result.Arn,
234
- ScheduleExpression: result.ScheduleExpression,
235
- State: result.State,
236
- Description: result.Description,
237
- }
238
- }
239
-
240
- /**
241
- * List targets for a rule
242
- */
243
- async listTargetsByRule(ruleName: string): Promise<{ Targets: SchedulerTarget[] }> {
244
- const result = await this.client.request({
245
- service: 'events',
246
- region: this.region,
247
- method: 'POST',
248
- path: '/',
249
- headers: {
250
- 'X-Amz-Target': 'AWSEvents.ListTargetsByRule',
251
- 'Content-Type': 'application/x-amz-json-1.1',
252
- },
253
- body: JSON.stringify({
254
- Rule: ruleName,
255
- }),
256
- })
257
-
258
- return { Targets: result.Targets || [] }
259
- }
260
-
261
- /**
262
- * Delete a rule
263
- */
264
- async deleteRule(name: string, force?: boolean): Promise<void> {
265
- // First, remove all targets
266
- if (force) {
267
- try {
268
- const targets = await this.listTargetsByRule(name)
269
- if (targets.Targets && targets.Targets.length > 0) {
270
- await this.removeTargets(name, targets.Targets.map(t => t.Id))
271
- }
272
- }
273
- catch {
274
- // Ignore errors when removing targets
275
- }
276
- }
277
-
278
- await this.client.request({
279
- service: 'events',
280
- region: this.region,
281
- method: 'POST',
282
- path: '/',
283
- headers: {
284
- 'X-Amz-Target': 'AWSEvents.DeleteRule',
285
- 'Content-Type': 'application/x-amz-json-1.1',
286
- },
287
- body: JSON.stringify({
288
- Name: name,
289
- Force: force || false,
290
- }),
291
- })
292
- }
293
-
294
- /**
295
- * Remove targets from a rule
296
- */
297
- async removeTargets(ruleName: string, targetIds: string[]): Promise<void> {
298
- await this.client.request({
299
- service: 'events',
300
- region: this.region,
301
- method: 'POST',
302
- path: '/',
303
- headers: {
304
- 'X-Amz-Target': 'AWSEvents.RemoveTargets',
305
- 'Content-Type': 'application/x-amz-json-1.1',
306
- },
307
- body: JSON.stringify({
308
- Rule: ruleName,
309
- Ids: targetIds,
310
- }),
311
- })
312
- }
313
-
314
- /**
315
- * Enable a rule
316
- */
317
- async enableRule(name: string): Promise<void> {
318
- await this.client.request({
319
- service: 'events',
320
- region: this.region,
321
- method: 'POST',
322
- path: '/',
323
- headers: {
324
- 'X-Amz-Target': 'AWSEvents.EnableRule',
325
- 'Content-Type': 'application/x-amz-json-1.1',
326
- },
327
- body: JSON.stringify({
328
- Name: name,
329
- }),
330
- })
331
- }
332
-
333
- /**
334
- * Disable a rule
335
- */
336
- async disableRule(name: string): Promise<void> {
337
- await this.client.request({
338
- service: 'events',
339
- region: this.region,
340
- method: 'POST',
341
- path: '/',
342
- headers: {
343
- 'X-Amz-Target': 'AWSEvents.DisableRule',
344
- 'Content-Type': 'application/x-amz-json-1.1',
345
- },
346
- body: JSON.stringify({
347
- Name: name,
348
- }),
349
- })
350
- }
351
-
352
- /**
353
- * Create a Lambda-triggered schedule
354
- */
355
- async createLambdaSchedule(options: {
356
- name: string
357
- scheduleExpression: string
358
- functionArn: string
359
- description?: string
360
- input?: string
361
- }): Promise<{ RuleArn: string }> {
362
- // Create the rule
363
- const rule = await this.createRule({
364
- name: options.name,
365
- scheduleExpression: options.scheduleExpression,
366
- description: options.description,
367
- state: 'ENABLED',
368
- })
369
-
370
- // Add Lambda as target
371
- await this.putTargets(options.name, [
372
- {
373
- Id: '1',
374
- Arn: options.functionArn,
375
- Input: options.input,
376
- },
377
- ])
378
-
379
- return rule
380
- }
381
-
382
- /**
383
- * Create an ECS task schedule
384
- */
385
- async createEcsSchedule(options: {
386
- name: string
387
- scheduleExpression: string
388
- clusterArn: string
389
- taskDefinitionArn: string
390
- roleArn: string
391
- subnets: string[]
392
- securityGroups?: string[]
393
- description?: string
394
- }): Promise<{ RuleArn: string }> {
395
- // Create the rule
396
- const rule = await this.createRule({
397
- name: options.name,
398
- scheduleExpression: options.scheduleExpression,
399
- description: options.description,
400
- state: 'ENABLED',
401
- })
402
-
403
- // Add ECS task as target
404
- await this.putTargets(options.name, [
405
- {
406
- Id: '1',
407
- Arn: options.clusterArn,
408
- RoleArn: options.roleArn,
409
- Input: JSON.stringify({
410
- containerOverrides: [],
411
- }),
412
- },
413
- ])
414
-
415
- return rule
416
- }
417
-
418
- // ─── EventBridge Scheduler API methods ─────────────────────────────
419
-
420
- /**
421
- * List schedules (EventBridge Scheduler API)
422
- */
423
- async listSchedules(options?: { GroupName?: string; NamePrefix?: string; State?: string }): Promise<{ Schedules: Schedule[] }> {
424
- const queryParams: Record<string, string> = {}
425
- if (options?.NamePrefix) {
426
- queryParams.NamePrefix = options.NamePrefix
427
- }
428
- if (options?.State) {
429
- queryParams.State = options.State
430
- }
431
-
432
- const groupName = options?.GroupName || 'default'
433
- const result = await this.client.request({
434
- service: 'scheduler',
435
- region: this.region,
436
- method: 'GET',
437
- path: `/schedules`,
438
- queryParams: {
439
- ...queryParams,
440
- ScheduleGroup: groupName,
441
- },
442
- })
443
-
444
- return { Schedules: result?.Schedules || [] }
445
- }
446
-
447
- /**
448
- * Get a schedule by name (EventBridge Scheduler API)
449
- */
450
- async getSchedule(options: { Name: string; GroupName?: string }): Promise<Schedule | null> {
451
- try {
452
- const queryParams: Record<string, string> = {}
453
- if (options.GroupName) {
454
- queryParams.groupName = options.GroupName
455
- }
456
-
457
- const result = await this.client.request({
458
- service: 'scheduler',
459
- region: this.region,
460
- method: 'GET',
461
- path: `/schedules/${encodeURIComponent(options.Name)}`,
462
- queryParams: Object.keys(queryParams).length > 0 ? queryParams : undefined,
463
- })
464
-
465
- return result as Schedule
466
- }
467
- catch (error: any) {
468
- if (error.statusCode === 404 || error.code === 'ResourceNotFoundException') {
469
- return null
470
- }
471
- throw error
472
- }
473
- }
474
-
475
- /**
476
- * Create a schedule (EventBridge Scheduler API)
477
- */
478
- async createSchedule(input: CreateScheduleInput): Promise<{ ScheduleArn: string }> {
479
- const body: Record<string, any> = {
480
- ScheduleExpression: input.ScheduleExpression,
481
- FlexibleTimeWindow: input.FlexibleTimeWindow,
482
- Target: input.Target,
483
- }
484
-
485
- if (input.GroupName) body.GroupName = input.GroupName
486
- if (input.ScheduleExpressionTimezone) body.ScheduleExpressionTimezone = input.ScheduleExpressionTimezone
487
- if (input.Description) body.Description = input.Description
488
- if (input.State) body.State = input.State
489
- if (input.StartDate) body.StartDate = input.StartDate.toISOString()
490
- if (input.EndDate) body.EndDate = input.EndDate.toISOString()
491
-
492
- const result = await this.client.request({
493
- service: 'scheduler',
494
- region: this.region,
495
- method: 'POST',
496
- path: `/schedules/${encodeURIComponent(input.Name)}`,
497
- headers: {
498
- 'Content-Type': 'application/json',
499
- },
500
- body: JSON.stringify(body),
501
- })
502
-
503
- return { ScheduleArn: result?.ScheduleArn || '' }
504
- }
505
-
506
- /**
507
- * Update a schedule (EventBridge Scheduler API)
508
- */
509
- async updateSchedule(input: UpdateScheduleInput): Promise<{ ScheduleArn: string }> {
510
- const body: Record<string, any> = {}
511
-
512
- if (input.GroupName) body.GroupName = input.GroupName
513
- if (input.ScheduleExpression) body.ScheduleExpression = input.ScheduleExpression
514
- if (input.ScheduleExpressionTimezone) body.ScheduleExpressionTimezone = input.ScheduleExpressionTimezone
515
- if (input.Description !== undefined) body.Description = input.Description
516
- if (input.State) body.State = input.State
517
- if (input.FlexibleTimeWindow) body.FlexibleTimeWindow = input.FlexibleTimeWindow
518
- if (input.Target) body.Target = input.Target
519
-
520
- const result = await this.client.request({
521
- service: 'scheduler',
522
- region: this.region,
523
- method: 'PUT',
524
- path: `/schedules/${encodeURIComponent(input.Name)}`,
525
- headers: {
526
- 'Content-Type': 'application/json',
527
- },
528
- body: JSON.stringify(body),
529
- })
530
-
531
- return { ScheduleArn: result?.ScheduleArn || '' }
532
- }
533
-
534
- /**
535
- * Delete a schedule (EventBridge Scheduler API)
536
- */
537
- async deleteSchedule(options: { Name: string; GroupName?: string }): Promise<void> {
538
- const queryParams: Record<string, string> = {}
539
- if (options.GroupName) {
540
- queryParams.groupName = options.GroupName
541
- }
542
-
543
- await this.client.request({
544
- service: 'scheduler',
545
- region: this.region,
546
- method: 'DELETE',
547
- path: `/schedules/${encodeURIComponent(options.Name)}`,
548
- queryParams: Object.keys(queryParams).length > 0 ? queryParams : undefined,
549
- })
550
- }
551
-
552
- /**
553
- * List schedule groups (EventBridge Scheduler API)
554
- */
555
- async listScheduleGroups(options?: { NamePrefix?: string }): Promise<{ ScheduleGroups: ScheduleGroup[] }> {
556
- const queryParams: Record<string, string> = {}
557
- if (options?.NamePrefix) {
558
- queryParams.NamePrefix = options.NamePrefix
559
- }
560
-
561
- const result = await this.client.request({
562
- service: 'scheduler',
563
- region: this.region,
564
- method: 'GET',
565
- path: '/schedule-groups',
566
- queryParams: Object.keys(queryParams).length > 0 ? queryParams : undefined,
567
- })
568
-
569
- return { ScheduleGroups: result?.ScheduleGroups || [] }
570
- }
571
- }