> 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.
		
			
				
	
	
		
			30 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			1 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));
 |