diff --git a/src/server/notifications/Notification.ts b/src/server/notifications/Notification.ts index 1894adec2..019bbe2a9 100644 --- a/src/server/notifications/Notification.ts +++ b/src/server/notifications/Notification.ts @@ -3,7 +3,7 @@ export const CONTEXT_NOTIFICATION = 'https://www.w3.org/ns/solid/notification/v1 /** * The minimally expected fields for a Notification - * as defined in https://solidproject.org/TR/notifications-protocol#notification-data-model. + * as defined in https://solidproject.org/TR/2022/notifications-protocol-20221231#data-model. */ export interface Notification { '@context': [ @@ -12,11 +12,9 @@ export interface Notification { ...string[], ]; id: string; - type: string[]; - object: { - id: string; - type: string[]; - }; + type: string; + object: string; state?: string; + target?: string | string[]; published: string; } diff --git a/src/server/notifications/generate/ActivityNotificationGenerator.ts b/src/server/notifications/generate/ActivityNotificationGenerator.ts index 56277f7e6..2583e5344 100644 --- a/src/server/notifications/generate/ActivityNotificationGenerator.ts +++ b/src/server/notifications/generate/ActivityNotificationGenerator.ts @@ -1,7 +1,7 @@ import { getETag } from '../../../storage/Conditions'; import type { ResourceStore } from '../../../storage/ResourceStore'; import { NotImplementedHttpError } from '../../../util/errors/NotImplementedHttpError'; -import { AS, RDF } from '../../../util/Vocabularies'; +import { AS } from '../../../util/Vocabularies'; import type { Notification } from '../Notification'; import { CONTEXT_ACTIVITYSTREAMS, CONTEXT_NOTIFICATION } from '../Notification'; import type { NotificationHandlerInput } from '../NotificationHandler'; @@ -37,11 +37,8 @@ export class ActivityNotificationGenerator extends NotificationGenerator { CONTEXT_NOTIFICATION, ], id: `urn:${Date.now()}:${topic.path}`, - type: [ activity!.value.slice(AS.namespace.length) ], - object: { - id: topic.path, - type: representation.metadata.getAll(RDF.terms.type).map((term): string => term.value), - }, + type: activity!.value.slice(AS.namespace.length), + object: topic.path, state, published: new Date().toISOString(), }; diff --git a/src/server/notifications/generate/DeleteNotificationGenerator.ts b/src/server/notifications/generate/DeleteNotificationGenerator.ts index eff3a6ed4..f2e31a809 100644 --- a/src/server/notifications/generate/DeleteNotificationGenerator.ts +++ b/src/server/notifications/generate/DeleteNotificationGenerator.ts @@ -24,11 +24,8 @@ export class DeleteNotificationGenerator extends NotificationGenerator { CONTEXT_NOTIFICATION, ], id: `urn:${Date.now()}:${topic.path}`, - type: [ 'Delete' ], - object: { - id: topic.path, - type: [], - }, + type: 'Delete', + object: topic.path, published: new Date().toISOString(), }; } diff --git a/test/integration/WebSocketSubscription2021.test.ts b/test/integration/WebSocketSubscription2021.test.ts index 5424eca91..bc54d96d5 100644 --- a/test/integration/WebSocketSubscription2021.test.ts +++ b/test/integration/WebSocketSubscription2021.test.ts @@ -212,7 +212,7 @@ describe.each(stores)('A server supporting WebSocketSubscription2021 using %s', }); it('removes expired subscriptions.', async(): Promise => { - const { source } = await subscribe(notificationType, webId, subscriptionUrl, topic, { expiration: 1 }) as any; + const { source } = await subscribe(notificationType, webId, subscriptionUrl, topic, { endAt: 1 }) as any; const socket = new WebSocket(source); const messagePromise = new Promise((resolve): any => socket.on('message', resolve)); diff --git a/test/unit/server/notifications/ComposedNotificationHandler.test.ts b/test/unit/server/notifications/ComposedNotificationHandler.test.ts index 00b230347..6a4b4dbeb 100644 --- a/test/unit/server/notifications/ComposedNotificationHandler.test.ts +++ b/test/unit/server/notifications/ComposedNotificationHandler.test.ts @@ -15,11 +15,8 @@ describe('A ComposedNotificationHandler', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:123:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Update', + object: 'http://example.com/foo', published: '123', state: '123', }; diff --git a/test/unit/server/notifications/WebHookSubscription2021/WebHookEmitter.test.ts b/test/unit/server/notifications/WebHookSubscription2021/WebHookEmitter.test.ts index c3b60738f..ca3324805 100644 --- a/test/unit/server/notifications/WebHookSubscription2021/WebHookEmitter.test.ts +++ b/test/unit/server/notifications/WebHookSubscription2021/WebHookEmitter.test.ts @@ -35,11 +35,8 @@ describe('A WebHookEmitter', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:123:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Update', + object: 'http://example.com/foo', published: '123', }; let representation: Representation; diff --git a/test/unit/server/notifications/generate/ActivityNotificationGenerator.test.ts b/test/unit/server/notifications/generate/ActivityNotificationGenerator.test.ts index 9759ba193..a20c35528 100644 --- a/test/unit/server/notifications/generate/ActivityNotificationGenerator.test.ts +++ b/test/unit/server/notifications/generate/ActivityNotificationGenerator.test.ts @@ -51,13 +51,8 @@ describe('An ActivityNotificationGenerator', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:${ms}:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [ - LDP.Resource, - ], - }, + type: 'Update', + object: 'http://example.com/foo', state: expect.stringMatching(/"\d+"/u), published: date, }); diff --git a/test/unit/server/notifications/generate/DeleteNotificationGenerator.test.ts b/test/unit/server/notifications/generate/DeleteNotificationGenerator.test.ts index 4d63aa48d..5dfbb84d6 100644 --- a/test/unit/server/notifications/generate/DeleteNotificationGenerator.test.ts +++ b/test/unit/server/notifications/generate/DeleteNotificationGenerator.test.ts @@ -36,11 +36,8 @@ describe('A DeleteNotificationGenerator', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:${ms}:http://example.com/foo`, - type: [ 'Delete' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Delete', + object: 'http://example.com/foo', published: date, }); diff --git a/test/unit/server/notifications/generate/StateNotificationGenerator.test.ts b/test/unit/server/notifications/generate/StateNotificationGenerator.test.ts index ce65c3c57..6c3f88c00 100644 --- a/test/unit/server/notifications/generate/StateNotificationGenerator.test.ts +++ b/test/unit/server/notifications/generate/StateNotificationGenerator.test.ts @@ -23,11 +23,8 @@ describe('A StateNotificationGenerator', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:123:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Update', + object: 'http://example.com/foo', published: '123', }; let source: jest.Mocked; diff --git a/test/unit/server/notifications/serialize/ConvertingNotificationSerializer.test.ts b/test/unit/server/notifications/serialize/ConvertingNotificationSerializer.test.ts index 994b43d07..9017420c9 100644 --- a/test/unit/server/notifications/serialize/ConvertingNotificationSerializer.test.ts +++ b/test/unit/server/notifications/serialize/ConvertingNotificationSerializer.test.ts @@ -16,11 +16,8 @@ describe('A ConvertingNotificationSerializer', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:123:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Update', + object: 'http://example.com/foo', published: '123', }; let representation: Representation; diff --git a/test/unit/server/notifications/serialize/JsonLdNotificationSerializer.test.ts b/test/unit/server/notifications/serialize/JsonLdNotificationSerializer.test.ts index bb5767d9e..8b6174508 100644 --- a/test/unit/server/notifications/serialize/JsonLdNotificationSerializer.test.ts +++ b/test/unit/server/notifications/serialize/JsonLdNotificationSerializer.test.ts @@ -19,11 +19,8 @@ describe('A JsonLdNotificationSerializer', (): void => { 'https://www.w3.org/ns/solid/notification/v1', ], id: `urn:123:http://example.com/foo`, - type: [ 'Update' ], - object: { - id: 'http://example.com/foo', - type: [], - }, + type: 'Update', + object: 'http://example.com/foo', published: '123', }; diff --git a/test/util/NotificationUtil.ts b/test/util/NotificationUtil.ts index dc4ce7339..36a21e953 100644 --- a/test/util/NotificationUtil.ts +++ b/test/util/NotificationUtil.ts @@ -42,16 +42,12 @@ export function expectNotification(notification: unknown, topic: string, type: ' 'https://www.w3.org/ns/solid/notification/v1', ], id: expect.stringContaining(topic), - type: [ type ], - object: { - id: topic, - type: [], - }, + type, + object: topic, published: expect.anything(), }; if (type !== 'Delete') { expected.state = expect.anything(); - expected.object.type.push('http://www.w3.org/ns/ldp#Resource'); } expect(notification).toEqual(expected); }