Skip to main content

ActivityMappingService

Transform ActivityPub activities in other kind of objects, depending on the matching pattern

Usage

const { ActivityMappingService } = require('@semapps/activitypub');

module.exports = {
mixins: [ActivityMappingService],
settings: {
mappers: [
{
match: {
type: 'Announce',
object: {
type: 'Create',
object: {
type: 'Event'
}
}
},
mapping: {
category: {
en: 'New Events',
fr: 'Nouveaux événements'
},
title: '{{activity.object.object.name}}',
description: '{{activity.object.object.description}}',
image: '{{activity.object.object.image}}',
actionName: {
en: 'View',
fr: 'Voir'
},
actionLink: '{{activity.object.object.url}}'
},
priority: 1 // Default. If higher, the matching pattern will be applied before the mappers with lower priority
},
{
match: (activity) => {
if (activity.someProperty < 10) {
return true;
}
return false;
},
mapping: {
...
},
priority: 2
}
],
handlebars: {
helpers: {
// Custom Handlebars helpers. See https://handlebarsjs.com/guide/#custom-helpers
slice: (start, text) => text.slice(start)
}
},
matchAnnouncedActivities: false // Set to true if you want announcted activities to be treated as the activity itself
}
};

Mapping

Each property is rendered using Handlebars template engine.

The templates receive the following parameters:

PropertyTypeDescription
activity[Object]Activity to be mapped. It is dereferenced according to the match pattern.
emitter[Object]Data of the actor who sent the activity
emitterProfile[Object]Profile of the actor who sent the activity (if it exists)

Any other parameter provided to the map action will be passed to the template.

You may localize the template by providing an object with the locales as keys (see above).

Actions

The following service actions are available:

addMapper

Add a new mapper. This action is called on start if the mappers settings is set.

Parameters
PropertyTypeDefaultDescription
matchObject \| FunctionrequiredPattern that is checked against the activity. May be an async function that receives (ctx, dereferencedActivity) as parameter and returns true, if a match occurs.
mappingObjectrequiredDesired mapping of the new object (see above)
priorityInteger1Priority given to this mapper over other mappers

map

Map an activity using the provided mappers.

Parameters
PropertyTypeDefaultDescription
activityObjectrequiredThe activity to be mapped
localeStringThe locale to be used, if localization is activated

Any other parameter will be passed to the template (see above).

Return

The mapped object if there was a match, otherwise nothing.