@pagopa/interop-outbound-models 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,161 @@
1
+ import { z } from "zod";
2
+ import { match } from "ts-pattern";
3
+ import {
4
+ PurposeTemplateAddedV2,
5
+ PurposeTemplateAnnotationDocumentAddedV2,
6
+ PurposeTemplateAnnotationDocumentDeletedV2,
7
+ PurposeTemplateAnnotationDocumentUpdatedV2,
8
+ PurposeTemplateArchivedV2,
9
+ PurposeTemplateDraftDeletedV2,
10
+ PurposeTemplateDraftUpdatedV2,
11
+ PurposeTemplateEServiceLinkedV2,
12
+ PurposeTemplateEServiceUnlinkedV2,
13
+ PurposeTemplatePublishedV2,
14
+ PurposeTemplateSuspendedV2,
15
+ PurposeTemplateUnsuspendedV2,
16
+ } from "../gen/v2/purpose-template/events.js";
17
+ import { protobufDecoder } from "../utils.js";
18
+
19
+ export function purposeTemplateEventToBinaryDataV2(
20
+ event: PurposeTemplateEventV2
21
+ ): Uint8Array {
22
+ return match(event)
23
+ .with({ type: "PurposeTemplateAdded" }, ({ data }) =>
24
+ PurposeTemplateAddedV2.toBinary(data)
25
+ )
26
+ .with({ type: "PurposeTemplateEServiceLinked" }, ({ data }) =>
27
+ PurposeTemplateEServiceLinkedV2.toBinary(data)
28
+ )
29
+ .with({ type: "PurposeTemplateEServiceUnlinked" }, ({ data }) =>
30
+ PurposeTemplateEServiceUnlinkedV2.toBinary(data)
31
+ )
32
+ .with({ type: "PurposeTemplateDraftUpdated" }, ({ data }) =>
33
+ PurposeTemplateDraftUpdatedV2.toBinary(data)
34
+ )
35
+ .with({ type: "PurposeTemplateDraftDeleted" }, ({ data }) =>
36
+ PurposeTemplateDraftDeletedV2.toBinary(data)
37
+ )
38
+ .with({ type: "PurposeTemplatePublished" }, ({ data }) =>
39
+ PurposeTemplatePublishedV2.toBinary(data)
40
+ )
41
+ .with({ type: "PurposeTemplateUnsuspended" }, ({ data }) =>
42
+ PurposeTemplateUnsuspendedV2.toBinary(data)
43
+ )
44
+ .with({ type: "PurposeTemplateSuspended" }, ({ data }) =>
45
+ PurposeTemplateSuspendedV2.toBinary(data)
46
+ )
47
+ .with({ type: "PurposeTemplateArchived" }, ({ data }) =>
48
+ PurposeTemplateArchivedV2.toBinary(data)
49
+ )
50
+ .with({ type: "PurposeTemplateAnnotationDocumentAdded" }, ({ data }) =>
51
+ PurposeTemplateAnnotationDocumentAddedV2.toBinary(data)
52
+ )
53
+ .with({ type: "PurposeTemplateAnnotationDocumentDeleted" }, ({ data }) =>
54
+ PurposeTemplateAnnotationDocumentDeletedV2.toBinary(data)
55
+ )
56
+ .with({ type: "PurposeTemplateAnnotationDocumentUpdated" }, ({ data }) =>
57
+ PurposeTemplateAnnotationDocumentUpdatedV2.toBinary(data)
58
+ )
59
+ .exhaustive();
60
+ }
61
+
62
+ export const PurposeTemplateEventV2 = z.discriminatedUnion("type", [
63
+ z.object({
64
+ event_version: z.literal(2),
65
+ type: z.literal("PurposeTemplateAdded"),
66
+ data: protobufDecoder(PurposeTemplateAddedV2),
67
+ stream_id: z.string(),
68
+ version: z.number(),
69
+ timestamp: z.string(),
70
+ }),
71
+ z.object({
72
+ event_version: z.literal(2),
73
+ type: z.literal("PurposeTemplateEServiceLinked"),
74
+ data: protobufDecoder(PurposeTemplateEServiceLinkedV2),
75
+ stream_id: z.string(),
76
+ version: z.number(),
77
+ timestamp: z.string(),
78
+ }),
79
+ z.object({
80
+ event_version: z.literal(2),
81
+ type: z.literal("PurposeTemplateEServiceUnlinked"),
82
+ data: protobufDecoder(PurposeTemplateEServiceUnlinkedV2),
83
+ stream_id: z.string(),
84
+ version: z.number(),
85
+ timestamp: z.string(),
86
+ }),
87
+ z.object({
88
+ event_version: z.literal(2),
89
+ type: z.literal("PurposeTemplateDraftUpdated"),
90
+ data: protobufDecoder(PurposeTemplateDraftUpdatedV2),
91
+ stream_id: z.string(),
92
+ version: z.number(),
93
+ timestamp: z.string(),
94
+ }),
95
+ z.object({
96
+ event_version: z.literal(2),
97
+ type: z.literal("PurposeTemplateDraftDeleted"),
98
+ data: protobufDecoder(PurposeTemplateDraftDeletedV2),
99
+ stream_id: z.string(),
100
+ version: z.number(),
101
+ timestamp: z.string(),
102
+ }),
103
+ z.object({
104
+ event_version: z.literal(2),
105
+ type: z.literal("PurposeTemplatePublished"),
106
+ data: protobufDecoder(PurposeTemplatePublishedV2),
107
+ stream_id: z.string(),
108
+ version: z.number(),
109
+ timestamp: z.string(),
110
+ }),
111
+ z.object({
112
+ event_version: z.literal(2),
113
+ type: z.literal("PurposeTemplateUnsuspended"),
114
+ data: protobufDecoder(PurposeTemplateUnsuspendedV2),
115
+ stream_id: z.string(),
116
+ version: z.number(),
117
+ timestamp: z.string(),
118
+ }),
119
+ z.object({
120
+ event_version: z.literal(2),
121
+ type: z.literal("PurposeTemplateSuspended"),
122
+ data: protobufDecoder(PurposeTemplateSuspendedV2),
123
+ stream_id: z.string(),
124
+ version: z.number(),
125
+ timestamp: z.string(),
126
+ }),
127
+ z.object({
128
+ event_version: z.literal(2),
129
+ type: z.literal("PurposeTemplateArchived"),
130
+ data: protobufDecoder(PurposeTemplateArchivedV2),
131
+ stream_id: z.string(),
132
+ version: z.number(),
133
+ timestamp: z.string(),
134
+ }),
135
+ z.object({
136
+ event_version: z.literal(2),
137
+ type: z.literal("PurposeTemplateAnnotationDocumentAdded"),
138
+ data: protobufDecoder(PurposeTemplateAnnotationDocumentAddedV2),
139
+ stream_id: z.string(),
140
+ version: z.number(),
141
+ timestamp: z.string(),
142
+ }),
143
+ z.object({
144
+ event_version: z.literal(2),
145
+ type: z.literal("PurposeTemplateAnnotationDocumentDeleted"),
146
+ data: protobufDecoder(PurposeTemplateAnnotationDocumentDeletedV2),
147
+ stream_id: z.string(),
148
+ version: z.number(),
149
+ timestamp: z.string(),
150
+ }),
151
+ z.object({
152
+ event_version: z.literal(2),
153
+ type: z.literal("PurposeTemplateAnnotationDocumentUpdated"),
154
+ data: protobufDecoder(PurposeTemplateAnnotationDocumentUpdatedV2),
155
+ stream_id: z.string(),
156
+ version: z.number(),
157
+ timestamp: z.string(),
158
+ }),
159
+ ]);
160
+
161
+ export type PurposeTemplateEventV2 = z.infer<typeof PurposeTemplateEventV2>;
@@ -0,0 +1,53 @@
1
+ import { match } from "ts-pattern";
2
+ import { z } from "zod";
3
+ import { VersionedEvent } from "../utils.js";
4
+ import {
5
+ PurposeTemplateEventV2,
6
+ purposeTemplateEventToBinaryDataV2,
7
+ } from "./eventsV2.js";
8
+
9
+ export function purposeTemplateEventToBinaryData(
10
+ event: PurposeTemplateEvent
11
+ ): Uint8Array {
12
+ return match(event)
13
+ .with({ event_version: 2 }, purposeTemplateEventToBinaryDataV2)
14
+ .exhaustive();
15
+ }
16
+
17
+ export function encodeOutboundPurposeTemplateEvent(
18
+ event: PurposeTemplateEvent
19
+ ): string {
20
+ return JSON.stringify({
21
+ event_version: event.event_version,
22
+ type: event.type,
23
+ data: Buffer.from(purposeTemplateEventToBinaryData(event)).toString("hex"),
24
+ stream_id: event.stream_id,
25
+ version: event.version,
26
+ timestamp: event.timestamp,
27
+ });
28
+ }
29
+
30
+ export function decodeOutboundPurposeTemplateEvent(
31
+ encodedEvent: string
32
+ ): PurposeTemplateEvent {
33
+ return PurposeTemplateEvent.parse(JSON.parse(encodedEvent));
34
+ }
35
+
36
+ export const PurposeTemplateEvent = VersionedEvent.transform((obj, ctx) => {
37
+ const res = match(obj)
38
+ .with({ event_version: 1 }, () => {
39
+ throw new Error("Unsupported event version");
40
+ })
41
+ .with({ event_version: 2 }, () => PurposeTemplateEventV2.safeParse(obj))
42
+ .exhaustive();
43
+
44
+ if (!res.success) {
45
+ res.error.issues.forEach(ctx.addIssue);
46
+ return z.NEVER;
47
+ }
48
+ return res.data;
49
+ });
50
+
51
+ export type PurposeTemplateEventType = PurposeTemplateEvent["type"];
52
+ export type PurposeTemplateEvent = z.infer<typeof PurposeTemplateEvent>;
53
+ export { PurposeTemplateEventV2 };