1export const testCertificateBody = `-----BEGIN CERTIFICATE-----
2MIICuDCCAaACCQDB190ctLeLgjANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBNh
3bGNoZW15LWVmZmVjdC10ZXN0MB4XDTI2MDMxMjE4NTczOVoXDTI3MDMxMjE4NTcz
4OVowHjEcMBoGA1UEAwwTYWxjaGVteS1lZmZlY3QtdGVzdDCCASIwDQYJKoZIhvcN
5AQEBBQADggEPADCCAQoCggEBAJwiwtc5eAckD66lQaHRj+1qHqIO2yaKsXV6DJFg
6q1HhE//fup0fcJIPlKUDDfZlx1cIuvUVO0qlpg8mG9RwKm533j5ysiciBkxmIpvQ
76xFLbfD/n3w2EcTPbJaqf7guO7hGlfP3wur/SNeKG5U/GuE2Ta6uqCEhj2XQHHdJ
85Xgz1873txyYcG2+wDhpSbSMMaOvTCWu3BSek5zx0Y2tvb8gVSJQ6cXLf9EIPPUw
9FaiY+oJ24f4BRssF8C++o2te9nFApmyL9cCoM352bj/h4s3LPS/Ogx+HsxUdTjFh
10Lbrg25IosnUuX8ecQcO9R2Ftl4T5kLvb4KaA+knAo55oP9MCAwEAATANBgkqhkiG
119w0BAQsFAAOCAQEAWKwbO5WCu6+kdEwXq59ZAdBHK/8DLL9frm/i+BaBD+Qjk/gF
12uRBfUXMYvrayWxGnrGgbD5ltHkxkjfpcIoGXcoGiGkpssJ1PrmNhXU+GApvTlx/M
13UIlY96wMzI+k3Vx8nGAuPfWr8+P7JmX0fPojw3XwlD8LICgZcik/q+Y8gf2JEza2
14dcFQa4gdhPj/lZuo9PJrogSnc7opgOkwWcpXHUiixqb/KLCPDFqnEXVjCP24NBGY
150q4+AE4SoS1uYnh9DRx8lBM9TqahQGsk66OEp9/dUF23CBtRNuU7SS/5oH1Kgq8m
16EI2bc6hl1tMiULo9WrvuVFknk1hx4/Yli2AMmQ==
17-----END CERTIFICATE-----`;
18
19export const testPrivateKey = `-----BEGIN PRIVATE KEY-----
20MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCcIsLXOXgHJA+u
21pUGh0Y/tah6iDtsmirF1egyRYKtR4RP/37qdH3CSD5SlAw32ZcdXCLr1FTtKpaYP
22JhvUcCpud94+crInIgZMZiKb0OsRS23w/598NhHEz2yWqn+4Lju4RpXz98Lq/0jX
23ihuVPxrhNk2urqghIY9l0Bx3SeV4M9fO97ccmHBtvsA4aUm0jDGjr0wlrtwUnpOc
248dGNrb2/IFUiUOnFy3/RCDz1MBWomPqCduH+AUbLBfAvvqNrXvZxQKZsi/XAqDN+
25dm4/4eLNyz0vzoMfh7MVHU4xYS264NuSKLJ1Ll/HnEHDvUdhbZeE+ZC72+CmgPpJ
26wKOeaD/TAgMBAAECggEAfl1/1dLUOutLqexjxwSleN/HNR/S7EmZwFtsKojTfyws
27FI3NKfdVE1F622YyebX79IvDTDHHz+1rDZ2pLnEtVkS7YU1QtG1MLa8H2ZXnehLT
28QxaPzGayUNgTqYkKX1VDziuKl25xmeHM4W0MT+lH5vgdPQBsYIwZ06vwLfdnubTw
29GPjXBYHexWrL/Bpm9lPPFcB3kGtQ5T51U34DrBKCKLuckZcdV//91dy8IvrYQsLU
30SbEisoOlztn3IgweKbsMXdHoiKfH1IGiVPKAOReNnDpZWIQoorNHF9A90xuhfZHD
319PZ4UDu0ywzPfCnY5wi8ZK9+MKgA1mNLDgbiKjY3IQKBgQDInGMnKBHL3lqKA93F
32WFM2jukTWSToPn8jTGtdg6cJ6eXNu1y54Xf2Ws/Y2Opf26iWopmWGExJ6gsyPng6
33pUBZ3MyFdRF7/hX9tN2d9XmLB1ULjMQinljfEemmb/NEk8PmRvZiBEaQcWZqJd1H
343J2aNf4IA+QsMCgvLjfiLWPfkQKBgQDHPsbuZcd8IeGbHgSfQ6NB4LG2dgtn+QL0
35fzW5ppS+cfRSZGlugAftL8yvE4lY0OL6KHn2GV4hHkbK4Jf1+3NtLNLP/ZUWG1n+
36CgQ0zbUiGe48Fjiw3t/eTVRmU5O342CeIlQx0ZCYgmh4HGYewtHWATHz87uPYjId
376xdkE/w/IwKBgBwTZv0P6o2xrNIsAFmiJuM31P7UNwoZ1QlHpK8Nwc7tYTANzMhm
38+bcMtpIOqZ6Iy2tpjj0nYWXmz3JUs9bhUcRB1o3G+I912/YJ3gpBVKVUfV6EcN63
39cpClnSGiAVXTqFMOE2VcW9PTSxYH/pQUGCqA6/CLOt/ETZtsyH1rBNNBAoGAE2GY
406kG+SOXm0zb1TiS/Mb5QqyYKb/+5+NyS9k8s8uWU1Zrs4pHTs4/Nwk4NMzWGjrz3
41OCg5jtEqI7v7LDNchAczLoZFRVQ9ycdhp11HPFz3XqLuus3DSxWMmzOQD/gvQtKm
42C/6NqTguP1jL2jwrOzz8hfV0jjsIEv72VIbZJ68CgYBVGQlMbxn0FgAKmkQjS3H8
43NxJgkyRs59+YrN9v3ZkHs7I2krxrFIWkOyNKgvaTt3/rpx0IK8URYoR+pAWA8I9r
44hmxwC/rv7MHPe/R/EDnfLRgdpCV4MEP2nbHcVIN23z/VaxS07h3UXkc7iPibN5hY
456GSLFl3fVUvo8nWbAm8/Bg==
46-----END PRIVATE KEY-----`;
47
48export const testSshPublicKey =
49 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf2JQ857siVWa30QTOix63EDnH3t6SzjmNp5ps1XDPrVCLbWMvvN2I17uRIydtWm3mM8BLz5JvDLbJMWgAo+imslqC+GW1UcDTzx8Hcrg5hUUSwHrYgpq6JBdIwVjshO/dgzGjnVIM9aYbKIOSYdahRrY9ORyyuEK+u46M+04GE6f5KYk0hQMXXdJTBsukXJMSz82kkTyRkyuLaw06+TCNLv+Ui8y9d2VtrG2cIeo6XWfGw+NTYG5O9BaBqxpuuDeslLfLtiTXy7E6dgTk9Qo6/5s30As2dcPLD8nwP1IKeKXCB1IvMWgiSV+lC8HlRgm2udGs92jW6pX4XZmMR2Wd alchemy-test-rsa";
50
51const testCertificateBase64 = testCertificateBody.replace(
52 /-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|\n/g,
53 "",
54);
55
56export const testSamlMetadataDocument = `<?xml version="1.0" encoding="UTF-8"?>
57<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="urn:alchemy:test:idp">
58 <IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
59 <KeyDescriptor use="signing">
60 <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
61 <X509Data>
62 <X509Certificate>${testCertificateBase64}</X509Certificate>
63 </X509Data>
64 </KeyInfo>
65 </KeyDescriptor>
66 <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://example.com/sso" />
67 </IDPSSODescriptor>
68</EntityDescriptor>`;
69
70export const testSamlMetadataDocumentUpdated = `<?xml version="1.0" encoding="UTF-8"?>
71<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="urn:alchemy:test:idp:updated">
72 <IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
73 <KeyDescriptor use="signing">
74 <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
75 <X509Data>
76 <X509Certificate>${testCertificateBase64}</X509Certificate>
77 </X509Data>
78 </KeyInfo>
79 </KeyDescriptor>
80 <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://example.com/sso/updated" />
81 </IDPSSODescriptor>
82</EntityDescriptor>`;
83
84export const testOidcUrl = "https://example.com/alchemy-oidc";
85// A distinct issuer URL for the `list` test. The OIDC provider ARN is derived
86// deterministically from the URL, so reusing `testOidcUrl` would make the list
87// test and the federation lifecycle test provision (and tear down) the same
88// physical provider concurrently — give the list test its own resource.
89export const testOidcListUrl = "https://example.com/alchemy-oidc-list";
90// Issuer for the GitHub-Actions-style federation e2e. The testing account
91// already carries the real `token.actions.githubusercontent.com` provider
92// (used by this repo's CI) and IAM allows exactly one provider per issuer
93// URL per account — so the e2e federates against a stand-in issuer with
94// identical trust mechanics instead of touching the CI provider.
95export const testOidcGithubUrl = "https://example.com/alchemy-oidc-github";
96export const testOidcGithubHost = testOidcGithubUrl.replace(/^https?:\/\//, "");
97export const testOidcThumbprintA = "1111111111111111111111111111111111111111";
98export const testOidcThumbprintB = "2222222222222222222222222222222222222222";