import * as express from 'express'
import { asyncMiddleware } from '../middlewares'
import { ROUTE_CACHE_LIFETIME, WEBSERVER } from '../initializers/constants'
-import * as sitemapModule from 'sitemap'
+import { SitemapStream, streamToPromise } from 'sitemap'
import { VideoModel } from '../models/video/video'
import { VideoChannelModel } from '../models/video/video-channel'
import { AccountModel } from '../models/account/account'
// Special route that add OpenGraph and oEmbed tags
// Do not use a template engine for a so little thing
botsRouter.use('/sitemap.xml',
- asyncMiddleware(cacheRoute(ROUTE_CACHE_LIFETIME.SITEMAP)),
+ asyncMiddleware(cacheRoute()(ROUTE_CACHE_LIFETIME.SITEMAP)),
asyncMiddleware(getSitemap)
)
urls = urls.concat(await getSitemapVideoChannelUrls())
urls = urls.concat(await getSitemapAccountUrls())
- const sitemap = sitemapModule.createSitemap({
- hostname: WEBSERVER.URL,
- urls: urls
- })
+ const sitemapStream = new SitemapStream({ hostname: WEBSERVER.URL })
+
+ for (const urlObj of urls) {
+ sitemapStream.write(urlObj)
+ }
+ sitemapStream.end()
- const xml = sitemap.toXML()
+ const xml = await streamToPromise(sitemapStream)
res.header('Content-Type', 'application/xml')
res.send(xml)