diff --git a/internal/events/package.json b/internal/events/package.json index f21db165..4651a85c 100644 --- a/internal/events/package.json +++ b/internal/events/package.json @@ -50,5 +50,5 @@ "typecheck": "tsc --noEmit" }, "types": "dist/index.d.ts", - "version": "1.0.3" + "version": "1.1.0" } diff --git a/internal/events/schemas/examples/letter.ACCEPTED.json b/internal/events/schemas/examples/letter.accepted.json similarity index 80% rename from internal/events/schemas/examples/letter.ACCEPTED.json rename to internal/events/schemas/examples/letter.accepted.json index f9a1177c..2785f8d6 100644 --- a/internal/events/schemas/examples/letter.ACCEPTED.json +++ b/internal/events/schemas/examples/letter.accepted.json @@ -5,14 +5,15 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "specificationId": "1y3q9v1zzzz", - "status": "ACCEPTED" + "status": "ACCEPTED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.ACCEPTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.accepted.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -22,5 +23,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.ACCEPTED.v1" + "type": "uk.nhs.notify.supplier-api.letter.accepted.v1" } diff --git a/internal/events/schemas/examples/letter.cancelled.json b/internal/events/schemas/examples/letter.cancelled.json new file mode 100644 index 00000000..0cbc4867 --- /dev/null +++ b/internal/events/schemas/examples/letter.cancelled.json @@ -0,0 +1,27 @@ +{ + "data": { + "domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "groupId": "client_template", + "origin": { + "domain": "letter-rendering", + "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "source": "/data-plane/letter-rendering/prod/letter-renderer", + "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" + }, + "specificationId": "1y3q9v1zzzz", + "status": "CANCELLED", + "supplierId": "supplier_12345" + }, + "datacontenttype": "application/json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.cancelled.1.0.0.schema.json", + "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", + "recordedtime": "2025-08-28T08:45:00.000Z", + "severitynumber": 2, + "severitytext": "INFO", + "source": "/data-plane/supplier-api/prod/update-status", + "specversion": "1.0", + "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + "time": "2025-08-28T08:45:00.000Z", + "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + "type": "uk.nhs.notify.supplier-api.letter.cancelled.v1" +} diff --git a/internal/events/schemas/examples/letter.dispatched.json b/internal/events/schemas/examples/letter.dispatched.json new file mode 100644 index 00000000..e4d8699f --- /dev/null +++ b/internal/events/schemas/examples/letter.dispatched.json @@ -0,0 +1,27 @@ +{ + "data": { + "domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "groupId": "client_template", + "origin": { + "domain": "letter-rendering", + "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "source": "/data-plane/letter-rendering/prod/letter-renderer", + "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" + }, + "specificationId": "1y3q9v1zzzz", + "status": "DISPATCHED", + "supplierId": "supplier_12345" + }, + "datacontenttype": "application/json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.dispatched.1.0.0.schema.json", + "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", + "recordedtime": "2025-08-28T08:45:00.000Z", + "severitynumber": 2, + "severitytext": "INFO", + "source": "/data-plane/supplier-api/prod/update-status", + "specversion": "1.0", + "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + "time": "2025-08-28T08:45:00.000Z", + "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + "type": "uk.nhs.notify.supplier-api.letter.dispatched.v1" +} diff --git a/internal/events/schemas/examples/letter.failed.json b/internal/events/schemas/examples/letter.failed.json new file mode 100644 index 00000000..26d12d7c --- /dev/null +++ b/internal/events/schemas/examples/letter.failed.json @@ -0,0 +1,29 @@ +{ + "data": { + "domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "groupId": "client_template", + "origin": { + "domain": "letter-rendering", + "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "source": "/data-plane/letter-rendering/prod/letter-renderer", + "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" + }, + "reasonCode": "X07", + "reasonText": "Unprintable", + "specificationId": "1y3q9v1zzzz", + "status": "FAILED", + "supplierId": "supplier_12345" + }, + "datacontenttype": "application/json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.failed.1.0.0.schema.json", + "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", + "recordedtime": "2025-08-28T08:45:00.000Z", + "severitynumber": 2, + "severitytext": "INFO", + "source": "/data-plane/supplier-api/prod/update-status", + "specversion": "1.0", + "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + "time": "2025-08-28T08:45:00.000Z", + "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + "type": "uk.nhs.notify.supplier-api.letter.failed.v1" +} diff --git a/internal/events/src/events/__tests__/testData/letter.FORWARDED.json b/internal/events/schemas/examples/letter.forwarded.json similarity index 80% rename from internal/events/src/events/__tests__/testData/letter.FORWARDED.json rename to internal/events/schemas/examples/letter.forwarded.json index bf12ed69..144a1585 100644 --- a/internal/events/src/events/__tests__/testData/letter.FORWARDED.json +++ b/internal/events/schemas/examples/letter.forwarded.json @@ -5,16 +5,17 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "reasonCode": "RNIB", "reasonText": "RNIB", "specificationId": "1y3q9v1zzzz", - "status": "FORWARDED" + "status": "FORWARDED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.FORWARDED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.forwarded.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -24,5 +25,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.FORWARDED.v1" + "type": "uk.nhs.notify.supplier-api.letter.forwarded.v1" } diff --git a/internal/events/schemas/examples/letter.rejected.json b/internal/events/schemas/examples/letter.rejected.json new file mode 100644 index 00000000..1fb881a5 --- /dev/null +++ b/internal/events/schemas/examples/letter.rejected.json @@ -0,0 +1,29 @@ +{ + "data": { + "domainId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "groupId": "client_template", + "origin": { + "domain": "letter-rendering", + "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "source": "/data-plane/letter-rendering/prod/letter-renderer", + "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" + }, + "reasonCode": "Z07", + "reasonText": "Invalid", + "specificationId": "1y3q9v1zzzz", + "status": "REJECTED", + "supplierId": "supplier_12345" + }, + "datacontenttype": "application/json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.rejected.1.0.0.schema.json", + "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", + "recordedtime": "2025-08-28T08:45:00.000Z", + "severitynumber": 2, + "severitytext": "INFO", + "source": "/data-plane/supplier-api/prod/update-status", + "specversion": "1.0", + "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", + "time": "2025-08-28T08:45:00.000Z", + "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", + "type": "uk.nhs.notify.supplier-api.letter.rejected.v1" +} diff --git a/internal/events/src/events/__tests__/testData/letter.RETURNED.json b/internal/events/schemas/examples/letter.returned.json similarity index 81% rename from internal/events/src/events/__tests__/testData/letter.RETURNED.json rename to internal/events/schemas/examples/letter.returned.json index e273029d..30f77b90 100644 --- a/internal/events/src/events/__tests__/testData/letter.RETURNED.json +++ b/internal/events/schemas/examples/letter.returned.json @@ -5,16 +5,17 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "reasonCode": "R07", "reasonText": "No such address", "specificationId": "1y3q9v1zzzz", - "status": "RETURNED" + "status": "RETURNED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.returned.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -24,5 +25,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.RETURNED.v1" + "type": "uk.nhs.notify.supplier-api.letter.returned.v1" } diff --git a/internal/events/schemas/supplier-api.yaml b/internal/events/schemas/supplier-api.yaml index a87277dc..c38c1086 100644 --- a/internal/events/schemas/supplier-api.yaml +++ b/internal/events/schemas/supplier-api.yaml @@ -49,10 +49,10 @@ components: This indicates that a letter has been accepted for processing by a supplier. contentType: application/json payload: - $ref: './events/letter.ACCEPTED.schema.json' + $ref: './events/letter.accepted.schema.json' examples: - payload: - $ref: './examples/letter.ACCEPTED.json' + $ref: './examples/letter.accepted.json' letter-cancelled: name: letter-cancelled @@ -63,7 +63,10 @@ components: This indicates that a letter has been cancelled and will not be printed or dispatched. contentType: application/json payload: - $ref: './events/letter.CANCELLED.schema.json' + $ref: './events/letter.cancelled.schema.json' + examples: + - payload: + $ref: './examples/letter.cancelled.json' letter-delivered: name: letter-delivered @@ -74,7 +77,7 @@ components: This indicates that a letter has been delivered to the recipient. contentType: application/json payload: - $ref: './events/letter.DELIVERED.schema.json' + $ref: './events/letter.delivered.schema.json' letter-dispatched: name: letter-dispatched @@ -85,7 +88,10 @@ components: This indicates that a letter has been dispatched from the supplier to a down-stream access (DSA) provider. contentType: application/json payload: - $ref: './events/letter.DISPATCHED.schema.json' + $ref: './events/letter.dispatched.schema.json' + examples: + - payload: + $ref: './examples/letter.dispatched.json' letter-enclosed: name: letter-enclosed @@ -96,7 +102,7 @@ components: This indicates that a letter has been printed and packaged in an envelope. contentType: application/json payload: - $ref: './events/letter.ENCLOSED.schema.json' + $ref: './events/letter.enclosed.schema.json' letter-failed: name: letter-failed @@ -107,7 +113,10 @@ components: This indicates that a letter has failed to be processed by a supplier. contentType: application/json payload: - $ref: './events/letter.FAILED.schema.json' + $ref: './events/letter.failed.schema.json' + examples: + - payload: + $ref: './examples/letter.failed.json' letter-forwarded: name: letter-forwarded @@ -118,10 +127,10 @@ components: This indicates that a letter has been forwarded to another supplier for processing. contentType: application/json payload: - $ref: './events/letter.FORWARDED.schema.json' + $ref: './events/letter.forwarded.schema.json' examples: - payload: - $ref: './examples/letter.FORWARDED.json' + $ref: './examples/letter.forwarded.json' letter-pending: name: letter-pending @@ -132,7 +141,7 @@ components: This indicates that a letter has been queued for processing by a supplier. contentType: application/json payload: - $ref: './events/letter.PENDING.schema.json' + $ref: './events/letter.pending.schema.json' letter-printed: name: letter-printed @@ -143,7 +152,7 @@ components: This indicates that a letter has been printed by the supplier. contentType: application/json payload: - $ref: './events/letter.PRINTED.schema.json' + $ref: './events/letter.printed.schema.json' letter-rejected: name: letter-rejected @@ -154,7 +163,10 @@ components: This indicates that a letter has been rejected by the supplier and will not be processed. contentType: application/json payload: - $ref: './events/letter.REJECTED.schema.json' + $ref: './events/letter.rejected.schema.json' + examples: + - payload: + $ref: './examples/letter.rejected.json' letter-returned: name: letter-returned @@ -165,10 +177,10 @@ components: This indicates that a letter has been returned to the supplier. contentType: application/json payload: - $ref: './events/letter.RETURNED.schema.json' + $ref: './events/letter.returned.schema.json' examples: - payload: - $ref: './examples/letter.RETURNED.json' + $ref: './examples/letter.returned.json' letter-any: name: letter-any @@ -188,7 +200,7 @@ components: This indicates that MI data has been submitted to the NHS Notify Supplier API. contentType: application/json payload: - $ref: './events/mi.SUBMITTED.schema.json' + $ref: './events/mi.submitted.schema.json' schemas: letter: diff --git a/internal/events/src/cli/generate-json.ts b/internal/events/src/cli/generate-json.ts index a6d35d68..f6ad57ce 100644 --- a/internal/events/src/cli/generate-json.ts +++ b/internal/events/src/cli/generate-json.ts @@ -52,6 +52,6 @@ const miJson = z.toJSONSchema($MISubmittedEvent, { target: "openapi-3.0", reused: "ref", }); -const miFile = `schemas/events/mi.SUBMITTED.schema.json`; +const miFile = `schemas/events/mi.submitted.schema.json`; fs.writeFileSync(miFile, JSON.stringify(miJson, null, 2)); -console.info(`Wrote JSON schema for letter.any to ${miFile}`); +console.info(`Wrote JSON schema for mi.submitted to ${miFile}`); diff --git a/internal/events/src/domain/letter.ts b/internal/events/src/domain/letter.ts index 54746591..bce8713b 100644 --- a/internal/events/src/domain/letter.ts +++ b/internal/events/src/domain/letter.ts @@ -107,6 +107,12 @@ The identifier will be included as the origin domain in the subject of any corre "Optional human-readable reason for the status change, if applicable.", examples: ["Undeliverable", "Recipient moved"], }), + + supplierId: z.string().meta({ + title: "Supplier ID", + description: "Identifier for the supplier handling this letter.", + examples: ["supplier-12345"], + }), }) .meta({ title: "Letter", diff --git a/internal/events/src/events/__tests__/event-envelope.test.ts b/internal/events/src/events/__tests__/event-envelope.test.ts index 0ea46e22..c7021476 100644 --- a/internal/events/src/events/__tests__/event-envelope.test.ts +++ b/internal/events/src/events/__tests__/event-envelope.test.ts @@ -7,12 +7,12 @@ describe("EventEnvelope schema validation", () => { const baseValidEnvelope: Envelope = { dataschema: - "https://notify.nhs.uk/cloudevents/schemas/supplier-api/order.READ.1.0.0.schema.json", + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/order.read.1.0.0.schema.json", specversion: "1.0", id: "6f1c2a53-3d54-4a0a-9a0b-0e9ae2d4c111", source: "/data-plane/supplier-api/ordering", subject: "order/769acdd4", - type: "uk.nhs.notify.supplier-api.order.READ.v1", + type: "uk.nhs.notify.supplier-api.order.read.v1", time: "2025-10-01T10:15:30.000Z", data: { "notify-payload": { @@ -230,7 +230,7 @@ describe("EventEnvelope schema validation", () => { describe("subject prefix validation", () => { const $EnvelopeWithPrefix = EventEnvelope( - "letter.CREATED", + "letter.created", "letter", z.any(), ["CREATED"], @@ -240,9 +240,9 @@ describe("EventEnvelope schema validation", () => { const baseLetterEnvelope = { specversion: "1.0" as const, id: "6f1c2a53-3d54-4a0a-9a0b-0e02b2c3d479", - type: "uk.nhs.notify.supplier-api.letter.CREATED.v1" as const, + type: "uk.nhs.notify.supplier-api.letter.created.v1" as const, dataschema: - "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.CREATED.1.0.0.schema.json", + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.created.1.0.0.schema.json", source: "/data-plane/supplier-api/letters", time: "2025-10-01T10:15:30.000Z", data: { status: "CREATED" }, @@ -286,16 +286,16 @@ describe("EventEnvelope schema validation", () => { }); it("should accept subject without prefix when no prefix is specified", () => { - const $EnvelopeNoPrefix = EventEnvelope("order.READ", "order", z.any(), [ + const $EnvelopeNoPrefix = EventEnvelope("order.read", "order", z.any(), [ "READ", ]); const envelope = { specversion: "1.0" as const, id: "6f1c2a53-3d54-4a0a-9a0b-0e9ae2d4c111", - type: "uk.nhs.notify.supplier-api.order.READ.v1" as const, + type: "uk.nhs.notify.supplier-api.order.read.v1" as const, dataschema: - "https://notify.nhs.uk/cloudevents/schemas/supplier-api/order.READ.1.0.0.schema.json", + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/order.read.1.0.0.schema.json", source: "/data-plane/supplier-api/ordering", subject: "order/769acdd4", time: "2025-10-01T10:15:30.000Z", @@ -313,7 +313,7 @@ describe("EventEnvelope schema validation", () => { it("should accept various prefix formats", () => { const $EnvelopeMultiSegmentPrefix = EventEnvelope( - "letter.CREATED", + "letter.created", "letter", z.any(), ["CREATED"], diff --git a/internal/events/src/events/__tests__/letter-status-change-events.test.ts b/internal/events/src/events/__tests__/letter-status-change-events.test.ts index 25541fc5..72b9fee9 100644 --- a/internal/events/src/events/__tests__/letter-status-change-events.test.ts +++ b/internal/events/src/events/__tests__/letter-status-change-events.test.ts @@ -12,21 +12,24 @@ describe("LetterStatus event validations", () => { it.each(["ACCEPTED", "FORWARDED", "RETURNED"])( "should parse %s letter statuses successfully", (status) => { - const json = readJson(`letter.${status}.json`); + const statusLower = status.toLowerCase(); + + const json = readJson(`letter.${statusLower}.json`); const { data: event, error } = - letterEventMap[`letter.${status}`].safeParse(json); + letterEventMap[`letter.${statusLower}`].safeParse(json); + expect(error).toBeUndefined(); expect(event).toBeDefined(); expect(event).toEqual( expect.objectContaining({ - type: `uk.nhs.notify.supplier-api.letter.${status}.v1`, + type: `uk.nhs.notify.supplier-api.letter.${statusLower}.v1`, specversion: "1.0", source: "/data-plane/supplier-api/prod/update-status", id: "23f1f09c-a555-4d9b-8405-0b33490bc920", time: "2025-08-28T08:45:00.000Z", datacontenttype: "application/json", - dataschema: `https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.${status}.1.0.0.schema.json`, + dataschema: `https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.${statusLower}.1.0.0.schema.json`, subject: "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", data: expect.objectContaining({ @@ -39,6 +42,7 @@ describe("LetterStatus event validations", () => { specificationId: "1y3q9v1zzzz", groupId: "client_template", status, + supplierId: "supplier_12345", }), }), ); @@ -46,9 +50,10 @@ describe("LetterStatus event validations", () => { ); it("should parse reason code and text correctly for returned mail", () => { - const json = readJson("letter.RETURNED.json"); + const json = readJson("letter.returned.json"); + + const event = letterEventMap["letter.returned"].parse(json); - const event = letterEventMap["letter.RETURNED"].parse(json); expect(event).toBeDefined(); expect(event.data).toEqual( expect.objectContaining({ @@ -59,9 +64,10 @@ describe("LetterStatus event validations", () => { }); it("should parse reason code and text correctly for forwarded mail", () => { - const json = readJson("letter.FORWARDED.json"); + const json = readJson("letter.forwarded.json"); + + const event = letterEventMap["letter.forwarded"].parse(json); - const event = letterEventMap["letter.FORWARDED"].parse(json); expect(event).toBeDefined(); expect(event.data).toEqual( expect.objectContaining({ @@ -71,18 +77,18 @@ describe("LetterStatus event validations", () => { ); }); - it("should throw error for letter.ACCEPTED event with missing sourceSubject", () => { - const json = readJson("letter.ACCEPTED-with-missing-fields.json"); + it("should throw error for letter.accepted event with missing sourceSubject", () => { + const json = readJson("letter.accepted-with-missing-fields.json"); - expect(() => letterEventMap["letter.ACCEPTED"].parse(json)).toThrow( + expect(() => letterEventMap["letter.accepted"].parse(json)).toThrow( "subject", ); }); - it("should throw error for letter.ACCEPTED event with invalid major schema version", () => { - const json = readJson("letter.ACCEPTED-with-invalid-major-version.json"); + it("should throw error for letter.accepted event with invalid major schema version", () => { + const json = readJson("letter.accepted-with-invalid-major-version.json"); - expect(() => letterEventMap["letter.ACCEPTED"].parse(json)).toThrow( + expect(() => letterEventMap["letter.accepted"].parse(json)).toThrow( "dataschema", ); }); diff --git a/internal/events/src/events/__tests__/mi-events.test.ts b/internal/events/src/events/__tests__/mi-events.test.ts index 565ab7dc..be00ba18 100644 --- a/internal/events/src/events/__tests__/mi-events.test.ts +++ b/internal/events/src/events/__tests__/mi-events.test.ts @@ -9,22 +9,22 @@ function readJson(filename: string): unknown { } describe("MI event validations", () => { - it("should parse mi.SUBMITTED event successfully", () => { - const json = readJson("mi.SUBMITTED.json"); + it("should parse mi.submitted event successfully", () => { + const json = readJson("mi.submitted.json"); const { data: event, error } = $MISubmittedEvent.safeParse(json); expect(error).toBeUndefined(); expect(event).toBeDefined(); expect(event).toEqual( expect.objectContaining({ - type: "uk.nhs.notify.supplier-api.mi.SUBMITTED.v1", + type: "uk.nhs.notify.supplier-api.mi.submitted.v1", specversion: "1.0", source: "/data-plane/supplier-api/prod/submit-mi", id: "8f2c3b44-4e65-5b1b-a678-1f0bf3d4d222", time: "2025-11-16T10:30:00.000Z", datacontenttype: "application/json", dataschema: - "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.SUBMITTED.1.0.0.schema.json", + "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.submitted.1.0.0.schema.json", subject: "mi/mi-test-001", data: expect.objectContaining({ id: "mi-test-001", @@ -40,8 +40,8 @@ describe("MI event validations", () => { ); }); - it("should parse minimal mi.SUBMITTED event successfully", () => { - const json = readJson("mi.SUBMITTED-minimal.json"); + it("should parse minimal mi.submitted event successfully", () => { + const json = readJson("mi.submitted-minimal.json"); const event = $MISubmittedEvent.parse(json); expect(event).toBeDefined(); @@ -59,7 +59,7 @@ describe("MI event validations", () => { }); it("should parse MI data fields correctly", () => { - const json = readJson("mi.SUBMITTED.json"); + const json = readJson("mi.submitted.json"); const event = $MISubmittedEvent.parse(json); expect(event).toBeDefined(); @@ -72,14 +72,14 @@ describe("MI event validations", () => { expect(event.data.groupId).toBe("group-456"); }); - it("should throw error for mi.SUBMITTED event with missing subject", () => { - const json = readJson("mi.SUBMITTED-with-missing-subject.json"); + it("should throw error for mi.submitted event with missing subject", () => { + const json = readJson("mi.submitted-with-missing-subject.json"); expect(() => $MISubmittedEvent.parse(json)).toThrow("subject"); }); - it("should throw error for mi.SUBMITTED event with invalid major schema version", () => { - const json = readJson("mi.SUBMITTED-with-invalid-major-version.json"); + it("should throw error for mi.submitted event with invalid major schema version", () => { + const json = readJson("mi.submitted-with-invalid-major-version.json"); expect(() => $MISubmittedEvent.parse(json)).toThrow("dataschema"); }); diff --git a/internal/events/src/events/__tests__/testData/letter.ACCEPTED.json b/internal/events/src/events/__tests__/testData/letter.accepted-with-invalid-major-version.json similarity index 80% rename from internal/events/src/events/__tests__/testData/letter.ACCEPTED.json rename to internal/events/src/events/__tests__/testData/letter.accepted-with-invalid-major-version.json index f9a1177c..0d9f0898 100644 --- a/internal/events/src/events/__tests__/testData/letter.ACCEPTED.json +++ b/internal/events/src/events/__tests__/testData/letter.accepted-with-invalid-major-version.json @@ -5,14 +5,15 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "specificationId": "1y3q9v1zzzz", - "status": "ACCEPTED" + "status": "ACCEPTED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.ACCEPTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.accepted.0.1.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -22,5 +23,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.ACCEPTED.v1" + "type": "uk.nhs.notify.supplier-api.letter.accepted.v1" } diff --git a/internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-missing-fields.json b/internal/events/src/events/__tests__/testData/letter.accepted-with-missing-fields.json similarity index 77% rename from internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-missing-fields.json rename to internal/events/src/events/__tests__/testData/letter.accepted-with-missing-fields.json index bb5d8021..97647559 100644 --- a/internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-missing-fields.json +++ b/internal/events/src/events/__tests__/testData/letter.accepted-with-missing-fields.json @@ -5,13 +5,14 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf" + "source": "/data-plane/letter-rendering/prod/letter-renderer" }, "specificationId": "1y3q9v1zzzz", - "status": "ACCEPTED" + "status": "ACCEPTED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.ACCEPTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.accepted.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -21,5 +22,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.ACCEPTED.v1" + "type": "uk.nhs.notify.supplier-api.letter.accepted.v1" } diff --git a/internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-invalid-major-version.json b/internal/events/src/events/__tests__/testData/letter.accepted.json similarity index 80% rename from internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-invalid-major-version.json rename to internal/events/src/events/__tests__/testData/letter.accepted.json index 95e95651..2785f8d6 100644 --- a/internal/events/src/events/__tests__/testData/letter.ACCEPTED-with-invalid-major-version.json +++ b/internal/events/src/events/__tests__/testData/letter.accepted.json @@ -5,14 +5,15 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "specificationId": "1y3q9v1zzzz", - "status": "ACCEPTED" + "status": "ACCEPTED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.ACCEPTED.0.1.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.accepted.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -22,5 +23,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.ACCEPTED.v1" + "type": "uk.nhs.notify.supplier-api.letter.accepted.v1" } diff --git a/internal/events/schemas/examples/letter.FORWARDED.json b/internal/events/src/events/__tests__/testData/letter.forwarded.json similarity index 80% rename from internal/events/schemas/examples/letter.FORWARDED.json rename to internal/events/src/events/__tests__/testData/letter.forwarded.json index bf12ed69..144a1585 100644 --- a/internal/events/schemas/examples/letter.FORWARDED.json +++ b/internal/events/src/events/__tests__/testData/letter.forwarded.json @@ -5,16 +5,17 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "reasonCode": "RNIB", "reasonText": "RNIB", "specificationId": "1y3q9v1zzzz", - "status": "FORWARDED" + "status": "FORWARDED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.FORWARDED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.forwarded.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -24,5 +25,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.FORWARDED.v1" + "type": "uk.nhs.notify.supplier-api.letter.forwarded.v1" } diff --git a/internal/events/schemas/examples/letter.RETURNED.json b/internal/events/src/events/__tests__/testData/letter.returned.json similarity index 81% rename from internal/events/schemas/examples/letter.RETURNED.json rename to internal/events/src/events/__tests__/testData/letter.returned.json index e273029d..30f77b90 100644 --- a/internal/events/schemas/examples/letter.RETURNED.json +++ b/internal/events/src/events/__tests__/testData/letter.returned.json @@ -5,16 +5,17 @@ "origin": { "domain": "letter-rendering", "event": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "source": "/data-plane/letter-rendering/prod/render-pdf", + "source": "/data-plane/letter-rendering/prod/letter-renderer", "subject": "client/00f3b388-bbe9-41c9-9e76-052d37ee8988/letter-request/0o5Fs0EELR0fUjHjbCnEtdUwQe4_0o5Fs0EELR0fUjHjbCnEtdUwQe5" }, "reasonCode": "R07", "reasonText": "No such address", "specificationId": "1y3q9v1zzzz", - "status": "RETURNED" + "status": "RETURNED", + "supplierId": "supplier_12345" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.RETURNED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/letter.returned.1.0.0.schema.json", "id": "23f1f09c-a555-4d9b-8405-0b33490bc920", "recordedtime": "2025-08-28T08:45:00.000Z", "severitynumber": 2, @@ -24,5 +25,5 @@ "subject": "letter-origin/letter-rendering/letter/f47ac10b-58cc-4372-a567-0e02b2c3d479", "time": "2025-08-28T08:45:00.000Z", "traceparent": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01", - "type": "uk.nhs.notify.supplier-api.letter.RETURNED.v1" + "type": "uk.nhs.notify.supplier-api.letter.returned.v1" } diff --git a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-minimal.json b/internal/events/src/events/__tests__/testData/mi.submitted-minimal.json similarity index 88% rename from internal/events/src/events/__tests__/testData/mi.SUBMITTED-minimal.json rename to internal/events/src/events/__tests__/testData/mi.submitted-minimal.json index fd1cd1be..ba19f560 100644 --- a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-minimal.json +++ b/internal/events/src/events/__tests__/testData/mi.submitted-minimal.json @@ -10,7 +10,7 @@ "updatedAt": "2025-11-16T15:00:00.000Z" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.SUBMITTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.submitted.1.0.0.schema.json", "id": "9a3d4c55-5f76-6c2c-b789-2f1cf4e5e333", "recordedtime": "2025-11-16T15:00:00.250Z", "severitynumber": 2, @@ -20,5 +20,5 @@ "subject": "mi/mi-envelope-001", "time": "2025-11-16T15:00:00.000Z", "traceparent": "00-2cf9873938ef65ff0660fd433e02541e-d9cf8d9380415553-01", - "type": "uk.nhs.notify.supplier-api.mi.SUBMITTED.v1" + "type": "uk.nhs.notify.supplier-api.mi.submitted.v1" } diff --git a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-invalid-major-version.json b/internal/events/src/events/__tests__/testData/mi.submitted-with-invalid-major-version.json similarity index 89% rename from internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-invalid-major-version.json rename to internal/events/src/events/__tests__/testData/mi.submitted-with-invalid-major-version.json index 5c51190a..1b319346 100644 --- a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-invalid-major-version.json +++ b/internal/events/src/events/__tests__/testData/mi.submitted-with-invalid-major-version.json @@ -12,7 +12,7 @@ "updatedAt": "2025-11-16T10:30:00.000Z" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.SUBMITTED.2.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.submitted.2.0.0.schema.json", "id": "8f2c3b44-4e65-5b1b-a678-1f0bf3d4d222", "recordedtime": "2025-11-16T10:30:00.250Z", "severitynumber": 2, @@ -22,5 +22,5 @@ "subject": "mi/mi-test-001", "time": "2025-11-16T10:30:00.000Z", "traceparent": "00-1bf8762827de54ee9559fc322d91430d-c8be7c8279304442-01", - "type": "uk.nhs.notify.supplier-api.mi.SUBMITTED.v1" + "type": "uk.nhs.notify.supplier-api.mi.submitted.v1" } diff --git a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-missing-subject.json b/internal/events/src/events/__tests__/testData/mi.submitted-with-missing-subject.json similarity index 88% rename from internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-missing-subject.json rename to internal/events/src/events/__tests__/testData/mi.submitted-with-missing-subject.json index e0be7a8e..9fb85d0a 100644 --- a/internal/events/src/events/__tests__/testData/mi.SUBMITTED-with-missing-subject.json +++ b/internal/events/src/events/__tests__/testData/mi.submitted-with-missing-subject.json @@ -9,7 +9,7 @@ "updatedAt": "2025-11-16T10:30:00.000Z" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.SUBMITTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.submitted.1.0.0.schema.json", "id": "8f2c3b44-4e65-5b1b-a678-1f0bf3d4d222", "recordedtime": "2025-11-16T10:30:00.250Z", "severitynumber": 2, @@ -18,5 +18,5 @@ "specversion": "1.0", "time": "2025-11-16T10:30:00.000Z", "traceparent": "00-1bf8762827de54ee9559fc322d91430d-c8be7c8279304442-01", - "type": "uk.nhs.notify.supplier-api.mi.SUBMITTED.v1" + "type": "uk.nhs.notify.supplier-api.mi.submitted.v1" } diff --git a/internal/events/src/events/__tests__/testData/mi.SUBMITTED.json b/internal/events/src/events/__tests__/testData/mi.submitted.json similarity index 89% rename from internal/events/src/events/__tests__/testData/mi.SUBMITTED.json rename to internal/events/src/events/__tests__/testData/mi.submitted.json index 6e2c031d..9bbc27de 100644 --- a/internal/events/src/events/__tests__/testData/mi.SUBMITTED.json +++ b/internal/events/src/events/__tests__/testData/mi.submitted.json @@ -12,7 +12,7 @@ "updatedAt": "2025-11-16T10:30:00.000Z" }, "datacontenttype": "application/json", - "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.SUBMITTED.1.0.0.schema.json", + "dataschema": "https://notify.nhs.uk/cloudevents/schemas/supplier-api/mi.submitted.1.0.0.schema.json", "id": "8f2c3b44-4e65-5b1b-a678-1f0bf3d4d222", "recordedtime": "2025-11-16T10:30:00.250Z", "severitynumber": 2, @@ -22,5 +22,5 @@ "subject": "mi/mi-test-001", "time": "2025-11-16T10:30:00.000Z", "traceparent": "00-1bf8762827de54ee9559fc322d91430d-c8be7c8279304442-01", - "type": "uk.nhs.notify.supplier-api.mi.SUBMITTED.v1" + "type": "uk.nhs.notify.supplier-api.mi.submitted.v1" } diff --git a/internal/events/src/events/event-envelope.ts b/internal/events/src/events/event-envelope.ts index a040fe9d..23fe0851 100644 --- a/internal/events/src/events/event-envelope.ts +++ b/internal/events/src/events/event-envelope.ts @@ -8,7 +8,7 @@ export function EventEnvelope( statuses: readonly string[], subjectPrefix?: string, ) { - const statusRegex = statuses.join("|"); + const statusRegex = statuses.map((status) => status.toLowerCase()).join("|"); const subjectPrefixRegex = subjectPrefix ? `${subjectPrefix}/[a-z0-9-]+/` : ""; @@ -19,12 +19,12 @@ export function EventEnvelope( // Pre-compute type strings to avoid repeated inference const typeStrings = statuses.map( (status) => - `uk.nhs.notify.supplier-api.${resourceName}.${status}.v1` as const, + `uk.nhs.notify.supplier-api.${resourceName}.${status.toLowerCase()}.v1` as const, ); const schemaExamples = statuses.map( (status) => - `https://notify.nhs.uk/cloudevents/schemas/supplier-api/${resourceName}.${status}.1.0.0.schema.json`, + `https://notify.nhs.uk/cloudevents/schemas/supplier-api/${resourceName}.${status.toLowerCase()}.1.0.0.schema.json`, ); return z diff --git a/internal/events/src/events/letter-events.ts b/internal/events/src/events/letter-events.ts index 49795068..5dcc0db2 100644 --- a/internal/events/src/events/letter-events.ts +++ b/internal/events/src/events/letter-events.ts @@ -25,21 +25,24 @@ export type LetterEvent = z.infer; * Specialise the generic event schema for a single status * @param status */ -const eventSchema = (status: LetterStatus) => - EventEnvelope( - `letter.${status}`, +const eventSchema = (status: LetterStatus) => { + const statusLower = status.toLowerCase(); + + return EventEnvelope( + `letter.${statusLower}`, "letter", $Letter, [status], "letter-origin", ).meta({ - title: `letter.${status} Event`, + title: `letter.${statusLower} Event`, description: `Event schema for letter status change to ${status}`, }); +}; export const letterEventMap = Object.fromEntries( $LetterStatus.options.map((status) => [ - `letter.${status}`, + `letter.${status.toLowerCase()}`, eventSchema(status), ]), ); diff --git a/internal/events/src/events/mi-events.ts b/internal/events/src/events/mi-events.ts index b6d4e44d..f1456a9d 100644 --- a/internal/events/src/events/mi-events.ts +++ b/internal/events/src/events/mi-events.ts @@ -2,10 +2,10 @@ import { z } from "zod"; import { EventEnvelope } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/events/event-envelope"; import { $MI } from "@nhsdigital/nhs-notify-event-schemas-supplier-api/src/domain/mi"; -export const $MISubmittedEvent = EventEnvelope("mi.SUBMITTED", "mi", $MI, [ +export const $MISubmittedEvent = EventEnvelope("mi.submitted", "mi", $MI, [ "SUBMITTED", ]).meta({ - title: `mi.SUBMITTED Event`, + title: `mi.submitted Event`, description: `Event schema for reporting that MI data has been submitted`, }); export type MISubmittedEvent = z.infer; diff --git a/internal/events/src/index.ts b/internal/events/src/index.ts index c4255d26..339ddcd6 100644 --- a/internal/events/src/index.ts +++ b/internal/events/src/index.ts @@ -4,3 +4,4 @@ export { default as DomainBase } from "./domain/domain-base"; export * from "./events/event-envelope"; export * from "./events/letter-events"; export * from "./events/mi-events"; +export * from "./version"; diff --git a/internal/events/src/version.ts b/internal/events/src/version.ts new file mode 100644 index 00000000..94e4e78d --- /dev/null +++ b/internal/events/src/version.ts @@ -0,0 +1,5 @@ +import { version } from "../package.json"; + +export { version as VERSION } from "../package.json"; + +export const [MAJOR_VERSION] = version.split("."); diff --git a/package-lock.json b/package-lock.json index 84d490ac..ad43ac53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,7 +99,7 @@ }, "internal/events": { "name": "@nhsdigital/nhs-notify-event-schemas-supplier-api", - "version": "1.0.3", + "version": "1.1.0", "license": "MIT", "dependencies": { "@asyncapi/bundler": "^0.6.4",