diff --git a/config/cdn.js b/config/cdn.js deleted file mode 100644 index 1a2314014..000000000 --- a/config/cdn.js +++ /dev/null @@ -1,7 +0,0 @@ -const presetsCdnUrl = 'https://cdn.jsdelivr.net/npm/@openstreetmap/id-tagging-schema@{presets_version}/'; -const presetsCdnVersion = '3'; - -export { - presetsCdnUrl, - presetsCdnVersion -}; diff --git a/config/id.js b/config/id.js new file mode 100644 index 000000000..eceadde24 --- /dev/null +++ b/config/id.js @@ -0,0 +1,30 @@ +// cdns for external data packages +const presetsCdnUrl = 'https://cdn.jsdelivr.net/npm/@openstreetmap/id-tagging-schema@{presets_version}/'; +const ociCdnUrl = 'https://cdn.jsdelivr.net/npm/osm-community-index@{version}/'; +const wmfSitematrixCdnUrl = 'https://cdn.jsdelivr.net/npm/wmf-sitematrix@{version}/'; +const nsiCdnUrl = 'https://cdn.jsdelivr.net/npm/name-suggestion-index@{version}/'; + +// api urls and settings +const osmApiConnections = [ + { // "live" db + url: 'https://www.openstreetmap.org', + client_id: '0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc', + client_secret: 'BTlNrNxIPitHdL4sP2clHw5KLoee9aKkA7dQbc0Bj7Q' + }, { // "dev" db + url: 'https://api06.dev.openstreetmap.org', + client_id: 'Ee1wWJ6UlpERbF6BfTNOpwn0R8k_06mvMXdDUkeHMgw', + client_secret: 'OnfWFC-JkZNHyYdr_viNn_h_RTZXRslKcUxllOXqf5g' + } +]; +const taginfoApiUrl = 'https://taginfo.openstreetmap.org/api/4/'; +const nominatimApiUrl = 'https://nominatim.openstreetmap.org/'; + +export { + presetsCdnUrl, + ociCdnUrl, + wmfSitematrixCdnUrl, + nsiCdnUrl, + osmApiConnections, + taginfoApiUrl, + nominatimApiUrl, +}; diff --git a/dist/index.html b/dist/index.html index 673dcc29f..adda2ac9b 100644 --- a/dist/index.html +++ b/dist/index.html @@ -43,17 +43,6 @@ } else { var context = iD.coreContext() .assetPath('') - .apiConnections([ - { - url: 'https://www.openstreetmap.org', - client_id: '0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc', - client_secret: 'BTlNrNxIPitHdL4sP2clHw5KLoee9aKkA7dQbc0Bj7Q' - }, { - url: 'https://api06.dev.openstreetmap.org', - client_id: 'Ee1wWJ6UlpERbF6BfTNOpwn0R8k_06mvMXdDUkeHMgw', - client_secret: 'OnfWFC-JkZNHyYdr_viNn_h_RTZXRslKcUxllOXqf5g' - } - ]) .containerNode(container); context.init(); diff --git a/index.html b/index.html index dae23ef65..1ccc6f288 100644 --- a/index.html +++ b/index.html @@ -43,17 +43,6 @@ } else { var context = iD.coreContext() .assetPath('dist/') - .apiConnections([ - { - url: 'https://www.openstreetmap.org', - client_id: '0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc', - client_secret: 'BTlNrNxIPitHdL4sP2clHw5KLoee9aKkA7dQbc0Bj7Q' - }, { - url: 'https://api06.dev.openstreetmap.org', - client_id: 'Ee1wWJ6UlpERbF6BfTNOpwn0R8k_06mvMXdDUkeHMgw', - client_secret: 'OnfWFC-JkZNHyYdr_viNn_h_RTZXRslKcUxllOXqf5g' - } - ]) .containerNode(container); window.context = window.id = context; // for debugging context.init(); diff --git a/modules/core/context.js b/modules/core/context.js index f91861123..4acc70973 100644 --- a/modules/core/context.js +++ b/modules/core/context.js @@ -103,14 +103,6 @@ export function coreContext() { return context; }; - /* connection options for source switcher (optional) */ - let _apiConnections; - context.apiConnections = function(val) { - if (!arguments.length) return _apiConnections; - _apiConnections = val; - return context; - }; - // A string or array or locale codes to prefer over the browser's settings context.locale = function(locale) { diff --git a/modules/core/file_fetcher.js b/modules/core/file_fetcher.js index eb8102fa7..2cfe71625 100644 --- a/modules/core/file_fetcher.js +++ b/modules/core/file_fetcher.js @@ -1,5 +1,5 @@ import parseVersion from 'vparse'; -import { presetsCdnUrl, presetsCdnVersion } from '../../config/cdn.js'; +import { presetsCdnUrl, ociCdnUrl, wmfSitematrixCdnUrl } from '../../config/id.js'; // Double check this resolves to iD's `package.json` import packageJSON from '../../package.json'; @@ -13,7 +13,8 @@ export { _mainFileFetcher as fileFetcher }; export function coreFileFetcher() { const ociVersion = packageJSON.dependencies['osm-community-index'] || packageJSON.devDependencies['osm-community-index']; const v = parseVersion(ociVersion); - const vMinor = `${v.major}.${v.minor}`; + const ociVersionMinor = `${v.major}.${v.minor}`; + const presetsVersionMajor = parseVersion(packageJSON.devDependencies['@openstreetmap/id-tagging-schema']).major; let _this = {}; let _inflight = {}; @@ -24,21 +25,21 @@ export function coreFileFetcher() { 'keepRight': 'data/keepRight.min.json', 'languages': 'data/languages.min.json', 'locales': 'locales/index.min.json', - 'oci_defaults': `https://cdn.jsdelivr.net/npm/osm-community-index@${vMinor}/dist/defaults.min.json`, - 'oci_features': `https://cdn.jsdelivr.net/npm/osm-community-index@${vMinor}/dist/featureCollection.min.json`, - 'oci_resources': `https://cdn.jsdelivr.net/npm/osm-community-index@${vMinor}/dist/resources.min.json`, - 'presets_package': presetsCdnUrl.replace('{presets_version}', presetsCdnVersion) + 'package.json', + 'phone_formats': 'data/phone_formats.min.json', + 'qa_data': 'data/qa_data.min.json', + 'shortcuts': 'data/shortcuts.min.json', + 'territory_languages': 'data/territory_languages.min.json', + 'oci_defaults': ociCdnUrl.replace('{version}', ociVersionMinor) + 'dist/defaults.min.json', + 'oci_features': ociCdnUrl.replace('{version}', ociVersionMinor) + 'dist/featureCollection.min.json', + 'oci_resources': ociCdnUrl.replace('{version}', ociVersionMinor) + 'dist/resources.min.json', + 'presets_package': presetsCdnUrl.replace('{presets_version}', presetsVersionMajor) + 'package.json', 'deprecated': presetsCdnUrl + 'dist/deprecated.min.json', 'discarded': presetsCdnUrl + 'dist/discarded.min.json', 'preset_categories': presetsCdnUrl + 'dist/preset_categories.min.json', 'preset_defaults': presetsCdnUrl + 'dist/preset_defaults.min.json', 'preset_fields': presetsCdnUrl + 'dist/fields.min.json', 'preset_presets': presetsCdnUrl + 'dist/presets.min.json', - 'phone_formats': 'data/phone_formats.min.json', - 'qa_data': 'data/qa_data.min.json', - 'shortcuts': 'data/shortcuts.min.json', - 'territory_languages': 'data/territory_languages.min.json', - 'wmf_sitematrix': 'https://cdn.jsdelivr.net/npm/wmf-sitematrix@0.1/wikipedia.min.json' + 'wmf_sitematrix': wmfSitematrixCdnUrl.replace('{version}', '0.1') + 'wikipedia.min.json' }; let _cachedData = {}; diff --git a/modules/services/nominatim.js b/modules/services/nominatim.js index 9aee69649..ad435fd85 100644 --- a/modules/services/nominatim.js +++ b/modules/services/nominatim.js @@ -4,8 +4,10 @@ import RBush from 'rbush'; import { geoExtent } from '../geo'; import { utilQsString } from '../util'; +import { nominatimApiUrl } from '../../config/id.js'; -var apibase = 'https://nominatim.openstreetmap.org/'; + +var apibase = nominatimApiUrl; var _inflight = {}; var _nominatimCache; diff --git a/modules/services/nsi.js b/modules/services/nsi.js index 5732b4873..09ec82d36 100644 --- a/modules/services/nsi.js +++ b/modules/services/nsi.js @@ -4,6 +4,8 @@ import parseVersion from 'vparse'; import { fileFetcher, locationManager } from '../core'; import { presetManager } from '../presets'; +import { nsiCdnUrl } from '../../config/id.js'; + // Make very sure this resolves to iD's `package.json` // If you mess up the `../`s, the resolver may import another random package.json from somewhere else. import packageJSON from '../../package.json'; @@ -47,14 +49,15 @@ function setNsiSources() { const nsiVersion = packageJSON.dependencies['name-suggestion-index'] || packageJSON.devDependencies['name-suggestion-index']; const v = parseVersion(nsiVersion); const vMinor = `${v.major}.${v.minor}`; + const cdn = nsiCdnUrl.replace('{version}', vMinor); const sources = { - 'nsi_data': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/nsi.min.json`, - 'nsi_dissolved': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/dissolved.min.json`, - 'nsi_features': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/featureCollection.min.json`, - 'nsi_generics': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/genericWords.min.json`, - 'nsi_presets': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/presets/nsi-id-presets.min.json`, - 'nsi_replacements': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/replacements.min.json`, - 'nsi_trees': `https://cdn.jsdelivr.net/npm/name-suggestion-index@${vMinor}/dist/trees.min.json` + 'nsi_data': cdn + 'dist/nsi.min.json', + 'nsi_dissolved': cdn + 'dist/dissolved.min.json', + 'nsi_features': cdn + 'dist/featureCollection.min.json', + 'nsi_generics': cdn + 'dist/genericWords.min.json', + 'nsi_presets': cdn + 'dist/presets/nsi-id-presets.min.json', + 'nsi_replacements': cdn + 'dist/replacements.min.json', + 'nsi_trees': cdn + 'dist/trees.min.json' }; let fileMap = fileFetcher.fileMap(); diff --git a/modules/services/osm.js b/modules/services/osm.js index aa47d180b..37499926c 100644 --- a/modules/services/osm.js +++ b/modules/services/osm.js @@ -10,21 +10,24 @@ import { geoExtent, geoRawMercator, geoVecAdd, geoZoomToScale } from '../geo'; import { osmEntity, osmNode, osmNote, osmRelation, osmWay } from '../osm'; import { utilArrayChunk, utilArrayGroupBy, utilArrayUniq, utilObjectOmit, utilRebind, utilTiler, utilQsString } from '../util'; +import { osmApiConnections } from '../../config/id.js'; + var tiler = utilTiler(); var dispatch = d3_dispatch('apiStatusChange', 'authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes'); -var urlroot = 'https://www.openstreetmap.org'; +var urlroot = osmApiConnections[0].url; var redirectPath = window.location.origin + window.location.pathname; var oauth = osmAuth({ url: urlroot, - client_id: '0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc', - client_secret: 'BTlNrNxIPitHdL4sP2clHw5KLoee9aKkA7dQbc0Bj7Q', + client_id: osmApiConnections[0].client_id, + client_secret: osmApiConnections[0].client_secret, scope: 'read_prefs write_prefs write_api read_gpx write_notes', redirect_uri: redirectPath + 'land.html', loading: authLoading, done: authDone }); +var _apiConnections = osmApiConnections; // hardcode default block of Google Maps var _imageryBlocklists = [/.*\.google(apis)?\..*\/(vt|kh)[\?\/].*([xyz]=.*){3}.*/]; @@ -1276,6 +1279,14 @@ export default { }, + /* connection options for source switcher (optional) */ + apiConnections: function(val) { + if (!arguments.length) return _apiConnections; + _apiConnections = val; + return this; + }, + + switch: function(newOptions) { urlroot = newOptions.url; diff --git a/modules/services/taginfo.js b/modules/services/taginfo.js index bfbb4d56a..11eed11dd 100644 --- a/modules/services/taginfo.js +++ b/modules/services/taginfo.js @@ -5,8 +5,9 @@ import { json as d3_json } from 'd3-fetch'; import { utilObjectOmit, utilQsString } from '../util'; import { localizer } from '../core/localizer'; +import { taginfoApiUrl } from '../../config/id.js'; -var apibase = 'https://taginfo.openstreetmap.org/api/4/'; +var apibase = taginfoApiUrl; var _inflight = {}; var _popularKeys = {}; var _taginfoCache = {}; diff --git a/modules/ui/init.js b/modules/ui/init.js index f44344b26..79b4cd57c 100644 --- a/modules/ui/init.js +++ b/modules/ui/init.js @@ -293,7 +293,7 @@ export function uiInit(context) { .attr('class', 'user-list') .call(uiContributors(context)); - var apiConnections = context.apiConnections(); + var apiConnections = context.connection().apiConnections(); if (apiConnections && apiConnections.length > 1) { aboutList .append('li') diff --git a/package.json b/package.json index bc7ce2386..e1c8d3209 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,8 @@ "@mapbox/sexagesimal": "1.2.0", "@mapbox/vector-tile": "^1.3.1", "@tmcw/togeojson": "^5.2.1", - "@turf/bbox-clip": "^6.0.0", "@turf/bbox": "^6.0.0", + "@turf/bbox-clip": "^6.0.0", "abortcontroller-polyfill": "^1.4.0", "aes-js": "^3.1.2", "alif-toolkit": "^1.2.9", @@ -75,6 +75,7 @@ "@fortawesome/free-solid-svg-icons": "~6.2.0", "@ideditor/temaki": "~5.1.0", "@mapbox/maki": "^8.0.0", + "@openstreetmap/id-tagging-schema": "^3.5.1", "autoprefixer": "^10.0.1", "btoa": "^1.2.1", "chai": "^4.3.4",