@btc-embedded/cdk-extensions 0.22.23 → 0.23.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.
Files changed (54) hide show
  1. package/.jsii +66 -50
  2. package/API.md +13 -0
  3. package/CHANGELOG.md +22 -0
  4. package/assets/cli/catnip.js +1 -1
  5. package/lib/constructs/EventPipe.js +1 -1
  6. package/lib/constructs/ExportedService.js +1 -1
  7. package/lib/constructs/S3Bucket.js +1 -1
  8. package/lib/constructs/SecureRestApi.js +1 -1
  9. package/lib/constructs/SecureRestApiV2.js +1 -1
  10. package/lib/constructs/api-keys/ApiKeyClientAuthorization.js +1 -1
  11. package/lib/constructs/api-keys/ApiKeyManagement.js +1 -1
  12. package/lib/constructs/api-keys/ApiKeyPreTokenHandler.js +1 -1
  13. package/lib/constructs/api-keys/ApiKeyStore.js +1 -1
  14. package/lib/extensions/ApiGatewayExtension.js +1 -1
  15. package/lib/extensions/ApplicationContainer.js +1 -1
  16. package/lib/extensions/ApplicationLoadBalancerExtension.js +1 -1
  17. package/lib/extensions/ApplicationLoadBalancerExtensionV2.js +1 -1
  18. package/lib/extensions/CloudMapExtension.js +1 -1
  19. package/lib/extensions/DeactivatableServiceExtension.js +1 -1
  20. package/lib/extensions/DeploymentConfigExtension.js +1 -1
  21. package/lib/extensions/DocumentDbAccessExtension.js +1 -1
  22. package/lib/extensions/DomainEventMessagingExtension.js +1 -1
  23. package/lib/extensions/EfsMountExtension.js +8 -2
  24. package/lib/extensions/ExtraContainerExtension.js +1 -1
  25. package/lib/extensions/HTTPApiExtension.js +1 -1
  26. package/lib/extensions/LogExtension.js +1 -1
  27. package/lib/extensions/ModifyContainerDefinitionExtension.js +1 -1
  28. package/lib/extensions/ModifyTaskDefinitionExtension.js +1 -1
  29. package/lib/extensions/OpenIdExtension.js +1 -1
  30. package/lib/extensions/OpenTelemetryExtension.js +1 -1
  31. package/lib/extensions/PostgresDbAccessExtension.js +1 -1
  32. package/lib/extensions/SharedVolumeExtension.js +1 -1
  33. package/lib/extensions/TcpKeepAliveExtension.js +1 -1
  34. package/lib/platform/ApiGateway.js +1 -1
  35. package/lib/platform/ApiGatewayVpcLink.js +2 -2
  36. package/lib/platform/ApplicationLoadBalancer.js +1 -1
  37. package/lib/platform/ApplicationLoadBalancerV2.js +2 -2
  38. package/lib/platform/AuroraPostgresDB.d.ts +4 -0
  39. package/lib/platform/AuroraPostgresDB.js +5 -5
  40. package/lib/platform/BTCLogGroup.js +1 -1
  41. package/lib/platform/CognitoUserPool.js +2 -2
  42. package/lib/platform/DefaultUserPoolClients.js +1 -1
  43. package/lib/platform/DocumentDB.js +2 -2
  44. package/lib/platform/EcsCluster.js +1 -1
  45. package/lib/platform/EfsFileSystem.js +5 -15
  46. package/lib/platform/HostedZone.js +1 -1
  47. package/lib/platform/PrivateDnsNamespace.js +1 -1
  48. package/lib/platform/ResourceServer.js +1 -1
  49. package/lib/platform/Vpc.js +1 -1
  50. package/lib/platform/VpcV2.js +1 -1
  51. package/lib/stacks/ApplicationStack.js +1 -1
  52. package/lib/utils/BasePlatformStackResolver.js +1 -1
  53. package/lib/utils/StackParameter.js +1 -1
  54. package/package.json +1 -1
package/.jsii CHANGED
@@ -11350,7 +11350,7 @@
11350
11350
  },
11351
11351
  "locationInModule": {
11352
11352
  "filename": "src/platform/AuroraPostgresDB.ts",
11353
- "line": 276
11353
+ "line": 281
11354
11354
  },
11355
11355
  "parameters": [
11356
11356
  {
@@ -11376,7 +11376,7 @@
11376
11376
  "kind": "class",
11377
11377
  "locationInModule": {
11378
11378
  "filename": "src/platform/AuroraPostgresDB.ts",
11379
- "line": 176
11379
+ "line": 181
11380
11380
  },
11381
11381
  "methods": [
11382
11382
  {
@@ -11387,7 +11387,7 @@
11387
11387
  },
11388
11388
  "locationInModule": {
11389
11389
  "filename": "src/platform/AuroraPostgresDB.ts",
11390
- "line": 189
11390
+ "line": 194
11391
11391
  },
11392
11392
  "name": "fromBasePlatform",
11393
11393
  "parameters": [
@@ -11439,7 +11439,7 @@
11439
11439
  "immutable": true,
11440
11440
  "locationInModule": {
11441
11441
  "filename": "src/platform/AuroraPostgresDB.ts",
11442
- "line": 259
11442
+ "line": 264
11443
11443
  },
11444
11444
  "name": "cluster",
11445
11445
  "type": {
@@ -11454,7 +11454,7 @@
11454
11454
  "immutable": true,
11455
11455
  "locationInModule": {
11456
11456
  "filename": "src/platform/AuroraPostgresDB.ts",
11457
- "line": 271
11457
+ "line": 276
11458
11458
  },
11459
11459
  "name": "connectionSecret",
11460
11460
  "overrides": "@btc-embedded/cdk-extensions.AuroraPostgresClusterBase",
@@ -11470,7 +11470,7 @@
11470
11470
  "immutable": true,
11471
11471
  "locationInModule": {
11472
11472
  "filename": "src/platform/AuroraPostgresDB.ts",
11473
- "line": 265
11473
+ "line": 270
11474
11474
  },
11475
11475
  "name": "credentialsSecret",
11476
11476
  "overrides": "@btc-embedded/cdk-extensions.AuroraPostgresClusterBase",
@@ -11486,7 +11486,7 @@
11486
11486
  "immutable": true,
11487
11487
  "locationInModule": {
11488
11488
  "filename": "src/platform/AuroraPostgresDB.ts",
11489
- "line": 274
11489
+ "line": 279
11490
11490
  },
11491
11491
  "name": "endpoint",
11492
11492
  "overrides": "@btc-embedded/cdk-extensions.AuroraPostgresClusterBase",
@@ -11502,7 +11502,7 @@
11502
11502
  "immutable": true,
11503
11503
  "locationInModule": {
11504
11504
  "filename": "src/platform/AuroraPostgresDB.ts",
11505
- "line": 262
11505
+ "line": 267
11506
11506
  },
11507
11507
  "name": "securityGroup",
11508
11508
  "overrides": "@btc-embedded/cdk-extensions.AuroraPostgresClusterBase",
@@ -11559,7 +11559,7 @@
11559
11559
  "kind": "class",
11560
11560
  "locationInModule": {
11561
11561
  "filename": "src/platform/AuroraPostgresDB.ts",
11562
- "line": 156
11562
+ "line": 161
11563
11563
  },
11564
11564
  "name": "AuroraPostgresClusterBase",
11565
11565
  "properties": [
@@ -11572,7 +11572,7 @@
11572
11572
  "immutable": true,
11573
11573
  "locationInModule": {
11574
11574
  "filename": "src/platform/AuroraPostgresDB.ts",
11575
- "line": 161
11575
+ "line": 166
11576
11576
  },
11577
11577
  "name": "connectionSecret",
11578
11578
  "overrides": "@btc-embedded/cdk-extensions.IAuroraPostgresDB",
@@ -11589,7 +11589,7 @@
11589
11589
  "immutable": true,
11590
11590
  "locationInModule": {
11591
11591
  "filename": "src/platform/AuroraPostgresDB.ts",
11592
- "line": 160
11592
+ "line": 165
11593
11593
  },
11594
11594
  "name": "credentialsSecret",
11595
11595
  "overrides": "@btc-embedded/cdk-extensions.IAuroraPostgresDB",
@@ -11606,7 +11606,7 @@
11606
11606
  "immutable": true,
11607
11607
  "locationInModule": {
11608
11608
  "filename": "src/platform/AuroraPostgresDB.ts",
11609
- "line": 162
11609
+ "line": 167
11610
11610
  },
11611
11611
  "name": "endpoint",
11612
11612
  "overrides": "@btc-embedded/cdk-extensions.IAuroraPostgresDB",
@@ -11623,7 +11623,7 @@
11623
11623
  "immutable": true,
11624
11624
  "locationInModule": {
11625
11625
  "filename": "src/platform/AuroraPostgresDB.ts",
11626
- "line": 163
11626
+ "line": 168
11627
11627
  },
11628
11628
  "name": "securityGroup",
11629
11629
  "overrides": "@btc-embedded/cdk-extensions.IAuroraPostgresDB",
@@ -11645,7 +11645,7 @@
11645
11645
  "kind": "interface",
11646
11646
  "locationInModule": {
11647
11647
  "filename": "src/platform/AuroraPostgresDB.ts",
11648
- "line": 90
11648
+ "line": 95
11649
11649
  },
11650
11650
  "name": "AuroraPostgresClusterOverrides",
11651
11651
  "properties": [
@@ -11659,7 +11659,7 @@
11659
11659
  "immutable": true,
11660
11660
  "locationInModule": {
11661
11661
  "filename": "src/platform/AuroraPostgresDB.ts",
11662
- "line": 96
11662
+ "line": 101
11663
11663
  },
11664
11664
  "name": "clusterIdentifier",
11665
11665
  "optional": true,
@@ -11677,7 +11677,7 @@
11677
11677
  "immutable": true,
11678
11678
  "locationInModule": {
11679
11679
  "filename": "src/platform/AuroraPostgresDB.ts",
11680
- "line": 117
11680
+ "line": 122
11681
11681
  },
11682
11682
  "name": "serverlessV2MaxCapacity",
11683
11683
  "optional": true,
@@ -11695,7 +11695,7 @@
11695
11695
  "immutable": true,
11696
11696
  "locationInModule": {
11697
11697
  "filename": "src/platform/AuroraPostgresDB.ts",
11698
- "line": 110
11698
+ "line": 115
11699
11699
  },
11700
11700
  "name": "serverlessV2MinCapacity",
11701
11701
  "optional": true,
@@ -11713,7 +11713,7 @@
11713
11713
  "immutable": true,
11714
11714
  "locationInModule": {
11715
11715
  "filename": "src/platform/AuroraPostgresDB.ts",
11716
- "line": 124
11716
+ "line": 129
11717
11717
  },
11718
11718
  "name": "storageEncrypted",
11719
11719
  "optional": true,
@@ -11731,7 +11731,7 @@
11731
11731
  "immutable": true,
11732
11732
  "locationInModule": {
11733
11733
  "filename": "src/platform/AuroraPostgresDB.ts",
11734
- "line": 103
11734
+ "line": 108
11735
11735
  },
11736
11736
  "name": "vpcSubnets",
11737
11737
  "optional": true,
@@ -11757,6 +11757,22 @@
11757
11757
  },
11758
11758
  "name": "AuroraPostgresClusterProps",
11759
11759
  "properties": [
11760
+ {
11761
+ "abstract": true,
11762
+ "docs": {
11763
+ "stability": "experimental",
11764
+ "summary": "The version of the database engine to be used."
11765
+ },
11766
+ "immutable": true,
11767
+ "locationInModule": {
11768
+ "filename": "src/platform/AuroraPostgresDB.ts",
11769
+ "line": 89
11770
+ },
11771
+ "name": "engineVersion",
11772
+ "type": {
11773
+ "fqn": "aws-cdk-lib.aws_rds.AuroraPostgresEngineVersion"
11774
+ }
11775
+ },
11760
11776
  {
11761
11777
  "abstract": true,
11762
11778
  "docs": {
@@ -14783,7 +14799,7 @@
14783
14799
  "kind": "enum",
14784
14800
  "locationInModule": {
14785
14801
  "filename": "src/platform/EfsFileSystem.ts",
14786
- "line": 45
14802
+ "line": 43
14787
14803
  },
14788
14804
  "members": [
14789
14805
  {
@@ -14825,7 +14841,7 @@
14825
14841
  },
14826
14842
  "locationInModule": {
14827
14843
  "filename": "src/platform/EfsFileSystem.ts",
14828
- "line": 210
14844
+ "line": 208
14829
14845
  },
14830
14846
  "parameters": [
14831
14847
  {
@@ -14854,7 +14870,7 @@
14854
14870
  "kind": "class",
14855
14871
  "locationInModule": {
14856
14872
  "filename": "src/platform/EfsFileSystem.ts",
14857
- "line": 157
14873
+ "line": 155
14858
14874
  },
14859
14875
  "methods": [
14860
14876
  {
@@ -14865,7 +14881,7 @@
14865
14881
  },
14866
14882
  "locationInModule": {
14867
14883
  "filename": "src/platform/EfsFileSystem.ts",
14868
- "line": 165
14884
+ "line": 163
14869
14885
  },
14870
14886
  "name": "fromBasePlatform",
14871
14887
  "parameters": [
@@ -14910,7 +14926,7 @@
14910
14926
  },
14911
14927
  "locationInModule": {
14912
14928
  "filename": "src/platform/EfsFileSystem.ts",
14913
- "line": 105
14929
+ "line": 98
14914
14930
  },
14915
14931
  "name": "allowConnection",
14916
14932
  "overrides": "@btc-embedded/cdk-extensions.IEfsFileSystem",
@@ -14929,7 +14945,7 @@
14929
14945
  },
14930
14946
  "locationInModule": {
14931
14947
  "filename": "src/platform/EfsFileSystem.ts",
14932
- "line": 101
14948
+ "line": 94
14933
14949
  },
14934
14950
  "name": "fileSystem",
14935
14951
  "overrides": "@btc-embedded/cdk-extensions.IEfsFileSystem",
@@ -14945,7 +14961,7 @@
14945
14961
  },
14946
14962
  "locationInModule": {
14947
14963
  "filename": "src/platform/EfsFileSystem.ts",
14948
- "line": 97
14964
+ "line": 90
14949
14965
  },
14950
14966
  "name": "fileSystemId",
14951
14967
  "overrides": "@btc-embedded/cdk-extensions.IEfsFileSystem",
@@ -14961,7 +14977,7 @@
14961
14977
  },
14962
14978
  "locationInModule": {
14963
14979
  "filename": "src/platform/EfsFileSystem.ts",
14964
- "line": 67
14980
+ "line": 65
14965
14981
  },
14966
14982
  "name": "grantAccess",
14967
14983
  "overrides": "@btc-embedded/cdk-extensions.IEfsFileSystem",
@@ -14989,7 +15005,7 @@
14989
15005
  },
14990
15006
  "locationInModule": {
14991
15007
  "filename": "src/platform/EfsFileSystem.ts",
14992
- "line": 64
15008
+ "line": 62
14993
15009
  },
14994
15010
  "name": "filesystem",
14995
15011
  "protected": true,
@@ -15003,7 +15019,7 @@
15003
15019
  },
15004
15020
  "locationInModule": {
15005
15021
  "filename": "src/platform/EfsFileSystem.ts",
15006
- "line": 65
15022
+ "line": 63
15007
15023
  },
15008
15024
  "name": "securityGroup",
15009
15025
  "protected": true,
@@ -15025,7 +15041,7 @@
15025
15041
  "kind": "interface",
15026
15042
  "locationInModule": {
15027
15043
  "filename": "src/platform/EfsFileSystem.ts",
15028
- "line": 113
15044
+ "line": 111
15029
15045
  },
15030
15046
  "name": "EfsFileSystemLookupOptions",
15031
15047
  "properties": [
@@ -15038,7 +15054,7 @@
15038
15054
  "immutable": true,
15039
15055
  "locationInModule": {
15040
15056
  "filename": "src/platform/EfsFileSystem.ts",
15041
- "line": 122
15057
+ "line": 120
15042
15058
  },
15043
15059
  "name": "filesystemName",
15044
15060
  "type": {
@@ -15054,7 +15070,7 @@
15054
15070
  "immutable": true,
15055
15071
  "locationInModule": {
15056
15072
  "filename": "src/platform/EfsFileSystem.ts",
15057
- "line": 117
15073
+ "line": 115
15058
15074
  },
15059
15075
  "name": "basePlatformStackName",
15060
15076
  "optional": true,
@@ -15075,7 +15091,7 @@
15075
15091
  "kind": "interface",
15076
15092
  "locationInModule": {
15077
15093
  "filename": "src/platform/EfsFileSystem.ts",
15078
- "line": 22
15094
+ "line": 20
15079
15095
  },
15080
15096
  "name": "EfsFileSystemProps",
15081
15097
  "properties": [
@@ -15089,7 +15105,7 @@
15089
15105
  "immutable": true,
15090
15106
  "locationInModule": {
15091
15107
  "filename": "src/platform/EfsFileSystem.ts",
15092
- "line": 31
15108
+ "line": 29
15093
15109
  },
15094
15110
  "name": "name",
15095
15111
  "type": {
@@ -15105,7 +15121,7 @@
15105
15121
  "immutable": true,
15106
15122
  "locationInModule": {
15107
15123
  "filename": "src/platform/EfsFileSystem.ts",
15108
- "line": 26
15124
+ "line": 24
15109
15125
  },
15110
15126
  "name": "vpc",
15111
15127
  "type": {
@@ -15122,7 +15138,7 @@
15122
15138
  "immutable": true,
15123
15139
  "locationInModule": {
15124
15140
  "filename": "src/platform/EfsFileSystem.ts",
15125
- "line": 35
15141
+ "line": 33
15126
15142
  },
15127
15143
  "name": "automaticBackups",
15128
15144
  "optional": true,
@@ -15140,7 +15156,7 @@
15140
15156
  "immutable": true,
15141
15157
  "locationInModule": {
15142
15158
  "filename": "src/platform/EfsFileSystem.ts",
15143
- "line": 39
15159
+ "line": 37
15144
15160
  },
15145
15161
  "name": "removalPolicy",
15146
15162
  "optional": true,
@@ -15191,7 +15207,7 @@
15191
15207
  },
15192
15208
  "locationInModule": {
15193
15209
  "filename": "src/extensions/EfsMountExtension.ts",
15194
- "line": 78
15210
+ "line": 87
15195
15211
  },
15196
15212
  "name": "useService",
15197
15213
  "overrides": "@aws-cdk-containers/ecs-service-extensions.ServiceExtension",
@@ -17199,7 +17215,7 @@
17199
17215
  "kind": "interface",
17200
17216
  "locationInModule": {
17201
17217
  "filename": "src/platform/AuroraPostgresDB.ts",
17202
- "line": 135
17218
+ "line": 140
17203
17219
  },
17204
17220
  "name": "IAuroraPostgresDB",
17205
17221
  "properties": [
@@ -17212,7 +17228,7 @@
17212
17228
  "immutable": true,
17213
17229
  "locationInModule": {
17214
17230
  "filename": "src/platform/AuroraPostgresDB.ts",
17215
- "line": 143
17231
+ "line": 148
17216
17232
  },
17217
17233
  "name": "connectionSecret",
17218
17234
  "type": {
@@ -17228,7 +17244,7 @@
17228
17244
  "immutable": true,
17229
17245
  "locationInModule": {
17230
17246
  "filename": "src/platform/AuroraPostgresDB.ts",
17231
- "line": 137
17247
+ "line": 142
17232
17248
  },
17233
17249
  "name": "credentialsSecret",
17234
17250
  "type": {
@@ -17244,7 +17260,7 @@
17244
17260
  "immutable": true,
17245
17261
  "locationInModule": {
17246
17262
  "filename": "src/platform/AuroraPostgresDB.ts",
17247
- "line": 146
17263
+ "line": 151
17248
17264
  },
17249
17265
  "name": "endpoint",
17250
17266
  "type": {
@@ -17260,7 +17276,7 @@
17260
17276
  "immutable": true,
17261
17277
  "locationInModule": {
17262
17278
  "filename": "src/platform/AuroraPostgresDB.ts",
17263
- "line": 149
17279
+ "line": 154
17264
17280
  },
17265
17281
  "name": "securityGroup",
17266
17282
  "type": {
@@ -17506,7 +17522,7 @@
17506
17522
  "kind": "interface",
17507
17523
  "locationInModule": {
17508
17524
  "filename": "src/platform/EfsFileSystem.ts",
17509
- "line": 128
17525
+ "line": 126
17510
17526
  },
17511
17527
  "methods": [
17512
17528
  {
@@ -17517,7 +17533,7 @@
17517
17533
  },
17518
17534
  "locationInModule": {
17519
17535
  "filename": "src/platform/EfsFileSystem.ts",
17520
- "line": 140
17536
+ "line": 138
17521
17537
  },
17522
17538
  "name": "allowConnection",
17523
17539
  "parameters": [
@@ -17540,7 +17556,7 @@
17540
17556
  },
17541
17557
  "locationInModule": {
17542
17558
  "filename": "src/platform/EfsFileSystem.ts",
17543
- "line": 150
17559
+ "line": 148
17544
17560
  },
17545
17561
  "name": "fileSystem",
17546
17562
  "returns": {
@@ -17557,7 +17573,7 @@
17557
17573
  },
17558
17574
  "locationInModule": {
17559
17575
  "filename": "src/platform/EfsFileSystem.ts",
17560
- "line": 145
17576
+ "line": 143
17561
17577
  },
17562
17578
  "name": "fileSystemId",
17563
17579
  "returns": {
@@ -17574,7 +17590,7 @@
17574
17590
  },
17575
17591
  "locationInModule": {
17576
17592
  "filename": "src/platform/EfsFileSystem.ts",
17577
- "line": 134
17593
+ "line": 132
17578
17594
  },
17579
17595
  "name": "grantAccess",
17580
17596
  "parameters": [
@@ -20942,6 +20958,6 @@
20942
20958
  "usedFeatures": [
20943
20959
  "class-covariant-overrides"
20944
20960
  ],
20945
- "version": "0.22.23",
20946
- "fingerprint": "H0sBOsk0cgnXhy9C+mvWkWOVIMGf3LjvR1qF/2r0UjM="
20961
+ "version": "0.23.0",
20962
+ "fingerprint": "uEr97fb3CWefj14LDQebTQy5RDhx7PpcQjdayeZofF0="
20947
20963
  }
package/API.md CHANGED
@@ -9936,6 +9936,7 @@ const auroraPostgresClusterProps: AuroraPostgresClusterProps = { ... }
9936
9936
 
9937
9937
  | **Name** | **Type** | **Description** |
9938
9938
  | --- | --- | --- |
9939
+ | <code><a href="#@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.engineVersion">engineVersion</a></code> | <code>aws-cdk-lib.aws_rds.AuroraPostgresEngineVersion</code> | The version of the database engine to be used. |
9939
9940
  | <code><a href="#@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.instanceName">instanceName</a></code> | <code>string</code> | Instance name used for the optional tunnel host. |
9940
9941
  | <code><a href="#@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | VPC to deploy the Aurora cluster into. |
9941
9942
  | <code><a href="#@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.clusterProps">clusterProps</a></code> | <code><a href="#@btc-embedded/cdk-extensions.AuroraPostgresClusterOverrides">AuroraPostgresClusterOverrides</a></code> | Optional Aurora cluster overrides. |
@@ -9943,6 +9944,18 @@ const auroraPostgresClusterProps: AuroraPostgresClusterProps = { ... }
9943
9944
 
9944
9945
  ---
9945
9946
 
9947
+ ##### `engineVersion`<sup>Required</sup> <a name="engineVersion" id="@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.engineVersion"></a>
9948
+
9949
+ ```typescript
9950
+ public readonly engineVersion: AuroraPostgresEngineVersion;
9951
+ ```
9952
+
9953
+ - *Type:* aws-cdk-lib.aws_rds.AuroraPostgresEngineVersion
9954
+
9955
+ The version of the database engine to be used.
9956
+
9957
+ ---
9958
+
9946
9959
  ##### `instanceName`<sup>Required</sup> <a name="instanceName" id="@btc-embedded/cdk-extensions.AuroraPostgresClusterProps.property.instanceName"></a>
9947
9960
 
9948
9961
  ```typescript
package/CHANGELOG.md CHANGED
@@ -1,4 +1,26 @@
1
1
 
2
+ ## [0.22.24](https://github.com/btc-embedded/cdk-extensions/compare/v0.22.23...v0.22.24) (2026-03-10)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * fix setting policies for EFS clients ([6f7007e](https://github.com/btc-embedded/cdk-extensions/commit/6f7007e395a8b91d52fd0d184e447e9868a00c93))
8
+ * removed obsolete code ([ad25162](https://github.com/btc-embedded/cdk-extensions/commit/ad2516219bf1cc16b1d2afda6d66d2a3a9682f37))
9
+
10
+ ## [0.22.23](https://github.com/btc-embedded/cdk-extensions/compare/v0.22.22...v0.22.23) (2026-03-09)
11
+
12
+
13
+ ### Features
14
+
15
+ * support creating extensions without using basePlatform imports ([0eb6723](https://github.com/btc-embedded/cdk-extensions/commit/0eb672360e5c379c11fc9990729604ae5040a182))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * fixed documentation ([1a136b4](https://github.com/btc-embedded/cdk-extensions/commit/1a136b46bbbd5b469d42de0cfc54d09d8f1cee89))
21
+ * fixed linter issues ([e5d0626](https://github.com/btc-embedded/cdk-extensions/commit/e5d0626f26343798d92d9c8894033d8d3677dbd1))
22
+ * fixed tests ([d48e17a](https://github.com/btc-embedded/cdk-extensions/commit/d48e17a9a2ceac0cf2d1a25202214d55add1561a))
23
+
2
24
  ## [0.22.22](https://github.com/btc-embedded/cdk-extensions/compare/v0.22.21...v0.22.22) (2026-03-05)
3
25
 
4
26
  ## [0.22.21](https://github.com/btc-embedded/cdk-extensions/compare/v0.22.20...v0.22.21) (2026-03-05)
@@ -248,7 +248,7 @@ Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.ht
248
248
  `),Js={insert:"+ ",delete:"- ",replace:"! ",equal:" "},br=!1,cn=[],_o=new s(null,ee,Z).getGroupedOpcodes(),yr=0,En=_o.length;yr<En;yr++)if(rt=_o[yr],!br){if(br=!0,We=z?` ${z}`:"",Li=Y?` ${Y}`:"",cn.push(`*** ${G}${We}${Me}`),cn.push(`--- ${H}${Li}${Me}`),[_t,Nn]=[rt[0],rt[rt.length-1]],cn.push("***************"+Me),Ue=l(_t[1],Nn[2]),cn.push(`*** ${Ue} ****${Me}`),o((function(){var Co,os,Us;for(Us=[],os=0,Co=rt.length;os<Co;os++)[dr,ve,ve,ve,ve]=rt[os],Us.push(dr==="replace"||dr==="delete");return Us})())){for(Lr=0,Ss=rt.length;Lr<Ss;Lr++)if([dr,wt,nn,ve,ve]=rt[Lr],dr!=="insert")for(Ho=ee.slice(wt,nn),rs=0,xr=Ho.length;rs<xr;rs++)Ln=Ho[rs],cn.push(Js[dr]+Ln)}if(qe=l(_t[3],Nn[4]),cn.push(`--- ${qe} ----${Me}`),o((function(){var Co,os,Us;for(Us=[],os=0,Co=rt.length;os<Co;os++)[dr,ve,ve,ve,ve]=rt[os],Us.push(dr==="replace"||dr==="insert");return Us})())){for(Wr=0,Ni=rt.length;Wr<Ni;Wr++)if([dr,ve,ve,rn,vr]=rt[Wr],dr!=="delete")for(ss=Z.slice(rn,vr),Fs=0,sn=ss.length;Fs<sn;Fs++)Ln=ss[Fs],cn.push(Js[dr]+Ln)}}return cn},k=function(ee,Z,G,H=n){return new t(G,H).compare(ee,Z)},j=function(ee,Z){var G,H,z,Y,oe,Me,ve;if(ve={1:"- ",2:"+ "}[Z],!ve)throw new Error(`unknow delta choice (must be 1 or 2): ${Z}`);for(oe=[" ",ve],Y=[],G=0,H=ee.length;G<H;G++)z=ee[G],Me=z.slice(0,2),J.call(oe,Me)>=0&&Y.push(z.slice(2));return Y},Ra._arrayCmp=i,Ra.SequenceMatcher=s,Ra.getCloseMatches=A,Ra._countLeading=c,Ra.Differ=t,Ra.IS_LINE_JUNK=r,Ra.IS_CHARACTER_JUNK=n,Ra._formatRangeUnified=p,Ra.unifiedDiff=W,Ra._formatRangeContext=l,Ra.contextDiff=y,Ra.ndiff=k,Ra.restore=j}).call(Ra)});var X1t=F((E1s,J1t)=>{J1t.exports=Y1t()});var bPe=F((y1s,Z1t)=>{var eKr=function(t){let e=typeof t;return t==null?"null":e==="object"&&t.constructor===Array?"array":e==="object"&&t instanceof Date?"date":e},xPe=function(t,e){let n=typeof t;if(n==="array")return t.map(r=>xPe(r,e));if(n==="object"){for(let r in t)t[r]=xPe(t[r],e);return t}else return n==="number"&&Number.isFinite(t)&&!Number.isInteger(t)?+t.toFixed(e):t};Z1t.exports={extendedTypeOf:eKr,roundObj:xPe}});var rFt=F((_1s,nFt)=>{var tFt={};nFt.exports=tFt;var eFt={reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],grey:[90,39],brightRed:[91,39],brightGreen:[92,39],brightYellow:[93,39],brightBlue:[94,39],brightMagenta:[95,39],brightCyan:[96,39],brightWhite:[97,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgGray:[100,49],bgGrey:[100,49],bgBrightRed:[101,49],bgBrightGreen:[102,49],bgBrightYellow:[103,49],bgBrightBlue:[104,49],bgBrightMagenta:[105,49],bgBrightCyan:[106,49],bgBrightWhite:[107,49],blackBG:[40,49],redBG:[41,49],greenBG:[42,49],yellowBG:[43,49],blueBG:[44,49],magentaBG:[45,49],cyanBG:[46,49],whiteBG:[47,49]};Object.keys(eFt).forEach(function(t){var e=eFt[t],n=tFt[t]=[];n.open="\x1B["+e[0]+"m",n.close="\x1B["+e[1]+"m"})});var oFt=F((C1s,sFt)=>{"use strict";sFt.exports=function(t,e){e=e||process.argv;var n=e.indexOf("--"),r=/^-{1,2}/.test(t)?"":"--",s=e.indexOf(r+t);return s!==-1&&(n===-1?!0:s<n)}});var aFt=F((R1s,iFt)=>{"use strict";var tKr=require("os"),kl=oFt(),Ta=process.env,OI=void 0;kl("no-color")||kl("no-colors")||kl("color=false")?OI=!1:(kl("color")||kl("colors")||kl("color=true")||kl("color=always"))&&(OI=!0);"FORCE_COLOR"in Ta&&(OI=Ta.FORCE_COLOR.length===0||parseInt(Ta.FORCE_COLOR,10)!==0);function nKr(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function rKr(t){if(OI===!1)return 0;if(kl("color=16m")||kl("color=full")||kl("color=truecolor"))return 3;if(kl("color=256"))return 2;if(t&&!t.isTTY&&OI!==!0)return 0;var e=OI?1:0;if(process.platform==="win32"){var n=tKr.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in Ta)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(function(s){return s in Ta})||Ta.CI_NAME==="codeship"?1:e;if("TEAMCITY_VERSION"in Ta)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ta.TEAMCITY_VERSION)?1:0;if("TERM_PROGRAM"in Ta){var r=parseInt((Ta.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ta.TERM_PROGRAM){case"iTerm.app":return r>=3?3:2;case"Hyper":return 3;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ta.TERM)?2:/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(Ta.TERM)||"COLORTERM"in Ta?1:(Ta.TERM==="dumb",e)}function DPe(t){var e=rKr(t);return nKr(e)}iFt.exports={supportsColor:DPe,stdout:DPe(process.stdout),stderr:DPe(process.stderr)}});var uFt=F((T1s,cFt)=>{cFt.exports=function(e,n){var r="";e=e||"Run the trap, drop the bass",e=e.split("");var s={a:["@","\u0104","\u023A","\u0245","\u0394","\u039B","\u0414"],b:["\xDF","\u0181","\u0243","\u026E","\u03B2","\u0E3F"],c:["\xA9","\u023B","\u03FE"],d:["\xD0","\u018A","\u0500","\u0501","\u0502","\u0503"],e:["\xCB","\u0115","\u018E","\u0258","\u03A3","\u03BE","\u04BC","\u0A6C"],f:["\u04FA"],g:["\u0262"],h:["\u0126","\u0195","\u04A2","\u04BA","\u04C7","\u050A"],i:["\u0F0F"],j:["\u0134"],k:["\u0138","\u04A0","\u04C3","\u051E"],l:["\u0139"],m:["\u028D","\u04CD","\u04CE","\u0520","\u0521","\u0D69"],n:["\xD1","\u014B","\u019D","\u0376","\u03A0","\u048A"],o:["\xD8","\xF5","\xF8","\u01FE","\u0298","\u047A","\u05DD","\u06DD","\u0E4F"],p:["\u01F7","\u048E"],q:["\u09CD"],r:["\xAE","\u01A6","\u0210","\u024C","\u0280","\u042F"],s:["\xA7","\u03DE","\u03DF","\u03E8"],t:["\u0141","\u0166","\u0373"],u:["\u01B1","\u054D"],v:["\u05D8"],w:["\u0428","\u0460","\u047C","\u0D70"],x:["\u04B2","\u04FE","\u04FC","\u04FD"],y:["\xA5","\u04B0","\u04CB"],z:["\u01B5","\u0240"]};return e.forEach(function(o){o=o.toLowerCase();var i=s[o]||[" "],a=Math.floor(Math.random()*i.length);typeof s[o]<"u"?r+=s[o][a]:r+=o}),r}});var dFt=F((I1s,lFt)=>{lFt.exports=function(e,n){e=e||" he is here ";var r={up:["\u030D","\u030E","\u0304","\u0305","\u033F","\u0311","\u0306","\u0310","\u0352","\u0357","\u0351","\u0307","\u0308","\u030A","\u0342","\u0313","\u0308","\u034A","\u034B","\u034C","\u0303","\u0302","\u030C","\u0350","\u0300","\u0301","\u030B","\u030F","\u0312","\u0313","\u0314","\u033D","\u0309","\u0363","\u0364","\u0365","\u0366","\u0367","\u0368","\u0369","\u036A","\u036B","\u036C","\u036D","\u036E","\u036F","\u033E","\u035B","\u0346","\u031A"],down:["\u0316","\u0317","\u0318","\u0319","\u031C","\u031D","\u031E","\u031F","\u0320","\u0324","\u0325","\u0326","\u0329","\u032A","\u032B","\u032C","\u032D","\u032E","\u032F","\u0330","\u0331","\u0332","\u0333","\u0339","\u033A","\u033B","\u033C","\u0345","\u0347","\u0348","\u0349","\u034D","\u034E","\u0353","\u0354","\u0355","\u0356","\u0359","\u035A","\u0323"],mid:["\u0315","\u031B","\u0300","\u0301","\u0358","\u0321","\u0322","\u0327","\u0328","\u0334","\u0335","\u0336","\u035C","\u035D","\u035E","\u035F","\u0360","\u0362","\u0338","\u0337","\u0361"," \u0489"]},s=[].concat(r.up,r.down,r.mid);function o(c){var l=Math.floor(Math.random()*c);return l}function i(c){var l=!1;return s.filter(function(p){l=p===c}),l}function a(c,l){var p="",d,S;l=l||{},l.up=typeof l.up<"u"?l.up:!0,l.mid=typeof l.mid<"u"?l.mid:!0,l.down=typeof l.down<"u"?l.down:!0,l.size=typeof l.size<"u"?l.size:"maxi",c=c.split("");for(S in c)if(!i(S)){switch(p=p+c[S],d={up:0,down:0,mid:0},l.size){case"mini":d.up=o(8),d.mid=o(2),d.down=o(8);break;case"maxi":d.up=o(16)+3,d.mid=o(4)+1,d.down=o(64)+3;break;default:d.up=o(8)+1,d.mid=o(6)/2,d.down=o(8)+1;break}var y=["up","mid","down"];for(var C in y)for(var A=y[C],b=0;b<=d[A];b++)l[A]&&(p=p+r[A][o(r[A].length)])}return p}return a(e,n)}});var mFt=F((P1s,pFt)=>{pFt.exports=function(t){return function(e,n,r){if(e===" ")return e;switch(n%3){case 0:return t.red(e);case 1:return t.white(e);case 2:return t.blue(e)}}}});var gFt=F((A1s,fFt)=>{fFt.exports=function(t){return function(e,n,r){return n%2===0?e:t.inverse(e)}}});var SFt=F((v1s,hFt)=>{hFt.exports=function(t){var e=["red","yellow","green","blue","magenta"];return function(n,r,s){return n===" "?n:t[e[r++%e.length]](n)}}});var yFt=F((x1s,EFt)=>{EFt.exports=function(t){var e=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta","brightYellow","brightRed","brightGreen","brightBlue","brightWhite","brightCyan","brightMagenta"];return function(n,r,s){return n===" "?n:t[e[Math.round(Math.random()*(e.length-2))]](n)}}});var PFt=F((D1s,IFt)=>{var Yt={};IFt.exports=Yt;Yt.themes={};var sKr=require("util"),N_=Yt.styles=rFt(),CFt=Object.defineProperties,oKr=new RegExp(/[\r\n]+/g);Yt.supportsColor=aFt().supportsColor;typeof Yt.enabled>"u"&&(Yt.enabled=Yt.supportsColor()!==!1);Yt.enable=function(){Yt.enabled=!0};Yt.disable=function(){Yt.enabled=!1};Yt.stripColors=Yt.strip=function(t){return(""+t).replace(/\x1B\[\d+m/g,"")};var b1s=Yt.stylize=function(e,n){if(!Yt.enabled)return e+"";var r=N_[n];return!r&&n in Yt?Yt[n](e):r.open+e+r.close},iKr=/[|\\{}()[\]^$+*?.]/g,aKr=function(t){if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(iKr,"\\$&")};function RFt(t){var e=function n(){return uKr.apply(n,arguments)};return e._styles=t,e.__proto__=cKr,e}var TFt=(function(){var t={};return N_.grey=N_.gray,Object.keys(N_).forEach(function(e){N_[e].closeRe=new RegExp(aKr(N_[e].close),"g"),t[e]={get:function(){return RFt(this._styles.concat(e))}}}),t})(),cKr=CFt(function(){},TFt);function uKr(){var t=Array.prototype.slice.call(arguments),e=t.map(function(i){return i!=null&&i.constructor===String?i:sKr.inspect(i)}).join(" ");if(!Yt.enabled||!e)return e;for(var n=e.indexOf(`
249
249
  `)!=-1,r=this._styles,s=r.length;s--;){var o=N_[r[s]];e=o.open+e.replace(o.closeRe,o.open)+o.close,n&&(e=e.replace(oKr,function(i){return o.close+i+o.open}))}return e}Yt.setTheme=function(t){if(typeof t=="string"){console.log("colors.setTheme now only accepts an object, not a string. If you are trying to set a theme from a file, it is now your (the caller's) responsibility to require the file. The old syntax looked like colors.setTheme(__dirname + '/../themes/generic-logging.js'); The new syntax looks like colors.setTheme(require(__dirname + '/../themes/generic-logging.js'));");return}for(var e in t)(function(n){Yt[n]=function(r){if(typeof t[n]=="object"){var s=r;for(var o in t[n])s=Yt[t[n][o]](s);return s}return Yt[t[n]](r)}})(e)};function lKr(){var t={};return Object.keys(TFt).forEach(function(e){t[e]={get:function(){return RFt([e])}}}),t}var dKr=function(e,n){var r=n.split("");return r=r.map(e),r.join("")};Yt.trap=uFt();Yt.zalgo=dFt();Yt.maps={};Yt.maps.america=mFt()(Yt);Yt.maps.zebra=gFt()(Yt);Yt.maps.rainbow=SFt()(Yt);Yt.maps.random=yFt()(Yt);for(_Ft in Yt.maps)(function(t){Yt[t]=function(e){return dKr(Yt.maps[t],e)}})(_Ft);var _Ft;CFt(Yt,lKr())});var vFt=F((w1s,AFt)=>{var pKr=PFt();AFt.exports=pKr});var wFt=F(($1s,DFt)=>{var xFt=vFt(),{extendedTypeOf:bFt}=bPe(),mKr={" "(t){return t},"+":xFt.green,"-":xFt.red},KS=function(t,e,n,r,s,o){let i,a=e?`${e}: `:"",c=o+" ",l=p=>{let d=t.maxElisions===void 0?1/0:t.maxElisions;if(p<d)for(let S=0;S<p;S++)r(" ",c+"...");else r(" ",c+`... (${p} entries)`)};switch(bFt(n)){case"object":if("__old"in n&&"__new"in n&&Object.keys(n).length===2)return KS(t,e,n.__old,r,"-",o),KS(t,e,n.__new,r,"+",o);r(s,`${o}${a}{`);for(let p of Object.keys(n)){let d;i=n[p],(d=p.match(/^(.*)__deleted$/))?KS(t,d[1],i,r,"-",c):(d=p.match(/^(.*)__added$/))?KS(t,d[1],i,r,"+",c):KS(t,p,i,r,s,c)}return r(s,`${o}}`);case"array":{r(s,`${o}${a}[`);let p=!0;for(let d of n)(bFt(d)!=="array"||!(d.length===2||d.length===1&&d[0]===" ")||typeof d[0]!="string"||d[0].length!==1||![" ","-","+","~"].includes(d[0]))&&(p=!1);if(p){let d,S=0;for([d,i]of n)if(d===" "&&i==null)S++;else{if(S>0&&l(S),S=0,![" ","~","+","-"].includes(d))throw new Error(`Unexpected op '${d}' in ${JSON.stringify(n,null,2)}`);d==="~"&&(d=" "),KS(t,"",i,r,d,c)}S>0&&l(S)}else for(i of n)KS(t,"",i,r,s,c);return r(s,`${o}]`)}default:if(n===0||n===null||n===!1||n===""||n)return r(s,o+a+JSON.stringify(n))}},wPe=(t,e,n)=>KS(e,"",t,n," ",""),fKr=function(t,e={}){let n=[];return wPe(t,e,(r,s)=>n.push(`${r}${s}`)),n},gKr=function(t,e={}){let n=[];return wPe(t,e,function(r,s){return e.color==null||e.color?n.push(((e.theme!=null?e.theme[r]:void 0)!=null?e.theme!=null?e.theme[r]:void 0:mKr[r])(`${r}${s}`)+`
250
250
  `):n.push(`${r}${s}
251
- `)}),n.join("")};DFt.exports={colorize:gKr,colorizeToArray:fKr,colorizeToCallback:wPe}});var kFt=F((O1s,LFt)=>{var{SequenceMatcher:hKr}=X1t(),{extendedTypeOf:g7,roundObj:$Ft}=bPe(),{colorize:OFt,colorizeToCallback:SKr}=wFt(),$Pe=class{constructor(e){e.outputKeys=e.outputKeys||[],e.excludeKeys=e.excludeKeys||[],this.options=e}isScalar(e){return typeof e!="object"||e===null}objectDiff(e,n){let r={},s=0,o=!0;for(let[i,a]of Object.entries(e))if(!this.options.outputNewOnly){let c="__deleted";!(i in n)&&!this.options.excludeKeys.includes(i)&&(r[`${i}${c}`]=a,s-=30,o=!1)}for(let[i,a]of Object.entries(n)){let c=this.options.outputNewOnly?"":"__added";!(i in e)&&!this.options.excludeKeys.includes(i)&&(r[`${i}${c}`]=a,s-=30,o=!1)}for(let[i,a]of Object.entries(e))if(i in n){if(this.options.excludeKeys.includes(i))continue;s+=20;let c=n[i],l=this.diff(a,c);l.equal?(this.options.full||this.options.outputKeys.includes(i))&&(r[i]=a):(r[i]=l.result,o=!1),s+=Math.min(20,Math.max(-10,l.score/5))}return o?(s=100*Math.max(Object.keys(e).length,.5),this.options.full||(r=void 0)):s=Math.max(0,s),{score:s,result:r,equal:o}}findMatchingObject(e,n,r){let s=null;for(let[o,{item:i,index:a}]of Object.entries(r))if(o!=="__next"){let c=Math.abs(a-n);if(g7(e)===g7(i)){let{score:l}=this.diff(e,i);(!s||l>s.score||l===s.score&&c<s.indexDistance)&&(s={score:l,key:o,indexDistance:c})}}return s}scalarize(e,n,r){let s=[];if(r){let i={};for(let a=0;a<e.length;a++){let c=e[a];if(this.isScalar(c))continue;let l=this.findMatchingObject(c,a,r);l&&(!i[l.key]||l.score>i[l.key].score)&&(i[l.key]={score:l.score,index:a})}for(let[a,c]of Object.entries(i))s[c.index]=a}let o=[];for(let i=0;i<e.length;i++){let a=e[i];if(this.isScalar(a))o.push(a);else{let c=s[i]||"__$!SCALAR"+n.__next++;n[c]={item:a,index:i},o.push(c)}}return o}isScalarized(e,n){return typeof e=="string"&&e in n}descalarize(e,n){return this.isScalarized(e,n)?n[e].item:e}arrayDiff(e,n){let r={__next:1},s=this.scalarize(e,r),o={__next:r.__next},i=this.scalarize(n,o,r);this.options.sort&&(s.sort(),i.sort());let a=new hKr(null,s,i).getOpcodes(),c=[],l=0,p=!0;for(let[d,S,y,C,A]of a){let b,$,k,j,W,J,ee,Z;switch(d==="equal"||this.options.keysOnly&&d==="replace"||(p=!1),d){case"equal":for(b=S,j=y,k=S<=j;k?b<j:b>j;k?b++:b--){let G=s[b];if(this.isScalarized(G,r)){if(!this.isScalarized(G,o))throw new Error(`internal bug: isScalarized(item, originals1) != isScalarized(item, originals2) for item ${JSON.stringify(G)}`);let H=this.descalarize(G,r),z=this.descalarize(G,o),Y=this.diff(H,z);Y.equal?this.options.full||this.options.keepUnchangedValues?c.push([" ",H]):c.push([" "]):(c.push(["~",Y.result]),p=!1)}else this.options.full||this.options.keepUnchangedValues?c.push([" ",G]):c.push([" "]);l+=10}break;case"delete":for(b=S,J=y,W=S<=J;W?b<J:b>J;W?b++:b--)c.push(["-",this.descalarize(s[b],r)]),l-=5;break;case"insert":for($=C,Z=A,ee=C<=Z;ee?$<Z:$>Z;ee?$++:$--)c.push(["+",this.descalarize(i[$],o)]),l-=5;break;case"replace":if(this.options.keysOnly){let G,H;for(b=S,H=y,G=S<=H;G?b<H:b>H;G?b++:b--){let z=this.diff(this.descalarize(s[b],r),this.descalarize(i[b-S+C],o));z.equal?c.push([" "]):(c.push(["~",z.result]),p=!1)}}else{let G,H,z,Y;for(b=S,H=y,G=S<=H;G?b<H:b>H;G?b++:b--)c.push(["-",this.descalarize(s[b],r)]),l-=5;for($=C,Y=A,z=C<=Y;z?$<Y:$>Y;z?$++:$--)c.push(["+",this.descalarize(i[$],o)]),l-=5}break}}return p||a.length===0?(this.options.full?c=e:c=void 0,l=100):l=Math.max(0,l),{score:l,result:c,equal:p}}diff(e,n){let r=g7(e),s=g7(n);if(r===s)switch(r){case"object":return this.objectDiff(e,n);case"array":return this.arrayDiff(e,n)}let o=100,i=e,a;return this.options.keysOnly?(a=!0,i=void 0):(r==="date"&&s==="date"?a=e.getTime()===n.getTime():a=e===n,a?this.options.full||(i=void 0):(o=0,this.options.outputNewOnly?i=n:i={__old:e,__new:n})),{score:o,result:i,equal:a}}};function NFt(t,e,n={}){return n.precision!==void 0&&(t=$Ft(t,n.precision),e=$Ft(e,n.precision)),new $Pe(n).diff(t,e).result}function EKr(t,e,n={}){return OFt(NFt(t,e,n),n)}LFt.exports={diff:NFt,diffString:EKr,colorize:OFt,colorizeToCallback:SKr}});var GFt=F((V1s,wKr)=>{wKr.exports={name:"@btc-embedded/cdk-extensions",description:"A collection of useful CDK extensions and common logic",repository:{type:"git",url:"https://github.com/btc-embedded/cdk-extensions.git"},bin:{catnip:"assets/cli/catnip.js"},scripts:{build:"npx projen build",bump:"npx projen bump",bundle:"npx projen bundle","bundle:cli/catnip":"npx projen bundle:cli/catnip","bundle:constructs/api-keys/lambdas/api-client-authorization.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-client-authorization.lambda","bundle:constructs/api-keys/lambdas/api-client-authorization.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-client-authorization.lambda:watch","bundle:constructs/api-keys/lambdas/api-key-creation.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-key-creation.lambda","bundle:constructs/api-keys/lambdas/api-key-creation.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-key-creation.lambda:watch","bundle:constructs/api-keys/lambdas/api-key-update.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-key-update.lambda","bundle:constructs/api-keys/lambdas/api-key-update.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-key-update.lambda:watch","bundle:constructs/api-keys/lambdas/pre-token.lambda":"npx projen bundle:constructs/api-keys/lambdas/pre-token.lambda","bundle:constructs/api-keys/lambdas/pre-token.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/pre-token.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda","bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda:watch",clobber:"npx projen clobber",compat:"npx projen compat",compile:"npx projen compile",default:"npx projen default",docgen:"npx projen docgen",eject:"npx projen eject",eslint:"npx projen eslint","eslint:ci":"npx projen eslint:ci",integ:"npx projen integ","integ:update":"npx projen integ:update",package:"npx projen package","package-all":"npx projen package-all","package:js":"npx projen package:js","post-compile":"npx projen post-compile","post-upgrade":"npx projen post-upgrade","pre-compile":"npx projen pre-compile","publish:git":"npx projen publish:git",release:"npx projen release",test:"npx projen test","test:watch":"npx projen test:watch",typecheck:"npx projen typecheck",unbump:"npx projen unbump","update-docs":"npx projen update-docs",upgrade:"npx projen upgrade",watch:"npx projen watch","yalc:watch":"npx projen yalc:watch",projen:"npx projen"},author:{name:"BTC Embedded Systems AG",url:"https://www.btc-embedded.com",organization:!0},devDependencies:{"@aws-cdk-containers/ecs-service-extensions":"2.0.1-alpha.535","@aws-cdk/integ-runner":"latest","@aws-cdk/integ-tests-alpha":"latest","@aws-sdk/client-cloudformation":"^3.993.0","@aws-sdk/client-cloudwatch-logs":"^3.993.0","@aws-sdk/client-ecs":"^3.993.0","@aws-sdk/client-ssm":"^3.999.0","@aws-sdk/credential-providers":"^3.993.0","@types/aws-api-gateway-client":"^0.3.3","@types/jest":"^30.0.0","@types/json-diff":"^1.0.3","@types/node":"^24.10.9","@types/url-template":"^3.0.0","@typescript-eslint/eslint-plugin":"^8","@typescript-eslint/parser":"^8","aws-api-gateway-client":"^0.3.7","aws-cdk-lib":"2.232.1","aws-sdk-client-mock":"^4.1.0","cdk-nag":"^2.37.55",commander:"^14.0.3","commit-and-tag-version":"^12",constructs:"10.0.5",esbuild:"^0.27.1",eslint:"^9","eslint-config-prettier":"^10.1.8","eslint-formatter-gitlab":"^7.0.1","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-import":"^2.32.0","eslint-plugin-prettier":"^5.5.5",jest:"^30.2.0","jest-junit":"^16",jsii:"~5.9.0","jsii-diff":"^1.125.0","jsii-docgen":"^10.5.0","jsii-pacmak":"^1.125.0","jsii-rosetta":"~5.9.0","json-diff":"^1.0.6",nodemon:"^3.1.11",prettier:"^3.8.0",projen:"^0.99.3","ts-jest":"^29.4.6","ts-node":"^10.9.2",typedoc:"^0.28.16","typedoc-plugin-markdown":"^4.9.0",typescript:"^5.9.3","url-template":"^3.1.1",yalc:"^1.0.0-pre.53"},peerDependencies:{"@aws-cdk-containers/ecs-service-extensions":">=2.0.1-alpha.535","aws-cdk-lib":"^2.232.1",constructs:"^10.0.5"},dependencies:{"@aws-lambda-powertools/logger":"^2.30.2","@aws-lambda-powertools/parameters":"^2.30.2","@aws-lambda-powertools/parser":"^2.30.2","@aws-sdk/client-cognito-identity-provider":"^3.965.0","@aws-sdk/client-dynamodb":"^3.948.0","@aws-sdk/client-secrets-manager":"^3.971.0","@aws-sdk/lib-dynamodb":"^3.948.0","@types/aws-lambda":"^8.10.159",yaml:"^2.8.2",zod:"~3"},bundledDependencies:["@aws-lambda-powertools/logger","@aws-lambda-powertools/parameters","@aws-lambda-powertools/parser","@aws-sdk/client-cognito-identity-provider","@aws-sdk/client-dynamodb","@aws-sdk/client-secrets-manager","@aws-sdk/lib-dynamodb","@types/aws-lambda","yaml","zod"],resolutions:{"@smithy/types":"^4.12.0"},keywords:["cdk"],main:"lib/index.js",license:"Apache-2.0",version:"0.22.23",jest:{coverageProvider:"v8",maxWorkers:4,collectCoverageFrom:["src/**/*.ts"],coveragePathIgnorePatterns:["/node_modules/","\\.generated\\.[jt]s$","<rootDir>/test/","\\.warnings\\.jsii\\.js$"],testMatch:["<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)","<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"],clearMocks:!0,collectCoverage:!0,coverageReporters:["json","lcov","clover","cobertura","text"],coverageDirectory:"coverage",testPathIgnorePatterns:["/node_modules/"],watchPathIgnorePatterns:["/node_modules/"],reporters:["default",["jest-junit",{outputDirectory:"test-reports"}]],transform:{"^.+\\.[t]sx?$":["ts-jest",{tsconfig:"tsconfig.dev.json",diagnostics:!1}]}},types:"lib/index.d.ts",stability:"experimental",jsii:{outdir:"dist",targets:{},tsc:{outDir:"lib",rootDir:"src"},excludeTypescript:["src/cli/**"]},"//":'~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".'}});var WPe=P(jPe(),1),{program:BKr,createCommand:HKr,createArgument:VKr,createOption:jKr,CommanderError:WKr,InvalidArgumentError:zKr,InvalidOptionArgumentError:KKr,Command:zPe,Argument:QKr,Option:YKr,Help:JKr}=WPe.default;var UMt=P(AE()),qMt=P(S3()),GMt=P(cpe()),BMt=P(Gb()),HMt=P(LSe()),VMt=P(uPe()),jMt=P(Fre());function xI(t){return{...t.region&&{region:t.region},...t.profile&&{credentials:(0,jMt.fromIni)({profile:t.profile})}}}function HS(t){return new UMt.CloudFormationClient(xI(t))}function bI(t){return new BMt.ECSClient(xI(t))}function t7(t){return new qMt.CloudWatchLogsClient(xI(t))}function WMt(t){return new GMt.CognitoIdentityProviderClient(xI(t))}function zMt(t){return new HMt.SecretsManagerClient(xI(t))}function KMt(t){return new VMt.SSMClient(xI(t))}function lPe(t){return{cfClient:HS(t),ecsClient:bI(t),logsClient:t7(t)}}var DI=P(Gb());var EN=P(S3());async function*SN(t,e={}){let n,r=0;for(;;){if(e.maxPages!==void 0&&r>=e.maxPages)return;let s=await t(n);if(r+=1,yield{...s,page:r},!s.nextToken)return;n=s.nextToken}}async function*$i(t,e={}){for await(let n of SN(t,e))for(let r of n.items)yield r}var zzr=50,Kzr=10;async function QMt(t,e,n,r,s=Kzr){let o=[];for await(let i of SN(async a=>{let c=await t.send(new EN.DescribeLogStreamsCommand({logGroupName:e,orderBy:"LastEventTime",descending:!0,limit:zzr,nextToken:a}));return{items:c.logStreams??[],nextToken:c.nextToken}},{maxPages:s})){let a=i.items;o.push(a.map(l=>l.logStreamName).filter(l=>l!==void 0));let c=a.find(l=>r?l.logStreamName?.endsWith(`/${r}/${n}`):l.logStreamName?.includes(n));if(c?.logStreamName)return c.logStreamName}return o.flatMap(i=>i).find(i=>i.includes(n))}async function dPe(t,e,n){let r=await t.send(new EN.GetLogEventsCommand({logGroupName:e.logGroup,logStreamName:e.logStreamName,limit:n,startFromHead:!1}));return{state:{key:e.key,serviceName:e.serviceName,containerName:e.containerName,logGroup:e.logGroup,logStreamName:e.logStreamName,nextToken:r.nextForwardToken},events:r.events??[]}}async function YMt(t,e){let n=await t.send(new EN.GetLogEventsCommand({logGroupName:e.logGroup,logStreamName:e.logStreamName,nextToken:e.nextToken}));return{events:n.events??[],nextToken:n.nextForwardToken}}function JMt(t){return new Map(t.map(e=>[e.key,e]))}function Qzr(t){let e=t.split("/");return e.length>=3?e[e.length-2]:void 0}async function Yzr(t,e,n){let r=[];for await(let s of $i(async o=>{let i=await t.send(new DI.ListTasksCommand({cluster:e,serviceName:n,desiredStatus:"RUNNING",nextToken:o}));return{items:i.taskArns??[],nextToken:i.nextToken}}))r.push(s);return r}async function XMt(t,e){let n=e.split("/").pop()??e,r=Qzr(e),o=(await t.send(new DI.DescribeServicesCommand({...r&&{cluster:r},services:[e]}))).services?.[0];if(!o)return{context:void 0,warning:`[${n}] Could not retrieve service details, skipping.`};let i=o.clusterArn??r;if(!i)return{context:void 0,warning:`[${n}] Could not determine cluster, skipping.`};let a=o.taskDefinition;if(!a)return{context:void 0,warning:`[${n}] Missing task definition, skipping.`};let l=((await t.send(new DI.DescribeTaskDefinitionCommand({taskDefinition:a}))).taskDefinition?.containerDefinitions??[]).flatMap(p=>{let d=p.logConfiguration?.options?.["awslogs-group"];return!p.name||!d||p.logConfiguration?.logDriver!=="awslogs"?[]:[{containerName:p.name,logGroup:d}]});return l.length===0?{context:void 0,warning:`[${n}] No awslogs container configuration found, skipping.`}:{context:{serviceArn:e,serviceName:n,clusterArn:i,logConfigs:l},warning:void 0}}async function pPe(t,e,n){let r=await Yzr(t,n.clusterArn,n.serviceArn),s=[],o=new Set;for(let i of r){let a=i.split("/").pop()??i;for(let{containerName:c,logGroup:l}of n.logConfigs){let p=await QMt(e,l,a,c);if(!p)continue;let d=`${l}::${p}`;o.has(d)||(o.add(d),s.push({key:d,serviceName:n.serviceName,containerName:c,logGroup:l,logStreamName:p}))}}return s}var ZMt=P(AE());async function e1t(t,e){let n=[];for await(let r of $i(async s=>{let o=await t.send(new ZMt.ListStackResourcesCommand({StackName:e,NextToken:s}));return{items:o.StackResourceSummaries??[],nextToken:o.NextToken}}))r.ResourceType==="AWS::ECS::Service"&&r.PhysicalResourceId&&n.push(r.PhysicalResourceId);return n}var Jzr=2e3,Xzr=1e4;function Zzr(t,e,n){if(!e)return t;let r=t.filter(s=>s.includes(e));if(r.length===0)throw new Error(`No ECS services matching '${e}' found in stack '${n}'.`);return r}function e6r(t,e){let n=[];for(let r of t)r.warning&&e.displayServiceWarning(r.warning),r.context&&n.push(r.context);return n}function mPe(t,e,n,r){t.displayLogEvents({serviceName:e.serviceName,containerName:e.containerName,events:n,mode:r})}async function t6r(t,e,n,r,s,o){let i=new Map;for(let a of t){let c=await pPe(e.ecsClient,e.logsClient,a);if(c.length===0){n.displayNoRunningStreams(a.serviceName);continue}(await Promise.all(c.map(async p=>{try{return{key:p.key,...await dPe(e.logsClient,p,o)}}catch(d){n.displayPrimeError(p,r.toErrorMessage(d));return}}))).filter(p=>p!==void 0).forEach(p=>{mPe(n,p.state,p.events,s),i.set(p.key,p.state)})}return i}async function n6r(t,e,n,r,s,o){(await Promise.all(Array.from(t.values()).filter(()=>o()).map(async a=>{try{let c=await YMt(e.logsClient,a);return mPe(n,a,c.events,s),{key:a.key,nextToken:c.nextToken}}catch(c){n.displayPollError(a,r.toErrorMessage(c));return}}))).filter(a=>a!==void 0).forEach(a=>{let c=t.get(a.key);c&&(c.nextToken=a.nextToken)})}async function r6r(t,e,n,r,s,o,i){let a=await Promise.all(t.map(async d=>{try{return await pPe(n.ecsClient,n.logsClient,d)}catch(S){return r.displayReconcileError(d.serviceName,s.toErrorMessage(S)),[]}})),c=JMt(a.flatMap(d=>d)),l=Array.from(c.entries()).filter(([d])=>!e.has(d));(await Promise.all(l.map(async([d,S])=>{try{return{key:d,stream:S,...await dPe(n.logsClient,S,i)}}catch(y){r.displayPrimeNewStreamError(S,s.toErrorMessage(y));return}}))).filter(d=>d!==void 0).forEach(d=>{mPe(r,d.state,d.events,o),e.set(d.key,d.state),r.displayStreamStarted(d.stream)}),Array.from(e.keys()).filter(d=>!c.has(d)).forEach(d=>{let S=e.get(d);e.delete(d),S&&r.displayStreamEnded(S)})}async function t1t(t,e,n,r,s=()=>!0){n.displayCommandContext({commandName:"ecs-logs",stackName:t.stackName,region:t.region});let o=await e1t(e.cfClient,t.stackName);if(o.length===0)throw new Error(`No ECS services found in stack '${t.stackName}'.`);let i=Zzr(o,t.service,t.stackName);t.output==="raw"&&i.length>1&&n.displayInterleavingWarning();let a=await Promise.all(i.map(d=>XMt(e.ecsClient,d))),c=e6r(a,n),l=await t6r(c,e,n,r,t.output,t.tail);if(!t.follow)return;l.size===0&&n.displayNoStreamsToFollow();let p=Date.now();for(;s()&&(await r.sleep(Jzr),!!s());)await n6r(l,e,n,r,t.output,s),!(Date.now()-p<Xzr)&&(await r6r(c,l,e,n,r,t.output,t.tail),p=Date.now())}var yN="\x1B[0m",n7="\x1B[1m",s6r="\x1B[2m",o6r="\x1B[31m",i6r="\x1B[36m";function _N(){return process.env.NO_COLOR!==void 0?!1:!!process.stdout.isTTY}function wI(t){let e=` \u{1F431} catnip \u2014 ${t} `,n=Math.max(e.length+2,44),r="\u2550".repeat(n);if(!_N()){console.log(`\u2554${r}\u2557`),console.log(`\u2551${e.padEnd(n)}\u2551`),console.log(`\u255A${r}\u255D`);return}console.log(`${i6r}${n7}\u2554${r}\u2557`),console.log(`\u2551${e.padEnd(n)}\u2551`),console.log(`\u255A${r}\u255D${yN}`)}function df(t){if(!_N()){console.log(`
251
+ `)}),n.join("")};DFt.exports={colorize:gKr,colorizeToArray:fKr,colorizeToCallback:wPe}});var kFt=F((O1s,LFt)=>{var{SequenceMatcher:hKr}=X1t(),{extendedTypeOf:g7,roundObj:$Ft}=bPe(),{colorize:OFt,colorizeToCallback:SKr}=wFt(),$Pe=class{constructor(e){e.outputKeys=e.outputKeys||[],e.excludeKeys=e.excludeKeys||[],this.options=e}isScalar(e){return typeof e!="object"||e===null}objectDiff(e,n){let r={},s=0,o=!0;for(let[i,a]of Object.entries(e))if(!this.options.outputNewOnly){let c="__deleted";!(i in n)&&!this.options.excludeKeys.includes(i)&&(r[`${i}${c}`]=a,s-=30,o=!1)}for(let[i,a]of Object.entries(n)){let c=this.options.outputNewOnly?"":"__added";!(i in e)&&!this.options.excludeKeys.includes(i)&&(r[`${i}${c}`]=a,s-=30,o=!1)}for(let[i,a]of Object.entries(e))if(i in n){if(this.options.excludeKeys.includes(i))continue;s+=20;let c=n[i],l=this.diff(a,c);l.equal?(this.options.full||this.options.outputKeys.includes(i))&&(r[i]=a):(r[i]=l.result,o=!1),s+=Math.min(20,Math.max(-10,l.score/5))}return o?(s=100*Math.max(Object.keys(e).length,.5),this.options.full||(r=void 0)):s=Math.max(0,s),{score:s,result:r,equal:o}}findMatchingObject(e,n,r){let s=null;for(let[o,{item:i,index:a}]of Object.entries(r))if(o!=="__next"){let c=Math.abs(a-n);if(g7(e)===g7(i)){let{score:l}=this.diff(e,i);(!s||l>s.score||l===s.score&&c<s.indexDistance)&&(s={score:l,key:o,indexDistance:c})}}return s}scalarize(e,n,r){let s=[];if(r){let i={};for(let a=0;a<e.length;a++){let c=e[a];if(this.isScalar(c))continue;let l=this.findMatchingObject(c,a,r);l&&(!i[l.key]||l.score>i[l.key].score)&&(i[l.key]={score:l.score,index:a})}for(let[a,c]of Object.entries(i))s[c.index]=a}let o=[];for(let i=0;i<e.length;i++){let a=e[i];if(this.isScalar(a))o.push(a);else{let c=s[i]||"__$!SCALAR"+n.__next++;n[c]={item:a,index:i},o.push(c)}}return o}isScalarized(e,n){return typeof e=="string"&&e in n}descalarize(e,n){return this.isScalarized(e,n)?n[e].item:e}arrayDiff(e,n){let r={__next:1},s=this.scalarize(e,r),o={__next:r.__next},i=this.scalarize(n,o,r);this.options.sort&&(s.sort(),i.sort());let a=new hKr(null,s,i).getOpcodes(),c=[],l=0,p=!0;for(let[d,S,y,C,A]of a){let b,$,k,j,W,J,ee,Z;switch(d==="equal"||this.options.keysOnly&&d==="replace"||(p=!1),d){case"equal":for(b=S,j=y,k=S<=j;k?b<j:b>j;k?b++:b--){let G=s[b];if(this.isScalarized(G,r)){if(!this.isScalarized(G,o))throw new Error(`internal bug: isScalarized(item, originals1) != isScalarized(item, originals2) for item ${JSON.stringify(G)}`);let H=this.descalarize(G,r),z=this.descalarize(G,o),Y=this.diff(H,z);Y.equal?this.options.full||this.options.keepUnchangedValues?c.push([" ",H]):c.push([" "]):(c.push(["~",Y.result]),p=!1)}else this.options.full||this.options.keepUnchangedValues?c.push([" ",G]):c.push([" "]);l+=10}break;case"delete":for(b=S,J=y,W=S<=J;W?b<J:b>J;W?b++:b--)c.push(["-",this.descalarize(s[b],r)]),l-=5;break;case"insert":for($=C,Z=A,ee=C<=Z;ee?$<Z:$>Z;ee?$++:$--)c.push(["+",this.descalarize(i[$],o)]),l-=5;break;case"replace":if(this.options.keysOnly){let G,H;for(b=S,H=y,G=S<=H;G?b<H:b>H;G?b++:b--){let z=this.diff(this.descalarize(s[b],r),this.descalarize(i[b-S+C],o));z.equal?c.push([" "]):(c.push(["~",z.result]),p=!1)}}else{let G,H,z,Y;for(b=S,H=y,G=S<=H;G?b<H:b>H;G?b++:b--)c.push(["-",this.descalarize(s[b],r)]),l-=5;for($=C,Y=A,z=C<=Y;z?$<Y:$>Y;z?$++:$--)c.push(["+",this.descalarize(i[$],o)]),l-=5}break}}return p||a.length===0?(this.options.full?c=e:c=void 0,l=100):l=Math.max(0,l),{score:l,result:c,equal:p}}diff(e,n){let r=g7(e),s=g7(n);if(r===s)switch(r){case"object":return this.objectDiff(e,n);case"array":return this.arrayDiff(e,n)}let o=100,i=e,a;return this.options.keysOnly?(a=!0,i=void 0):(r==="date"&&s==="date"?a=e.getTime()===n.getTime():a=e===n,a?this.options.full||(i=void 0):(o=0,this.options.outputNewOnly?i=n:i={__old:e,__new:n})),{score:o,result:i,equal:a}}};function NFt(t,e,n={}){return n.precision!==void 0&&(t=$Ft(t,n.precision),e=$Ft(e,n.precision)),new $Pe(n).diff(t,e).result}function EKr(t,e,n={}){return OFt(NFt(t,e,n),n)}LFt.exports={diff:NFt,diffString:EKr,colorize:OFt,colorizeToCallback:SKr}});var GFt=F((V1s,wKr)=>{wKr.exports={name:"@btc-embedded/cdk-extensions",description:"A collection of useful CDK extensions and common logic",repository:{type:"git",url:"https://github.com/btc-embedded/cdk-extensions.git"},bin:{catnip:"assets/cli/catnip.js"},scripts:{build:"npx projen build",bump:"npx projen bump",bundle:"npx projen bundle","bundle:cli/catnip":"npx projen bundle:cli/catnip","bundle:constructs/api-keys/lambdas/api-client-authorization.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-client-authorization.lambda","bundle:constructs/api-keys/lambdas/api-client-authorization.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-client-authorization.lambda:watch","bundle:constructs/api-keys/lambdas/api-key-creation.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-key-creation.lambda","bundle:constructs/api-keys/lambdas/api-key-creation.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-key-creation.lambda:watch","bundle:constructs/api-keys/lambdas/api-key-update.lambda":"npx projen bundle:constructs/api-keys/lambdas/api-key-update.lambda","bundle:constructs/api-keys/lambdas/api-key-update.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/api-key-update.lambda:watch","bundle:constructs/api-keys/lambdas/pre-token.lambda":"npx projen bundle:constructs/api-keys/lambdas/pre-token.lambda","bundle:constructs/api-keys/lambdas/pre-token.lambda:watch":"npx projen bundle:constructs/api-keys/lambdas/pre-token.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-client-authorization-runner.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda","bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner-unauthorized.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-management-runner.lambda:watch","bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda":"npx projen bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda","bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda:watch":"npx projen bundle:test/constructs/api-keys/integration/api-key-pre-token-handler-runner.lambda:watch",clobber:"npx projen clobber",compat:"npx projen compat",compile:"npx projen compile",default:"npx projen default",docgen:"npx projen docgen",eject:"npx projen eject",eslint:"npx projen eslint","eslint:ci":"npx projen eslint:ci",integ:"npx projen integ","integ:update":"npx projen integ:update",package:"npx projen package","package-all":"npx projen package-all","package:js":"npx projen package:js","post-compile":"npx projen post-compile","post-upgrade":"npx projen post-upgrade","pre-compile":"npx projen pre-compile","publish:git":"npx projen publish:git",release:"npx projen release",test:"npx projen test","test:watch":"npx projen test:watch",typecheck:"npx projen typecheck",unbump:"npx projen unbump","update-docs":"npx projen update-docs",upgrade:"npx projen upgrade",watch:"npx projen watch","yalc:watch":"npx projen yalc:watch",projen:"npx projen"},author:{name:"BTC Embedded Systems AG",url:"https://www.btc-embedded.com",organization:!0},devDependencies:{"@aws-cdk-containers/ecs-service-extensions":"2.0.1-alpha.535","@aws-cdk/integ-runner":"latest","@aws-cdk/integ-tests-alpha":"latest","@aws-sdk/client-cloudformation":"^3.993.0","@aws-sdk/client-cloudwatch-logs":"^3.993.0","@aws-sdk/client-ecs":"^3.993.0","@aws-sdk/client-ssm":"^3.999.0","@aws-sdk/credential-providers":"^3.993.0","@types/aws-api-gateway-client":"^0.3.3","@types/jest":"^30.0.0","@types/json-diff":"^1.0.3","@types/node":"^24.10.9","@types/url-template":"^3.0.0","@typescript-eslint/eslint-plugin":"^8","@typescript-eslint/parser":"^8","aws-api-gateway-client":"^0.3.7","aws-cdk-lib":"2.232.1","aws-sdk-client-mock":"^4.1.0","cdk-nag":"^2.37.55",commander:"^14.0.3","commit-and-tag-version":"^12",constructs:"10.0.5",esbuild:"^0.27.1",eslint:"^9","eslint-config-prettier":"^10.1.8","eslint-formatter-gitlab":"^7.0.1","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-import":"^2.32.0","eslint-plugin-prettier":"^5.5.5",jest:"^30.2.0","jest-junit":"^16",jsii:"~5.9.0","jsii-diff":"^1.125.0","jsii-docgen":"^10.5.0","jsii-pacmak":"^1.125.0","jsii-rosetta":"~5.9.0","json-diff":"^1.0.6",nodemon:"^3.1.11",prettier:"^3.8.0",projen:"^0.99.3","ts-jest":"^29.4.6","ts-node":"^10.9.2",typedoc:"^0.28.16","typedoc-plugin-markdown":"^4.9.0",typescript:"^5.9.3","url-template":"^3.1.1",yalc:"^1.0.0-pre.53"},peerDependencies:{"@aws-cdk-containers/ecs-service-extensions":">=2.0.1-alpha.535","aws-cdk-lib":"^2.232.1",constructs:"^10.0.5"},dependencies:{"@aws-lambda-powertools/logger":"^2.30.2","@aws-lambda-powertools/parameters":"^2.30.2","@aws-lambda-powertools/parser":"^2.30.2","@aws-sdk/client-cognito-identity-provider":"^3.965.0","@aws-sdk/client-dynamodb":"^3.948.0","@aws-sdk/client-secrets-manager":"^3.971.0","@aws-sdk/lib-dynamodb":"^3.948.0","@types/aws-lambda":"^8.10.159",yaml:"^2.8.2",zod:"~3"},bundledDependencies:["@aws-lambda-powertools/logger","@aws-lambda-powertools/parameters","@aws-lambda-powertools/parser","@aws-sdk/client-cognito-identity-provider","@aws-sdk/client-dynamodb","@aws-sdk/client-secrets-manager","@aws-sdk/lib-dynamodb","@types/aws-lambda","yaml","zod"],resolutions:{"@smithy/types":"^4.12.0"},keywords:["cdk"],main:"lib/index.js",license:"Apache-2.0",version:"0.23.0",jest:{coverageProvider:"v8",maxWorkers:4,collectCoverageFrom:["src/**/*.ts"],coveragePathIgnorePatterns:["/node_modules/","\\.generated\\.[jt]s$","<rootDir>/test/","\\.warnings\\.jsii\\.js$"],testMatch:["<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)","<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"],clearMocks:!0,collectCoverage:!0,coverageReporters:["json","lcov","clover","cobertura","text"],coverageDirectory:"coverage",testPathIgnorePatterns:["/node_modules/"],watchPathIgnorePatterns:["/node_modules/"],reporters:["default",["jest-junit",{outputDirectory:"test-reports"}]],transform:{"^.+\\.[t]sx?$":["ts-jest",{tsconfig:"tsconfig.dev.json",diagnostics:!1}]}},types:"lib/index.d.ts",stability:"experimental",jsii:{outdir:"dist",targets:{},tsc:{outDir:"lib",rootDir:"src"},excludeTypescript:["src/cli/**"]},"//":'~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".'}});var WPe=P(jPe(),1),{program:BKr,createCommand:HKr,createArgument:VKr,createOption:jKr,CommanderError:WKr,InvalidArgumentError:zKr,InvalidOptionArgumentError:KKr,Command:zPe,Argument:QKr,Option:YKr,Help:JKr}=WPe.default;var UMt=P(AE()),qMt=P(S3()),GMt=P(cpe()),BMt=P(Gb()),HMt=P(LSe()),VMt=P(uPe()),jMt=P(Fre());function xI(t){return{...t.region&&{region:t.region},...t.profile&&{credentials:(0,jMt.fromIni)({profile:t.profile})}}}function HS(t){return new UMt.CloudFormationClient(xI(t))}function bI(t){return new BMt.ECSClient(xI(t))}function t7(t){return new qMt.CloudWatchLogsClient(xI(t))}function WMt(t){return new GMt.CognitoIdentityProviderClient(xI(t))}function zMt(t){return new HMt.SecretsManagerClient(xI(t))}function KMt(t){return new VMt.SSMClient(xI(t))}function lPe(t){return{cfClient:HS(t),ecsClient:bI(t),logsClient:t7(t)}}var DI=P(Gb());var EN=P(S3());async function*SN(t,e={}){let n,r=0;for(;;){if(e.maxPages!==void 0&&r>=e.maxPages)return;let s=await t(n);if(r+=1,yield{...s,page:r},!s.nextToken)return;n=s.nextToken}}async function*$i(t,e={}){for await(let n of SN(t,e))for(let r of n.items)yield r}var zzr=50,Kzr=10;async function QMt(t,e,n,r,s=Kzr){let o=[];for await(let i of SN(async a=>{let c=await t.send(new EN.DescribeLogStreamsCommand({logGroupName:e,orderBy:"LastEventTime",descending:!0,limit:zzr,nextToken:a}));return{items:c.logStreams??[],nextToken:c.nextToken}},{maxPages:s})){let a=i.items;o.push(a.map(l=>l.logStreamName).filter(l=>l!==void 0));let c=a.find(l=>r?l.logStreamName?.endsWith(`/${r}/${n}`):l.logStreamName?.includes(n));if(c?.logStreamName)return c.logStreamName}return o.flatMap(i=>i).find(i=>i.includes(n))}async function dPe(t,e,n){let r=await t.send(new EN.GetLogEventsCommand({logGroupName:e.logGroup,logStreamName:e.logStreamName,limit:n,startFromHead:!1}));return{state:{key:e.key,serviceName:e.serviceName,containerName:e.containerName,logGroup:e.logGroup,logStreamName:e.logStreamName,nextToken:r.nextForwardToken},events:r.events??[]}}async function YMt(t,e){let n=await t.send(new EN.GetLogEventsCommand({logGroupName:e.logGroup,logStreamName:e.logStreamName,nextToken:e.nextToken}));return{events:n.events??[],nextToken:n.nextForwardToken}}function JMt(t){return new Map(t.map(e=>[e.key,e]))}function Qzr(t){let e=t.split("/");return e.length>=3?e[e.length-2]:void 0}async function Yzr(t,e,n){let r=[];for await(let s of $i(async o=>{let i=await t.send(new DI.ListTasksCommand({cluster:e,serviceName:n,desiredStatus:"RUNNING",nextToken:o}));return{items:i.taskArns??[],nextToken:i.nextToken}}))r.push(s);return r}async function XMt(t,e){let n=e.split("/").pop()??e,r=Qzr(e),o=(await t.send(new DI.DescribeServicesCommand({...r&&{cluster:r},services:[e]}))).services?.[0];if(!o)return{context:void 0,warning:`[${n}] Could not retrieve service details, skipping.`};let i=o.clusterArn??r;if(!i)return{context:void 0,warning:`[${n}] Could not determine cluster, skipping.`};let a=o.taskDefinition;if(!a)return{context:void 0,warning:`[${n}] Missing task definition, skipping.`};let l=((await t.send(new DI.DescribeTaskDefinitionCommand({taskDefinition:a}))).taskDefinition?.containerDefinitions??[]).flatMap(p=>{let d=p.logConfiguration?.options?.["awslogs-group"];return!p.name||!d||p.logConfiguration?.logDriver!=="awslogs"?[]:[{containerName:p.name,logGroup:d}]});return l.length===0?{context:void 0,warning:`[${n}] No awslogs container configuration found, skipping.`}:{context:{serviceArn:e,serviceName:n,clusterArn:i,logConfigs:l},warning:void 0}}async function pPe(t,e,n){let r=await Yzr(t,n.clusterArn,n.serviceArn),s=[],o=new Set;for(let i of r){let a=i.split("/").pop()??i;for(let{containerName:c,logGroup:l}of n.logConfigs){let p=await QMt(e,l,a,c);if(!p)continue;let d=`${l}::${p}`;o.has(d)||(o.add(d),s.push({key:d,serviceName:n.serviceName,containerName:c,logGroup:l,logStreamName:p}))}}return s}var ZMt=P(AE());async function e1t(t,e){let n=[];for await(let r of $i(async s=>{let o=await t.send(new ZMt.ListStackResourcesCommand({StackName:e,NextToken:s}));return{items:o.StackResourceSummaries??[],nextToken:o.NextToken}}))r.ResourceType==="AWS::ECS::Service"&&r.PhysicalResourceId&&n.push(r.PhysicalResourceId);return n}var Jzr=2e3,Xzr=1e4;function Zzr(t,e,n){if(!e)return t;let r=t.filter(s=>s.includes(e));if(r.length===0)throw new Error(`No ECS services matching '${e}' found in stack '${n}'.`);return r}function e6r(t,e){let n=[];for(let r of t)r.warning&&e.displayServiceWarning(r.warning),r.context&&n.push(r.context);return n}function mPe(t,e,n,r){t.displayLogEvents({serviceName:e.serviceName,containerName:e.containerName,events:n,mode:r})}async function t6r(t,e,n,r,s,o){let i=new Map;for(let a of t){let c=await pPe(e.ecsClient,e.logsClient,a);if(c.length===0){n.displayNoRunningStreams(a.serviceName);continue}(await Promise.all(c.map(async p=>{try{return{key:p.key,...await dPe(e.logsClient,p,o)}}catch(d){n.displayPrimeError(p,r.toErrorMessage(d));return}}))).filter(p=>p!==void 0).forEach(p=>{mPe(n,p.state,p.events,s),i.set(p.key,p.state)})}return i}async function n6r(t,e,n,r,s,o){(await Promise.all(Array.from(t.values()).filter(()=>o()).map(async a=>{try{let c=await YMt(e.logsClient,a);return mPe(n,a,c.events,s),{key:a.key,nextToken:c.nextToken}}catch(c){n.displayPollError(a,r.toErrorMessage(c));return}}))).filter(a=>a!==void 0).forEach(a=>{let c=t.get(a.key);c&&(c.nextToken=a.nextToken)})}async function r6r(t,e,n,r,s,o,i){let a=await Promise.all(t.map(async d=>{try{return await pPe(n.ecsClient,n.logsClient,d)}catch(S){return r.displayReconcileError(d.serviceName,s.toErrorMessage(S)),[]}})),c=JMt(a.flatMap(d=>d)),l=Array.from(c.entries()).filter(([d])=>!e.has(d));(await Promise.all(l.map(async([d,S])=>{try{return{key:d,stream:S,...await dPe(n.logsClient,S,i)}}catch(y){r.displayPrimeNewStreamError(S,s.toErrorMessage(y));return}}))).filter(d=>d!==void 0).forEach(d=>{mPe(r,d.state,d.events,o),e.set(d.key,d.state),r.displayStreamStarted(d.stream)}),Array.from(e.keys()).filter(d=>!c.has(d)).forEach(d=>{let S=e.get(d);e.delete(d),S&&r.displayStreamEnded(S)})}async function t1t(t,e,n,r,s=()=>!0){n.displayCommandContext({commandName:"ecs-logs",stackName:t.stackName,region:t.region});let o=await e1t(e.cfClient,t.stackName);if(o.length===0)throw new Error(`No ECS services found in stack '${t.stackName}'.`);let i=Zzr(o,t.service,t.stackName);t.output==="raw"&&i.length>1&&n.displayInterleavingWarning();let a=await Promise.all(i.map(d=>XMt(e.ecsClient,d))),c=e6r(a,n),l=await t6r(c,e,n,r,t.output,t.tail);if(!t.follow)return;l.size===0&&n.displayNoStreamsToFollow();let p=Date.now();for(;s()&&(await r.sleep(Jzr),!!s());)await n6r(l,e,n,r,t.output,s),!(Date.now()-p<Xzr)&&(await r6r(c,l,e,n,r,t.output,t.tail),p=Date.now())}var yN="\x1B[0m",n7="\x1B[1m",s6r="\x1B[2m",o6r="\x1B[31m",i6r="\x1B[36m";function _N(){return process.env.NO_COLOR!==void 0?!1:!!process.stdout.isTTY}function wI(t){let e=` \u{1F431} catnip \u2014 ${t} `,n=Math.max(e.length+2,44),r="\u2550".repeat(n);if(!_N()){console.log(`\u2554${r}\u2557`),console.log(`\u2551${e.padEnd(n)}\u2551`),console.log(`\u255A${r}\u255D`);return}console.log(`${i6r}${n7}\u2554${r}\u2557`),console.log(`\u2551${e.padEnd(n)}\u2551`),console.log(`\u255A${r}\u255D${yN}`)}function df(t){if(!_N()){console.log(`
252
252
  ${t}`);return}console.log(`
253
253
  ${n7}${t}${yN}`)}function VS(t){if(!_N()){process.stderr.write(`Error: ${t}
254
254
  `);return}process.stderr.write(`${o6r}${n7}Error:${yN} ${t}