~repos /website

#astro#js#html#css

git clone https://pyrossh.dev/repos/website.git

木 Personal website of pyrossh. Built with astrojs, shiki, vite.


96a56f80 pyrossh

3 weeks ago
add alchemy state
.alchemy/prd/git-redirector-prd.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "kind": "AWS::CloudFront::Function",
3
+ "id": "git-redirector-prd",
4
+ "fqn": "prd/git-redirector-prd",
5
+ "seq": 4,
6
+ "data": {},
7
+ "status": "updated",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::CloudFront::Function",
10
+ "Symbol(alchemy::ResourceID)": "git-redirector-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/git-redirector-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 4,
16
+ "typeName": "AWS::CloudFront::Function",
17
+ "desiredState": {
18
+ "Name": "git_redirector_prd",
19
+ "FunctionConfig": {
20
+ "Comment": "Git redirector function",
21
+ "Runtime": "cloudfront-js-2.0"
22
+ },
23
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n request.uri = \"/\" + request.uri.replace(\"/repos/\", \"\");\n return request;\n }",
24
+ "AutoPublish": true
25
+ },
26
+ "id": "arn:aws:cloudfront::122129753516:function/git_redirector_prd",
27
+ "createdAt": 1763310845171,
28
+ "FunctionConfig": {
29
+ "Comment": "Git redirector function",
30
+ "Runtime": "cloudfront-js-2.0"
31
+ },
32
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/git_redirector_prd",
33
+ "FunctionMetadata": {
34
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/git_redirector_prd"
35
+ },
36
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n request.uri = \"/\" + request.uri.replace(\"/repos/\", \"\");\n return request;\n }",
37
+ "Stage": "LIVE",
38
+ "Name": "git_redirector_prd"
39
+ },
40
+ "props": {
41
+ "Name": "git_redirector_prd",
42
+ "FunctionConfig": {
43
+ "Comment": "Git redirector function",
44
+ "Runtime": "cloudfront-js-2.0"
45
+ },
46
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n request.uri = \"/\" + request.uri.replace(\"/repos/\", \"\");\n return request;\n }",
47
+ "AutoPublish": true
48
+ }
49
+ }
.alchemy/prd/hosted-zone-prd.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "kind": "AWS::Route53::HostedZone",
3
+ "id": "hosted-zone-prd",
4
+ "fqn": "prd/hosted-zone-prd",
5
+ "seq": 0,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::Route53::HostedZone",
10
+ "Symbol(alchemy::ResourceID)": "hosted-zone-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/hosted-zone-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 0,
16
+ "typeName": "AWS::Route53::HostedZone",
17
+ "desiredState": {
18
+ "Name": "pyrossh.dev",
19
+ "HostedZoneTags": [
20
+ {
21
+ "Key": "Stage",
22
+ "Value": "prd"
23
+ },
24
+ {
25
+ "Key": "ProvisionedBy",
26
+ "Value": "Alchemy"
27
+ }
28
+ ],
29
+ "HostedZoneConfig": {
30
+ "Comment": "ProvisionedBy Alchemy - prd"
31
+ }
32
+ },
33
+ "id": "Z06277131L62Y66EGXAWH",
34
+ "createdAt": 1763311272564,
35
+ "HostedZoneTags": [
36
+ {
37
+ "Value": "Alchemy",
38
+ "Key": "ProvisionedBy"
39
+ },
40
+ {
41
+ "Value": "prd",
42
+ "Key": "Stage"
43
+ }
44
+ ],
45
+ "VPCs": [],
46
+ "HostedZoneConfig": {
47
+ "Comment": "ProvisionedBy Alchemy - prd"
48
+ },
49
+ "Id": "Z06277131L62Y66EGXAWH",
50
+ "NameServers": [
51
+ "ns-1447.awsdns-52.org",
52
+ "ns-1888.awsdns-44.co.uk",
53
+ "ns-482.awsdns-60.com",
54
+ "ns-1020.awsdns-63.net"
55
+ ],
56
+ "Name": "pyrossh.dev."
57
+ },
58
+ "props": {
59
+ "Name": "pyrossh.dev",
60
+ "HostedZoneTags": [
61
+ {
62
+ "Key": "Stage",
63
+ "Value": "prd"
64
+ },
65
+ {
66
+ "Key": "ProvisionedBy",
67
+ "Value": "Alchemy"
68
+ }
69
+ ],
70
+ "HostedZoneConfig": {
71
+ "Comment": "ProvisionedBy Alchemy - prd"
72
+ }
73
+ }
74
+ }
.alchemy/prd/html-redirector-prd.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "kind": "AWS::CloudFront::Function",
3
+ "id": "html-redirector-prd",
4
+ "fqn": "prd/html-redirector-prd",
5
+ "seq": 3,
6
+ "data": {},
7
+ "status": "updated",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::CloudFront::Function",
10
+ "Symbol(alchemy::ResourceID)": "html-redirector-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/html-redirector-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 3,
16
+ "typeName": "AWS::CloudFront::Function",
17
+ "desiredState": {
18
+ "Name": "html_redirector_prd",
19
+ "FunctionConfig": {
20
+ "Comment": "HTML redirector function",
21
+ "Runtime": "cloudfront-js-2.0"
22
+ },
23
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n\n if (uri.endsWith('/')) {\n request.uri += 'index.html';\n } else if (!uri.startsWith('/_astro')) {\n request.uri += '/index.html';\n }\n return request;\n }",
24
+ "AutoPublish": true
25
+ },
26
+ "id": "arn:aws:cloudfront::122129753516:function/html_redirector_prd",
27
+ "createdAt": 1763310835436,
28
+ "FunctionConfig": {
29
+ "Comment": "HTML redirector function",
30
+ "Runtime": "cloudfront-js-2.0"
31
+ },
32
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd",
33
+ "FunctionMetadata": {
34
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd"
35
+ },
36
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n\n if (uri.endsWith('/')) {\n request.uri += 'index.html';\n } else if (!uri.startsWith('/_astro')) {\n request.uri += '/index.html';\n }\n return request;\n }",
37
+ "Stage": "LIVE",
38
+ "Name": "html_redirector_prd"
39
+ },
40
+ "props": {
41
+ "Name": "html_redirector_prd",
42
+ "FunctionConfig": {
43
+ "Comment": "HTML redirector function",
44
+ "Runtime": "cloudfront-js-2.0"
45
+ },
46
+ "FunctionCode": "function handler(event) {\n const request = event.request;\n const uri = request.uri;\n\n if (uri.endsWith('/')) {\n request.uri += 'index.html';\n } else if (!uri.startsWith('/_astro')) {\n request.uri += '/index.html';\n }\n return request;\n }",
47
+ "AutoPublish": true
48
+ }
49
+ }
.alchemy/prd/repos-bucket-policy-prd.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "kind": "AWS::S3::BucketPolicy",
3
+ "id": "repos-bucket-policy-prd",
4
+ "fqn": "prd/repos-bucket-policy-prd",
5
+ "seq": 8,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::S3::BucketPolicy",
10
+ "Symbol(alchemy::ResourceID)": "repos-bucket-policy-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/repos-bucket-policy-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 8,
16
+ "typeName": "AWS::S3::BucketPolicy",
17
+ "desiredState": {
18
+ "Bucket": "pyrossh-repos-prd",
19
+ "PolicyDocument": {
20
+ "Version": "2012-10-17",
21
+ "Statement": [
22
+ {
23
+ "Principal": {
24
+ "Service": "cloudfront.amazonaws.com"
25
+ },
26
+ "Action": "s3:GetObject",
27
+ "Resource": [
28
+ "arn:aws:s3:::pyrossh-repos-prd",
29
+ "arn:aws:s3:::pyrossh-repos-prd/*"
30
+ ],
31
+ "Effect": "Allow",
32
+ "Condition": {
33
+ "StringEquals": {
34
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
35
+ }
36
+ }
37
+ }
38
+ ]
39
+ }
40
+ },
41
+ "id": "pyrossh-repos-prd",
42
+ "createdAt": 1763311899012,
43
+ "Bucket": "pyrossh-repos-prd",
44
+ "PolicyDocument": {
45
+ "Version": "2012-10-17",
46
+ "Statement": [
47
+ {
48
+ "Condition": {
49
+ "StringEquals": {
50
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
51
+ }
52
+ },
53
+ "Action": "s3:GetObject",
54
+ "Resource": [
55
+ "arn:aws:s3:::pyrossh-repos-prd",
56
+ "arn:aws:s3:::pyrossh-repos-prd/*"
57
+ ],
58
+ "Effect": "Allow",
59
+ "Principal": {
60
+ "Service": "cloudfront.amazonaws.com"
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ },
66
+ "props": {
67
+ "Bucket": "pyrossh-repos-prd",
68
+ "PolicyDocument": {
69
+ "Version": "2012-10-17",
70
+ "Statement": [
71
+ {
72
+ "Principal": {
73
+ "Service": "cloudfront.amazonaws.com"
74
+ },
75
+ "Action": "s3:GetObject",
76
+ "Resource": [
77
+ "arn:aws:s3:::pyrossh-repos-prd",
78
+ "arn:aws:s3:::pyrossh-repos-prd/*"
79
+ ],
80
+ "Effect": "Allow",
81
+ "Condition": {
82
+ "StringEquals": {
83
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
84
+ }
85
+ }
86
+ }
87
+ ]
88
+ }
89
+ }
90
+ }
.alchemy/prd/repos-bucket-prd.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "kind": "AWS::S3::Bucket",
3
+ "id": "repos-bucket-prd",
4
+ "fqn": "prd/repos-bucket-prd",
5
+ "seq": 1,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::S3::Bucket",
10
+ "Symbol(alchemy::ResourceID)": "repos-bucket-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/repos-bucket-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 1,
16
+ "typeName": "AWS::S3::Bucket",
17
+ "desiredState": {
18
+ "BucketName": "pyrossh-repos-prd",
19
+ "PublicAccessBlockConfiguration": {
20
+ "BlockPublicAcls": true,
21
+ "BlockPublicPolicy": true,
22
+ "IgnorePublicAcls": true,
23
+ "RestrictPublicBuckets": true
24
+ },
25
+ "Tags": [
26
+ {
27
+ "Key": "Stage",
28
+ "Value": "prd"
29
+ },
30
+ {
31
+ "Key": "ProvisionedBy",
32
+ "Value": "Alchemy"
33
+ }
34
+ ]
35
+ },
36
+ "id": "pyrossh-repos-prd",
37
+ "createdAt": 1763310539197,
38
+ "PublicAccessBlockConfiguration": {
39
+ "RestrictPublicBuckets": true,
40
+ "BlockPublicPolicy": true,
41
+ "BlockPublicAcls": true,
42
+ "IgnorePublicAcls": true
43
+ },
44
+ "BucketName": "pyrossh-repos-prd",
45
+ "RegionalDomainName": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
46
+ "OwnershipControls": {
47
+ "Rules": [
48
+ {
49
+ "ObjectOwnership": "BucketOwnerEnforced"
50
+ }
51
+ ]
52
+ },
53
+ "DomainName": "pyrossh-repos-prd.s3.amazonaws.com",
54
+ "BucketEncryption": {
55
+ "ServerSideEncryptionConfiguration": [
56
+ {
57
+ "BucketKeyEnabled": false,
58
+ "ServerSideEncryptionByDefault": {
59
+ "SSEAlgorithm": "AES256"
60
+ }
61
+ }
62
+ ]
63
+ },
64
+ "WebsiteURL": "http://pyrossh-repos-prd.s3-website.ap-south-1.amazonaws.com",
65
+ "DualStackDomainName": "pyrossh-repos-prd.s3.dualstack.ap-south-1.amazonaws.com",
66
+ "Arn": "arn:aws:s3:::pyrossh-repos-prd",
67
+ "Tags": [
68
+ {
69
+ "Value": "Alchemy",
70
+ "Key": "ProvisionedBy"
71
+ },
72
+ {
73
+ "Value": "prd",
74
+ "Key": "Stage"
75
+ }
76
+ ]
77
+ },
78
+ "props": {
79
+ "BucketName": "pyrossh-repos-prd",
80
+ "PublicAccessBlockConfiguration": {
81
+ "BlockPublicAcls": true,
82
+ "BlockPublicPolicy": true,
83
+ "IgnorePublicAcls": true,
84
+ "RestrictPublicBuckets": true
85
+ },
86
+ "Tags": [
87
+ {
88
+ "Key": "Stage",
89
+ "Value": "prd"
90
+ },
91
+ {
92
+ "Key": "ProvisionedBy",
93
+ "Value": "Alchemy"
94
+ }
95
+ ]
96
+ }
97
+ }
.alchemy/prd/s3-distribution-prd.json ADDED
@@ -0,0 +1,650 @@
1
+ {
2
+ "kind": "AWS::CloudFront::Distribution",
3
+ "id": "s3-distribution-prd",
4
+ "fqn": "prd/s3-distribution-prd",
5
+ "seq": 6,
6
+ "data": {},
7
+ "status": "updated",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::CloudFront::Distribution",
10
+ "Symbol(alchemy::ResourceID)": "s3-distribution-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/s3-distribution-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 6,
16
+ "typeName": "AWS::CloudFront::Distribution",
17
+ "desiredState": {
18
+ "Tags": [
19
+ {
20
+ "Key": "Stage",
21
+ "Value": "prd"
22
+ },
23
+ {
24
+ "Key": "ProvisionedBy",
25
+ "Value": "Alchemy"
26
+ }
27
+ ],
28
+ "DistributionConfig": {
29
+ "Origins": [
30
+ {
31
+ "DomainName": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
32
+ "Id": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
33
+ "OriginAccessControlId": "E92NHWMY2XEI1",
34
+ "S3OriginConfig": {
35
+ "OriginAccessIdentity": ""
36
+ }
37
+ },
38
+ {
39
+ "DomainName": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
40
+ "Id": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
41
+ "OriginAccessControlId": "E92NHWMY2XEI1",
42
+ "S3OriginConfig": {
43
+ "OriginAccessIdentity": ""
44
+ }
45
+ }
46
+ ],
47
+ "Enabled": true,
48
+ "IPV6Enabled": true,
49
+ "DefaultRootObject": "index.html",
50
+ "CustomErrorResponses": [
51
+ {
52
+ "ErrorCode": 400,
53
+ "ResponseCode": 400,
54
+ "ResponsePagePath": "/404.html"
55
+ },
56
+ {
57
+ "ErrorCode": 403,
58
+ "ResponseCode": 403,
59
+ "ResponsePagePath": "/404.html"
60
+ },
61
+ {
62
+ "ErrorCode": 404,
63
+ "ResponseCode": 404,
64
+ "ResponsePagePath": "/404.html"
65
+ },
66
+ {
67
+ "ErrorCode": 405,
68
+ "ResponseCode": 405,
69
+ "ResponsePagePath": "/404.html"
70
+ },
71
+ {
72
+ "ErrorCode": 414,
73
+ "ResponseCode": 414,
74
+ "ResponsePagePath": "/404.html"
75
+ },
76
+ {
77
+ "ErrorCode": 416,
78
+ "ResponseCode": 416,
79
+ "ResponsePagePath": "/404.html"
80
+ },
81
+ {
82
+ "ErrorCode": 500,
83
+ "ResponseCode": 500,
84
+ "ResponsePagePath": "/500.html"
85
+ },
86
+ {
87
+ "ErrorCode": 501,
88
+ "ResponseCode": 501,
89
+ "ResponsePagePath": "/500.html"
90
+ },
91
+ {
92
+ "ErrorCode": 502,
93
+ "ResponseCode": 502,
94
+ "ResponsePagePath": "/500.html"
95
+ },
96
+ {
97
+ "ErrorCode": 503,
98
+ "ResponseCode": 503,
99
+ "ResponsePagePath": "/500.html"
100
+ },
101
+ {
102
+ "ErrorCode": 504,
103
+ "ResponseCode": 504,
104
+ "ResponsePagePath": "/500.html"
105
+ }
106
+ ],
107
+ "CacheBehaviors": [
108
+ {
109
+ "PathPattern": "/repos/*.git/*",
110
+ "AllowedMethods": [
111
+ "GET",
112
+ "HEAD"
113
+ ],
114
+ "CachedMethods": [
115
+ "GET",
116
+ "HEAD"
117
+ ],
118
+ "TargetOriginId": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
119
+ "ForwardedValues": {
120
+ "QueryString": false,
121
+ "Cookies": {
122
+ "Forward": "none"
123
+ }
124
+ },
125
+ "MinTTL": 0,
126
+ "DefaultTTL": 86400,
127
+ "MaxTTL": 31536000,
128
+ "Compress": true,
129
+ "ViewerProtocolPolicy": "redirect-to-https",
130
+ "FunctionAssociations": [
131
+ {
132
+ "EventType": "viewer-request",
133
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/git_redirector_prd"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "PathPattern": "/*",
139
+ "AllowedMethods": [
140
+ "GET",
141
+ "HEAD"
142
+ ],
143
+ "CachedMethods": [
144
+ "GET",
145
+ "HEAD"
146
+ ],
147
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
148
+ "ForwardedValues": {
149
+ "QueryString": true,
150
+ "Cookies": {
151
+ "Forward": "none"
152
+ }
153
+ },
154
+ "ViewerProtocolPolicy": "redirect-to-https",
155
+ "MinTTL": 0,
156
+ "DefaultTTL": 3600,
157
+ "MaxTTL": 86400,
158
+ "FunctionAssociations": [
159
+ {
160
+ "EventType": "viewer-request",
161
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd"
162
+ }
163
+ ]
164
+ }
165
+ ],
166
+ "DefaultCacheBehavior": {
167
+ "AllowedMethods": [
168
+ "GET",
169
+ "HEAD"
170
+ ],
171
+ "CachedMethods": [
172
+ "GET",
173
+ "HEAD"
174
+ ],
175
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
176
+ "ForwardedValues": {
177
+ "QueryString": true,
178
+ "Cookies": {
179
+ "Forward": "none"
180
+ }
181
+ },
182
+ "ViewerProtocolPolicy": "redirect-to-https",
183
+ "MinTTL": 0,
184
+ "DefaultTTL": 3600,
185
+ "MaxTTL": 86400,
186
+ "FunctionAssociations": [
187
+ {
188
+ "EventType": "viewer-request",
189
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd"
190
+ }
191
+ ]
192
+ },
193
+ "PriceClass": "PriceClass_All",
194
+ "Restrictions": {
195
+ "GeoRestriction": {
196
+ "RestrictionType": "none"
197
+ }
198
+ },
199
+ "ViewerCertificate": {
200
+ "CloudFrontDefaultCertificate": true
201
+ },
202
+ "Comment": "ProvisionedBy Alchemy - prd"
203
+ }
204
+ },
205
+ "id": "E2IM0M1RNCBSHJ",
206
+ "createdAt": 1763311895769,
207
+ "DistributionConfig": {
208
+ "Logging": {
209
+ "IncludeCookies": false,
210
+ "Bucket": "",
211
+ "Prefix": ""
212
+ },
213
+ "Comment": "ProvisionedBy Alchemy - prd",
214
+ "DefaultRootObject": "index.html",
215
+ "Origins": [
216
+ {
217
+ "ConnectionTimeout": 10,
218
+ "OriginAccessControlId": "E92NHWMY2XEI1",
219
+ "ConnectionAttempts": 3,
220
+ "OriginCustomHeaders": [],
221
+ "DomainName": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
222
+ "OriginShield": {
223
+ "Enabled": false
224
+ },
225
+ "S3OriginConfig": {
226
+ "OriginReadTimeout": 30,
227
+ "OriginAccessIdentity": ""
228
+ },
229
+ "OriginPath": "",
230
+ "Id": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com"
231
+ },
232
+ {
233
+ "ConnectionTimeout": 10,
234
+ "OriginAccessControlId": "E92NHWMY2XEI1",
235
+ "ConnectionAttempts": 3,
236
+ "OriginCustomHeaders": [],
237
+ "DomainName": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
238
+ "OriginShield": {
239
+ "Enabled": false
240
+ },
241
+ "S3OriginConfig": {
242
+ "OriginReadTimeout": 30,
243
+ "OriginAccessIdentity": ""
244
+ },
245
+ "OriginPath": "",
246
+ "Id": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com"
247
+ }
248
+ ],
249
+ "ViewerCertificate": {
250
+ "SslSupportMethod": "vip",
251
+ "MinimumProtocolVersion": "TLSv1",
252
+ "CloudFrontDefaultCertificate": true
253
+ },
254
+ "PriceClass": "PriceClass_All",
255
+ "DefaultCacheBehavior": {
256
+ "Compress": false,
257
+ "FunctionAssociations": [
258
+ {
259
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd",
260
+ "EventType": "viewer-request"
261
+ }
262
+ ],
263
+ "LambdaFunctionAssociations": [],
264
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
265
+ "ViewerProtocolPolicy": "redirect-to-https",
266
+ "GrpcConfig": {
267
+ "Enabled": false
268
+ },
269
+ "TrustedSigners": [],
270
+ "DefaultTTL": 3600,
271
+ "FieldLevelEncryptionId": "",
272
+ "TrustedKeyGroups": [],
273
+ "AllowedMethods": [
274
+ "HEAD",
275
+ "GET"
276
+ ],
277
+ "CachedMethods": [
278
+ "HEAD",
279
+ "GET"
280
+ ],
281
+ "SmoothStreaming": false,
282
+ "ForwardedValues": {
283
+ "Cookies": {
284
+ "Forward": "none"
285
+ },
286
+ "Headers": [],
287
+ "QueryString": true,
288
+ "QueryStringCacheKeys": []
289
+ },
290
+ "MinTTL": 0,
291
+ "MaxTTL": 86400
292
+ },
293
+ "Staging": false,
294
+ "CustomErrorResponses": [
295
+ {
296
+ "ResponseCode": 400,
297
+ "ErrorCachingMinTTL": 300,
298
+ "ErrorCode": 400,
299
+ "ResponsePagePath": "/404.html"
300
+ },
301
+ {
302
+ "ResponseCode": 403,
303
+ "ErrorCachingMinTTL": 300,
304
+ "ErrorCode": 403,
305
+ "ResponsePagePath": "/404.html"
306
+ },
307
+ {
308
+ "ResponseCode": 404,
309
+ "ErrorCachingMinTTL": 300,
310
+ "ErrorCode": 404,
311
+ "ResponsePagePath": "/404.html"
312
+ },
313
+ {
314
+ "ResponseCode": 405,
315
+ "ErrorCachingMinTTL": 300,
316
+ "ErrorCode": 405,
317
+ "ResponsePagePath": "/404.html"
318
+ },
319
+ {
320
+ "ResponseCode": 414,
321
+ "ErrorCachingMinTTL": 300,
322
+ "ErrorCode": 414,
323
+ "ResponsePagePath": "/404.html"
324
+ },
325
+ {
326
+ "ResponseCode": 416,
327
+ "ErrorCachingMinTTL": 300,
328
+ "ErrorCode": 416,
329
+ "ResponsePagePath": "/404.html"
330
+ },
331
+ {
332
+ "ResponseCode": 500,
333
+ "ErrorCachingMinTTL": 300,
334
+ "ErrorCode": 500,
335
+ "ResponsePagePath": "/500.html"
336
+ },
337
+ {
338
+ "ResponseCode": 501,
339
+ "ErrorCachingMinTTL": 300,
340
+ "ErrorCode": 501,
341
+ "ResponsePagePath": "/500.html"
342
+ },
343
+ {
344
+ "ResponseCode": 502,
345
+ "ErrorCachingMinTTL": 300,
346
+ "ErrorCode": 502,
347
+ "ResponsePagePath": "/500.html"
348
+ },
349
+ {
350
+ "ResponseCode": 503,
351
+ "ErrorCachingMinTTL": 300,
352
+ "ErrorCode": 503,
353
+ "ResponsePagePath": "/500.html"
354
+ },
355
+ {
356
+ "ResponseCode": 504,
357
+ "ErrorCachingMinTTL": 300,
358
+ "ErrorCode": 504,
359
+ "ResponsePagePath": "/500.html"
360
+ }
361
+ ],
362
+ "ContinuousDeploymentPolicyId": "",
363
+ "OriginGroups": {
364
+ "Quantity": 0,
365
+ "Items": []
366
+ },
367
+ "Enabled": true,
368
+ "Aliases": [],
369
+ "IPV6Enabled": true,
370
+ "WebACLId": "",
371
+ "HttpVersion": "http1.1",
372
+ "Restrictions": {
373
+ "GeoRestriction": {
374
+ "Locations": [],
375
+ "RestrictionType": "none"
376
+ }
377
+ },
378
+ "CacheBehaviors": [
379
+ {
380
+ "Compress": true,
381
+ "FunctionAssociations": [
382
+ {
383
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/git_redirector_prd",
384
+ "EventType": "viewer-request"
385
+ }
386
+ ],
387
+ "LambdaFunctionAssociations": [],
388
+ "TargetOriginId": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
389
+ "ViewerProtocolPolicy": "redirect-to-https",
390
+ "GrpcConfig": {
391
+ "Enabled": false
392
+ },
393
+ "TrustedSigners": [],
394
+ "DefaultTTL": 86400,
395
+ "FieldLevelEncryptionId": "",
396
+ "TrustedKeyGroups": [],
397
+ "AllowedMethods": [
398
+ "HEAD",
399
+ "GET"
400
+ ],
401
+ "PathPattern": "/repos/*.git/*",
402
+ "CachedMethods": [
403
+ "HEAD",
404
+ "GET"
405
+ ],
406
+ "SmoothStreaming": false,
407
+ "ForwardedValues": {
408
+ "Cookies": {
409
+ "Forward": "none"
410
+ },
411
+ "Headers": [],
412
+ "QueryString": false,
413
+ "QueryStringCacheKeys": []
414
+ },
415
+ "MinTTL": 0,
416
+ "MaxTTL": 31536000
417
+ },
418
+ {
419
+ "Compress": false,
420
+ "FunctionAssociations": [
421
+ {
422
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd",
423
+ "EventType": "viewer-request"
424
+ }
425
+ ],
426
+ "LambdaFunctionAssociations": [],
427
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
428
+ "ViewerProtocolPolicy": "redirect-to-https",
429
+ "GrpcConfig": {
430
+ "Enabled": false
431
+ },
432
+ "TrustedSigners": [],
433
+ "DefaultTTL": 3600,
434
+ "FieldLevelEncryptionId": "",
435
+ "TrustedKeyGroups": [],
436
+ "AllowedMethods": [
437
+ "HEAD",
438
+ "GET"
439
+ ],
440
+ "PathPattern": "/*",
441
+ "CachedMethods": [
442
+ "HEAD",
443
+ "GET"
444
+ ],
445
+ "SmoothStreaming": false,
446
+ "ForwardedValues": {
447
+ "Cookies": {
448
+ "Forward": "none"
449
+ },
450
+ "Headers": [],
451
+ "QueryString": true,
452
+ "QueryStringCacheKeys": []
453
+ },
454
+ "MinTTL": 0,
455
+ "MaxTTL": 86400
456
+ }
457
+ ]
458
+ },
459
+ "DomainName": "dydxeqxbrvlcu.cloudfront.net",
460
+ "Id": "E2IM0M1RNCBSHJ"
461
+ },
462
+ "props": {
463
+ "Tags": [
464
+ {
465
+ "Key": "Stage",
466
+ "Value": "prd"
467
+ },
468
+ {
469
+ "Key": "ProvisionedBy",
470
+ "Value": "Alchemy"
471
+ }
472
+ ],
473
+ "DistributionConfig": {
474
+ "Origins": [
475
+ {
476
+ "DomainName": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
477
+ "Id": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
478
+ "OriginAccessControlId": "E92NHWMY2XEI1",
479
+ "S3OriginConfig": {
480
+ "OriginAccessIdentity": ""
481
+ }
482
+ },
483
+ {
484
+ "DomainName": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
485
+ "Id": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
486
+ "OriginAccessControlId": "E92NHWMY2XEI1",
487
+ "S3OriginConfig": {
488
+ "OriginAccessIdentity": ""
489
+ }
490
+ }
491
+ ],
492
+ "Enabled": true,
493
+ "IPV6Enabled": true,
494
+ "DefaultRootObject": "index.html",
495
+ "CustomErrorResponses": [
496
+ {
497
+ "ErrorCode": 400,
498
+ "ResponseCode": 400,
499
+ "ResponsePagePath": "/404.html"
500
+ },
501
+ {
502
+ "ErrorCode": 403,
503
+ "ResponseCode": 403,
504
+ "ResponsePagePath": "/404.html"
505
+ },
506
+ {
507
+ "ErrorCode": 404,
508
+ "ResponseCode": 404,
509
+ "ResponsePagePath": "/404.html"
510
+ },
511
+ {
512
+ "ErrorCode": 405,
513
+ "ResponseCode": 405,
514
+ "ResponsePagePath": "/404.html"
515
+ },
516
+ {
517
+ "ErrorCode": 414,
518
+ "ResponseCode": 414,
519
+ "ResponsePagePath": "/404.html"
520
+ },
521
+ {
522
+ "ErrorCode": 416,
523
+ "ResponseCode": 416,
524
+ "ResponsePagePath": "/404.html"
525
+ },
526
+ {
527
+ "ErrorCode": 500,
528
+ "ResponseCode": 500,
529
+ "ResponsePagePath": "/500.html"
530
+ },
531
+ {
532
+ "ErrorCode": 501,
533
+ "ResponseCode": 501,
534
+ "ResponsePagePath": "/500.html"
535
+ },
536
+ {
537
+ "ErrorCode": 502,
538
+ "ResponseCode": 502,
539
+ "ResponsePagePath": "/500.html"
540
+ },
541
+ {
542
+ "ErrorCode": 503,
543
+ "ResponseCode": 503,
544
+ "ResponsePagePath": "/500.html"
545
+ },
546
+ {
547
+ "ErrorCode": 504,
548
+ "ResponseCode": 504,
549
+ "ResponsePagePath": "/500.html"
550
+ }
551
+ ],
552
+ "CacheBehaviors": [
553
+ {
554
+ "PathPattern": "/repos/*.git/*",
555
+ "AllowedMethods": [
556
+ "GET",
557
+ "HEAD"
558
+ ],
559
+ "CachedMethods": [
560
+ "GET",
561
+ "HEAD"
562
+ ],
563
+ "TargetOriginId": "pyrossh-repos-prd.s3.ap-south-1.amazonaws.com",
564
+ "ForwardedValues": {
565
+ "QueryString": false,
566
+ "Cookies": {
567
+ "Forward": "none"
568
+ }
569
+ },
570
+ "MinTTL": 0,
571
+ "DefaultTTL": 86400,
572
+ "MaxTTL": 31536000,
573
+ "Compress": true,
574
+ "ViewerProtocolPolicy": "redirect-to-https",
575
+ "FunctionAssociations": [
576
+ {
577
+ "EventType": "viewer-request",
578
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/git_redirector_prd"
579
+ }
580
+ ]
581
+ },
582
+ {
583
+ "PathPattern": "/*",
584
+ "AllowedMethods": [
585
+ "GET",
586
+ "HEAD"
587
+ ],
588
+ "CachedMethods": [
589
+ "GET",
590
+ "HEAD"
591
+ ],
592
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
593
+ "ForwardedValues": {
594
+ "QueryString": true,
595
+ "Cookies": {
596
+ "Forward": "none"
597
+ }
598
+ },
599
+ "ViewerProtocolPolicy": "redirect-to-https",
600
+ "MinTTL": 0,
601
+ "DefaultTTL": 3600,
602
+ "MaxTTL": 86400,
603
+ "FunctionAssociations": [
604
+ {
605
+ "EventType": "viewer-request",
606
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd"
607
+ }
608
+ ]
609
+ }
610
+ ],
611
+ "DefaultCacheBehavior": {
612
+ "AllowedMethods": [
613
+ "GET",
614
+ "HEAD"
615
+ ],
616
+ "CachedMethods": [
617
+ "GET",
618
+ "HEAD"
619
+ ],
620
+ "TargetOriginId": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
621
+ "ForwardedValues": {
622
+ "QueryString": true,
623
+ "Cookies": {
624
+ "Forward": "none"
625
+ }
626
+ },
627
+ "ViewerProtocolPolicy": "redirect-to-https",
628
+ "MinTTL": 0,
629
+ "DefaultTTL": 3600,
630
+ "MaxTTL": 86400,
631
+ "FunctionAssociations": [
632
+ {
633
+ "EventType": "viewer-request",
634
+ "FunctionARN": "arn:aws:cloudfront::122129753516:function/html_redirector_prd"
635
+ }
636
+ ]
637
+ },
638
+ "PriceClass": "PriceClass_All",
639
+ "Restrictions": {
640
+ "GeoRestriction": {
641
+ "RestrictionType": "none"
642
+ }
643
+ },
644
+ "ViewerCertificate": {
645
+ "CloudFrontDefaultCertificate": true
646
+ },
647
+ "Comment": "ProvisionedBy Alchemy - prd"
648
+ }
649
+ }
650
+ }
.alchemy/prd/s3-oac-prd.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "kind": "AWS::CloudFront::OriginAccessControl",
3
+ "id": "s3-oac-prd",
4
+ "fqn": "prd/s3-oac-prd",
5
+ "seq": 3,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::CloudFront::OriginAccessControl",
10
+ "Symbol(alchemy::ResourceID)": "s3-oac-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/s3-oac-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 3,
16
+ "typeName": "AWS::CloudFront::OriginAccessControl",
17
+ "desiredState": {
18
+ "OriginAccessControlConfig": {
19
+ "Name": "s3-oac-prd",
20
+ "OriginAccessControlOriginType": "s3",
21
+ "SigningBehavior": "always",
22
+ "SigningProtocol": "sigv4"
23
+ }
24
+ },
25
+ "id": "E92NHWMY2XEI1",
26
+ "createdAt": 1763311203616,
27
+ "OriginAccessControlConfig": {
28
+ "SigningBehavior": "always",
29
+ "Description": "",
30
+ "OriginAccessControlOriginType": "s3",
31
+ "SigningProtocol": "sigv4",
32
+ "Name": "s3-oac-prd"
33
+ },
34
+ "Id": "E92NHWMY2XEI1"
35
+ },
36
+ "props": {
37
+ "OriginAccessControlConfig": {
38
+ "Name": "s3-oac-prd",
39
+ "OriginAccessControlOriginType": "s3",
40
+ "SigningBehavior": "always",
41
+ "SigningProtocol": "sigv4"
42
+ }
43
+ }
44
+ }
.alchemy/prd/website-bucket-policy-prd.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "kind": "AWS::S3::BucketPolicy",
3
+ "id": "website-bucket-policy-prd",
4
+ "fqn": "prd/website-bucket-policy-prd",
5
+ "seq": 7,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::S3::BucketPolicy",
10
+ "Symbol(alchemy::ResourceID)": "website-bucket-policy-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/website-bucket-policy-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 7,
16
+ "typeName": "AWS::S3::BucketPolicy",
17
+ "desiredState": {
18
+ "Bucket": "pyrossh-website-prd",
19
+ "PolicyDocument": {
20
+ "Version": "2012-10-17",
21
+ "Statement": [
22
+ {
23
+ "Principal": {
24
+ "Service": "cloudfront.amazonaws.com"
25
+ },
26
+ "Action": "s3:GetObject",
27
+ "Resource": [
28
+ "arn:aws:s3:::pyrossh-website-prd",
29
+ "arn:aws:s3:::pyrossh-website-prd/*"
30
+ ],
31
+ "Effect": "Allow",
32
+ "Condition": {
33
+ "StringEquals": {
34
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
35
+ }
36
+ }
37
+ }
38
+ ]
39
+ }
40
+ },
41
+ "id": "pyrossh-website-prd",
42
+ "createdAt": 1763311897729,
43
+ "Bucket": "pyrossh-website-prd",
44
+ "PolicyDocument": {
45
+ "Version": "2012-10-17",
46
+ "Statement": [
47
+ {
48
+ "Condition": {
49
+ "StringEquals": {
50
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
51
+ }
52
+ },
53
+ "Action": "s3:GetObject",
54
+ "Resource": [
55
+ "arn:aws:s3:::pyrossh-website-prd",
56
+ "arn:aws:s3:::pyrossh-website-prd/*"
57
+ ],
58
+ "Effect": "Allow",
59
+ "Principal": {
60
+ "Service": "cloudfront.amazonaws.com"
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ },
66
+ "props": {
67
+ "Bucket": "pyrossh-website-prd",
68
+ "PolicyDocument": {
69
+ "Version": "2012-10-17",
70
+ "Statement": [
71
+ {
72
+ "Principal": {
73
+ "Service": "cloudfront.amazonaws.com"
74
+ },
75
+ "Action": "s3:GetObject",
76
+ "Resource": [
77
+ "arn:aws:s3:::pyrossh-website-prd",
78
+ "arn:aws:s3:::pyrossh-website-prd/*"
79
+ ],
80
+ "Effect": "Allow",
81
+ "Condition": {
82
+ "StringEquals": {
83
+ "AWS:SourceArn": "arn:aws:cloudfront::122129753516:distribution/E2IM0M1RNCBSHJ"
84
+ }
85
+ }
86
+ }
87
+ ]
88
+ }
89
+ }
90
+ }
.alchemy/prd/website-bucket-prd.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "kind": "AWS::S3::Bucket",
3
+ "id": "website-bucket-prd",
4
+ "fqn": "prd/website-bucket-prd",
5
+ "seq": 0,
6
+ "data": {},
7
+ "status": "created",
8
+ "output": {
9
+ "Symbol(alchemy::ResourceKind)": "AWS::S3::Bucket",
10
+ "Symbol(alchemy::ResourceID)": "website-bucket-prd",
11
+ "Symbol(alchemy::ResourceFQN)": "prd/website-bucket-prd",
12
+ "Symbol(alchemy::ResourceScope)": {
13
+ "@scope": null
14
+ },
15
+ "Symbol(alchemy::ResourceSeq)": 0,
16
+ "typeName": "AWS::S3::Bucket",
17
+ "desiredState": {
18
+ "BucketName": "pyrossh-website-prd",
19
+ "PublicAccessBlockConfiguration": {
20
+ "BlockPublicAcls": true,
21
+ "BlockPublicPolicy": true,
22
+ "IgnorePublicAcls": true,
23
+ "RestrictPublicBuckets": true
24
+ },
25
+ "Tags": [
26
+ {
27
+ "Key": "Stage",
28
+ "Value": "prd"
29
+ },
30
+ {
31
+ "Key": "ProvisionedBy",
32
+ "Value": "Alchemy"
33
+ }
34
+ ]
35
+ },
36
+ "id": "pyrossh-website-prd",
37
+ "createdAt": 1763310525642,
38
+ "PublicAccessBlockConfiguration": {
39
+ "RestrictPublicBuckets": true,
40
+ "BlockPublicPolicy": true,
41
+ "BlockPublicAcls": true,
42
+ "IgnorePublicAcls": true
43
+ },
44
+ "BucketName": "pyrossh-website-prd",
45
+ "RegionalDomainName": "pyrossh-website-prd.s3.ap-south-1.amazonaws.com",
46
+ "OwnershipControls": {
47
+ "Rules": [
48
+ {
49
+ "ObjectOwnership": "BucketOwnerEnforced"
50
+ }
51
+ ]
52
+ },
53
+ "DomainName": "pyrossh-website-prd.s3.amazonaws.com",
54
+ "BucketEncryption": {
55
+ "ServerSideEncryptionConfiguration": [
56
+ {
57
+ "BucketKeyEnabled": false,
58
+ "ServerSideEncryptionByDefault": {
59
+ "SSEAlgorithm": "AES256"
60
+ }
61
+ }
62
+ ]
63
+ },
64
+ "WebsiteURL": "http://pyrossh-website-prd.s3-website.ap-south-1.amazonaws.com",
65
+ "DualStackDomainName": "pyrossh-website-prd.s3.dualstack.ap-south-1.amazonaws.com",
66
+ "Arn": "arn:aws:s3:::pyrossh-website-prd",
67
+ "Tags": [
68
+ {
69
+ "Value": "Alchemy",
70
+ "Key": "ProvisionedBy"
71
+ },
72
+ {
73
+ "Value": "prd",
74
+ "Key": "Stage"
75
+ }
76
+ ]
77
+ },
78
+ "props": {
79
+ "BucketName": "pyrossh-website-prd",
80
+ "PublicAccessBlockConfiguration": {
81
+ "BlockPublicAcls": true,
82
+ "BlockPublicPolicy": true,
83
+ "IgnorePublicAcls": true,
84
+ "RestrictPublicBuckets": true
85
+ },
86
+ "Tags": [
87
+ {
88
+ "Key": "Stage",
89
+ "Value": "prd"
90
+ },
91
+ {
92
+ "Key": "ProvisionedBy",
93
+ "Value": "Alchemy"
94
+ }
95
+ ]
96
+ }
97
+ }