> Good lord what is happening in there Previously the contents of the Web Push API payloads closely resembled the structure of JavaScript's [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification). But now that the API is open to non-browser apps, and given that there is no required coupling between contents of the payload and a Notification object, here is how I changed the payload: ```json { "access_token": "...", "preferred_locale": "en", "notification_id": "12345", "notification_type": "follow", "title": "So and so followed you", "body": "This is my bio", "icon": "https://example.com/avatar.png" } ``` The title, body and icon attributes are included as a fallback so you can construct a minimal notification if you cannot perform a network request to the API to get more data.
		
			
				
	
	
		
			31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* @preval */
 | 
						|
 | 
						|
const fs   = require('fs');
 | 
						|
const path = require('path');
 | 
						|
 | 
						|
const filtered  = {};
 | 
						|
const filenames = fs.readdirSync(path.resolve(__dirname, '../locales'));
 | 
						|
 | 
						|
filenames.forEach(filename => {
 | 
						|
  if (!filename.match(/\.json$/) || filename.match(/defaultMessages|whitelist/)) return;
 | 
						|
 | 
						|
  const content = fs.readFileSync(path.resolve(__dirname, `../locales/${filename}`), 'utf-8');
 | 
						|
  const full    = JSON.parse(content);
 | 
						|
  const locale  = filename.split('.')[0];
 | 
						|
 | 
						|
  filtered[locale] = {
 | 
						|
    'notification.favourite': full['notification.favourite'] || '',
 | 
						|
    'notification.follow': full['notification.follow'] || '',
 | 
						|
    'notification.mention': full['notification.mention'] || '',
 | 
						|
    'notification.reblog': full['notification.reblog'] || '',
 | 
						|
 | 
						|
    'status.show_more': full['status.show_more'] || '',
 | 
						|
    'status.reblog': full['status.reblog'] || '',
 | 
						|
    'status.favourite': full['status.favourite'] || '',
 | 
						|
 | 
						|
    'notifications.group': full['notifications.group'] || '',
 | 
						|
  };
 | 
						|
});
 | 
						|
 | 
						|
module.exports = JSON.parse(JSON.stringify(filtered));
 |