diff --git a/src/data/dataCredits.js b/src/data/dataCredits.js
index 8d3949351..3b9a93c0b 100644
--- a/src/data/dataCredits.js
+++ b/src/data/dataCredits.js
@@ -300,6 +300,22 @@ export const DATA_CREDITS = [
'Traffic cameras (Toronto): contains information licensed under the ' +
'Open Government Licence – Toronto',
},
+ {
+ key: 'mapillary',
+ html: 'Street Level: imagery © Mapillary contributors, CC BY-SA 4.0',
+ },
+ {
+ key: 'google-street-view',
+ html: 'Street Level: Street View imagery © Google',
+ },
+ {
+ key: 'kartaview',
+ html: 'Street Level: imagery © KartaView contributors, CC BY-SA 4.0',
+ },
+ {
+ key: 'panoramax',
+ html: 'Street Level: imagery © Panoramax contributors, licence per picture',
+ },
{
key: 'gbfs',
html:
diff --git a/src/data/dataCredits.test.mjs b/src/data/dataCredits.test.mjs
index 30a19b8fe..dc3a7951f 100644
--- a/src/data/dataCredits.test.mjs
+++ b/src/data/dataCredits.test.mjs
@@ -128,3 +128,16 @@ test('the NYC camera credit carries NYC DOT’s requested disclaimer', () => {
assert.match(credit.html, /make no representation as to the accuracy/);
assert.match(credit.html, /observe posted signage/);
});
+
+test('every Street Level imagery source is in the attribution lightbox', () => {
+ for (const key of [
+ 'mapillary',
+ 'google-street-view',
+ 'kartaview',
+ 'panoramax',
+ ])
+ assert.ok(
+ DATA_CREDITS.some((entry) => entry.key === key),
+ `${key} has no credit`,
+ );
+});