{"ok":true,"meta":{"generatedAt":"2026-06-30T13:22:45.784Z"},"data":{"version":"tzv3-media-public-url-policy-v1","endpoint":"/api/media/public-url-policy","command":"npm run media:public-urls","script":"scripts/tzv3-media-public-urls.mjs","configured":true,"delivery":{"mode":"site-origin","publicBaseUrl":"https://www.artescort.vip","cdnBaseUrl":null,"siteUrl":"https://www.artescort.vip","requiredForProduction":["NEXT_PUBLIC_SITE_URL","NEXT_PUBLIC_MEDIA_CDN_URL"],"assetManifestEndpoint":"/api/media/asset-manifest","assetManifestHash":"f27b528e5dbe69db080c681e525aa940fb8200c720c36e5f8dd7c685995ebc4d"},"summary":{"assetCount":20,"imageCount":12,"videoCount":8,"contractReadyAssetCount":20,"productionReadyAssetCount":20,"contractFailureCount":0,"productionWarningCount":0},"contractReady":true,"productionReady":false,"productionBoundary":["This policy proves every local media asset has a deterministic public HTTPS URL for external consumers.","Production import still requires NEXT_PUBLIC_MEDIA_CDN_URL to point to the final CDN origin and npm run media:audit to verify representative assets.","The schedule provider handoff should use these public URLs after CDN upload, not placeholder artesc.example URLs."],"safety":{"mode":"read-only","writes":false,"printsSecrets":false,"note":"Reads the local media manifest and environment names only. It never uploads, deletes, mutates CDN/R2, or prints credentials."},"assets":[{"publicPath":"/models/hero-sofia.jpeg","publicUrl":"https://www.artescort.vip/models/hero-sofia.jpeg","cdnUrl":null,"r2Key":"models/hero-sofia.jpeg","localRelativePath":"public/models/hero-sofia.jpeg","contentType":"image/jpeg","kind":"image","role":"hero","profileSlugs":[],"bytes":136848,"sha256":"9bd9597de7448ca0fd84887c4092f4f005c2afc95cbd48eaaec13423db6a65cd","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/mira.jpeg","publicUrl":"https://www.artescort.vip/models/mira.jpeg","cdnUrl":null,"r2Key":"models/mira.jpeg","localRelativePath":"public/models/mira.jpeg","contentType":"image/jpeg","kind":"image","role":"card-gallery-image","profileSlugs":["mira","ksenia","emma"],"bytes":130025,"sha256":"c1fe1e84268851e4365a23faa5996c5b81e117f275a0b2970f8d2836c9f9bd61","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-darina.jpeg","publicUrl":"https://www.artescort.vip/models/profile-darina.jpeg","cdnUrl":null,"r2Key":"models/profile-darina.jpeg","localRelativePath":"public/models/profile-darina.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["darina"],"bytes":292898,"sha256":"7708d407b2d0378b1ee4801972306cb1e05be97b2924d4eaa04db303d49bf57b","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-emma.jpeg","publicUrl":"https://www.artescort.vip/models/profile-emma.jpeg","cdnUrl":null,"r2Key":"models/profile-emma.jpeg","localRelativePath":"public/models/profile-emma.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["emma"],"bytes":130025,"sha256":"c1fe1e84268851e4365a23faa5996c5b81e117f275a0b2970f8d2836c9f9bd61","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-ksenia.jpeg","publicUrl":"https://www.artescort.vip/models/profile-ksenia.jpeg","cdnUrl":null,"r2Key":"models/profile-ksenia.jpeg","localRelativePath":"public/models/profile-ksenia.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["ksenia"],"bytes":130025,"sha256":"c1fe1e84268851e4365a23faa5996c5b81e117f275a0b2970f8d2836c9f9bd61","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-lina.jpeg","publicUrl":"https://www.artescort.vip/models/profile-lina.jpeg","cdnUrl":null,"r2Key":"models/profile-lina.jpeg","localRelativePath":"public/models/profile-lina.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["lina"],"bytes":136848,"sha256":"9bd9597de7448ca0fd84887c4092f4f005c2afc95cbd48eaaec13423db6a65cd","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-mira.jpeg","publicUrl":"https://www.artescort.vip/models/profile-mira.jpeg","cdnUrl":null,"r2Key":"models/profile-mira.jpeg","localRelativePath":"public/models/profile-mira.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["mira"],"bytes":130025,"sha256":"c1fe1e84268851e4365a23faa5996c5b81e117f275a0b2970f8d2836c9f9bd61","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-nikol.jpeg","publicUrl":"https://www.artescort.vip/models/profile-nikol.jpeg","cdnUrl":null,"r2Key":"models/profile-nikol.jpeg","localRelativePath":"public/models/profile-nikol.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["nikol"],"bytes":136848,"sha256":"9bd9597de7448ca0fd84887c4092f4f005c2afc95cbd48eaaec13423db6a65cd","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-sofia.jpeg","publicUrl":"https://www.artescort.vip/models/profile-sofia.jpeg","cdnUrl":null,"r2Key":"models/profile-sofia.jpeg","localRelativePath":"public/models/profile-sofia.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["sofia"],"bytes":136848,"sha256":"9bd9597de7448ca0fd84887c4092f4f005c2afc95cbd48eaaec13423db6a65cd","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/profile-vera.jpeg","publicUrl":"https://www.artescort.vip/models/profile-vera.jpeg","cdnUrl":null,"r2Key":"models/profile-vera.jpeg","localRelativePath":"public/models/profile-vera.jpeg","contentType":"image/jpeg","kind":"image","role":"profile-image","profileSlugs":["vera"],"bytes":292898,"sha256":"7708d407b2d0378b1ee4801972306cb1e05be97b2924d4eaa04db303d49bf57b","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/sofia.jpeg","publicUrl":"https://www.artescort.vip/models/sofia.jpeg","cdnUrl":null,"r2Key":"models/sofia.jpeg","localRelativePath":"public/models/sofia.jpeg","contentType":"image/jpeg","kind":"image","role":"card-gallery-image","profileSlugs":["sofia","lina","nikol"],"bytes":136848,"sha256":"9bd9597de7448ca0fd84887c4092f4f005c2afc95cbd48eaaec13423db6a65cd","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/models/vera.jpeg","publicUrl":"https://www.artescort.vip/models/vera.jpeg","cdnUrl":null,"r2Key":"models/vera.jpeg","localRelativePath":"public/models/vera.jpeg","contentType":"image/jpeg","kind":"image","role":"card-gallery-image","profileSlugs":["vera","darina"],"bytes":292898,"sha256":"7708d407b2d0378b1ee4801972306cb1e05be97b2924d4eaa04db303d49bf57b","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/darina.mp4","publicUrl":"https://www.artescort.vip/videos/darina.mp4","cdnUrl":null,"r2Key":"videos/darina.mp4","localRelativePath":"public/videos/darina.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["darina"],"bytes":20253,"sha256":"579d33a317b298ad6755e0ffaf46ae44bcddb36a7d5218a6eca457a68b16c2e4","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/emma.mp4","publicUrl":"https://www.artescort.vip/videos/emma.mp4","cdnUrl":null,"r2Key":"videos/emma.mp4","localRelativePath":"public/videos/emma.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["emma"],"bytes":10697,"sha256":"3571068086eba78ba05c01ad6be5cc6fd8f88844f601460e8ee4728c65814119","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/ksenia.mp4","publicUrl":"https://www.artescort.vip/videos/ksenia.mp4","cdnUrl":null,"r2Key":"videos/ksenia.mp4","localRelativePath":"public/videos/ksenia.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["ksenia"],"bytes":10697,"sha256":"3571068086eba78ba05c01ad6be5cc6fd8f88844f601460e8ee4728c65814119","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/lina.mp4","publicUrl":"https://www.artescort.vip/videos/lina.mp4","cdnUrl":null,"r2Key":"videos/lina.mp4","localRelativePath":"public/videos/lina.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["lina"],"bytes":14015,"sha256":"73f953b46e36d0f96c0fe7ff80719fa9a9cab919138e795126a8dc6ffc8bc010","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/mira.mp4","publicUrl":"https://www.artescort.vip/videos/mira.mp4","cdnUrl":null,"r2Key":"videos/mira.mp4","localRelativePath":"public/videos/mira.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["mira"],"bytes":10697,"sha256":"3571068086eba78ba05c01ad6be5cc6fd8f88844f601460e8ee4728c65814119","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/nikol.mp4","publicUrl":"https://www.artescort.vip/videos/nikol.mp4","cdnUrl":null,"r2Key":"videos/nikol.mp4","localRelativePath":"public/videos/nikol.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["nikol"],"bytes":14015,"sha256":"73f953b46e36d0f96c0fe7ff80719fa9a9cab919138e795126a8dc6ffc8bc010","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/sofia.mp4","publicUrl":"https://www.artescort.vip/videos/sofia.mp4","cdnUrl":null,"r2Key":"videos/sofia.mp4","localRelativePath":"public/videos/sofia.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["sofia"],"bytes":14015,"sha256":"73f953b46e36d0f96c0fe7ff80719fa9a9cab919138e795126a8dc6ffc8bc010","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]},{"publicPath":"/videos/vera.mp4","publicUrl":"https://www.artescort.vip/videos/vera.mp4","cdnUrl":null,"r2Key":"videos/vera.mp4","localRelativePath":"public/videos/vera.mp4","contentType":"video/mp4","kind":"video","role":"video-visit","profileSlugs":["vera"],"bytes":20253,"sha256":"579d33a317b298ad6755e0ffaf46ae44bcddb36a7d5218a6eca457a68b16c2e4","cacheControl":"public, max-age=31536000, immutable","contractReady":true,"productionReady":true,"checks":[{"id":"public-url-absolute","ok":true,"detail":"Public media URL should be absolute for external consumers such as the schedule iframe."},{"id":"public-url-https","ok":true,"detail":"Public media URL should use HTTPS in production."},{"id":"public-url-not-placeholder","ok":true,"detail":"Public media URL should not use example, localhost, or loopback origins before production import."},{"id":"object-key-path-match","ok":true,"detail":"Public URL path should match the Cloudflare R2 object key from the asset manifest."},{"id":"sha256-present","ok":true,"detail":"Asset sha256 hash should be present for upload verification."}]}],"contractFailures":[],"productionWarnings":[]}}