@stacksjs/ts-cloud 0.2.2 → 0.2.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 (76) hide show
  1. package/dist/aws/acm.d.ts +215 -0
  2. package/dist/aws/application-autoscaling.d.ts +345 -0
  3. package/dist/aws/bedrock.d.ts +2672 -0
  4. package/dist/aws/client.d.ts +181 -0
  5. package/dist/aws/cloudformation.d.ts +187 -0
  6. package/dist/aws/cloudfront.d.ts +416 -0
  7. package/dist/aws/cloudwatch-logs.d.ts +70 -0
  8. package/dist/aws/comprehend.d.ts +616 -0
  9. package/dist/aws/connect.d.ts +533 -0
  10. package/dist/aws/deploy-imap.d.ts +26 -0
  11. package/dist/aws/dynamodb.d.ts +270 -0
  12. package/dist/aws/ec2.d.ts +545 -0
  13. package/dist/aws/ecr.d.ts +240 -0
  14. package/dist/aws/ecs.d.ts +267 -0
  15. package/dist/aws/efs.d.ts +36 -0
  16. package/dist/aws/elasticache.d.ts +112 -0
  17. package/dist/aws/elbv2.d.ts +389 -0
  18. package/dist/aws/email.d.ts +260 -0
  19. package/dist/aws/eventbridge.d.ts +197 -0
  20. package/dist/aws/iam.d.ts +1013 -0
  21. package/dist/aws/imap-server.d.ts +298 -0
  22. package/dist/aws/index.d.ts +53 -0
  23. package/dist/aws/kendra.d.ts +831 -0
  24. package/dist/aws/lambda.d.ts +319 -0
  25. package/dist/aws/opensearch.d.ts +121 -0
  26. package/dist/aws/personalize.d.ts +586 -0
  27. package/dist/aws/polly.d.ts +243 -0
  28. package/dist/aws/rds.d.ts +346 -0
  29. package/dist/aws/rekognition.d.ts +691 -0
  30. package/dist/aws/route53-domains.d.ts +161 -0
  31. package/dist/aws/route53.d.ts +330 -0
  32. package/dist/aws/s3.d.ts +535 -0
  33. package/dist/aws/scheduler.d.ts +224 -0
  34. package/dist/aws/secrets-manager.d.ts +267 -0
  35. package/dist/aws/ses.d.ts +441 -0
  36. package/dist/aws/setup-phone.d.ts +1 -0
  37. package/dist/aws/setup-sms.d.ts +116 -0
  38. package/dist/aws/sms.d.ts +477 -0
  39. package/dist/aws/smtp-server.d.ts +108 -0
  40. package/dist/aws/sns.d.ts +224 -0
  41. package/dist/aws/sqs.d.ts +107 -0
  42. package/dist/aws/ssm.d.ts +311 -0
  43. package/dist/aws/sts.d.ts +21 -0
  44. package/dist/aws/support.d.ts +139 -0
  45. package/dist/aws/test-imap.d.ts +15 -0
  46. package/dist/aws/textract.d.ts +477 -0
  47. package/dist/aws/transcribe.d.ts +79 -0
  48. package/dist/aws/translate.d.ts +424 -0
  49. package/dist/aws/voice.d.ts +361 -0
  50. package/dist/bin/cli.js +4500 -809
  51. package/dist/config.d.ts +5 -0
  52. package/dist/deploy/index.d.ts +6 -0
  53. package/dist/deploy/static-site-external-dns.d.ts +70 -0
  54. package/dist/deploy/static-site.d.ts +110 -0
  55. package/dist/dns/cloudflare.d.ts +74 -0
  56. package/dist/dns/godaddy.d.ts +63 -0
  57. package/dist/dns/index.d.ts +67 -0
  58. package/dist/dns/porkbun.d.ts +43 -0
  59. package/dist/dns/route53-adapter.d.ts +67 -0
  60. package/dist/dns/types.d.ts +100 -0
  61. package/dist/dns/validator.d.ts +105 -0
  62. package/dist/generators/index.d.ts +4 -0
  63. package/dist/generators/infrastructure.d.ts +115 -0
  64. package/dist/index.d.ts +9 -165
  65. package/dist/index.js +24067 -6430
  66. package/dist/push/apns.d.ts +140 -0
  67. package/dist/push/fcm.d.ts +205 -0
  68. package/dist/push/index.d.ts +44 -0
  69. package/dist/security/pre-deploy-scanner.d.ts +97 -0
  70. package/dist/ssl/acme-client.d.ts +133 -0
  71. package/dist/ssl/index.d.ts +6 -0
  72. package/dist/ssl/letsencrypt.d.ts +96 -0
  73. package/dist/utils/cli.d.ts +121 -0
  74. package/dist/validation/index.d.ts +4 -0
  75. package/dist/validation/template.d.ts +27 -0
  76. package/package.json +6 -6
@@ -0,0 +1,533 @@
1
+ /**
2
+ * AWS Amazon Connect Operations
3
+ * Direct API calls without AWS SDK dependency
4
+ */
5
+ export interface ConnectInstance {
6
+ Id?: string;
7
+ Arn?: string;
8
+ IdentityManagementType?: 'SAML' | 'CONNECT_MANAGED' | 'EXISTING_DIRECTORY';
9
+ InstanceAlias?: string;
10
+ CreatedTime?: string;
11
+ ServiceRole?: string;
12
+ InstanceStatus?: 'CREATION_IN_PROGRESS' | 'ACTIVE' | 'CREATION_FAILED';
13
+ InboundCallsEnabled?: boolean;
14
+ OutboundCallsEnabled?: boolean;
15
+ }
16
+ export interface PhoneNumber {
17
+ PhoneNumberId?: string;
18
+ PhoneNumberArn?: string;
19
+ PhoneNumber?: string;
20
+ PhoneNumberCountryCode?: string;
21
+ PhoneNumberType?: 'TOLL_FREE' | 'DID' | 'UIFN' | 'SHARED' | 'THIRD_PARTY_TF' | 'THIRD_PARTY_DID';
22
+ PhoneNumberDescription?: string;
23
+ TargetArn?: string;
24
+ InstanceId?: string;
25
+ Tags?: Record<string, string>;
26
+ }
27
+ export interface ContactFlow {
28
+ Id?: string;
29
+ Arn?: string;
30
+ Name?: string;
31
+ Type?: 'CONTACT_FLOW' | 'CUSTOMER_QUEUE' | 'CUSTOMER_HOLD' | 'CUSTOMER_WHISPER' | 'AGENT_HOLD' | 'AGENT_WHISPER' | 'OUTBOUND_WHISPER' | 'AGENT_TRANSFER' | 'QUEUE_TRANSFER';
32
+ State?: 'ACTIVE' | 'ARCHIVED';
33
+ Description?: string;
34
+ Content?: string;
35
+ Tags?: Record<string, string>;
36
+ }
37
+ export interface Queue {
38
+ QueueId?: string;
39
+ QueueArn?: string;
40
+ Name?: string;
41
+ Description?: string;
42
+ HoursOfOperationId?: string;
43
+ MaxContacts?: number;
44
+ Status?: 'ENABLED' | 'DISABLED';
45
+ Tags?: Record<string, string>;
46
+ }
47
+ export interface AvailablePhoneNumber {
48
+ PhoneNumber?: string;
49
+ PhoneNumberCountryCode?: string;
50
+ PhoneNumberType?: string;
51
+ }
52
+ /**
53
+ * Amazon Connect client for phone/voice operations
54
+ */
55
+ export declare class ConnectClient {
56
+ private client;
57
+ private region;
58
+ constructor(region?: string);
59
+ /**
60
+ * Create a new Amazon Connect instance
61
+ */
62
+ createInstance(params: {
63
+ InstanceAlias: string;
64
+ IdentityManagementType?: 'SAML' | 'CONNECT_MANAGED' | 'EXISTING_DIRECTORY';
65
+ InboundCallsEnabled?: boolean;
66
+ OutboundCallsEnabled?: boolean;
67
+ DirectoryId?: string;
68
+ ClientToken?: string;
69
+ Tags?: Record<string, string>;
70
+ }): Promise<{
71
+ Id?: string;
72
+ Arn?: string;
73
+ }>;
74
+ /**
75
+ * Delete an Amazon Connect instance
76
+ */
77
+ deleteInstance(instanceId: string): Promise<void>;
78
+ /**
79
+ * Get instance details
80
+ */
81
+ describeInstance(instanceId: string): Promise<ConnectInstance>;
82
+ /**
83
+ * List all Connect instances
84
+ */
85
+ listInstances(params?: {
86
+ MaxResults?: number;
87
+ NextToken?: string;
88
+ }): Promise<{
89
+ InstanceSummaryList?: ConnectInstance[];
90
+ NextToken?: string;
91
+ }>;
92
+ /**
93
+ * Search for available phone numbers
94
+ */
95
+ searchAvailablePhoneNumbers(params: {
96
+ TargetArn: string;
97
+ PhoneNumberCountryCode: string;
98
+ PhoneNumberType: 'TOLL_FREE' | 'DID' | 'UIFN';
99
+ PhoneNumberPrefix?: string;
100
+ MaxResults?: number;
101
+ NextToken?: string;
102
+ }): Promise<{
103
+ AvailableNumbersList?: AvailablePhoneNumber[];
104
+ NextToken?: string;
105
+ }>;
106
+ /**
107
+ * Claim a phone number
108
+ */
109
+ claimPhoneNumber(params: {
110
+ TargetArn: string;
111
+ PhoneNumber: string;
112
+ PhoneNumberDescription?: string;
113
+ Tags?: Record<string, string>;
114
+ ClientToken?: string;
115
+ }): Promise<{
116
+ PhoneNumberId?: string;
117
+ PhoneNumberArn?: string;
118
+ }>;
119
+ /**
120
+ * Release a phone number
121
+ */
122
+ releasePhoneNumber(phoneNumberId: string, clientToken?: string): Promise<void>;
123
+ /**
124
+ * List phone numbers for an instance
125
+ */
126
+ listPhoneNumbers(params: {
127
+ TargetArn?: string;
128
+ InstanceId?: string;
129
+ PhoneNumberTypes?: string[];
130
+ PhoneNumberCountryCodes?: string[];
131
+ MaxResults?: number;
132
+ NextToken?: string;
133
+ }): Promise<{
134
+ ListPhoneNumbersSummaryList?: PhoneNumber[];
135
+ NextToken?: string;
136
+ }>;
137
+ /**
138
+ * Create a contact flow
139
+ */
140
+ createContactFlow(params: {
141
+ InstanceId: string;
142
+ Name: string;
143
+ Type: 'CONTACT_FLOW' | 'CUSTOMER_QUEUE' | 'CUSTOMER_HOLD' | 'CUSTOMER_WHISPER' | 'AGENT_HOLD' | 'AGENT_WHISPER' | 'OUTBOUND_WHISPER' | 'AGENT_TRANSFER' | 'QUEUE_TRANSFER';
144
+ Content: string;
145
+ Description?: string;
146
+ Tags?: Record<string, string>;
147
+ }): Promise<{
148
+ ContactFlowId?: string;
149
+ ContactFlowArn?: string;
150
+ }>;
151
+ /**
152
+ * Update contact flow content
153
+ */
154
+ updateContactFlowContent(params: {
155
+ InstanceId: string;
156
+ ContactFlowId: string;
157
+ Content: string;
158
+ }): Promise<void>;
159
+ /**
160
+ * List contact flows
161
+ */
162
+ listContactFlows(params: {
163
+ InstanceId: string;
164
+ ContactFlowTypes?: string[];
165
+ MaxResults?: number;
166
+ NextToken?: string;
167
+ }): Promise<{
168
+ ContactFlowSummaryList?: ContactFlow[];
169
+ NextToken?: string;
170
+ }>;
171
+ /**
172
+ * Create a queue
173
+ */
174
+ createQueue(params: {
175
+ InstanceId: string;
176
+ Name: string;
177
+ Description?: string;
178
+ HoursOfOperationId: string;
179
+ MaxContacts?: number;
180
+ OutboundCallerConfig?: {
181
+ OutboundCallerIdName?: string;
182
+ OutboundCallerIdNumberId?: string;
183
+ OutboundFlowId?: string;
184
+ };
185
+ Tags?: Record<string, string>;
186
+ }): Promise<{
187
+ QueueId?: string;
188
+ QueueArn?: string;
189
+ }>;
190
+ /**
191
+ * Create hours of operation
192
+ */
193
+ createHoursOfOperation(params: {
194
+ InstanceId: string;
195
+ Name: string;
196
+ TimeZone: string;
197
+ Config: Array<{
198
+ Day: 'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY';
199
+ StartTime: {
200
+ Hours: number;
201
+ Minutes: number;
202
+ };
203
+ EndTime: {
204
+ Hours: number;
205
+ Minutes: number;
206
+ };
207
+ }>;
208
+ Description?: string;
209
+ Tags?: Record<string, string>;
210
+ }): Promise<{
211
+ HoursOfOperationId?: string;
212
+ HoursOfOperationArn?: string;
213
+ }>;
214
+ /**
215
+ * Associate phone number with contact flow
216
+ */
217
+ associatePhoneNumberContactFlow(params: {
218
+ PhoneNumberId: string;
219
+ InstanceId: string;
220
+ ContactFlowId: string;
221
+ }): Promise<void>;
222
+ /**
223
+ * Create a routing profile
224
+ */
225
+ createRoutingProfile(params: {
226
+ InstanceId: string;
227
+ Name: string;
228
+ Description?: string;
229
+ DefaultOutboundQueueId: string;
230
+ MediaConcurrencies: Array<{
231
+ Channel: 'VOICE' | 'CHAT' | 'TASK';
232
+ Concurrency: number;
233
+ CrossChannelBehavior?: {
234
+ BehaviorType: 'ROUTE_CURRENT_CHANNEL_ONLY' | 'ROUTE_ANY_CHANNEL';
235
+ };
236
+ }>;
237
+ QueueConfigs?: Array<{
238
+ QueueReference: {
239
+ QueueId: string;
240
+ Channel: 'VOICE' | 'CHAT' | 'TASK';
241
+ };
242
+ Priority: number;
243
+ Delay: number;
244
+ }>;
245
+ Tags?: Record<string, string>;
246
+ }): Promise<{
247
+ RoutingProfileId?: string;
248
+ RoutingProfileArn?: string;
249
+ }>;
250
+ /**
251
+ * Check if an instance exists by alias
252
+ */
253
+ instanceExists(instanceAlias: string): Promise<boolean>;
254
+ /**
255
+ * Start an outbound voice contact (make a call)
256
+ */
257
+ startOutboundVoiceContact(params: {
258
+ InstanceId: string;
259
+ ContactFlowId: string;
260
+ DestinationPhoneNumber: string;
261
+ SourcePhoneNumber?: string;
262
+ QueueId?: string;
263
+ Attributes?: Record<string, string>;
264
+ AnswerMachineDetectionConfig?: {
265
+ EnableAnswerMachineDetection?: boolean;
266
+ AwaitAnswerMachinePrompt?: boolean;
267
+ };
268
+ CampaignId?: string;
269
+ TrafficType?: 'GENERAL' | 'CAMPAIGN';
270
+ ClientToken?: string;
271
+ }): Promise<{
272
+ ContactId?: string;
273
+ }>;
274
+ /**
275
+ * Make a simple outbound call (convenience method)
276
+ */
277
+ makeCall(params: {
278
+ instanceId: string;
279
+ contactFlowId: string;
280
+ to: string;
281
+ from?: string;
282
+ attributes?: Record<string, string>;
283
+ }): Promise<{
284
+ ContactId?: string;
285
+ }>;
286
+ /**
287
+ * Stop a contact (end a call)
288
+ */
289
+ stopContact(params: {
290
+ InstanceId: string;
291
+ ContactId: string;
292
+ }): Promise<void>;
293
+ /**
294
+ * Get contact details
295
+ */
296
+ describeContact(params: {
297
+ InstanceId: string;
298
+ ContactId: string;
299
+ }): Promise<{
300
+ Contact?: {
301
+ Arn?: string;
302
+ Id?: string;
303
+ InitialContactId?: string;
304
+ PreviousContactId?: string;
305
+ InitiationMethod?: 'INBOUND' | 'OUTBOUND' | 'TRANSFER' | 'QUEUE_TRANSFER' | 'CALLBACK' | 'API' | 'DISCONNECT' | 'MONITOR' | 'EXTERNAL_OUTBOUND';
306
+ Name?: string;
307
+ Description?: string;
308
+ Channel?: 'VOICE' | 'CHAT' | 'TASK';
309
+ QueueInfo?: {
310
+ Id?: string;
311
+ EnqueueTimestamp?: string;
312
+ };
313
+ AgentInfo?: {
314
+ Id?: string;
315
+ ConnectedToAgentTimestamp?: string;
316
+ };
317
+ InitiationTimestamp?: string;
318
+ DisconnectTimestamp?: string;
319
+ ScheduledTimestamp?: string;
320
+ };
321
+ }>;
322
+ /**
323
+ * Update contact attributes
324
+ */
325
+ updateContactAttributes(params: {
326
+ InstanceId: string;
327
+ InitialContactId: string;
328
+ Attributes: Record<string, string>;
329
+ }): Promise<void>;
330
+ /**
331
+ * Create a user (agent)
332
+ */
333
+ createUser(params: {
334
+ InstanceId: string;
335
+ Username: string;
336
+ Password?: string;
337
+ IdentityInfo?: {
338
+ FirstName?: string;
339
+ LastName?: string;
340
+ Email?: string;
341
+ SecondaryEmail?: string;
342
+ Mobile?: string;
343
+ };
344
+ PhoneConfig: {
345
+ PhoneType: 'SOFT_PHONE' | 'DESK_PHONE';
346
+ AutoAccept?: boolean;
347
+ AfterContactWorkTimeLimit?: number;
348
+ DeskPhoneNumber?: string;
349
+ };
350
+ DirectoryUserId?: string;
351
+ SecurityProfileIds: string[];
352
+ RoutingProfileId: string;
353
+ HierarchyGroupId?: string;
354
+ Tags?: Record<string, string>;
355
+ }): Promise<{
356
+ UserId?: string;
357
+ UserArn?: string;
358
+ }>;
359
+ /**
360
+ * Delete a user
361
+ */
362
+ deleteUser(params: {
363
+ InstanceId: string;
364
+ UserId: string;
365
+ }): Promise<void>;
366
+ /**
367
+ * List users
368
+ */
369
+ listUsers(params: {
370
+ InstanceId: string;
371
+ NextToken?: string;
372
+ MaxResults?: number;
373
+ }): Promise<{
374
+ UserSummaryList?: Array<{
375
+ Id?: string;
376
+ Arn?: string;
377
+ Username?: string;
378
+ }>;
379
+ NextToken?: string;
380
+ }>;
381
+ /**
382
+ * Create a prompt (audio file for IVR)
383
+ */
384
+ createPrompt(params: {
385
+ InstanceId: string;
386
+ Name: string;
387
+ S3Uri: string;
388
+ Description?: string;
389
+ Tags?: Record<string, string>;
390
+ }): Promise<{
391
+ PromptId?: string;
392
+ PromptArn?: string;
393
+ }>;
394
+ /**
395
+ * List prompts
396
+ */
397
+ listPrompts(params: {
398
+ InstanceId: string;
399
+ NextToken?: string;
400
+ MaxResults?: number;
401
+ }): Promise<{
402
+ PromptSummaryList?: Array<{
403
+ Id?: string;
404
+ Arn?: string;
405
+ Name?: string;
406
+ }>;
407
+ NextToken?: string;
408
+ }>;
409
+ /**
410
+ * Create a quick connect (for transfers)
411
+ */
412
+ createQuickConnect(params: {
413
+ InstanceId: string;
414
+ Name: string;
415
+ Description?: string;
416
+ QuickConnectConfig: {
417
+ QuickConnectType: 'USER' | 'QUEUE' | 'PHONE_NUMBER';
418
+ UserConfig?: {
419
+ UserId: string;
420
+ ContactFlowId: string;
421
+ };
422
+ QueueConfig?: {
423
+ QueueId: string;
424
+ ContactFlowId: string;
425
+ };
426
+ PhoneConfig?: {
427
+ PhoneNumber: string;
428
+ };
429
+ };
430
+ Tags?: Record<string, string>;
431
+ }): Promise<{
432
+ QuickConnectId?: string;
433
+ QuickConnectArn?: string;
434
+ }>;
435
+ /**
436
+ * Start a chat contact
437
+ */
438
+ startChatContact(params: {
439
+ InstanceId: string;
440
+ ContactFlowId: string;
441
+ ParticipantDetails: {
442
+ DisplayName: string;
443
+ };
444
+ Attributes?: Record<string, string>;
445
+ InitialMessage?: {
446
+ ContentType: string;
447
+ Content: string;
448
+ };
449
+ ClientToken?: string;
450
+ ChatDurationInMinutes?: number;
451
+ SupportedMessagingContentTypes?: string[];
452
+ }): Promise<{
453
+ ContactId?: string;
454
+ ParticipantId?: string;
455
+ ParticipantToken?: string;
456
+ }>;
457
+ /**
458
+ * Start a task contact
459
+ */
460
+ startTaskContact(params: {
461
+ InstanceId: string;
462
+ ContactFlowId?: string;
463
+ PreviousContactId?: string;
464
+ Attributes?: Record<string, string>;
465
+ Name: string;
466
+ Description?: string;
467
+ References?: Record<string, {
468
+ Value: string;
469
+ Type: 'URL' | 'ATTACHMENT' | 'NUMBER' | 'STRING' | 'DATE' | 'EMAIL';
470
+ }>;
471
+ ClientToken?: string;
472
+ ScheduledTime?: string;
473
+ TaskTemplateId?: string;
474
+ QuickConnectId?: string;
475
+ RelatedContactId?: string;
476
+ }): Promise<{
477
+ ContactId?: string;
478
+ }>;
479
+ /**
480
+ * Create a simple IVR contact flow for outbound calls
481
+ */
482
+ createOutboundIvrFlow(params: {
483
+ message: string;
484
+ voiceId?: string;
485
+ }): string;
486
+ /**
487
+ * Create a contact flow with input collection
488
+ */
489
+ createInputCollectionFlow(params: {
490
+ promptMessage: string;
491
+ inputTimeout?: number;
492
+ maxDigits?: number;
493
+ successNextAction?: string;
494
+ voiceId?: string;
495
+ }): string;
496
+ /**
497
+ * Get current metric data
498
+ */
499
+ getCurrentMetricData(params: {
500
+ InstanceId: string;
501
+ Filters: {
502
+ Queues?: string[];
503
+ Channels?: Array<'VOICE' | 'CHAT' | 'TASK'>;
504
+ RoutingProfiles?: string[];
505
+ };
506
+ CurrentMetrics: Array<{
507
+ Name: 'AGENTS_ONLINE' | 'AGENTS_AVAILABLE' | 'AGENTS_ON_CALL' | 'AGENTS_NON_PRODUCTIVE' | 'AGENTS_AFTER_CONTACT_WORK' | 'AGENTS_ERROR' | 'AGENTS_STAFFED' | 'CONTACTS_IN_QUEUE' | 'OLDEST_CONTACT_AGE' | 'CONTACTS_SCHEDULED' | 'AGENTS_ON_CONTACT' | 'SLOTS_ACTIVE' | 'SLOTS_AVAILABLE';
508
+ Unit?: 'SECONDS' | 'COUNT' | 'PERCENT';
509
+ }>;
510
+ Groupings?: Array<'QUEUE' | 'CHANNEL' | 'ROUTING_PROFILE'>;
511
+ MaxResults?: number;
512
+ NextToken?: string;
513
+ }): Promise<{
514
+ MetricResults?: Array<{
515
+ Dimensions?: {
516
+ Queue?: {
517
+ Id?: string;
518
+ Arn?: string;
519
+ };
520
+ Channel?: 'VOICE' | 'CHAT' | 'TASK';
521
+ };
522
+ Collections?: Array<{
523
+ Metric?: {
524
+ Name?: string;
525
+ Unit?: string;
526
+ };
527
+ Value?: number;
528
+ }>;
529
+ }>;
530
+ NextToken?: string;
531
+ ApproximateTotalCount?: number;
532
+ }>;
533
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Deploy IMAP-to-S3 bridge server to EC2 via SSM
4
+ * Embeds all code directly in SSM commands to avoid S3 permission issues
5
+ *
6
+ * Security:
7
+ * - Uses EC2 instance IAM role for AWS credentials (no hardcoded keys)
8
+ * - Fetches IMAP passwords from AWS Secrets Manager at startup
9
+ * - Secret name: stacks/mail-server/credentials
10
+ * - Credentials are read from email config and synced to Secrets Manager
11
+ */
12
+ export interface MailboxConfig {
13
+ email: string;
14
+ password?: string;
15
+ }
16
+ export interface MailServerDeployConfig {
17
+ instanceId: string;
18
+ region: string;
19
+ secretName: string;
20
+ domain: string;
21
+ bucket: string;
22
+ prefix: string;
23
+ /** Mailboxes can be simple strings or objects with optional passwords */
24
+ mailboxes: Array<string | MailboxConfig>;
25
+ }
26
+ export declare function deployImapServer(config?: MailServerDeployConfig): Promise<void>;