@vtmap/vtmap-sdk-js
Version:
JS SDK for accessing Viettelmaps APIs
586 lines (549 loc) • 15 kB
JavaScript
'use strict';
var v = require('./service-helpers/validator');
var pick = require('./service-helpers/pick');
var createServiceFactory = require('./service-helpers/create-service-factory');
/**
* Tilesets API service.
*
* Learn more about this service and its responses in
* [the HTTP service documentation](https://docs.mapbox.com/api/maps/#tilesets).
*/
var Tilesets = {};
/**
* List a user's tilesets.
*
* @param {Object} [config]
* @param {string} [config.ownerId]
* @param {'raster'|'vector'} [config.type] - Filter results by tileset type, either `raster` or `vector`.
* @param {number} [config.limit=100] - The maximum number of tilesets to return, from 1 to 500.
* @param {'created'|'modified'} [config.sortBy] - Sort the listings by their `created` or `modified` timestamps.
* @param {string} [config.start] - The tileset after which to start the listing.
* @param {'public'|'private'} [config.visibility] - Filter results by visibility, either `public` or `private`
* @return {MapiRequest}
*
* @example
* tilesetsClient.listTilesets()
* .send()
* .then(response => {
* const tilesets = response.body;
* });
*
* @example
* tilesetsClient.listTilesets()
* .eachPage((error, response, next) => {
* // Handle error or response and call next.
* });
*/
Tilesets.listTilesets = function(config) {
v.assertShape({
ownerId: v.string,
limit: v.range([1, 500]),
sortBy: v.oneOf('created', 'modified'),
start: v.string,
type: v.oneOf('raster', 'vector'),
visibility: v.oneOf('public', 'private')
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/:ownerId',
params: config ? pick(config, ['ownerId']) : {},
query: config
? pick(config, ['limit', 'sortBy', 'start', 'type', 'visibility'])
: {}
});
};
/**
* Delete a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset to be deleted in the form `username.tileset_id`.
* @return {MapiRequest}
*
* @example
* tilesetsClient.deleteTileset({
* tilesetId: 'username.tileset_id'
* })
* .send()
* .then(response => {
* const deleted = response.statusCode === 204;
* });
*/
Tilesets.deleteTileset = function(config) {
v.assertShape({
tilesetId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'DELETE',
path: '/tilesets/v1/:tilesetId',
params: pick(config, ['tilesetId'])
});
};
/**
* Retrieve metadata about a tileset.
*
* @param {Object} [config]
* @param {string} [config.tilesetId] - Unique identifier for the tileset in the format `username.id`.
*
* @return {MapiRequest}
*/
Tilesets.tileJSONMetadata = function(config) {
v.assertShape({
tilesetId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'GET',
path: '/v4/:tilesetId.json',
params: pick(config, ['tilesetId'])
});
};
/**
* Create a tileset source
*
* @param {Object} config
* @param {string} config.id ID of the tileset source to be created.
* @param {UploadableFile} config.file Line-delimeted GeoJSON file.
* @param {string} [config.ownerId]
* @return {MapiRequest}
*
* @example
* tilesetsClient.createTilesetSource({
* id: 'tileset_source_id',
* // The string filename value works in Node.
* // In the browser, provide a Blob.
* file: 'path/to/file.geojson.ld'
* })
* .send()
* .then(response => {
* const tilesetSource = response.body;
* });
*/
Tilesets.createTilesetSource = function(config) {
v.assertShape({
id: v.required(v.string),
file: v.required(v.file),
ownerId: v.string
})(config);
return this.client.createRequest({
method: 'POST',
path: '/tilesets/v1/sources/:ownerId/:id',
params: pick(config, ['ownerId', 'id']),
file: config.file,
sendFileAs: 'form'
});
};
/**
* Retrieve a tileset source information
*
* @param {Object} config
* @param {string} config.id ID of the tileset source.
* @param {string} [config.ownerId]
* @return {MapiRequest}
*
* @example
* tilesetsClient.getTilesetSource({
* id: 'tileset_source_id'
* })
* .send()
* .then(response => {
* const tilesetSource = response.body;
* });
*/
Tilesets.getTilesetSource = function(config) {
v.assertShape({
id: v.required(v.string),
ownerId: v.string
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/sources/:ownerId/:id',
params: pick(config, ['ownerId', 'id'])
});
};
/**
* List tileset sources
*
* @param {Object} [config]
* @param {string} [config.ownerId]
* @param {number} [config.limit=100] - The maximum number of tilesets to return, from 1 to 500.
* @param {string} [config.start] - The tileset after which to start the listing.
* @return {MapiRequest}
*
* @example
* tilesetsClient.listTilesetSources()
* .send()
* .then(response => {
* const tilesetSources = response.body;
* });
*/
Tilesets.listTilesetSources = function(config) {
v.assertShape({
ownerId: v.string,
limit: v.range([1, 500]),
start: v.string
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/sources/:ownerId',
params: config ? pick(config, ['ownerId']) : {},
query: config ? pick(config, ['limit', 'start']) : {}
});
};
/**
* Delete a tileset source
*
* @param {Object} config
* @param {string} config.id ID of the tileset source to be deleted.
* @param {string} [config.ownerId]
* @return {MapiRequest}
*
* @example
* tilesetsClient.deleteTilesetSource({
* id: 'tileset_source_id'
* })
* .send()
* .then(response => {
* const deleted = response.statusCode === 201;
* });
*/
Tilesets.deleteTilesetSource = function(config) {
v.assertShape({
id: v.required(v.string),
ownerId: v.string
})(config);
return this.client.createRequest({
method: 'DELETE',
path: '/tilesets/v1/sources/:ownerId/:id',
params: pick(config, ['ownerId', 'id'])
});
};
/**
* Create a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset to be created in the form `username.tileset_name`.
* @param {Object} config.recipe The [tileset recipe](https://docs.mapbox.com/help/troubleshooting/tileset-recipe-reference/) to use in JSON format.
* @param {string} config.name Name of the tileset.
* @param {boolean} [config.private=true] A private tileset must be used with an access token from your account.
* @param {string} [config.description] Description of the tileset.
* @return {MapiRequest}
*
* @example
* tilesetsClient.createTileset({
* tilesetId: 'username.tileset_id',
* recipe: {
* version: 1,
* layers: {
* my_new_layer: {
* source: "mapbox://tileset-source/{username}/{id}",
* minzoom: 0,
* maxzoom: 8
* }
* }
* },
* name: 'My Tileset'
* })
* .send()
* .then(response => {
* const message = response.body.message;
* });
*/
Tilesets.createTileset = function(config) {
v.assertShape({
tilesetId: v.required(v.string),
recipe: v.required(v.plainObject),
name: v.required(v.string),
private: v.boolean,
description: v.string
})(config);
return this.client.createRequest({
method: 'POST',
path: '/tilesets/v1/:tilesetId',
params: pick(config, ['tilesetId']),
body: pick(config, ['recipe', 'name', 'private', 'description'])
});
};
/**
* Publish a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset to publish in the form `username.tileset_name`.
* @return {MapiRequest}
*
* @example
* tilesetsClient.publishTileset({
* tilesetId: 'username.tileset_id'
* })
* .send()
* .then(response => {
* const tilesetPublishJob = response.body;
* });
*/
Tilesets.publishTileset = function(config) {
v.assertShape({
tilesetId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'POST',
path: '/tilesets/v1/:tilesetId/publish',
params: pick(config, ['tilesetId'])
});
};
/**
* Update a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @param {string} [config.name]
* @param {string} [config.description]
* @param {boolean} [config.private]
* @param {Array} [config.attribution]
* @param {string} [config.attribution[].text]
* @param {string} [config.attribution[].link]
* @return {MapiRequest}
*
* @example
* tilesetsClient.updateTileset({
* tilesetId: 'username.tileset_name',
* name: 'Tileset Name',
* private: true,
* attribution: [
* {
* text: 'Source Name',
* link: 'https://example.com'
* }
* ]
* })
* .send()
* .then(response => {
* const updated = response.statusCode === 204;
* });
*/
Tilesets.updateTileset = function(config) {
v.assertShape({
tilesetId: v.required(v.string),
name: v.string,
description: v.string,
private: v.boolean,
attribution: v.arrayOf(
v.strictShape({
text: v.required(v.string),
link: v.required(v.string)
})
)
})(config);
return this.client.createRequest({
method: 'PATCH',
path: '/tilesets/v1/:tilesetId',
params: pick(config, ['tilesetId']),
body: config
? pick(config, ['name', 'description', 'private', 'attribution'])
: {}
});
};
/**
* Retrieve the status of a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @return {MapiRequest}
*
* @example
* tilesetsClient.tilesetStatus({
* tilesetId: 'username.tileset_name'
* })
* .send()
* .then(response => {
* const tilesetStatus = response.body;
* });
*/
Tilesets.tilesetStatus = function(config) {
v.assertShape({
tilesetId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/:tilesetId/status',
params: pick(config, ['tilesetId'])
});
};
/**
* Retrieve information about a single tileset job
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @param {string} config.jobId The publish job's ID.
* @return {MapiRequest}
*
* @example
* tilesetsClient.tilesetJob({
* tilesetId: 'username.tileset_name'
* jobId: 'job_id'
* })
* .send()
* .then(response => {
* const tilesetJob = response.body;
* });
*/
Tilesets.tilesetJob = function(config) {
v.assertShape({
tilesetId: v.required(v.string),
jobId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/:tilesetId/jobs/:jobId',
params: pick(config, ['tilesetId', 'jobId'])
});
};
/**
* List information about all jobs for a tileset
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @param {'processing'|'queued'|'success'|'failed'} [config.stage]
* @param {number} [config.limit=100] - The maximum number of tilesets to return, from 1 to 500.
* @param {string} [config.start] - The tileset after which to start the listing.
* @return {MapiRequest}
*
* @example
* tilesetsClient.listTilesetJobs({
* tilesetId: 'username.tileset_name'
* })
* .send()
* .then(response => {
* const jobs = response.body;
* });
*/
Tilesets.listTilesetJobs = function(config) {
v.assertShape({
tilesetId: v.required(v.string),
stage: v.oneOf('processing', 'queued', 'success', 'failed'),
limit: v.range([1, 500]),
start: v.string
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/:tilesetId/jobs',
params: pick(config, ['tilesetId']),
query: pick(config, ['stage', 'limit', 'start'])
});
};
/**
* View Tilesets API global queue
*
* @return {MapiRequest}
*
* @example
* tilesetsClient.getTilesetsQueue()
* .send()
* .then(response => {
* const queue = response.body;
* });
*/
Tilesets.getTilesetsQueue = function() {
return this.client.createRequest({
method: 'PUT',
path: '/tilesets/v1/queue'
});
};
/**
* Validate a recipe
*
* @param {Object} config
* @param {Object} config.recipe The [tileset recipe](https://docs.mapbox.com/help/troubleshooting/tileset-recipe-reference/) to validate in JSON format.
* @return {MapiRequest}
*
* @example
* tilesetsClient.validateRecipe({
* recipe: {
* version: 1,
* layers: {
* my_new_layer: {
* source: "mapbox://tileset-source/{username}/{id}",
* minzoom: 0,
* maxzoom: 8
* }
* }
* }
* })
* .send()
* .then(response => {
* const validation = response.body;
* });
*/
Tilesets.validateRecipe = function(config) {
v.assertShape({
recipe: v.required(v.plainObject)
})(config);
return this.client.createRequest({
method: 'PUT',
path: '/tilesets/v1/validateRecipe',
body: config.recipe
});
};
/**
* Retrieve a recipe
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @return {MapiRequest}
*
* @example
* tilesetsClient.getRecipe({
* tilesetId: 'username.tileset_name'
* })
* .send()
* .then(response => {
* const recipe = response.body;
* });
*/
Tilesets.getRecipe = function(config) {
v.assertShape({
tilesetId: v.required(v.string)
})(config);
return this.client.createRequest({
method: 'GET',
path: '/tilesets/v1/:tilesetId/recipe',
params: pick(config, ['tilesetId'])
});
};
/**
* Update a tileset recipe
*
* @param {Object} config
* @param {string} config.tilesetId ID of the tileset in the form `username.tileset_name`.
* @param {Object} config.recipe The [tileset recipe](https://docs.mapbox.com/help/troubleshooting/tileset-recipe-reference/) in JSON format.
* @return {MapiRequest}
*
* @example
* tilesetsClient.updateRecipe({
* tilesetId: 'username.tileset_name',
* recipe: {
* version: 1,
* layers: {
* my_new_layer: {
* source: "mapbox://tileset-source/{username}/{id}",
* minzoom: 0,
* maxzoom: 8
* }
* }
* }
* })
* .send()
* .then(response => {
* const updated = response.statusCode === 204;
* });
*/
Tilesets.updateRecipe = function(config) {
v.assertShape({
tilesetId: v.required(v.string),
recipe: v.required(v.plainObject)
})(config);
return this.client.createRequest({
method: 'PATCH',
path: '/tilesets/v1/:tilesetId/recipe',
params: pick(config, ['tilesetId']),
body: config.recipe
});
};
module.exports = createServiceFactory(Tilesets);