effortless-aws 0.14.3 → 0.16.0

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/dist/cli/index.js CHANGED
@@ -69209,6 +69209,7 @@ __export(clients_exports, {
69209
69209
  makeClients: () => makeClients,
69210
69210
  resource_groups_tagging_api: () => resource_groups_tagging_api_exports,
69211
69211
  s3: () => s3_exports,
69212
+ sesv2: () => sesv2_exports,
69212
69213
  sqs: () => sqs_exports,
69213
69214
  ssm: () => ssm_exports
69214
69215
  });
@@ -70472,30 +70473,188 @@ var S3CommandFactory = {
70472
70473
  write_get_object_response: Sdk9.WriteGetObjectResponseCommand
70473
70474
  };
70474
70475
 
70476
+ // src/aws/clients/sesv2.ts
70477
+ var sesv2_exports = {};
70478
+ __export(sesv2_exports, {
70479
+ SESv2Client: () => SESv2Client2,
70480
+ SESv2Error: () => SESv2Error,
70481
+ make: () => make77
70482
+ });
70483
+ import * as Sdk10 from "@aws-sdk/client-sesv2";
70484
+ var SESv2Client2 = class _SESv2Client extends Tag2("SESv2Client")() {
70485
+ static Default = (config2) => effect(
70486
+ _SESv2Client,
70487
+ gen3(function* () {
70488
+ return new Sdk10.SESv2Client(config2 ?? {});
70489
+ })
70490
+ );
70491
+ };
70492
+ var make77 = fn("aws_SESv2")(function* (actionName, actionInput) {
70493
+ yield* logDebug2(`aws_SESv2.${actionName}`, { input: actionInput });
70494
+ const client = yield* SESv2Client2;
70495
+ const command = new SESv2CommandFactory[actionName](actionInput);
70496
+ const result = yield* tryPromise2({
70497
+ try: () => client.send(command),
70498
+ catch: (error4) => {
70499
+ if (error4 instanceof Sdk10.SESv2ServiceException) {
70500
+ return new SESv2Error(error4, actionName);
70501
+ }
70502
+ throw error4;
70503
+ }
70504
+ });
70505
+ yield* logDebug2(`aws_SESv2.${actionName} completed`);
70506
+ return result;
70507
+ });
70508
+ var SESv2Error = class {
70509
+ constructor(cause3, command) {
70510
+ this.cause = cause3;
70511
+ this.command = command;
70512
+ }
70513
+ _tag = "SESv2Error";
70514
+ $is(name) {
70515
+ return this.cause.name == name;
70516
+ }
70517
+ is(name) {
70518
+ return this.cause.name == name;
70519
+ }
70520
+ };
70521
+ var SESv2CommandFactory = {
70522
+ batch_get_metric_data: Sdk10.BatchGetMetricDataCommand,
70523
+ cancel_export_job: Sdk10.CancelExportJobCommand,
70524
+ create_configuration_set: Sdk10.CreateConfigurationSetCommand,
70525
+ create_configuration_set_event_destination: Sdk10.CreateConfigurationSetEventDestinationCommand,
70526
+ create_contact: Sdk10.CreateContactCommand,
70527
+ create_contact_list: Sdk10.CreateContactListCommand,
70528
+ create_custom_verification_email_template: Sdk10.CreateCustomVerificationEmailTemplateCommand,
70529
+ create_dedicated_ip_pool: Sdk10.CreateDedicatedIpPoolCommand,
70530
+ create_deliverability_test_report: Sdk10.CreateDeliverabilityTestReportCommand,
70531
+ create_email_identity: Sdk10.CreateEmailIdentityCommand,
70532
+ create_email_identity_policy: Sdk10.CreateEmailIdentityPolicyCommand,
70533
+ create_email_template: Sdk10.CreateEmailTemplateCommand,
70534
+ create_export_job: Sdk10.CreateExportJobCommand,
70535
+ create_import_job: Sdk10.CreateImportJobCommand,
70536
+ create_multi_region_endpoint: Sdk10.CreateMultiRegionEndpointCommand,
70537
+ create_tenant: Sdk10.CreateTenantCommand,
70538
+ create_tenant_resource_association: Sdk10.CreateTenantResourceAssociationCommand,
70539
+ delete_configuration_set: Sdk10.DeleteConfigurationSetCommand,
70540
+ delete_configuration_set_event_destination: Sdk10.DeleteConfigurationSetEventDestinationCommand,
70541
+ delete_contact: Sdk10.DeleteContactCommand,
70542
+ delete_contact_list: Sdk10.DeleteContactListCommand,
70543
+ delete_custom_verification_email_template: Sdk10.DeleteCustomVerificationEmailTemplateCommand,
70544
+ delete_dedicated_ip_pool: Sdk10.DeleteDedicatedIpPoolCommand,
70545
+ delete_email_identity: Sdk10.DeleteEmailIdentityCommand,
70546
+ delete_email_identity_policy: Sdk10.DeleteEmailIdentityPolicyCommand,
70547
+ delete_email_template: Sdk10.DeleteEmailTemplateCommand,
70548
+ delete_multi_region_endpoint: Sdk10.DeleteMultiRegionEndpointCommand,
70549
+ delete_suppressed_destination: Sdk10.DeleteSuppressedDestinationCommand,
70550
+ delete_tenant: Sdk10.DeleteTenantCommand,
70551
+ delete_tenant_resource_association: Sdk10.DeleteTenantResourceAssociationCommand,
70552
+ get_account: Sdk10.GetAccountCommand,
70553
+ get_blacklist_reports: Sdk10.GetBlacklistReportsCommand,
70554
+ get_configuration_set: Sdk10.GetConfigurationSetCommand,
70555
+ get_configuration_set_event_destinations: Sdk10.GetConfigurationSetEventDestinationsCommand,
70556
+ get_contact: Sdk10.GetContactCommand,
70557
+ get_contact_list: Sdk10.GetContactListCommand,
70558
+ get_custom_verification_email_template: Sdk10.GetCustomVerificationEmailTemplateCommand,
70559
+ get_dedicated_ip: Sdk10.GetDedicatedIpCommand,
70560
+ get_dedicated_ip_pool: Sdk10.GetDedicatedIpPoolCommand,
70561
+ get_dedicated_ips: Sdk10.GetDedicatedIpsCommand,
70562
+ get_deliverability_dashboard_options: Sdk10.GetDeliverabilityDashboardOptionsCommand,
70563
+ get_deliverability_test_report: Sdk10.GetDeliverabilityTestReportCommand,
70564
+ get_domain_deliverability_campaign: Sdk10.GetDomainDeliverabilityCampaignCommand,
70565
+ get_domain_statistics_report: Sdk10.GetDomainStatisticsReportCommand,
70566
+ get_email_address_insights: Sdk10.GetEmailAddressInsightsCommand,
70567
+ get_email_identity: Sdk10.GetEmailIdentityCommand,
70568
+ get_email_identity_policies: Sdk10.GetEmailIdentityPoliciesCommand,
70569
+ get_email_template: Sdk10.GetEmailTemplateCommand,
70570
+ get_export_job: Sdk10.GetExportJobCommand,
70571
+ get_import_job: Sdk10.GetImportJobCommand,
70572
+ get_message_insights: Sdk10.GetMessageInsightsCommand,
70573
+ get_multi_region_endpoint: Sdk10.GetMultiRegionEndpointCommand,
70574
+ get_reputation_entity: Sdk10.GetReputationEntityCommand,
70575
+ get_suppressed_destination: Sdk10.GetSuppressedDestinationCommand,
70576
+ get_tenant: Sdk10.GetTenantCommand,
70577
+ list_configuration_sets: Sdk10.ListConfigurationSetsCommand,
70578
+ list_contact_lists: Sdk10.ListContactListsCommand,
70579
+ list_contacts: Sdk10.ListContactsCommand,
70580
+ list_custom_verification_email_templates: Sdk10.ListCustomVerificationEmailTemplatesCommand,
70581
+ list_dedicated_ip_pools: Sdk10.ListDedicatedIpPoolsCommand,
70582
+ list_deliverability_test_reports: Sdk10.ListDeliverabilityTestReportsCommand,
70583
+ list_domain_deliverability_campaigns: Sdk10.ListDomainDeliverabilityCampaignsCommand,
70584
+ list_email_identities: Sdk10.ListEmailIdentitiesCommand,
70585
+ list_email_templates: Sdk10.ListEmailTemplatesCommand,
70586
+ list_export_jobs: Sdk10.ListExportJobsCommand,
70587
+ list_import_jobs: Sdk10.ListImportJobsCommand,
70588
+ list_multi_region_endpoints: Sdk10.ListMultiRegionEndpointsCommand,
70589
+ list_recommendations: Sdk10.ListRecommendationsCommand,
70590
+ list_reputation_entities: Sdk10.ListReputationEntitiesCommand,
70591
+ list_resource_tenants: Sdk10.ListResourceTenantsCommand,
70592
+ list_suppressed_destinations: Sdk10.ListSuppressedDestinationsCommand,
70593
+ list_tags_for_resource: Sdk10.ListTagsForResourceCommand,
70594
+ list_tenant_resources: Sdk10.ListTenantResourcesCommand,
70595
+ list_tenants: Sdk10.ListTenantsCommand,
70596
+ put_account_dedicated_ip_warmup_attributes: Sdk10.PutAccountDedicatedIpWarmupAttributesCommand,
70597
+ put_account_details: Sdk10.PutAccountDetailsCommand,
70598
+ put_account_sending_attributes: Sdk10.PutAccountSendingAttributesCommand,
70599
+ put_account_suppression_attributes: Sdk10.PutAccountSuppressionAttributesCommand,
70600
+ put_account_vdm_attributes: Sdk10.PutAccountVdmAttributesCommand,
70601
+ put_configuration_set_archiving_options: Sdk10.PutConfigurationSetArchivingOptionsCommand,
70602
+ put_configuration_set_delivery_options: Sdk10.PutConfigurationSetDeliveryOptionsCommand,
70603
+ put_configuration_set_reputation_options: Sdk10.PutConfigurationSetReputationOptionsCommand,
70604
+ put_configuration_set_sending_options: Sdk10.PutConfigurationSetSendingOptionsCommand,
70605
+ put_configuration_set_suppression_options: Sdk10.PutConfigurationSetSuppressionOptionsCommand,
70606
+ put_configuration_set_tracking_options: Sdk10.PutConfigurationSetTrackingOptionsCommand,
70607
+ put_configuration_set_vdm_options: Sdk10.PutConfigurationSetVdmOptionsCommand,
70608
+ put_dedicated_ip_in_pool: Sdk10.PutDedicatedIpInPoolCommand,
70609
+ put_dedicated_ip_pool_scaling_attributes: Sdk10.PutDedicatedIpPoolScalingAttributesCommand,
70610
+ put_dedicated_ip_warmup_attributes: Sdk10.PutDedicatedIpWarmupAttributesCommand,
70611
+ put_deliverability_dashboard_option: Sdk10.PutDeliverabilityDashboardOptionCommand,
70612
+ put_email_identity_configuration_set_attributes: Sdk10.PutEmailIdentityConfigurationSetAttributesCommand,
70613
+ put_email_identity_dkim_attributes: Sdk10.PutEmailIdentityDkimAttributesCommand,
70614
+ put_email_identity_dkim_signing_attributes: Sdk10.PutEmailIdentityDkimSigningAttributesCommand,
70615
+ put_email_identity_feedback_attributes: Sdk10.PutEmailIdentityFeedbackAttributesCommand,
70616
+ put_email_identity_mail_from_attributes: Sdk10.PutEmailIdentityMailFromAttributesCommand,
70617
+ put_suppressed_destination: Sdk10.PutSuppressedDestinationCommand,
70618
+ send_bulk_email: Sdk10.SendBulkEmailCommand,
70619
+ send_custom_verification_email: Sdk10.SendCustomVerificationEmailCommand,
70620
+ send_email: Sdk10.SendEmailCommand,
70621
+ tag_resource: Sdk10.TagResourceCommand,
70622
+ test_render_email_template: Sdk10.TestRenderEmailTemplateCommand,
70623
+ untag_resource: Sdk10.UntagResourceCommand,
70624
+ update_configuration_set_event_destination: Sdk10.UpdateConfigurationSetEventDestinationCommand,
70625
+ update_contact: Sdk10.UpdateContactCommand,
70626
+ update_contact_list: Sdk10.UpdateContactListCommand,
70627
+ update_custom_verification_email_template: Sdk10.UpdateCustomVerificationEmailTemplateCommand,
70628
+ update_email_identity_policy: Sdk10.UpdateEmailIdentityPolicyCommand,
70629
+ update_email_template: Sdk10.UpdateEmailTemplateCommand,
70630
+ update_reputation_entity_customer_managed_status: Sdk10.UpdateReputationEntityCustomerManagedStatusCommand,
70631
+ update_reputation_entity_policy: Sdk10.UpdateReputationEntityPolicyCommand
70632
+ };
70633
+
70475
70634
  // src/aws/clients/sqs.ts
70476
70635
  var sqs_exports = {};
70477
70636
  __export(sqs_exports, {
70478
70637
  SQSClient: () => SQSClient2,
70479
70638
  SQSError: () => SQSError,
70480
- make: () => make77
70639
+ make: () => make78
70481
70640
  });
70482
- import * as Sdk10 from "@aws-sdk/client-sqs";
70641
+ import * as Sdk11 from "@aws-sdk/client-sqs";
70483
70642
  var SQSClient2 = class _SQSClient extends Tag2("SQSClient")() {
70484
70643
  static Default = (config2) => effect(
70485
70644
  _SQSClient,
70486
70645
  gen3(function* () {
70487
- return new Sdk10.SQSClient(config2 ?? {});
70646
+ return new Sdk11.SQSClient(config2 ?? {});
70488
70647
  })
70489
70648
  );
70490
70649
  };
70491
- var make77 = fn("aws_SQS")(function* (actionName, actionInput) {
70650
+ var make78 = fn("aws_SQS")(function* (actionName, actionInput) {
70492
70651
  yield* logDebug2(`aws_SQS.${actionName}`, { input: actionInput });
70493
70652
  const client = yield* SQSClient2;
70494
70653
  const command = new SQSCommandFactory[actionName](actionInput);
70495
70654
  const result = yield* tryPromise2({
70496
70655
  try: () => client.send(command),
70497
70656
  catch: (error4) => {
70498
- if (error4 instanceof Sdk10.SQSServiceException) {
70657
+ if (error4 instanceof Sdk11.SQSServiceException) {
70499
70658
  return new SQSError(error4, actionName);
70500
70659
  }
70501
70660
  throw error4;
@@ -70518,29 +70677,29 @@ var SQSError = class {
70518
70677
  }
70519
70678
  };
70520
70679
  var SQSCommandFactory = {
70521
- add_permission: Sdk10.AddPermissionCommand,
70522
- cancel_message_move_task: Sdk10.CancelMessageMoveTaskCommand,
70523
- change_message_visibility: Sdk10.ChangeMessageVisibilityCommand,
70524
- change_message_visibility_batch: Sdk10.ChangeMessageVisibilityBatchCommand,
70525
- create_queue: Sdk10.CreateQueueCommand,
70526
- delete_message: Sdk10.DeleteMessageCommand,
70527
- delete_message_batch: Sdk10.DeleteMessageBatchCommand,
70528
- delete_queue: Sdk10.DeleteQueueCommand,
70529
- get_queue_attributes: Sdk10.GetQueueAttributesCommand,
70530
- get_queue_url: Sdk10.GetQueueUrlCommand,
70531
- list_dead_letter_source_queues: Sdk10.ListDeadLetterSourceQueuesCommand,
70532
- list_message_move_tasks: Sdk10.ListMessageMoveTasksCommand,
70533
- list_queue_tags: Sdk10.ListQueueTagsCommand,
70534
- list_queues: Sdk10.ListQueuesCommand,
70535
- purge_queue: Sdk10.PurgeQueueCommand,
70536
- receive_message: Sdk10.ReceiveMessageCommand,
70537
- remove_permission: Sdk10.RemovePermissionCommand,
70538
- send_message: Sdk10.SendMessageCommand,
70539
- send_message_batch: Sdk10.SendMessageBatchCommand,
70540
- set_queue_attributes: Sdk10.SetQueueAttributesCommand,
70541
- start_message_move_task: Sdk10.StartMessageMoveTaskCommand,
70542
- tag_queue: Sdk10.TagQueueCommand,
70543
- untag_queue: Sdk10.UntagQueueCommand
70680
+ add_permission: Sdk11.AddPermissionCommand,
70681
+ cancel_message_move_task: Sdk11.CancelMessageMoveTaskCommand,
70682
+ change_message_visibility: Sdk11.ChangeMessageVisibilityCommand,
70683
+ change_message_visibility_batch: Sdk11.ChangeMessageVisibilityBatchCommand,
70684
+ create_queue: Sdk11.CreateQueueCommand,
70685
+ delete_message: Sdk11.DeleteMessageCommand,
70686
+ delete_message_batch: Sdk11.DeleteMessageBatchCommand,
70687
+ delete_queue: Sdk11.DeleteQueueCommand,
70688
+ get_queue_attributes: Sdk11.GetQueueAttributesCommand,
70689
+ get_queue_url: Sdk11.GetQueueUrlCommand,
70690
+ list_dead_letter_source_queues: Sdk11.ListDeadLetterSourceQueuesCommand,
70691
+ list_message_move_tasks: Sdk11.ListMessageMoveTasksCommand,
70692
+ list_queue_tags: Sdk11.ListQueueTagsCommand,
70693
+ list_queues: Sdk11.ListQueuesCommand,
70694
+ purge_queue: Sdk11.PurgeQueueCommand,
70695
+ receive_message: Sdk11.ReceiveMessageCommand,
70696
+ remove_permission: Sdk11.RemovePermissionCommand,
70697
+ send_message: Sdk11.SendMessageCommand,
70698
+ send_message_batch: Sdk11.SendMessageBatchCommand,
70699
+ set_queue_attributes: Sdk11.SetQueueAttributesCommand,
70700
+ start_message_move_task: Sdk11.StartMessageMoveTaskCommand,
70701
+ tag_queue: Sdk11.TagQueueCommand,
70702
+ untag_queue: Sdk11.UntagQueueCommand
70544
70703
  };
70545
70704
 
70546
70705
  // src/aws/clients/ssm.ts
@@ -70548,25 +70707,25 @@ var ssm_exports = {};
70548
70707
  __export(ssm_exports, {
70549
70708
  SSMClient: () => SSMClient2,
70550
70709
  SSMError: () => SSMError,
70551
- make: () => make78
70710
+ make: () => make79
70552
70711
  });
70553
- import * as Sdk11 from "@aws-sdk/client-ssm";
70712
+ import * as Sdk12 from "@aws-sdk/client-ssm";
70554
70713
  var SSMClient2 = class _SSMClient extends Tag2("SSMClient")() {
70555
70714
  static Default = (config2) => effect(
70556
70715
  _SSMClient,
70557
70716
  gen3(function* () {
70558
- return new Sdk11.SSMClient(config2 ?? {});
70717
+ return new Sdk12.SSMClient(config2 ?? {});
70559
70718
  })
70560
70719
  );
70561
70720
  };
70562
- var make78 = fn("aws_SSM")(function* (actionName, actionInput) {
70721
+ var make79 = fn("aws_SSM")(function* (actionName, actionInput) {
70563
70722
  yield* logDebug2(`aws_SSM.${actionName}`, { input: actionInput });
70564
70723
  const client = yield* SSMClient2;
70565
70724
  const command = new SSMCommandFactory[actionName](actionInput);
70566
70725
  const result = yield* tryPromise2({
70567
70726
  try: () => client.send(command),
70568
70727
  catch: (error4) => {
70569
- if (error4 instanceof Sdk11.SSMServiceException) {
70728
+ if (error4 instanceof Sdk12.SSMServiceException) {
70570
70729
  return new SSMError(error4, actionName);
70571
70730
  }
70572
70731
  throw error4;
@@ -70589,152 +70748,152 @@ var SSMError = class {
70589
70748
  }
70590
70749
  };
70591
70750
  var SSMCommandFactory = {
70592
- add_tags_to_resource: Sdk11.AddTagsToResourceCommand,
70593
- associate_ops_item_related_item: Sdk11.AssociateOpsItemRelatedItemCommand,
70594
- cancel_command: Sdk11.CancelCommandCommand,
70595
- cancel_maintenance_window_execution: Sdk11.CancelMaintenanceWindowExecutionCommand,
70596
- create_activation: Sdk11.CreateActivationCommand,
70597
- create_association: Sdk11.CreateAssociationCommand,
70598
- create_association_batch: Sdk11.CreateAssociationBatchCommand,
70599
- create_document: Sdk11.CreateDocumentCommand,
70600
- create_maintenance_window: Sdk11.CreateMaintenanceWindowCommand,
70601
- create_ops_item: Sdk11.CreateOpsItemCommand,
70602
- create_ops_metadata: Sdk11.CreateOpsMetadataCommand,
70603
- create_patch_baseline: Sdk11.CreatePatchBaselineCommand,
70604
- create_resource_data_sync: Sdk11.CreateResourceDataSyncCommand,
70605
- delete_activation: Sdk11.DeleteActivationCommand,
70606
- delete_association: Sdk11.DeleteAssociationCommand,
70607
- delete_document: Sdk11.DeleteDocumentCommand,
70608
- delete_inventory: Sdk11.DeleteInventoryCommand,
70609
- delete_maintenance_window: Sdk11.DeleteMaintenanceWindowCommand,
70610
- delete_ops_item: Sdk11.DeleteOpsItemCommand,
70611
- delete_ops_metadata: Sdk11.DeleteOpsMetadataCommand,
70612
- delete_parameter: Sdk11.DeleteParameterCommand,
70613
- delete_parameters: Sdk11.DeleteParametersCommand,
70614
- delete_patch_baseline: Sdk11.DeletePatchBaselineCommand,
70615
- delete_resource_data_sync: Sdk11.DeleteResourceDataSyncCommand,
70616
- delete_resource_policy: Sdk11.DeleteResourcePolicyCommand,
70617
- deregister_managed_instance: Sdk11.DeregisterManagedInstanceCommand,
70618
- deregister_patch_baseline_for_patch_group: Sdk11.DeregisterPatchBaselineForPatchGroupCommand,
70619
- deregister_target_from_maintenance_window: Sdk11.DeregisterTargetFromMaintenanceWindowCommand,
70620
- deregister_task_from_maintenance_window: Sdk11.DeregisterTaskFromMaintenanceWindowCommand,
70621
- describe_activations: Sdk11.DescribeActivationsCommand,
70622
- describe_association: Sdk11.DescribeAssociationCommand,
70623
- describe_association_execution_targets: Sdk11.DescribeAssociationExecutionTargetsCommand,
70624
- describe_association_executions: Sdk11.DescribeAssociationExecutionsCommand,
70625
- describe_automation_executions: Sdk11.DescribeAutomationExecutionsCommand,
70626
- describe_automation_step_executions: Sdk11.DescribeAutomationStepExecutionsCommand,
70627
- describe_available_patches: Sdk11.DescribeAvailablePatchesCommand,
70628
- describe_document: Sdk11.DescribeDocumentCommand,
70629
- describe_document_permission: Sdk11.DescribeDocumentPermissionCommand,
70630
- describe_effective_instance_associations: Sdk11.DescribeEffectiveInstanceAssociationsCommand,
70631
- describe_effective_patches_for_patch_baseline: Sdk11.DescribeEffectivePatchesForPatchBaselineCommand,
70632
- describe_instance_associations_status: Sdk11.DescribeInstanceAssociationsStatusCommand,
70633
- describe_instance_information: Sdk11.DescribeInstanceInformationCommand,
70634
- describe_instance_patch_states: Sdk11.DescribeInstancePatchStatesCommand,
70635
- describe_instance_patch_states_for_patch_group: Sdk11.DescribeInstancePatchStatesForPatchGroupCommand,
70636
- describe_instance_patches: Sdk11.DescribeInstancePatchesCommand,
70637
- describe_instance_properties: Sdk11.DescribeInstancePropertiesCommand,
70638
- describe_inventory_deletions: Sdk11.DescribeInventoryDeletionsCommand,
70639
- describe_maintenance_window_execution_task_invocations: Sdk11.DescribeMaintenanceWindowExecutionTaskInvocationsCommand,
70640
- describe_maintenance_window_execution_tasks: Sdk11.DescribeMaintenanceWindowExecutionTasksCommand,
70641
- describe_maintenance_window_executions: Sdk11.DescribeMaintenanceWindowExecutionsCommand,
70642
- describe_maintenance_window_schedule: Sdk11.DescribeMaintenanceWindowScheduleCommand,
70643
- describe_maintenance_window_targets: Sdk11.DescribeMaintenanceWindowTargetsCommand,
70644
- describe_maintenance_window_tasks: Sdk11.DescribeMaintenanceWindowTasksCommand,
70645
- describe_maintenance_windows: Sdk11.DescribeMaintenanceWindowsCommand,
70646
- describe_maintenance_windows_for_target: Sdk11.DescribeMaintenanceWindowsForTargetCommand,
70647
- describe_ops_items: Sdk11.DescribeOpsItemsCommand,
70648
- describe_parameters: Sdk11.DescribeParametersCommand,
70649
- describe_patch_baselines: Sdk11.DescribePatchBaselinesCommand,
70650
- describe_patch_group_state: Sdk11.DescribePatchGroupStateCommand,
70651
- describe_patch_groups: Sdk11.DescribePatchGroupsCommand,
70652
- describe_patch_properties: Sdk11.DescribePatchPropertiesCommand,
70653
- describe_sessions: Sdk11.DescribeSessionsCommand,
70654
- disassociate_ops_item_related_item: Sdk11.DisassociateOpsItemRelatedItemCommand,
70655
- get_access_token: Sdk11.GetAccessTokenCommand,
70656
- get_automation_execution: Sdk11.GetAutomationExecutionCommand,
70657
- get_calendar_state: Sdk11.GetCalendarStateCommand,
70658
- get_command_invocation: Sdk11.GetCommandInvocationCommand,
70659
- get_connection_status: Sdk11.GetConnectionStatusCommand,
70660
- get_default_patch_baseline: Sdk11.GetDefaultPatchBaselineCommand,
70661
- get_deployable_patch_snapshot_for_instance: Sdk11.GetDeployablePatchSnapshotForInstanceCommand,
70662
- get_document: Sdk11.GetDocumentCommand,
70663
- get_execution_preview: Sdk11.GetExecutionPreviewCommand,
70664
- get_inventory: Sdk11.GetInventoryCommand,
70665
- get_inventory_schema: Sdk11.GetInventorySchemaCommand,
70666
- get_maintenance_window: Sdk11.GetMaintenanceWindowCommand,
70667
- get_maintenance_window_execution: Sdk11.GetMaintenanceWindowExecutionCommand,
70668
- get_maintenance_window_execution_task: Sdk11.GetMaintenanceWindowExecutionTaskCommand,
70669
- get_maintenance_window_execution_task_invocation: Sdk11.GetMaintenanceWindowExecutionTaskInvocationCommand,
70670
- get_maintenance_window_task: Sdk11.GetMaintenanceWindowTaskCommand,
70671
- get_ops_item: Sdk11.GetOpsItemCommand,
70672
- get_ops_metadata: Sdk11.GetOpsMetadataCommand,
70673
- get_ops_summary: Sdk11.GetOpsSummaryCommand,
70674
- get_parameter: Sdk11.GetParameterCommand,
70675
- get_parameter_history: Sdk11.GetParameterHistoryCommand,
70676
- get_parameters: Sdk11.GetParametersCommand,
70677
- get_parameters_by_path: Sdk11.GetParametersByPathCommand,
70678
- get_patch_baseline: Sdk11.GetPatchBaselineCommand,
70679
- get_patch_baseline_for_patch_group: Sdk11.GetPatchBaselineForPatchGroupCommand,
70680
- get_resource_policies: Sdk11.GetResourcePoliciesCommand,
70681
- get_service_setting: Sdk11.GetServiceSettingCommand,
70682
- label_parameter_version: Sdk11.LabelParameterVersionCommand,
70683
- list_association_versions: Sdk11.ListAssociationVersionsCommand,
70684
- list_associations: Sdk11.ListAssociationsCommand,
70685
- list_command_invocations: Sdk11.ListCommandInvocationsCommand,
70686
- list_commands: Sdk11.ListCommandsCommand,
70687
- list_compliance_items: Sdk11.ListComplianceItemsCommand,
70688
- list_compliance_summaries: Sdk11.ListComplianceSummariesCommand,
70689
- list_document_metadata_history: Sdk11.ListDocumentMetadataHistoryCommand,
70690
- list_document_versions: Sdk11.ListDocumentVersionsCommand,
70691
- list_documents: Sdk11.ListDocumentsCommand,
70692
- list_inventory_entries: Sdk11.ListInventoryEntriesCommand,
70693
- list_nodes: Sdk11.ListNodesCommand,
70694
- list_nodes_summary: Sdk11.ListNodesSummaryCommand,
70695
- list_ops_item_events: Sdk11.ListOpsItemEventsCommand,
70696
- list_ops_item_related_items: Sdk11.ListOpsItemRelatedItemsCommand,
70697
- list_ops_metadata: Sdk11.ListOpsMetadataCommand,
70698
- list_resource_compliance_summaries: Sdk11.ListResourceComplianceSummariesCommand,
70699
- list_resource_data_sync: Sdk11.ListResourceDataSyncCommand,
70700
- list_tags_for_resource: Sdk11.ListTagsForResourceCommand,
70701
- modify_document_permission: Sdk11.ModifyDocumentPermissionCommand,
70702
- put_compliance_items: Sdk11.PutComplianceItemsCommand,
70703
- put_inventory: Sdk11.PutInventoryCommand,
70704
- put_parameter: Sdk11.PutParameterCommand,
70705
- put_resource_policy: Sdk11.PutResourcePolicyCommand,
70706
- register_default_patch_baseline: Sdk11.RegisterDefaultPatchBaselineCommand,
70707
- register_patch_baseline_for_patch_group: Sdk11.RegisterPatchBaselineForPatchGroupCommand,
70708
- register_target_with_maintenance_window: Sdk11.RegisterTargetWithMaintenanceWindowCommand,
70709
- register_task_with_maintenance_window: Sdk11.RegisterTaskWithMaintenanceWindowCommand,
70710
- remove_tags_from_resource: Sdk11.RemoveTagsFromResourceCommand,
70711
- reset_service_setting: Sdk11.ResetServiceSettingCommand,
70712
- resume_session: Sdk11.ResumeSessionCommand,
70713
- send_automation_signal: Sdk11.SendAutomationSignalCommand,
70714
- send_command: Sdk11.SendCommandCommand,
70715
- start_access_request: Sdk11.StartAccessRequestCommand,
70716
- start_associations_once: Sdk11.StartAssociationsOnceCommand,
70717
- start_automation_execution: Sdk11.StartAutomationExecutionCommand,
70718
- start_change_request_execution: Sdk11.StartChangeRequestExecutionCommand,
70719
- start_execution_preview: Sdk11.StartExecutionPreviewCommand,
70720
- start_session: Sdk11.StartSessionCommand,
70721
- stop_automation_execution: Sdk11.StopAutomationExecutionCommand,
70722
- terminate_session: Sdk11.TerminateSessionCommand,
70723
- unlabel_parameter_version: Sdk11.UnlabelParameterVersionCommand,
70724
- update_association: Sdk11.UpdateAssociationCommand,
70725
- update_association_status: Sdk11.UpdateAssociationStatusCommand,
70726
- update_document: Sdk11.UpdateDocumentCommand,
70727
- update_document_default_version: Sdk11.UpdateDocumentDefaultVersionCommand,
70728
- update_document_metadata: Sdk11.UpdateDocumentMetadataCommand,
70729
- update_maintenance_window: Sdk11.UpdateMaintenanceWindowCommand,
70730
- update_maintenance_window_target: Sdk11.UpdateMaintenanceWindowTargetCommand,
70731
- update_maintenance_window_task: Sdk11.UpdateMaintenanceWindowTaskCommand,
70732
- update_managed_instance_role: Sdk11.UpdateManagedInstanceRoleCommand,
70733
- update_ops_item: Sdk11.UpdateOpsItemCommand,
70734
- update_ops_metadata: Sdk11.UpdateOpsMetadataCommand,
70735
- update_patch_baseline: Sdk11.UpdatePatchBaselineCommand,
70736
- update_resource_data_sync: Sdk11.UpdateResourceDataSyncCommand,
70737
- update_service_setting: Sdk11.UpdateServiceSettingCommand
70751
+ add_tags_to_resource: Sdk12.AddTagsToResourceCommand,
70752
+ associate_ops_item_related_item: Sdk12.AssociateOpsItemRelatedItemCommand,
70753
+ cancel_command: Sdk12.CancelCommandCommand,
70754
+ cancel_maintenance_window_execution: Sdk12.CancelMaintenanceWindowExecutionCommand,
70755
+ create_activation: Sdk12.CreateActivationCommand,
70756
+ create_association: Sdk12.CreateAssociationCommand,
70757
+ create_association_batch: Sdk12.CreateAssociationBatchCommand,
70758
+ create_document: Sdk12.CreateDocumentCommand,
70759
+ create_maintenance_window: Sdk12.CreateMaintenanceWindowCommand,
70760
+ create_ops_item: Sdk12.CreateOpsItemCommand,
70761
+ create_ops_metadata: Sdk12.CreateOpsMetadataCommand,
70762
+ create_patch_baseline: Sdk12.CreatePatchBaselineCommand,
70763
+ create_resource_data_sync: Sdk12.CreateResourceDataSyncCommand,
70764
+ delete_activation: Sdk12.DeleteActivationCommand,
70765
+ delete_association: Sdk12.DeleteAssociationCommand,
70766
+ delete_document: Sdk12.DeleteDocumentCommand,
70767
+ delete_inventory: Sdk12.DeleteInventoryCommand,
70768
+ delete_maintenance_window: Sdk12.DeleteMaintenanceWindowCommand,
70769
+ delete_ops_item: Sdk12.DeleteOpsItemCommand,
70770
+ delete_ops_metadata: Sdk12.DeleteOpsMetadataCommand,
70771
+ delete_parameter: Sdk12.DeleteParameterCommand,
70772
+ delete_parameters: Sdk12.DeleteParametersCommand,
70773
+ delete_patch_baseline: Sdk12.DeletePatchBaselineCommand,
70774
+ delete_resource_data_sync: Sdk12.DeleteResourceDataSyncCommand,
70775
+ delete_resource_policy: Sdk12.DeleteResourcePolicyCommand,
70776
+ deregister_managed_instance: Sdk12.DeregisterManagedInstanceCommand,
70777
+ deregister_patch_baseline_for_patch_group: Sdk12.DeregisterPatchBaselineForPatchGroupCommand,
70778
+ deregister_target_from_maintenance_window: Sdk12.DeregisterTargetFromMaintenanceWindowCommand,
70779
+ deregister_task_from_maintenance_window: Sdk12.DeregisterTaskFromMaintenanceWindowCommand,
70780
+ describe_activations: Sdk12.DescribeActivationsCommand,
70781
+ describe_association: Sdk12.DescribeAssociationCommand,
70782
+ describe_association_execution_targets: Sdk12.DescribeAssociationExecutionTargetsCommand,
70783
+ describe_association_executions: Sdk12.DescribeAssociationExecutionsCommand,
70784
+ describe_automation_executions: Sdk12.DescribeAutomationExecutionsCommand,
70785
+ describe_automation_step_executions: Sdk12.DescribeAutomationStepExecutionsCommand,
70786
+ describe_available_patches: Sdk12.DescribeAvailablePatchesCommand,
70787
+ describe_document: Sdk12.DescribeDocumentCommand,
70788
+ describe_document_permission: Sdk12.DescribeDocumentPermissionCommand,
70789
+ describe_effective_instance_associations: Sdk12.DescribeEffectiveInstanceAssociationsCommand,
70790
+ describe_effective_patches_for_patch_baseline: Sdk12.DescribeEffectivePatchesForPatchBaselineCommand,
70791
+ describe_instance_associations_status: Sdk12.DescribeInstanceAssociationsStatusCommand,
70792
+ describe_instance_information: Sdk12.DescribeInstanceInformationCommand,
70793
+ describe_instance_patch_states: Sdk12.DescribeInstancePatchStatesCommand,
70794
+ describe_instance_patch_states_for_patch_group: Sdk12.DescribeInstancePatchStatesForPatchGroupCommand,
70795
+ describe_instance_patches: Sdk12.DescribeInstancePatchesCommand,
70796
+ describe_instance_properties: Sdk12.DescribeInstancePropertiesCommand,
70797
+ describe_inventory_deletions: Sdk12.DescribeInventoryDeletionsCommand,
70798
+ describe_maintenance_window_execution_task_invocations: Sdk12.DescribeMaintenanceWindowExecutionTaskInvocationsCommand,
70799
+ describe_maintenance_window_execution_tasks: Sdk12.DescribeMaintenanceWindowExecutionTasksCommand,
70800
+ describe_maintenance_window_executions: Sdk12.DescribeMaintenanceWindowExecutionsCommand,
70801
+ describe_maintenance_window_schedule: Sdk12.DescribeMaintenanceWindowScheduleCommand,
70802
+ describe_maintenance_window_targets: Sdk12.DescribeMaintenanceWindowTargetsCommand,
70803
+ describe_maintenance_window_tasks: Sdk12.DescribeMaintenanceWindowTasksCommand,
70804
+ describe_maintenance_windows: Sdk12.DescribeMaintenanceWindowsCommand,
70805
+ describe_maintenance_windows_for_target: Sdk12.DescribeMaintenanceWindowsForTargetCommand,
70806
+ describe_ops_items: Sdk12.DescribeOpsItemsCommand,
70807
+ describe_parameters: Sdk12.DescribeParametersCommand,
70808
+ describe_patch_baselines: Sdk12.DescribePatchBaselinesCommand,
70809
+ describe_patch_group_state: Sdk12.DescribePatchGroupStateCommand,
70810
+ describe_patch_groups: Sdk12.DescribePatchGroupsCommand,
70811
+ describe_patch_properties: Sdk12.DescribePatchPropertiesCommand,
70812
+ describe_sessions: Sdk12.DescribeSessionsCommand,
70813
+ disassociate_ops_item_related_item: Sdk12.DisassociateOpsItemRelatedItemCommand,
70814
+ get_access_token: Sdk12.GetAccessTokenCommand,
70815
+ get_automation_execution: Sdk12.GetAutomationExecutionCommand,
70816
+ get_calendar_state: Sdk12.GetCalendarStateCommand,
70817
+ get_command_invocation: Sdk12.GetCommandInvocationCommand,
70818
+ get_connection_status: Sdk12.GetConnectionStatusCommand,
70819
+ get_default_patch_baseline: Sdk12.GetDefaultPatchBaselineCommand,
70820
+ get_deployable_patch_snapshot_for_instance: Sdk12.GetDeployablePatchSnapshotForInstanceCommand,
70821
+ get_document: Sdk12.GetDocumentCommand,
70822
+ get_execution_preview: Sdk12.GetExecutionPreviewCommand,
70823
+ get_inventory: Sdk12.GetInventoryCommand,
70824
+ get_inventory_schema: Sdk12.GetInventorySchemaCommand,
70825
+ get_maintenance_window: Sdk12.GetMaintenanceWindowCommand,
70826
+ get_maintenance_window_execution: Sdk12.GetMaintenanceWindowExecutionCommand,
70827
+ get_maintenance_window_execution_task: Sdk12.GetMaintenanceWindowExecutionTaskCommand,
70828
+ get_maintenance_window_execution_task_invocation: Sdk12.GetMaintenanceWindowExecutionTaskInvocationCommand,
70829
+ get_maintenance_window_task: Sdk12.GetMaintenanceWindowTaskCommand,
70830
+ get_ops_item: Sdk12.GetOpsItemCommand,
70831
+ get_ops_metadata: Sdk12.GetOpsMetadataCommand,
70832
+ get_ops_summary: Sdk12.GetOpsSummaryCommand,
70833
+ get_parameter: Sdk12.GetParameterCommand,
70834
+ get_parameter_history: Sdk12.GetParameterHistoryCommand,
70835
+ get_parameters: Sdk12.GetParametersCommand,
70836
+ get_parameters_by_path: Sdk12.GetParametersByPathCommand,
70837
+ get_patch_baseline: Sdk12.GetPatchBaselineCommand,
70838
+ get_patch_baseline_for_patch_group: Sdk12.GetPatchBaselineForPatchGroupCommand,
70839
+ get_resource_policies: Sdk12.GetResourcePoliciesCommand,
70840
+ get_service_setting: Sdk12.GetServiceSettingCommand,
70841
+ label_parameter_version: Sdk12.LabelParameterVersionCommand,
70842
+ list_association_versions: Sdk12.ListAssociationVersionsCommand,
70843
+ list_associations: Sdk12.ListAssociationsCommand,
70844
+ list_command_invocations: Sdk12.ListCommandInvocationsCommand,
70845
+ list_commands: Sdk12.ListCommandsCommand,
70846
+ list_compliance_items: Sdk12.ListComplianceItemsCommand,
70847
+ list_compliance_summaries: Sdk12.ListComplianceSummariesCommand,
70848
+ list_document_metadata_history: Sdk12.ListDocumentMetadataHistoryCommand,
70849
+ list_document_versions: Sdk12.ListDocumentVersionsCommand,
70850
+ list_documents: Sdk12.ListDocumentsCommand,
70851
+ list_inventory_entries: Sdk12.ListInventoryEntriesCommand,
70852
+ list_nodes: Sdk12.ListNodesCommand,
70853
+ list_nodes_summary: Sdk12.ListNodesSummaryCommand,
70854
+ list_ops_item_events: Sdk12.ListOpsItemEventsCommand,
70855
+ list_ops_item_related_items: Sdk12.ListOpsItemRelatedItemsCommand,
70856
+ list_ops_metadata: Sdk12.ListOpsMetadataCommand,
70857
+ list_resource_compliance_summaries: Sdk12.ListResourceComplianceSummariesCommand,
70858
+ list_resource_data_sync: Sdk12.ListResourceDataSyncCommand,
70859
+ list_tags_for_resource: Sdk12.ListTagsForResourceCommand,
70860
+ modify_document_permission: Sdk12.ModifyDocumentPermissionCommand,
70861
+ put_compliance_items: Sdk12.PutComplianceItemsCommand,
70862
+ put_inventory: Sdk12.PutInventoryCommand,
70863
+ put_parameter: Sdk12.PutParameterCommand,
70864
+ put_resource_policy: Sdk12.PutResourcePolicyCommand,
70865
+ register_default_patch_baseline: Sdk12.RegisterDefaultPatchBaselineCommand,
70866
+ register_patch_baseline_for_patch_group: Sdk12.RegisterPatchBaselineForPatchGroupCommand,
70867
+ register_target_with_maintenance_window: Sdk12.RegisterTargetWithMaintenanceWindowCommand,
70868
+ register_task_with_maintenance_window: Sdk12.RegisterTaskWithMaintenanceWindowCommand,
70869
+ remove_tags_from_resource: Sdk12.RemoveTagsFromResourceCommand,
70870
+ reset_service_setting: Sdk12.ResetServiceSettingCommand,
70871
+ resume_session: Sdk12.ResumeSessionCommand,
70872
+ send_automation_signal: Sdk12.SendAutomationSignalCommand,
70873
+ send_command: Sdk12.SendCommandCommand,
70874
+ start_access_request: Sdk12.StartAccessRequestCommand,
70875
+ start_associations_once: Sdk12.StartAssociationsOnceCommand,
70876
+ start_automation_execution: Sdk12.StartAutomationExecutionCommand,
70877
+ start_change_request_execution: Sdk12.StartChangeRequestExecutionCommand,
70878
+ start_execution_preview: Sdk12.StartExecutionPreviewCommand,
70879
+ start_session: Sdk12.StartSessionCommand,
70880
+ stop_automation_execution: Sdk12.StopAutomationExecutionCommand,
70881
+ terminate_session: Sdk12.TerminateSessionCommand,
70882
+ unlabel_parameter_version: Sdk12.UnlabelParameterVersionCommand,
70883
+ update_association: Sdk12.UpdateAssociationCommand,
70884
+ update_association_status: Sdk12.UpdateAssociationStatusCommand,
70885
+ update_document: Sdk12.UpdateDocumentCommand,
70886
+ update_document_default_version: Sdk12.UpdateDocumentDefaultVersionCommand,
70887
+ update_document_metadata: Sdk12.UpdateDocumentMetadataCommand,
70888
+ update_maintenance_window: Sdk12.UpdateMaintenanceWindowCommand,
70889
+ update_maintenance_window_target: Sdk12.UpdateMaintenanceWindowTargetCommand,
70890
+ update_maintenance_window_task: Sdk12.UpdateMaintenanceWindowTaskCommand,
70891
+ update_managed_instance_role: Sdk12.UpdateManagedInstanceRoleCommand,
70892
+ update_ops_item: Sdk12.UpdateOpsItemCommand,
70893
+ update_ops_metadata: Sdk12.UpdateOpsMetadataCommand,
70894
+ update_patch_baseline: Sdk12.UpdatePatchBaselineCommand,
70895
+ update_resource_data_sync: Sdk12.UpdateResourceDataSyncCommand,
70896
+ update_service_setting: Sdk12.UpdateServiceSettingCommand
70738
70897
  };
70739
70898
 
70740
70899
  // src/aws/clients/index.ts
@@ -70748,6 +70907,7 @@ var AllClientsDefault = mergeAll6(
70748
70907
  LambdaClient2.Default(),
70749
70908
  ResourceGroupsTaggingAPIClient2.Default(),
70750
70909
  S3Client2.Default(),
70910
+ SESv2Client2.Default(),
70751
70911
  SQSClient2.Default(),
70752
70912
  SSMClient2.Default()
70753
70913
  );
@@ -70761,6 +70921,7 @@ var makeClients = (config2) => mergeAll6(
70761
70921
  LambdaClient2.Default(config2?.lambda),
70762
70922
  ResourceGroupsTaggingAPIClient2.Default(config2?.resource_groups_tagging_api),
70763
70923
  S3Client2.Default(config2?.s3),
70924
+ SESv2Client2.Default(config2?.sesv2),
70764
70925
  SQSClient2.Default(config2?.sqs),
70765
70926
  SSMClient2.Default(config2?.ssm)
70766
70927
  );
@@ -71935,6 +72096,13 @@ var syncFiles = (input) => Effect_exports.gen(function* () {
71935
72096
  yield* Effect_exports.logDebug(`S3 sync: ${uploaded} uploaded, ${deleted} deleted, ${unchanged} unchanged`);
71936
72097
  return { uploaded, deleted, unchanged };
71937
72098
  });
72099
+ var putObject = (input) => s3_exports.make("put_object", {
72100
+ Bucket: input.bucketName,
72101
+ Key: input.key,
72102
+ Body: typeof input.body === "string" ? Buffer.from(input.body) : input.body,
72103
+ ContentType: input.contentType,
72104
+ CacheControl: input.cacheControl ?? "public, max-age=0, must-revalidate"
72105
+ });
71938
72106
  var putBucketPolicyForOAC = (bucketName, distributionArn) => Effect_exports.gen(function* () {
71939
72107
  const policy = JSON.stringify({
71940
72108
  Version: "2012-10-17",
@@ -72071,6 +72239,9 @@ var findCertificate = (domain) => Effect_exports.gen(function* () {
72071
72239
 
72072
72240
  // src/aws/cloudfront.ts
72073
72241
  var CACHING_OPTIMIZED_POLICY_ID = "658327ea-f89d-4fab-a63d-7e88639e58f6";
72242
+ var CACHING_DISABLED_POLICY_ID = "4135ea2d-bfcb-4884-b0c3-f7c1dc6e36b4";
72243
+ var ALL_VIEWER_EXCEPT_HOST_HEADER_POLICY_ID = "b689b0a8-53d0-40ab-baf2-68738e2966ac";
72244
+ var SECURITY_HEADERS_POLICY_ID = "67f7725c-6f97-4210-82d7-5512b31e9d03";
72074
72245
  var ensureOAC = (input) => Effect_exports.gen(function* () {
72075
72246
  const { name } = input;
72076
72247
  const result = yield* cloudfront_exports.make("list_origin_access_controls", {});
@@ -72169,7 +72340,7 @@ var ensureViewerRequestFunction = (name, config2) => Effect_exports.gen(function
72169
72340
  });
72170
72341
  var makeDistComment = (project2, stage, handlerName) => `effortless: ${project2}/${stage}/${handlerName}`;
72171
72342
  var ensureDistribution = (input) => Effect_exports.gen(function* () {
72172
- const { project: project2, stage, handlerName, bucketName, bucketRegion, oacId, spa, index, tags: tags2, urlRewriteFunctionArn, lambdaEdgeArn, aliases, acmCertificateArn } = input;
72343
+ const { project: project2, stage, handlerName, bucketName, bucketRegion, oacId, spa, index, tags: tags2, urlRewriteFunctionArn, lambdaEdgeArn, aliases, acmCertificateArn, apiOriginDomain, routePatterns } = input;
72173
72344
  const aliasesConfig = aliases && aliases.length > 0 ? { Quantity: aliases.length, Items: aliases } : { Quantity: 0, Items: [] };
72174
72345
  const viewerCertificate = acmCertificateArn ? {
72175
72346
  ACMCertificateArn: acmCertificateArn,
@@ -72179,8 +72350,51 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72179
72350
  const functionAssociations = !lambdaEdgeArn && urlRewriteFunctionArn ? { Quantity: 1, Items: [{ FunctionARN: urlRewriteFunctionArn, EventType: "viewer-request" }] } : { Quantity: 0, Items: [] };
72180
72351
  const lambdaFunctionAssociations = lambdaEdgeArn ? { Quantity: 1, Items: [{ EventType: "viewer-request", LambdaFunctionARN: lambdaEdgeArn, IncludeBody: false }] } : { Quantity: 0, Items: [] };
72181
72352
  const comment = makeDistComment(project2, stage, handlerName);
72182
- const originId = `S3-${bucketName}`;
72183
- const originDomain = `${bucketName}.s3.${bucketRegion}.amazonaws.com`;
72353
+ const s3OriginId = `S3-${bucketName}`;
72354
+ const s3OriginDomain = `${bucketName}.s3.${bucketRegion}.amazonaws.com`;
72355
+ const hasApiRoutes = apiOriginDomain && routePatterns && routePatterns.length > 0;
72356
+ const apiOriginId = hasApiRoutes ? `API-${project2}-${stage}` : void 0;
72357
+ const originsItems = [
72358
+ {
72359
+ Id: s3OriginId,
72360
+ DomainName: s3OriginDomain,
72361
+ OriginPath: "",
72362
+ OriginAccessControlId: oacId,
72363
+ S3OriginConfig: { OriginAccessIdentity: "" },
72364
+ CustomHeaders: { Quantity: 0, Items: [] }
72365
+ },
72366
+ ...hasApiRoutes ? [{
72367
+ Id: apiOriginId,
72368
+ DomainName: apiOriginDomain,
72369
+ OriginPath: "",
72370
+ CustomOriginConfig: {
72371
+ HTTPPort: 80,
72372
+ HTTPSPort: 443,
72373
+ OriginProtocolPolicy: "https-only",
72374
+ OriginSslProtocols: { Quantity: 1, Items: ["TLSv1.2"] }
72375
+ },
72376
+ CustomHeaders: { Quantity: 0, Items: [] }
72377
+ }] : []
72378
+ ];
72379
+ const API_METHODS = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"];
72380
+ const CACHED_METHODS = ["GET", "HEAD"];
72381
+ const cacheBehaviors = hasApiRoutes ? {
72382
+ Quantity: routePatterns.length,
72383
+ Items: routePatterns.map((pattern2) => ({
72384
+ PathPattern: pattern2,
72385
+ TargetOriginId: apiOriginId,
72386
+ ViewerProtocolPolicy: "redirect-to-https",
72387
+ AllowedMethods: {
72388
+ Quantity: 7,
72389
+ Items: [...API_METHODS],
72390
+ CachedMethods: { Quantity: 2, Items: [...CACHED_METHODS] }
72391
+ },
72392
+ Compress: true,
72393
+ CachePolicyId: CACHING_DISABLED_POLICY_ID,
72394
+ OriginRequestPolicyId: ALL_VIEWER_EXCEPT_HOST_HEADER_POLICY_ID
72395
+ }))
72396
+ } : { Quantity: 0, Items: [] };
72397
+ const { errorPagePath } = input;
72184
72398
  const customErrorResponses = spa ? {
72185
72399
  Quantity: 2,
72186
72400
  Items: [
@@ -72197,6 +72411,22 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72197
72411
  ErrorCachingMinTTL: 0
72198
72412
  }
72199
72413
  ]
72414
+ } : errorPagePath ? {
72415
+ Quantity: 2,
72416
+ Items: [
72417
+ {
72418
+ ErrorCode: 403,
72419
+ ResponseCode: "404",
72420
+ ResponsePagePath: errorPagePath,
72421
+ ErrorCachingMinTTL: 0
72422
+ },
72423
+ {
72424
+ ErrorCode: 404,
72425
+ ResponseCode: "404",
72426
+ ResponsePagePath: errorPagePath,
72427
+ ErrorCachingMinTTL: 0
72428
+ }
72429
+ ]
72200
72430
  } : { Quantity: 0, Items: [] };
72201
72431
  const existing = yield* findDistributionByTags(project2, stage, handlerName);
72202
72432
  if (existing) {
@@ -72212,7 +72442,12 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72212
72442
  const aliasesMatch = currentAliases.length === desiredAliases.length && desiredAliases.every((a) => currentAliases.includes(a));
72213
72443
  const certMatch = currentConfig.ViewerCertificate?.ACMCertificateArn === (acmCertificateArn ?? void 0);
72214
72444
  const currentLambdaEdgeArn = currentConfig.DefaultCacheBehavior?.LambdaFunctionAssociations?.Items?.[0]?.LambdaFunctionARN;
72215
- const needsUpdate = currentOrigin?.DomainName !== originDomain || currentOrigin?.OriginAccessControlId !== oacId || currentConfig.DefaultRootObject !== index || currentConfig.DefaultCacheBehavior?.CachePolicyId !== CACHING_OPTIMIZED_POLICY_ID || (currentConfig.CustomErrorResponses?.Quantity ?? 0) !== customErrorResponses.Quantity || (currentConfig.DefaultCacheBehavior?.FunctionAssociations?.Quantity ?? 0) !== functionAssociations.Quantity || currentConfig.DefaultCacheBehavior?.FunctionAssociations?.Items?.[0]?.FunctionARN !== (urlRewriteFunctionArn ?? void 0) || (currentConfig.DefaultCacheBehavior?.LambdaFunctionAssociations?.Quantity ?? 0) !== lambdaFunctionAssociations.Quantity || currentLambdaEdgeArn !== (lambdaEdgeArn ?? void 0) || !aliasesMatch || !certMatch;
72445
+ const originsMatch = (currentConfig.Origins?.Quantity ?? 0) === originsItems.length;
72446
+ const currentBehaviorPatterns = (currentConfig.CacheBehaviors?.Items ?? []).map((b) => b.PathPattern).sort();
72447
+ const desiredBehaviorPatterns = (routePatterns ?? []).slice().sort();
72448
+ const behaviorsMatch = currentBehaviorPatterns.length === desiredBehaviorPatterns.length && desiredBehaviorPatterns.every((p3, i) => currentBehaviorPatterns[i] === p3);
72449
+ const apiOriginMatch = !hasApiRoutes || currentConfig.Origins?.Items?.some((o) => o.DomainName === apiOriginDomain);
72450
+ const needsUpdate = currentOrigin?.DomainName !== s3OriginDomain || currentOrigin?.OriginAccessControlId !== oacId || currentConfig.DefaultRootObject !== index || currentConfig.DefaultCacheBehavior?.CachePolicyId !== CACHING_OPTIMIZED_POLICY_ID || currentConfig.DefaultCacheBehavior?.ResponseHeadersPolicyId !== SECURITY_HEADERS_POLICY_ID || (currentConfig.CustomErrorResponses?.Quantity ?? 0) !== customErrorResponses.Quantity || (currentConfig.DefaultCacheBehavior?.FunctionAssociations?.Quantity ?? 0) !== functionAssociations.Quantity || currentConfig.DefaultCacheBehavior?.FunctionAssociations?.Items?.[0]?.FunctionARN !== (urlRewriteFunctionArn ?? void 0) || (currentConfig.DefaultCacheBehavior?.LambdaFunctionAssociations?.Quantity ?? 0) !== lambdaFunctionAssociations.Quantity || currentLambdaEdgeArn !== (lambdaEdgeArn ?? void 0) || !aliasesMatch || !certMatch || !originsMatch || !behaviorsMatch || !apiOriginMatch;
72216
72451
  if (needsUpdate) {
72217
72452
  yield* Effect_exports.logDebug(`CloudFront distribution ${existing.Id} config changed, updating...`);
72218
72453
  const etag = configResult.ETag;
@@ -72223,21 +72458,12 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72223
72458
  ...currentConfig,
72224
72459
  Comment: comment,
72225
72460
  Origins: {
72226
- Quantity: 1,
72227
- Items: [
72228
- {
72229
- Id: originId,
72230
- DomainName: originDomain,
72231
- OriginPath: "",
72232
- OriginAccessControlId: oacId,
72233
- S3OriginConfig: { OriginAccessIdentity: "" },
72234
- CustomHeaders: { Quantity: 0, Items: [] }
72235
- }
72236
- ]
72461
+ Quantity: originsItems.length,
72462
+ Items: originsItems
72237
72463
  },
72238
72464
  DefaultCacheBehavior: {
72239
72465
  ...currentConfig.DefaultCacheBehavior,
72240
- TargetOriginId: originId,
72466
+ TargetOriginId: s3OriginId,
72241
72467
  ViewerProtocolPolicy: "redirect-to-https",
72242
72468
  AllowedMethods: {
72243
72469
  Quantity: 2,
@@ -72246,10 +72472,12 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72246
72472
  },
72247
72473
  Compress: true,
72248
72474
  CachePolicyId: CACHING_OPTIMIZED_POLICY_ID,
72475
+ ResponseHeadersPolicyId: SECURITY_HEADERS_POLICY_ID,
72249
72476
  FunctionAssociations: functionAssociations,
72250
72477
  LambdaFunctionAssociations: lambdaFunctionAssociations,
72251
72478
  ForwardedValues: void 0
72252
72479
  },
72480
+ CacheBehaviors: cacheBehaviors,
72253
72481
  Aliases: aliasesConfig,
72254
72482
  ...viewerCertificate ? { ViewerCertificate: viewerCertificate } : {},
72255
72483
  DefaultRootObject: index,
@@ -72275,18 +72503,11 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72275
72503
  CallerReference: `${project2}-${stage}-${handlerName}-${Date.now()}`,
72276
72504
  Comment: comment,
72277
72505
  Origins: {
72278
- Quantity: 1,
72279
- Items: [
72280
- {
72281
- Id: originId,
72282
- DomainName: originDomain,
72283
- OriginAccessControlId: oacId,
72284
- S3OriginConfig: { OriginAccessIdentity: "" }
72285
- }
72286
- ]
72506
+ Quantity: originsItems.length,
72507
+ Items: originsItems
72287
72508
  },
72288
72509
  DefaultCacheBehavior: {
72289
- TargetOriginId: originId,
72510
+ TargetOriginId: s3OriginId,
72290
72511
  ViewerProtocolPolicy: "redirect-to-https",
72291
72512
  AllowedMethods: {
72292
72513
  Quantity: 2,
@@ -72295,9 +72516,11 @@ var ensureDistribution = (input) => Effect_exports.gen(function* () {
72295
72516
  },
72296
72517
  Compress: true,
72297
72518
  CachePolicyId: CACHING_OPTIMIZED_POLICY_ID,
72519
+ ResponseHeadersPolicyId: SECURITY_HEADERS_POLICY_ID,
72298
72520
  FunctionAssociations: functionAssociations,
72299
72521
  LambdaFunctionAssociations: lambdaFunctionAssociations
72300
72522
  },
72523
+ CacheBehaviors: cacheBehaviors,
72301
72524
  Aliases: aliasesConfig,
72302
72525
  ...viewerCertificate ? { ViewerCertificate: viewerCertificate } : {},
72303
72526
  DefaultRootObject: index,
@@ -72587,6 +72810,61 @@ var deleteFifoQueue = (queueName) => Effect_exports.gen(function* () {
72587
72810
  }
72588
72811
  });
72589
72812
 
72813
+ // src/aws/ses.ts
72814
+ var ensureSesIdentity = (input) => Effect_exports.gen(function* () {
72815
+ const { domain, tags: tags2 } = input;
72816
+ const existing = yield* sesv2_exports.make("get_email_identity", {
72817
+ EmailIdentity: domain
72818
+ }).pipe(
72819
+ Effect_exports.catchIf(
72820
+ (error4) => error4 instanceof sesv2_exports.SESv2Error && error4.is("NotFoundException"),
72821
+ () => Effect_exports.succeed(void 0)
72822
+ )
72823
+ );
72824
+ if (!existing) {
72825
+ yield* Effect_exports.logDebug(`Creating SES email identity for ${domain}...`);
72826
+ yield* sesv2_exports.make("create_email_identity", {
72827
+ EmailIdentity: domain,
72828
+ DkimSigningAttributes: {
72829
+ NextSigningKeyLength: "RSA_2048_BIT"
72830
+ },
72831
+ ...tags2 ? { Tags: Object.entries(tags2).map(([Key2, Value]) => ({ Key: Key2, Value })) } : {}
72832
+ });
72833
+ const created = yield* sesv2_exports.make("get_email_identity", {
72834
+ EmailIdentity: domain
72835
+ });
72836
+ const dkimRecords2 = (created.DkimAttributes?.Tokens ?? []).map((token) => ({
72837
+ name: `${token}._domainkey.${domain}`,
72838
+ value: `${token}.dkim.amazonses.com`
72839
+ }));
72840
+ return {
72841
+ domain,
72842
+ verified: false,
72843
+ dkimRecords: dkimRecords2
72844
+ };
72845
+ }
72846
+ const verified = existing.DkimAttributes?.Status === "SUCCESS";
72847
+ const dkimRecords = (existing.DkimAttributes?.Tokens ?? []).map((token) => ({
72848
+ name: `${token}._domainkey.${domain}`,
72849
+ value: `${token}.dkim.amazonses.com`
72850
+ }));
72851
+ return {
72852
+ domain,
72853
+ verified,
72854
+ dkimRecords
72855
+ };
72856
+ });
72857
+ var deleteSesIdentity = (domain) => Effect_exports.gen(function* () {
72858
+ yield* sesv2_exports.make("delete_email_identity", {
72859
+ EmailIdentity: domain
72860
+ }).pipe(
72861
+ Effect_exports.catchIf(
72862
+ (error4) => error4 instanceof sesv2_exports.SESv2Error && error4.is("NotFoundException"),
72863
+ () => Effect_exports.void
72864
+ )
72865
+ );
72866
+ });
72867
+
72590
72868
  // src/aws/index.ts
72591
72869
  import { unmarshall, marshall } from "@aws-sdk/util-dynamodb";
72592
72870
 
@@ -72604,7 +72882,7 @@ var parseSource = (source) => {
72604
72882
  const project2 = new Project({ useInMemoryFileSystem: true });
72605
72883
  return project2.createSourceFile("input.ts", source);
72606
72884
  };
72607
- var RUNTIME_PROPS = ["onRequest", "onRecord", "onBatchComplete", "onBatch", "onMessage", "onObjectCreated", "onObjectRemoved", "setup", "schema", "onError", "deps", "config", "static", "middleware"];
72885
+ var RUNTIME_PROPS = ["onRequest", "onRecord", "onBatchComplete", "onBatch", "onMessage", "onObjectCreated", "onObjectRemoved", "setup", "schema", "onError", "deps", "config", "static", "middleware", "routes"];
72608
72886
  var evalConfig = (configText, exportName) => {
72609
72887
  try {
72610
72888
  return new Function(`return ${configText}`)();
@@ -72708,6 +72986,26 @@ var extractStaticGlobs = (obj) => {
72708
72986
  const arrayLiteral = init;
72709
72987
  return arrayLiteral.getElements().filter((e) => e.getKind() === SyntaxKind.StringLiteral).map((e) => e.asKindOrThrow(SyntaxKind.StringLiteral).getLiteralValue());
72710
72988
  };
72989
+ var extractRoutePatterns = (obj) => {
72990
+ const routesProp = obj.getProperties().find((p3) => {
72991
+ if (p3.getKind() === SyntaxKind.PropertyAssignment) {
72992
+ return p3.getName() === "routes";
72993
+ }
72994
+ return false;
72995
+ });
72996
+ if (!routesProp || routesProp.getKind() !== SyntaxKind.PropertyAssignment) return [];
72997
+ const init = routesProp.getInitializer();
72998
+ if (!init || init.getKind() !== SyntaxKind.ObjectLiteralExpression) return [];
72999
+ const routesObj = init;
73000
+ return routesObj.getProperties().map((p3) => {
73001
+ if (p3.getKind() !== SyntaxKind.PropertyAssignment) return "";
73002
+ const nameNode = p3.getNameNode();
73003
+ if (nameNode.getKind() === SyntaxKind.StringLiteral) {
73004
+ return nameNode.asKindOrThrow(SyntaxKind.StringLiteral).getLiteralValue();
73005
+ }
73006
+ return nameNode.getText();
73007
+ }).filter(Boolean);
73008
+ };
72711
73009
  var handlerRegistry = {
72712
73010
  http: {
72713
73011
  defineFn: "defineHttp",
@@ -72744,6 +73042,12 @@ var handlerRegistry = {
72744
73042
  handlerProps: ["onObjectCreated", "onObjectRemoved"],
72745
73043
  wrapperFn: "wrapBucket",
72746
73044
  wrapperPath: "~/runtime/wrap-bucket"
73045
+ },
73046
+ mailer: {
73047
+ defineFn: "defineMailer",
73048
+ handlerProps: [],
73049
+ wrapperFn: "",
73050
+ wrapperPath: ""
72747
73051
  }
72748
73052
  };
72749
73053
  var extractHandlerConfigs = (source, type2) => {
@@ -72766,7 +73070,8 @@ var extractHandlerConfigs = (source, type2) => {
72766
73070
  const depsKeys = extractDepsKeys(objLiteral);
72767
73071
  const paramEntries = extractParamEntries(objLiteral);
72768
73072
  const staticGlobs = extractStaticGlobs(objLiteral);
72769
- results.push({ exportName: "default", config: config2, hasHandler, depsKeys, paramEntries, staticGlobs });
73073
+ const routePatterns = extractRoutePatterns(objLiteral);
73074
+ results.push({ exportName: "default", config: config2, hasHandler, depsKeys, paramEntries, staticGlobs, routePatterns });
72770
73075
  }
72771
73076
  }
72772
73077
  }
@@ -72789,7 +73094,8 @@ var extractHandlerConfigs = (source, type2) => {
72789
73094
  const depsKeys = extractDepsKeys(objLiteral);
72790
73095
  const paramEntries = extractParamEntries(objLiteral);
72791
73096
  const staticGlobs = extractStaticGlobs(objLiteral);
72792
- results.push({ exportName, config: config2, hasHandler, depsKeys, paramEntries, staticGlobs });
73097
+ const routePatterns = extractRoutePatterns(objLiteral);
73098
+ results.push({ exportName, config: config2, hasHandler, depsKeys, paramEntries, staticGlobs, routePatterns });
72793
73099
  }
72794
73100
  });
72795
73101
  });
@@ -72813,6 +73119,7 @@ var extractAppConfigs = (source) => extractHandlerConfigs(source, "app");
72813
73119
  var extractStaticSiteConfigs = (source) => extractHandlerConfigs(source, "staticSite");
72814
73120
  var extractFifoQueueConfigs = (source) => extractHandlerConfigs(source, "fifoQueue");
72815
73121
  var extractBucketConfigs = (source) => extractHandlerConfigs(source, "bucket");
73122
+ var extractMailerConfigs = (source) => extractHandlerConfigs(source, "mailer");
72816
73123
  var runtimeDir = path6.resolve(path6.dirname(fileURLToPath2(import.meta.url)), "../../dist/runtime");
72817
73124
  var bundle = (input) => Effect_exports.gen(function* () {
72818
73125
  const exportName = input.exportName ?? "default";
@@ -72890,6 +73197,7 @@ var discoverHandlers = (files) => {
72890
73197
  const staticSiteHandlers = [];
72891
73198
  const fifoQueueHandlers = [];
72892
73199
  const bucketHandlers = [];
73200
+ const mailerHandlers = [];
72893
73201
  for (const file7 of files) {
72894
73202
  if (!fsSync2.statSync(file7).isFile()) continue;
72895
73203
  const source = fsSync2.readFileSync(file7, "utf-8");
@@ -72899,14 +73207,16 @@ var discoverHandlers = (files) => {
72899
73207
  const staticSite = extractStaticSiteConfigs(source);
72900
73208
  const fifoQueue = extractFifoQueueConfigs(source);
72901
73209
  const bucket = extractBucketConfigs(source);
73210
+ const mailer = extractMailerConfigs(source);
72902
73211
  if (http.length > 0) httpHandlers.push({ file: file7, exports: http });
72903
73212
  if (table3.length > 0) tableHandlers.push({ file: file7, exports: table3 });
72904
73213
  if (app.length > 0) appHandlers.push({ file: file7, exports: app });
72905
73214
  if (staticSite.length > 0) staticSiteHandlers.push({ file: file7, exports: staticSite });
72906
73215
  if (fifoQueue.length > 0) fifoQueueHandlers.push({ file: file7, exports: fifoQueue });
72907
73216
  if (bucket.length > 0) bucketHandlers.push({ file: file7, exports: bucket });
73217
+ if (mailer.length > 0) mailerHandlers.push({ file: file7, exports: mailer });
72908
73218
  }
72909
- return { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers };
73219
+ return { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers, mailerHandlers };
72910
73220
  };
72911
73221
 
72912
73222
  // src/deploy/resolve-config.ts
@@ -73381,6 +73691,41 @@ var deployMiddlewareLambda = (input) => Effect_exports.gen(function* () {
73381
73691
  yield* Effect_exports.logDebug(`Middleware deployed: ${versionArn}`);
73382
73692
  return { versionArn };
73383
73693
  });
73694
+ var ERROR_PAGE_KEY = "_effortless/404.html";
73695
+ var generateErrorPageHtml = () => `<!DOCTYPE html>
73696
+ <html lang="en">
73697
+ <head>
73698
+ <meta charset="utf-8">
73699
+ <meta name="viewport" content="width=device-width, initial-scale=1">
73700
+ <title>404 \u2014 Page not found</title>
73701
+ <style>
73702
+ * { margin: 0; padding: 0; box-sizing: border-box; }
73703
+ body {
73704
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
73705
+ display: flex;
73706
+ align-items: center;
73707
+ justify-content: center;
73708
+ min-height: 100vh;
73709
+ background: #fff;
73710
+ color: #111;
73711
+ }
73712
+ .c { text-align: center; }
73713
+ h1 { font-size: 4rem; font-weight: 200; letter-spacing: 0.1em; }
73714
+ hr { width: 40px; border: none; border-top: 1px solid #ccc; margin: 1.5rem auto; }
73715
+ p { font-size: 1rem; color: #666; }
73716
+ a { display: inline-block; margin-top: 1.5rem; color: #666; font-size: 0.875rem; text-decoration: none; }
73717
+ a:hover { color: #111; }
73718
+ </style>
73719
+ </head>
73720
+ <body>
73721
+ <div class="c">
73722
+ <h1>404</h1>
73723
+ <hr>
73724
+ <p>This page does not exist.</p>
73725
+ <a href="javascript:history.back()">&larr; Back</a>
73726
+ </div>
73727
+ </body>
73728
+ </html>`;
73384
73729
  var deployStaticSite = (input) => Effect_exports.gen(function* () {
73385
73730
  const { projectDir, project: project2, region, fn: fn2 } = input;
73386
73731
  const { exportName, config: config2 } = fn2;
@@ -73388,6 +73733,14 @@ var deployStaticSite = (input) => Effect_exports.gen(function* () {
73388
73733
  const handlerName = exportName;
73389
73734
  const hasMiddleware = fn2.hasHandler;
73390
73735
  const tagCtx = { project: project2, stage, handler: handlerName };
73736
+ const routePatterns = fn2.routePatterns;
73737
+ if (routePatterns.length > 0 && !input.apiOriginDomain) {
73738
+ return yield* Effect_exports.fail(
73739
+ new Error(
73740
+ `Static site "${exportName}" has routes but no API Gateway exists. Ensure defineHttp() handlers are included in the discovery patterns.`
73741
+ )
73742
+ );
73743
+ }
73391
73744
  if (config2.build) {
73392
73745
  yield* Effect_exports.logDebug(`Building site: ${config2.build}`);
73393
73746
  yield* Effect_exports.try({
@@ -73456,6 +73809,7 @@ var deployStaticSite = (input) => Effect_exports.gen(function* () {
73456
73809
  urlRewriteFunctionArn = result.functionArn;
73457
73810
  }
73458
73811
  }
73812
+ const errorPagePath = isSpa ? void 0 : config2.errorPage ? `/${config2.errorPage}` : `/${ERROR_PAGE_KEY}`;
73459
73813
  const index = config2.index ?? "index.html";
73460
73814
  const { distributionId, distributionArn, domainName } = yield* ensureDistribution({
73461
73815
  project: project2,
@@ -73470,11 +73824,21 @@ var deployStaticSite = (input) => Effect_exports.gen(function* () {
73470
73824
  urlRewriteFunctionArn,
73471
73825
  lambdaEdgeArn,
73472
73826
  aliases,
73473
- acmCertificateArn
73827
+ acmCertificateArn,
73828
+ errorPagePath,
73829
+ ...input.apiOriginDomain && routePatterns.length > 0 ? { apiOriginDomain: input.apiOriginDomain, routePatterns } : {}
73474
73830
  });
73475
73831
  yield* putBucketPolicyForOAC(bucketName, distributionArn);
73476
73832
  const sourceDir = path8.resolve(projectDir, config2.dir);
73477
73833
  yield* syncFiles({ bucketName, sourceDir });
73834
+ if (!isSpa && !config2.errorPage) {
73835
+ yield* putObject({
73836
+ bucketName,
73837
+ key: ERROR_PAGE_KEY,
73838
+ body: generateErrorPageHtml(),
73839
+ contentType: "text/html; charset=utf-8"
73840
+ });
73841
+ }
73478
73842
  yield* invalidateDistribution(distributionId);
73479
73843
  const url2 = domain ? `https://${domain}` : `https://${domainName}`;
73480
73844
  yield* Effect_exports.logDebug(`Static site deployed: ${url2}`);
@@ -73604,6 +73968,39 @@ var deployBucketFunction = ({ input, fn: fn2, layerArn, external, depsEnv, depsP
73604
73968
  };
73605
73969
  });
73606
73970
 
73971
+ // src/deploy/deploy-mailer.ts
73972
+ var deployMailer = ({ project: project2, stage, region, fn: fn2 }) => Effect_exports.gen(function* () {
73973
+ const { exportName, config: config2 } = fn2;
73974
+ const handlerName = exportName;
73975
+ const resolvedStage = resolveStage(stage);
73976
+ const tagCtx = {
73977
+ project: project2,
73978
+ stage: resolvedStage,
73979
+ handler: handlerName
73980
+ };
73981
+ yield* Effect_exports.logDebug(`Ensuring SES identity for ${config2.domain}...`);
73982
+ const { domain, verified, dkimRecords } = yield* ensureSesIdentity({
73983
+ domain: config2.domain,
73984
+ tags: makeTags(tagCtx, "ses")
73985
+ });
73986
+ if (!verified && dkimRecords.length > 0) {
73987
+ yield* Console_exports.log(`
73988
+ ${c.yellow("\u26A0")} Domain ${c.cyan(domain)} is not verified. Add these DNS records:
73989
+ `);
73990
+ for (const record2 of dkimRecords) {
73991
+ yield* Console_exports.log(` ${c.dim("CNAME")} ${record2.name}`);
73992
+ yield* Console_exports.log(` ${c.dim("\u2192")} ${record2.value}
73993
+ `);
73994
+ }
73995
+ }
73996
+ return {
73997
+ exportName,
73998
+ domain,
73999
+ verified,
74000
+ dkimRecords
74001
+ };
74002
+ });
74003
+
73607
74004
  // src/deploy/deploy.ts
73608
74005
  var statusLabel = (status2) => {
73609
74006
  switch (status2) {
@@ -73708,6 +74105,19 @@ var BUCKET_CLIENT_PERMISSIONS = [
73708
74105
  "s3:DeleteObject",
73709
74106
  "s3:ListBucket"
73710
74107
  ];
74108
+ var SES_PERMISSIONS = [
74109
+ "ses:SendEmail",
74110
+ "ses:SendRawEmail"
74111
+ ];
74112
+ var buildMailerDomainMap = (mailerHandlers) => {
74113
+ const map37 = /* @__PURE__ */ new Map();
74114
+ for (const { exports } of mailerHandlers) {
74115
+ for (const fn2 of exports) {
74116
+ map37.set(fn2.exportName, fn2.config.domain);
74117
+ }
74118
+ }
74119
+ return map37;
74120
+ };
73711
74121
  var buildTableNameMap = (tableHandlers, project2, stage) => {
73712
74122
  const map37 = /* @__PURE__ */ new Map();
73713
74123
  for (const { exports } of tableHandlers) {
@@ -73728,11 +74138,12 @@ var buildBucketNameMap = (bucketHandlers, project2, stage) => {
73728
74138
  }
73729
74139
  return map37;
73730
74140
  };
73731
- var resolveDeps = (depsKeys, tableNameMap, bucketNameMap) => {
74141
+ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
73732
74142
  if (depsKeys.length === 0) return void 0;
73733
74143
  const depsEnv = {};
73734
74144
  let hasTable = false;
73735
74145
  let hasBucket = false;
74146
+ let hasMailer = false;
73736
74147
  for (const key of depsKeys) {
73737
74148
  const tableName = tableNameMap.get(key);
73738
74149
  if (tableName) {
@@ -73744,12 +74155,19 @@ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap) => {
73744
74155
  if (bucketName) {
73745
74156
  depsEnv[`EFF_DEP_${key}`] = `bucket:${bucketName}`;
73746
74157
  hasBucket = true;
74158
+ continue;
74159
+ }
74160
+ const mailerDomain = mailerDomainMap.get(key);
74161
+ if (mailerDomain) {
74162
+ depsEnv[`EFF_DEP_${key}`] = `mailer:${mailerDomain}`;
74163
+ hasMailer = true;
73747
74164
  }
73748
74165
  }
73749
74166
  if (Object.keys(depsEnv).length === 0) return void 0;
73750
74167
  const permissions = [];
73751
74168
  if (hasTable) permissions.push(...TABLE_CLIENT_PERMISSIONS);
73752
74169
  if (hasBucket) permissions.push(...BUCKET_CLIENT_PERMISSIONS);
74170
+ if (hasMailer) permissions.push(...SES_PERMISSIONS);
73753
74171
  return { depsEnv, depsPermissions: permissions };
73754
74172
  };
73755
74173
  var SSM_PERMISSIONS = [
@@ -73780,7 +74198,7 @@ var makeDeployInput = (ctx, file7) => ({
73780
74198
  });
73781
74199
  var resolveHandlerEnv = (depsKeys, paramEntries, ctx) => {
73782
74200
  const resolved = mergeResolved(
73783
- resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap),
74201
+ resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap, ctx.mailerDomainMap),
73784
74202
  resolveParams(paramEntries, ctx.input.project, ctx.stage)
73785
74203
  );
73786
74204
  return {
@@ -73885,9 +74303,10 @@ var buildAppTasks = (ctx, handlers, apiId, results) => {
73885
74303
  }
73886
74304
  return tasks;
73887
74305
  };
73888
- var buildStaticSiteTasks = (ctx, handlers, results) => {
74306
+ var buildStaticSiteTasks = (ctx, handlers, results, apiId) => {
73889
74307
  const tasks = [];
73890
74308
  const { region } = ctx.input;
74309
+ const apiOriginDomain = apiId ? `${apiId}.execute-api.${region}.amazonaws.com` : void 0;
73891
74310
  for (const { file: file7, exports } of handlers) {
73892
74311
  for (const fn2 of exports) {
73893
74312
  tasks.push(
@@ -73898,7 +74317,8 @@ var buildStaticSiteTasks = (ctx, handlers, results) => {
73898
74317
  stage: ctx.input.stage,
73899
74318
  region,
73900
74319
  fn: fn2,
73901
- ...fn2.hasHandler ? { file: file7 } : {}
74320
+ ...fn2.hasHandler ? { file: file7 } : {},
74321
+ ...apiOriginDomain ? { apiOriginDomain } : {}
73902
74322
  }).pipe(Effect_exports.provide(clients_exports.makeClients({
73903
74323
  s3: { region },
73904
74324
  cloudfront: { region: "us-east-1" },
@@ -73964,6 +74384,27 @@ var buildBucketTasks = (ctx, handlers, results) => {
73964
74384
  }
73965
74385
  return tasks;
73966
74386
  };
74387
+ var buildMailerTasks = (ctx, handlers, results) => {
74388
+ const tasks = [];
74389
+ const { region } = ctx.input;
74390
+ for (const { exports } of handlers) {
74391
+ for (const fn2 of exports) {
74392
+ tasks.push(
74393
+ Effect_exports.gen(function* () {
74394
+ const result = yield* deployMailer({
74395
+ project: ctx.input.project,
74396
+ stage: ctx.input.stage,
74397
+ region,
74398
+ fn: fn2
74399
+ }).pipe(Effect_exports.provide(clients_exports.makeClients({ sesv2: { region } })));
74400
+ results.push(result);
74401
+ yield* ctx.logComplete(fn2.exportName, "mailer", result.verified ? "unchanged" : "created");
74402
+ })
74403
+ );
74404
+ }
74405
+ }
74406
+ return tasks;
74407
+ };
73967
74408
  var deployProject = (input) => Effect_exports.gen(function* () {
73968
74409
  const stage = resolveStage(input.stage);
73969
74410
  const files = findHandlerFiles(input.patterns, input.projectDir);
@@ -73971,14 +74412,15 @@ var deployProject = (input) => Effect_exports.gen(function* () {
73971
74412
  return yield* Effect_exports.fail(new Error(`No files match patterns: ${input.patterns.join(", ")}`));
73972
74413
  }
73973
74414
  yield* Effect_exports.logDebug(`Found ${files.length} file(s) matching patterns`);
73974
- const { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers } = discoverHandlers(files);
74415
+ const { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers, mailerHandlers } = discoverHandlers(files);
73975
74416
  const totalHttpHandlers = httpHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73976
74417
  const totalTableHandlers = tableHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73977
74418
  const totalAppHandlers = appHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73978
74419
  const totalStaticSiteHandlers = staticSiteHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73979
74420
  const totalFifoQueueHandlers = fifoQueueHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73980
74421
  const totalBucketHandlers = bucketHandlers.reduce((acc, h) => acc + h.exports.length, 0);
73981
- const totalAllHandlers = totalHttpHandlers + totalTableHandlers + totalAppHandlers + totalStaticSiteHandlers + totalFifoQueueHandlers + totalBucketHandlers;
74422
+ const totalMailerHandlers = mailerHandlers.reduce((acc, h) => acc + h.exports.length, 0);
74423
+ const totalAllHandlers = totalHttpHandlers + totalTableHandlers + totalAppHandlers + totalStaticSiteHandlers + totalFifoQueueHandlers + totalBucketHandlers + totalMailerHandlers;
73982
74424
  if (totalAllHandlers === 0) {
73983
74425
  return yield* Effect_exports.fail(new Error("No handlers found in matched files"));
73984
74426
  }
@@ -73989,9 +74431,10 @@ var deployProject = (input) => Effect_exports.gen(function* () {
73989
74431
  if (totalStaticSiteHandlers > 0) parts2.push(`${totalStaticSiteHandlers} site`);
73990
74432
  if (totalFifoQueueHandlers > 0) parts2.push(`${totalFifoQueueHandlers} queue`);
73991
74433
  if (totalBucketHandlers > 0) parts2.push(`${totalBucketHandlers} bucket`);
74434
+ if (totalMailerHandlers > 0) parts2.push(`${totalMailerHandlers} mailer`);
73992
74435
  yield* Console_exports.log(`
73993
74436
  ${c.dim("Handlers:")} ${parts2.join(", ")}`);
73994
- const discovered = { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers };
74437
+ const discovered = { httpHandlers, tableHandlers, appHandlers, staticSiteHandlers, fifoQueueHandlers, bucketHandlers, mailerHandlers };
73995
74438
  const requiredParams = collectRequiredParams(discovered, input.project, stage);
73996
74439
  if (requiredParams.length > 0) {
73997
74440
  const { missing } = yield* checkMissingParams(requiredParams).pipe(
@@ -74010,6 +74453,7 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74010
74453
  }
74011
74454
  const tableNameMap = buildTableNameMap(tableHandlers, input.project, stage);
74012
74455
  const bucketNameMap = buildBucketNameMap(bucketHandlers, input.project, stage);
74456
+ const mailerDomainMap = buildMailerDomainMap(mailerHandlers);
74013
74457
  const { layerArn, layerVersion, layerStatus, external } = yield* prepareLayer({
74014
74458
  project: input.project,
74015
74459
  stage,
@@ -74022,7 +74466,10 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74022
74466
  }
74023
74467
  let apiId;
74024
74468
  let apiUrl;
74025
- if (totalHttpHandlers > 0 || totalAppHandlers > 0) {
74469
+ const staticSitesNeedApi = staticSiteHandlers.some(
74470
+ ({ exports }) => exports.some((fn2) => fn2.routePatterns.length > 0)
74471
+ );
74472
+ if (totalHttpHandlers > 0 || totalAppHandlers > 0 || staticSitesNeedApi) {
74026
74473
  const tagCtx = {
74027
74474
  project: input.project,
74028
74475
  stage,
@@ -74058,6 +74505,8 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74058
74505
  for (const fn2 of exports) manifest.push({ name: fn2.exportName, type: "queue" });
74059
74506
  for (const { exports } of bucketHandlers)
74060
74507
  for (const fn2 of exports) manifest.push({ name: fn2.exportName, type: "bucket" });
74508
+ for (const { exports } of mailerHandlers)
74509
+ for (const fn2 of exports) manifest.push({ name: fn2.exportName, type: "mailer" });
74061
74510
  manifest.sort((a, b) => a.name.localeCompare(b.name));
74062
74511
  const logComplete = createLiveProgress(manifest);
74063
74512
  const ctx = {
@@ -74067,6 +74516,7 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74067
74516
  stage,
74068
74517
  tableNameMap,
74069
74518
  bucketNameMap,
74519
+ mailerDomainMap,
74070
74520
  logComplete
74071
74521
  };
74072
74522
  const httpResults = [];
@@ -74075,13 +74525,15 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74075
74525
  const staticSiteResults = [];
74076
74526
  const fifoQueueResults = [];
74077
74527
  const bucketResults = [];
74528
+ const mailerResults = [];
74078
74529
  const tasks = [
74079
74530
  ...apiId ? buildHttpTasks(ctx, httpHandlers, apiId, httpResults) : [],
74080
74531
  ...buildTableTasks(ctx, tableHandlers, tableResults),
74081
74532
  ...apiId ? buildAppTasks(ctx, appHandlers, apiId, appResults) : [],
74082
- ...buildStaticSiteTasks(ctx, staticSiteHandlers, staticSiteResults),
74533
+ ...buildStaticSiteTasks(ctx, staticSiteHandlers, staticSiteResults, apiId),
74083
74534
  ...buildFifoQueueTasks(ctx, fifoQueueHandlers, fifoQueueResults),
74084
- ...buildBucketTasks(ctx, bucketHandlers, bucketResults)
74535
+ ...buildBucketTasks(ctx, bucketHandlers, bucketResults),
74536
+ ...buildMailerTasks(ctx, mailerHandlers, mailerResults)
74085
74537
  ];
74086
74538
  yield* Effect_exports.all(tasks, { concurrency: DEPLOY_CONCURRENCY, discard: true });
74087
74539
  if (staticSiteResults.length > 0) {
@@ -74120,7 +74572,7 @@ var deployProject = (input) => Effect_exports.gen(function* () {
74120
74572
  if (apiUrl) {
74121
74573
  yield* Effect_exports.logDebug(`Deployment complete! API: ${apiUrl}`);
74122
74574
  }
74123
- return { apiId, apiUrl, httpResults, tableResults, appResults, staticSiteResults, fifoQueueResults, bucketResults };
74575
+ return { apiId, apiUrl, httpResults, tableResults, appResults, staticSiteResults, fifoQueueResults, bucketResults, mailerResults };
74124
74576
  });
74125
74577
 
74126
74578
  // src/cli/config.ts
@@ -74718,6 +75170,9 @@ var extractResourceName = (arn, type2) => {
74718
75170
  case "cloudfront-distribution": {
74719
75171
  return arn.split("/").pop() ?? arn;
74720
75172
  }
75173
+ case "ses": {
75174
+ return arn.split("/").pop() ?? arn;
75175
+ }
74721
75176
  default:
74722
75177
  return arn;
74723
75178
  }
@@ -74758,12 +75213,15 @@ var deleteResource = (resource) => Effect_exports.gen(function* () {
74758
75213
  case "sqs":
74759
75214
  yield* deleteFifoQueue(name);
74760
75215
  break;
75216
+ case "ses":
75217
+ yield* deleteSesIdentity(name);
75218
+ break;
74761
75219
  default:
74762
75220
  yield* Effect_exports.logWarning(`Unknown resource type: ${resource.type}, skipping ${resource.arn}`);
74763
75221
  }
74764
75222
  });
74765
75223
  var deleteResources = (resources) => Effect_exports.gen(function* () {
74766
- const orderedTypes = ["lambda", "api-gateway", "cloudfront-distribution", "sqs", "dynamodb", "s3-bucket", "lambda-layer", "iam-role"];
75224
+ const orderedTypes = ["lambda", "api-gateway", "cloudfront-distribution", "sqs", "ses", "dynamodb", "s3-bucket", "lambda-layer", "iam-role"];
74767
75225
  const iamRolesToDelete = /* @__PURE__ */ new Set();
74768
75226
  for (const type2 of orderedTypes) {
74769
75227
  const resourcesOfType = resources.filter((r) => r.type === type2);