@iveri/contracts 0.19.0 → 0.21.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.
- package/README.md +39 -1
- package/dist/cjs/api/notification/index.d.ts +5 -0
- package/dist/cjs/api/notification/index.d.ts.map +1 -0
- package/dist/cjs/api/notification/index.js +21 -0
- package/dist/cjs/api/notification/index.js.map +1 -0
- package/dist/cjs/api/notification/notification-channel.enum.d.ts +27 -0
- package/dist/cjs/api/notification/notification-channel.enum.d.ts.map +1 -0
- package/dist/cjs/api/notification/notification-channel.enum.js +31 -0
- package/dist/cjs/api/notification/notification-channel.enum.js.map +1 -0
- package/dist/cjs/api/notification/notification-delivery-status.enum.d.ts +45 -0
- package/dist/cjs/api/notification/notification-delivery-status.enum.d.ts.map +1 -0
- package/dist/cjs/api/notification/notification-delivery-status.enum.js +49 -0
- package/dist/cjs/api/notification/notification-delivery-status.enum.js.map +1 -0
- package/dist/cjs/api/notification/notification-template.type.d.ts +68 -0
- package/dist/cjs/api/notification/notification-template.type.d.ts.map +1 -0
- package/dist/cjs/api/notification/notification-template.type.js +3 -0
- package/dist/cjs/api/notification/notification-template.type.js.map +1 -0
- package/dist/cjs/api/notification/notification.type.d.ts +136 -0
- package/dist/cjs/api/notification/notification.type.d.ts.map +1 -0
- package/dist/cjs/api/notification/notification.type.js +3 -0
- package/dist/cjs/api/notification/notification.type.js.map +1 -0
- package/dist/cjs/api/realtime/index.d.ts +4 -0
- package/dist/cjs/api/realtime/index.d.ts.map +1 -0
- package/dist/cjs/api/realtime/index.js +20 -0
- package/dist/cjs/api/realtime/index.js.map +1 -0
- package/dist/cjs/api/realtime/realtime-event-type.enum.d.ts +14 -0
- package/dist/cjs/api/realtime/realtime-event-type.enum.d.ts.map +1 -0
- package/dist/cjs/api/realtime/realtime-event-type.enum.js +18 -0
- package/dist/cjs/api/realtime/realtime-event-type.enum.js.map +1 -0
- package/dist/cjs/api/realtime/realtime-resource-type.enum.d.ts +13 -0
- package/dist/cjs/api/realtime/realtime-resource-type.enum.d.ts.map +1 -0
- package/dist/cjs/api/realtime/realtime-resource-type.enum.js +17 -0
- package/dist/cjs/api/realtime/realtime-resource-type.enum.js.map +1 -0
- package/dist/cjs/api/realtime/realtime.type.d.ts +106 -0
- package/dist/cjs/api/realtime/realtime.type.d.ts.map +1 -0
- package/dist/cjs/api/realtime/realtime.type.js +21 -0
- package/dist/cjs/api/realtime/realtime.type.js.map +1 -0
- package/dist/cjs/enum/user-permission.enum.d.ts +66 -1
- package/dist/cjs/enum/user-permission.enum.d.ts.map +1 -1
- package/dist/cjs/enum/user-permission.enum.js +67 -0
- package/dist/cjs/enum/user-permission.enum.js.map +1 -1
- package/dist/esm/api/notification/index.d.ts +5 -0
- package/dist/esm/api/notification/index.d.ts.map +1 -0
- package/dist/esm/api/notification/index.js +5 -0
- package/dist/esm/api/notification/index.js.map +1 -0
- package/dist/esm/api/notification/notification-channel.enum.d.ts +27 -0
- package/dist/esm/api/notification/notification-channel.enum.d.ts.map +1 -0
- package/dist/esm/api/notification/notification-channel.enum.js +28 -0
- package/dist/esm/api/notification/notification-channel.enum.js.map +1 -0
- package/dist/esm/api/notification/notification-delivery-status.enum.d.ts +45 -0
- package/dist/esm/api/notification/notification-delivery-status.enum.d.ts.map +1 -0
- package/dist/esm/api/notification/notification-delivery-status.enum.js +46 -0
- package/dist/esm/api/notification/notification-delivery-status.enum.js.map +1 -0
- package/dist/esm/api/notification/notification-template.type.d.ts +68 -0
- package/dist/esm/api/notification/notification-template.type.d.ts.map +1 -0
- package/dist/esm/api/notification/notification-template.type.js +2 -0
- package/dist/esm/api/notification/notification-template.type.js.map +1 -0
- package/dist/esm/api/notification/notification.type.d.ts +136 -0
- package/dist/esm/api/notification/notification.type.d.ts.map +1 -0
- package/dist/esm/api/notification/notification.type.js +2 -0
- package/dist/esm/api/notification/notification.type.js.map +1 -0
- package/dist/esm/api/realtime/index.d.ts +4 -0
- package/dist/esm/api/realtime/index.d.ts.map +1 -0
- package/dist/esm/api/realtime/index.js +4 -0
- package/dist/esm/api/realtime/index.js.map +1 -0
- package/dist/esm/api/realtime/realtime-event-type.enum.d.ts +14 -0
- package/dist/esm/api/realtime/realtime-event-type.enum.d.ts.map +1 -0
- package/dist/esm/api/realtime/realtime-event-type.enum.js +15 -0
- package/dist/esm/api/realtime/realtime-event-type.enum.js.map +1 -0
- package/dist/esm/api/realtime/realtime-resource-type.enum.d.ts +13 -0
- package/dist/esm/api/realtime/realtime-resource-type.enum.d.ts.map +1 -0
- package/dist/esm/api/realtime/realtime-resource-type.enum.js +14 -0
- package/dist/esm/api/realtime/realtime-resource-type.enum.js.map +1 -0
- package/dist/esm/api/realtime/realtime.type.d.ts +106 -0
- package/dist/esm/api/realtime/realtime.type.d.ts.map +1 -0
- package/dist/esm/api/realtime/realtime.type.js +18 -0
- package/dist/esm/api/realtime/realtime.type.js.map +1 -0
- package/dist/esm/enum/user-permission.enum.d.ts +66 -1
- package/dist/esm/enum/user-permission.enum.d.ts.map +1 -1
- package/dist/esm/enum/user-permission.enum.js +67 -0
- package/dist/esm/enum/user-permission.enum.js.map +1 -1
- package/package.json +17 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { CursorPage } from '../../type/cursor-page.type.js';
|
|
2
|
+
import type { IsoDateTime } from '../../type/iso-date-time.type.js';
|
|
3
|
+
import type { Nullable } from '../../type/nil.type.js';
|
|
4
|
+
import type { UUID } from '../../type/uuid.type.js';
|
|
5
|
+
import type { NotificationChannel } from './notification-channel.enum.js';
|
|
6
|
+
import type { NotificationDeliveryStatus } from './notification-delivery-status.enum.js';
|
|
7
|
+
/** Who a notification is for, and in what language. */
|
|
8
|
+
export interface NotificationRecipient {
|
|
9
|
+
/**
|
|
10
|
+
* The person, when there is one. Required by {@link NotificationChannel.IN_APP}.
|
|
11
|
+
*
|
|
12
|
+
* Null for a notification to somebody who has no account yet — which is precisely the
|
|
13
|
+
* invitation case, and the reason this is nullable rather than the obvious required field.
|
|
14
|
+
*/
|
|
15
|
+
userId: Nullable<UUID>;
|
|
16
|
+
/** Required by {@link NotificationChannel.EMAIL}. */
|
|
17
|
+
emailAddress: Nullable<string>;
|
|
18
|
+
/**
|
|
19
|
+
* BCP-47. The language of the **recipient**, not of whoever submitted the notification.
|
|
20
|
+
*
|
|
21
|
+
* Null falls back to the tenant's source locale. This is the field that makes rendering a
|
|
22
|
+
* runtime concern rather than a build-time one: an agent working in English invites a
|
|
23
|
+
* colleague who reads Georgian, and the email is the colleague's.
|
|
24
|
+
*/
|
|
25
|
+
localeCode: Nullable<string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* One attempt-tracked send of a notification down one channel.
|
|
29
|
+
*
|
|
30
|
+
* This row **is** the outbox. It is written in the same transaction as the notification it belongs
|
|
31
|
+
* to, claimed by a worker afterwards, and retried on its own schedule — so a channel that is down
|
|
32
|
+
* delays one delivery rather than failing the submit.
|
|
33
|
+
*/
|
|
34
|
+
export interface NotificationDelivery {
|
|
35
|
+
id: UUID;
|
|
36
|
+
notificationId: UUID;
|
|
37
|
+
channel: NotificationChannel;
|
|
38
|
+
status: NotificationDeliveryStatus;
|
|
39
|
+
/** Attempts actually made. A refusal that costs no attempt does not increment it. */
|
|
40
|
+
attemptCount: number;
|
|
41
|
+
/** When the next attempt is due. Null once the delivery reaches a terminal state. */
|
|
42
|
+
nextAttemptAt: Nullable<IsoDateTime>;
|
|
43
|
+
sentAt: Nullable<IsoDateTime>;
|
|
44
|
+
/**
|
|
45
|
+
* Why the last attempt failed, in words an operator can act on.
|
|
46
|
+
*
|
|
47
|
+
* Never carries the rendered body or the recipient's address — a delivery log is read by more
|
|
48
|
+
* people than the mailbox it describes.
|
|
49
|
+
*/
|
|
50
|
+
lastError: Nullable<string>;
|
|
51
|
+
/**
|
|
52
|
+
* The channel's own handle for what it accepted — an SMTP message id.
|
|
53
|
+
*
|
|
54
|
+
* Opaque and provider-shaped by nature, kept so a support question about one email can be
|
|
55
|
+
* traced into a relay's logs. Nothing branches on it.
|
|
56
|
+
*/
|
|
57
|
+
providerReference: Nullable<string>;
|
|
58
|
+
/** When the recipient opened it. In-app only; email opens are not tracked. */
|
|
59
|
+
readAt: Nullable<IsoDateTime>;
|
|
60
|
+
createdAt: IsoDateTime;
|
|
61
|
+
updatedAt: IsoDateTime;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Something the platform decided to tell somebody.
|
|
65
|
+
*
|
|
66
|
+
* **It carries no status of its own**, and that is the load-bearing shape here. Status lives on
|
|
67
|
+
* {@link NotificationDelivery}, one per channel, because a notification that emailed successfully
|
|
68
|
+
* and dead-lettered in the inbox has two true answers and no single one. A caller asking "did it
|
|
69
|
+
* go" reads `deliveries`, which answers precisely rather than approximately.
|
|
70
|
+
*/
|
|
71
|
+
export interface Notification {
|
|
72
|
+
id: UUID;
|
|
73
|
+
/** The {@link NotificationTemplate} key this was rendered from. */
|
|
74
|
+
type: string;
|
|
75
|
+
recipient: NotificationRecipient;
|
|
76
|
+
/**
|
|
77
|
+
* Values for the template's declared placeholders.
|
|
78
|
+
*
|
|
79
|
+
* Stored as submitted and re-used on every retry, so a message that is retried an hour later
|
|
80
|
+
* says what it said the first time. Rendering happens per attempt; the *inputs* do not move.
|
|
81
|
+
*/
|
|
82
|
+
variables: Record<string, string | number>;
|
|
83
|
+
/**
|
|
84
|
+
* The caller's deduplication key, unique per tenant.
|
|
85
|
+
*
|
|
86
|
+
* Enforced by a unique index rather than by a read before the insert. Two replicas processing
|
|
87
|
+
* the same event submit at the same instant, and the read-then-insert both of them do
|
|
88
|
+
* succeeds — the index is the only thing that turns that into one email.
|
|
89
|
+
*/
|
|
90
|
+
idempotencyKey: Nullable<string>;
|
|
91
|
+
deliveries: NotificationDelivery[];
|
|
92
|
+
createdAt: IsoDateTime;
|
|
93
|
+
}
|
|
94
|
+
/** `POST /api/v1/notifications` */
|
|
95
|
+
export interface SubmitNotificationBody {
|
|
96
|
+
/** A {@link NotificationTemplate} key. Unknown keys are refused at submit, not at send. */
|
|
97
|
+
type: string;
|
|
98
|
+
recipient: {
|
|
99
|
+
userId?: Nullable<UUID>;
|
|
100
|
+
emailAddress?: Nullable<string>;
|
|
101
|
+
localeCode?: Nullable<string>;
|
|
102
|
+
};
|
|
103
|
+
variables?: Nullable<Record<string, string | number>>;
|
|
104
|
+
/** Strongly recommended. Without one, a retried submit tells somebody the same thing twice. */
|
|
105
|
+
idempotencyKey?: Nullable<string>;
|
|
106
|
+
}
|
|
107
|
+
export interface SubmitNotificationResponse {
|
|
108
|
+
id: UUID;
|
|
109
|
+
/**
|
|
110
|
+
* True when the idempotency key matched an existing notification and nothing was created.
|
|
111
|
+
*
|
|
112
|
+
* Reported rather than flattened into success: it means the recipient was already being told,
|
|
113
|
+
* so a caller treating it as a fresh send would write a second record of one event.
|
|
114
|
+
*/
|
|
115
|
+
isDuplicate: boolean;
|
|
116
|
+
deliveries: NotificationDelivery[];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* A row in the caller's own in-app inbox, already rendered.
|
|
120
|
+
*
|
|
121
|
+
* Rendered text is returned rather than a key and variables, because it was rendered once at send
|
|
122
|
+
* time in the recipient's language and re-rendering it on read would let a published translation
|
|
123
|
+
* change what a notification from last week says.
|
|
124
|
+
*/
|
|
125
|
+
export interface InAppNotification {
|
|
126
|
+
id: UUID;
|
|
127
|
+
notificationId: UUID;
|
|
128
|
+
type: string;
|
|
129
|
+
subject: Nullable<string>;
|
|
130
|
+
body: string;
|
|
131
|
+
readAt: Nullable<IsoDateTime>;
|
|
132
|
+
createdAt: IsoDateTime;
|
|
133
|
+
}
|
|
134
|
+
export type InAppNotificationPage = CursorPage<InAppNotification>;
|
|
135
|
+
export type NotificationDeliveryPage = CursorPage<NotificationDelivery>;
|
|
136
|
+
//# sourceMappingURL=notification.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.type.d.ts","sourceRoot":"","sources":["../../../../src/api/notification/notification.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.type.js","sourceRoot":"","sources":["../../../../src/api/notification/notification.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/realtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier-only change notifications delivered over the shared gateway.
|
|
3
|
+
*
|
|
4
|
+
* These are prompts to refetch from an owning API, never domain state. Keeping the set closed
|
|
5
|
+
* prevents a typo from becoming a silently ignored update or forcing clients to refetch every
|
|
6
|
+
* resource for an event they do not understand.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum RealtimeEventType {
|
|
9
|
+
TAXI_RIDE_UPDATED = "taxi.ride.updated",
|
|
10
|
+
DELIVERY_JOB_UPDATED = "delivery.job.updated",
|
|
11
|
+
MOBILITY_WORKER_LOCATION_UPDATED = "mobility.worker-location.updated",
|
|
12
|
+
MOBILITY_ASSIGNMENT_UPDATED = "mobility.assignment.updated"
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=realtime-event-type.enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-event-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/api/realtime/realtime-event-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,iBAAiB;IACzB,iBAAiB,sBAAsB;IACvC,oBAAoB,yBAAyB;IAC7C,gCAAgC,qCAAqC;IACrE,2BAA2B,gCAAgC;CAC9D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier-only change notifications delivered over the shared gateway.
|
|
3
|
+
*
|
|
4
|
+
* These are prompts to refetch from an owning API, never domain state. Keeping the set closed
|
|
5
|
+
* prevents a typo from becoming a silently ignored update or forcing clients to refetch every
|
|
6
|
+
* resource for an event they do not understand.
|
|
7
|
+
*/
|
|
8
|
+
export var RealtimeEventType;
|
|
9
|
+
(function (RealtimeEventType) {
|
|
10
|
+
RealtimeEventType["TAXI_RIDE_UPDATED"] = "taxi.ride.updated";
|
|
11
|
+
RealtimeEventType["DELIVERY_JOB_UPDATED"] = "delivery.job.updated";
|
|
12
|
+
RealtimeEventType["MOBILITY_WORKER_LOCATION_UPDATED"] = "mobility.worker-location.updated";
|
|
13
|
+
RealtimeEventType["MOBILITY_ASSIGNMENT_UPDATED"] = "mobility.assignment.updated";
|
|
14
|
+
})(RealtimeEventType || (RealtimeEventType = {}));
|
|
15
|
+
//# sourceMappingURL=realtime-event-type.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-event-type.enum.js","sourceRoot":"","sources":["../../../../src/api/realtime/realtime-event-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB,4DAAuC,CAAA;IACvC,kEAA6C,CAAA;IAC7C,0FAAqE,CAAA;IACrE,gFAA2D,CAAA;AAC/D,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource classes the shared realtime gateway can address.
|
|
3
|
+
*
|
|
4
|
+
* Closed by design. A publisher cannot invent a room namespace, and the gateway can map every
|
|
5
|
+
* resource type to the one owning service allowed to issue subscription grants for it.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum RealtimeResourceType {
|
|
8
|
+
TAXI_RIDE = "taxi.ride",
|
|
9
|
+
DELIVERY_JOB = "delivery.job",
|
|
10
|
+
MOBILITY_WORKER = "mobility.worker",
|
|
11
|
+
MOBILITY_DISPATCH = "mobility.dispatch"
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=realtime-resource-type.enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-resource-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/api/realtime/realtime-resource-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oBAAY,oBAAoB;IAC5B,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;CAC1C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource classes the shared realtime gateway can address.
|
|
3
|
+
*
|
|
4
|
+
* Closed by design. A publisher cannot invent a room namespace, and the gateway can map every
|
|
5
|
+
* resource type to the one owning service allowed to issue subscription grants for it.
|
|
6
|
+
*/
|
|
7
|
+
export var RealtimeResourceType;
|
|
8
|
+
(function (RealtimeResourceType) {
|
|
9
|
+
RealtimeResourceType["TAXI_RIDE"] = "taxi.ride";
|
|
10
|
+
RealtimeResourceType["DELIVERY_JOB"] = "delivery.job";
|
|
11
|
+
RealtimeResourceType["MOBILITY_WORKER"] = "mobility.worker";
|
|
12
|
+
RealtimeResourceType["MOBILITY_DISPATCH"] = "mobility.dispatch";
|
|
13
|
+
})(RealtimeResourceType || (RealtimeResourceType = {}));
|
|
14
|
+
//# sourceMappingURL=realtime-resource-type.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-resource-type.enum.js","sourceRoot":"","sources":["../../../../src/api/realtime/realtime-resource-type.enum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC5B,+CAAuB,CAAA;IACvB,qDAA6B,CAAA;IAC7B,2DAAmC,CAAA;IACnC,+DAAuC,CAAA;AAC3C,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { IsoDateTime } from '../../type/iso-date-time.type.js';
|
|
2
|
+
import type { UUID } from '../../type/uuid.type.js';
|
|
3
|
+
import type { RealtimeEventType } from './realtime-event-type.enum.js';
|
|
4
|
+
import type { RealtimeResourceType } from './realtime-resource-type.enum.js';
|
|
5
|
+
export declare const REALTIME_CLIENT_EVENT: {
|
|
6
|
+
readonly SUBSCRIBE: "realtime.subscribe";
|
|
7
|
+
readonly UNSUBSCRIBE: "realtime.unsubscribe";
|
|
8
|
+
};
|
|
9
|
+
export declare const REALTIME_SERVER_EVENT: {
|
|
10
|
+
readonly READY: "realtime.ready";
|
|
11
|
+
readonly SUBSCRIBED: "realtime.subscribed";
|
|
12
|
+
readonly RESOURCE_UPDATED: "realtime.resource-updated";
|
|
13
|
+
readonly ERROR: "realtime.error";
|
|
14
|
+
};
|
|
15
|
+
export declare const REALTIME_PROTOCOL_VERSION = 1;
|
|
16
|
+
export declare const MAX_REALTIME_SUBSCRIPTIONS_PER_SOCKET = 100;
|
|
17
|
+
export declare const MAX_REALTIME_EVENT_BYTES: number;
|
|
18
|
+
export declare const DEFAULT_REALTIME_GRANT_TTL_SECONDS = 120;
|
|
19
|
+
export declare const MAX_REALTIME_GRANT_TTL_SECONDS = 300;
|
|
20
|
+
export declare const REALTIME_GRANT_AUDIENCE = "iveri-realtime-subscription";
|
|
21
|
+
export declare const REALTIME_GRANT_ISSUER = "iveri-realtime";
|
|
22
|
+
/**
|
|
23
|
+
* Requested by an owning API only after it has authorized a person to read the resource.
|
|
24
|
+
*
|
|
25
|
+
* `tenantId` is absent: it comes from the API's service token. The grant is bound to
|
|
26
|
+
* `subjectId`, so copying one to another authenticated socket does not authorize that socket.
|
|
27
|
+
*/
|
|
28
|
+
export interface IssueRealtimeSubscriptionGrantBody {
|
|
29
|
+
subjectId: UUID;
|
|
30
|
+
resourceType: RealtimeResourceType;
|
|
31
|
+
resourceId: UUID;
|
|
32
|
+
ttlSeconds?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface RealtimeSubscriptionGrantResponse {
|
|
35
|
+
grant: string;
|
|
36
|
+
expiresAt: IsoDateTime;
|
|
37
|
+
}
|
|
38
|
+
/** Claims inside a subscription grant signed and verified only by `iveri-realtime`. */
|
|
39
|
+
export interface RealtimeSubscriptionGrantClaims {
|
|
40
|
+
jti: UUID;
|
|
41
|
+
sub: UUID;
|
|
42
|
+
tid: UUID;
|
|
43
|
+
azp: UUID;
|
|
44
|
+
resourceType: RealtimeResourceType;
|
|
45
|
+
resourceId: UUID;
|
|
46
|
+
purpose: 'subscription';
|
|
47
|
+
iat: number;
|
|
48
|
+
exp: number;
|
|
49
|
+
iss: typeof REALTIME_GRANT_ISSUER;
|
|
50
|
+
aud: typeof REALTIME_GRANT_AUDIENCE;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* A product service's best-effort change notification.
|
|
54
|
+
*
|
|
55
|
+
* The tenant comes from the authenticated service principal and is intentionally absent here.
|
|
56
|
+
* `idempotencyKey` makes an HTTP retry harmless; no domain data or location coordinates travel
|
|
57
|
+
* over this channel.
|
|
58
|
+
*/
|
|
59
|
+
export interface PublishRealtimeEventBody {
|
|
60
|
+
idempotencyKey: UUID;
|
|
61
|
+
resourceType: RealtimeResourceType;
|
|
62
|
+
resourceId: UUID;
|
|
63
|
+
event: RealtimeEventType;
|
|
64
|
+
version: number;
|
|
65
|
+
occurredAt: IsoDateTime;
|
|
66
|
+
}
|
|
67
|
+
export interface PublishRealtimeEventResponse {
|
|
68
|
+
accepted: boolean;
|
|
69
|
+
duplicate: boolean;
|
|
70
|
+
}
|
|
71
|
+
/** A socket subscribes with grants, never with client-chosen room names or bare resource ids. */
|
|
72
|
+
export interface RealtimeSubscribeRequest {
|
|
73
|
+
grants: string[];
|
|
74
|
+
}
|
|
75
|
+
export interface RealtimeUnsubscribeRequest {
|
|
76
|
+
subscriptions: RealtimeSubscription[];
|
|
77
|
+
}
|
|
78
|
+
export interface RealtimeSubscription {
|
|
79
|
+
resourceType: RealtimeResourceType;
|
|
80
|
+
resourceId: UUID;
|
|
81
|
+
}
|
|
82
|
+
export interface RealtimeReadyMessage {
|
|
83
|
+
protocolVersion: typeof REALTIME_PROTOCOL_VERSION;
|
|
84
|
+
}
|
|
85
|
+
export interface RealtimeSubscribedMessage {
|
|
86
|
+
subscriptions: RealtimeSubscription[];
|
|
87
|
+
}
|
|
88
|
+
export interface RealtimeResourceUpdatedMessage {
|
|
89
|
+
resourceType: RealtimeResourceType;
|
|
90
|
+
resourceId: UUID;
|
|
91
|
+
event: RealtimeEventType;
|
|
92
|
+
version: number;
|
|
93
|
+
occurredAt: IsoDateTime;
|
|
94
|
+
}
|
|
95
|
+
export interface RealtimeErrorMessage {
|
|
96
|
+
code: 'UNAUTHENTICATED' | 'FORBIDDEN' | 'INVALID_GRANT' | 'INVALID_SUBSCRIPTION' | 'SUBSCRIPTION_LIMIT_REACHED';
|
|
97
|
+
message: string;
|
|
98
|
+
}
|
|
99
|
+
export type RealtimeSubscriptionAck = {
|
|
100
|
+
ok: true;
|
|
101
|
+
message: RealtimeSubscribedMessage;
|
|
102
|
+
} | {
|
|
103
|
+
ok: false;
|
|
104
|
+
message: RealtimeErrorMessage;
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=realtime.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.type.d.ts","sourceRoot":"","sources":["../../../../src/api/realtime/realtime.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const REALTIME_CLIENT_EVENT = {
|
|
2
|
+
SUBSCRIBE: 'realtime.subscribe',
|
|
3
|
+
UNSUBSCRIBE: 'realtime.unsubscribe',
|
|
4
|
+
};
|
|
5
|
+
export const REALTIME_SERVER_EVENT = {
|
|
6
|
+
READY: 'realtime.ready',
|
|
7
|
+
SUBSCRIBED: 'realtime.subscribed',
|
|
8
|
+
RESOURCE_UPDATED: 'realtime.resource-updated',
|
|
9
|
+
ERROR: 'realtime.error',
|
|
10
|
+
};
|
|
11
|
+
export const REALTIME_PROTOCOL_VERSION = 1;
|
|
12
|
+
export const MAX_REALTIME_SUBSCRIPTIONS_PER_SOCKET = 100;
|
|
13
|
+
export const MAX_REALTIME_EVENT_BYTES = 4 * 1024;
|
|
14
|
+
export const DEFAULT_REALTIME_GRANT_TTL_SECONDS = 120;
|
|
15
|
+
export const MAX_REALTIME_GRANT_TTL_SECONDS = 300;
|
|
16
|
+
export const REALTIME_GRANT_AUDIENCE = 'iveri-realtime-subscription';
|
|
17
|
+
export const REALTIME_GRANT_ISSUER = 'iveri-realtime';
|
|
18
|
+
//# sourceMappingURL=realtime.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.type.js","sourceRoot":"","sources":["../../../../src/api/realtime/realtime.type.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,sBAAsB;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,KAAK,EAAE,gBAAgB;IACvB,UAAU,EAAE,qBAAqB;IACjC,gBAAgB,EAAE,2BAA2B;IAC7C,KAAK,EAAE,gBAAgB;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,CAAC;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AACtD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC"}
|
|
@@ -271,7 +271,72 @@ export declare enum UserPermission {
|
|
|
271
271
|
* rendering an invoice line hold this and nothing else here — they have no reason to read the
|
|
272
272
|
* key catalogue, and separating it keeps a compromised worker from enumerating it.
|
|
273
273
|
*/
|
|
274
|
-
LOCALIZATION_RENDER = "localization:render"
|
|
274
|
+
LOCALIZATION_RENDER = "localization:render",
|
|
275
|
+
/**
|
|
276
|
+
* Submit a notification for delivery.
|
|
277
|
+
*
|
|
278
|
+
* **A service permission, and the sharpest one here.** It reaches a real person's mailbox with
|
|
279
|
+
* text the platform composed, and it is not deliberately absent from the seeded `ADMIN` role
|
|
280
|
+
* the way `UNIBOX_REALTIME_PUBLISH` is — an admin has no reason to hold it, because there is
|
|
281
|
+
* nothing for a human to prove by sending a notification to somebody else by hand.
|
|
282
|
+
*
|
|
283
|
+
* Note what it does *not* let a holder do: a submission names a **template key**, never a
|
|
284
|
+
* subject and body. The wording of every notification the platform sends was written by
|
|
285
|
+
* somebody holding {@link UserPermission.NOTIFICATION_TEMPLATE_MANAGE} and translated by
|
|
286
|
+
* somebody holding {@link UserPermission.LOCALIZATION_TRANSLATE}. This is the same shape as
|
|
287
|
+
* `CONDUIT_DISPATCH_SEND` naming an operation rather than a URL, and it is load-bearing for
|
|
288
|
+
* the same reason: without it, a compromised service principal is an authenticated way to
|
|
289
|
+
* send arbitrary text from our own domain to any address it likes.
|
|
290
|
+
*/
|
|
291
|
+
NOTIFICATION_SEND = "notification:send",
|
|
292
|
+
/**
|
|
293
|
+
* Read **your own** in-app inbox, and mark your own rows read.
|
|
294
|
+
*
|
|
295
|
+
* Scoped to the calling principal by the endpoint, not by this permission — there is no
|
|
296
|
+
* variant that reads somebody else's inbox, because a notification is addressed to one person
|
|
297
|
+
* and reading another's is reading their mail. It belongs in every human role, including the
|
|
298
|
+
* narrowest, for the same reason: without it a member cannot see what the product is telling
|
|
299
|
+
* them.
|
|
300
|
+
*/
|
|
301
|
+
NOTIFICATION_READ = "notification:read",
|
|
302
|
+
/** Read the tenant's notification templates and the platform's built-in ones. */
|
|
303
|
+
NOTIFICATION_TEMPLATE_READ = "notification:template:read",
|
|
304
|
+
/**
|
|
305
|
+
* Override a built-in template, or define a new one — which channels a notification type
|
|
306
|
+
* reaches and which message keys it renders.
|
|
307
|
+
*
|
|
308
|
+
* Configuration that decides what every future notification of a type says, including the
|
|
309
|
+
* password-reset email. Overriding one badly is a way to stop people getting back into their
|
|
310
|
+
* accounts, so it is separated from reading for the same reason `CONDUIT_CONNECTOR_MANAGE` is.
|
|
311
|
+
*/
|
|
312
|
+
NOTIFICATION_TEMPLATE_MANAGE = "notification:template:manage",
|
|
313
|
+
/**
|
|
314
|
+
* Read the delivery log and the dead-letter queue, including each delivery's last error.
|
|
315
|
+
*
|
|
316
|
+
* Grouped with reading rather than with operating the queue, and it is closer to a data-read
|
|
317
|
+
* permission than a config one: the log names who was written to and about what.
|
|
318
|
+
*/
|
|
319
|
+
NOTIFICATION_DELIVERY_READ = "notification:delivery:read",
|
|
320
|
+
/**
|
|
321
|
+
* Redrive a dead-lettered delivery, or cancel one still pending.
|
|
322
|
+
*
|
|
323
|
+
* Separate from reading because it causes a message to be sent to a person rather than
|
|
324
|
+
* returning a row — and because redriving a backlog is a way to mail somebody the same thing
|
|
325
|
+
* fifty times an hour after an outage.
|
|
326
|
+
*/
|
|
327
|
+
NOTIFICATION_DELIVERY_OPERATE = "notification:delivery:operate",
|
|
328
|
+
/**
|
|
329
|
+
* Ask the shared gateway to issue a short-lived subscription grant after the owning API has
|
|
330
|
+
* authorized a person to read one resource. Service-only: a human may consume a grant but
|
|
331
|
+
* must never mint one.
|
|
332
|
+
*/
|
|
333
|
+
REALTIME_SUBSCRIPTION_GRANT_ISSUE = "realtime:subscription-grant:issue",
|
|
334
|
+
/**
|
|
335
|
+
* Publish an identifier-only resource change. Separate from grant issue because announcing a
|
|
336
|
+
* write and authorizing a read are distinct powers and a service may legitimately need one
|
|
337
|
+
* without the other.
|
|
338
|
+
*/
|
|
339
|
+
REALTIME_EVENT_PUBLISH = "realtime:event:publish"
|
|
275
340
|
}
|
|
276
341
|
/**
|
|
277
342
|
* Every member, for seeding the owner role and validating custom-role input.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-permission.enum.d.ts","sourceRoot":"","sources":["../../../src/enum/user-permission.enum.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"user-permission.enum.d.ts","sourceRoot":"","sources":["../../../src/enum/user-permission.enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -316,6 +316,73 @@ export var UserPermission;
|
|
|
316
316
|
* key catalogue, and separating it keeps a compromised worker from enumerating it.
|
|
317
317
|
*/
|
|
318
318
|
UserPermission["LOCALIZATION_RENDER"] = "localization:render";
|
|
319
|
+
// ══ iveri-notification-api ══════════════════════════════════════════════
|
|
320
|
+
/**
|
|
321
|
+
* Submit a notification for delivery.
|
|
322
|
+
*
|
|
323
|
+
* **A service permission, and the sharpest one here.** It reaches a real person's mailbox with
|
|
324
|
+
* text the platform composed, and it is not deliberately absent from the seeded `ADMIN` role
|
|
325
|
+
* the way `UNIBOX_REALTIME_PUBLISH` is — an admin has no reason to hold it, because there is
|
|
326
|
+
* nothing for a human to prove by sending a notification to somebody else by hand.
|
|
327
|
+
*
|
|
328
|
+
* Note what it does *not* let a holder do: a submission names a **template key**, never a
|
|
329
|
+
* subject and body. The wording of every notification the platform sends was written by
|
|
330
|
+
* somebody holding {@link UserPermission.NOTIFICATION_TEMPLATE_MANAGE} and translated by
|
|
331
|
+
* somebody holding {@link UserPermission.LOCALIZATION_TRANSLATE}. This is the same shape as
|
|
332
|
+
* `CONDUIT_DISPATCH_SEND` naming an operation rather than a URL, and it is load-bearing for
|
|
333
|
+
* the same reason: without it, a compromised service principal is an authenticated way to
|
|
334
|
+
* send arbitrary text from our own domain to any address it likes.
|
|
335
|
+
*/
|
|
336
|
+
UserPermission["NOTIFICATION_SEND"] = "notification:send";
|
|
337
|
+
/**
|
|
338
|
+
* Read **your own** in-app inbox, and mark your own rows read.
|
|
339
|
+
*
|
|
340
|
+
* Scoped to the calling principal by the endpoint, not by this permission — there is no
|
|
341
|
+
* variant that reads somebody else's inbox, because a notification is addressed to one person
|
|
342
|
+
* and reading another's is reading their mail. It belongs in every human role, including the
|
|
343
|
+
* narrowest, for the same reason: without it a member cannot see what the product is telling
|
|
344
|
+
* them.
|
|
345
|
+
*/
|
|
346
|
+
UserPermission["NOTIFICATION_READ"] = "notification:read";
|
|
347
|
+
/** Read the tenant's notification templates and the platform's built-in ones. */
|
|
348
|
+
UserPermission["NOTIFICATION_TEMPLATE_READ"] = "notification:template:read";
|
|
349
|
+
/**
|
|
350
|
+
* Override a built-in template, or define a new one — which channels a notification type
|
|
351
|
+
* reaches and which message keys it renders.
|
|
352
|
+
*
|
|
353
|
+
* Configuration that decides what every future notification of a type says, including the
|
|
354
|
+
* password-reset email. Overriding one badly is a way to stop people getting back into their
|
|
355
|
+
* accounts, so it is separated from reading for the same reason `CONDUIT_CONNECTOR_MANAGE` is.
|
|
356
|
+
*/
|
|
357
|
+
UserPermission["NOTIFICATION_TEMPLATE_MANAGE"] = "notification:template:manage";
|
|
358
|
+
/**
|
|
359
|
+
* Read the delivery log and the dead-letter queue, including each delivery's last error.
|
|
360
|
+
*
|
|
361
|
+
* Grouped with reading rather than with operating the queue, and it is closer to a data-read
|
|
362
|
+
* permission than a config one: the log names who was written to and about what.
|
|
363
|
+
*/
|
|
364
|
+
UserPermission["NOTIFICATION_DELIVERY_READ"] = "notification:delivery:read";
|
|
365
|
+
/**
|
|
366
|
+
* Redrive a dead-lettered delivery, or cancel one still pending.
|
|
367
|
+
*
|
|
368
|
+
* Separate from reading because it causes a message to be sent to a person rather than
|
|
369
|
+
* returning a row — and because redriving a backlog is a way to mail somebody the same thing
|
|
370
|
+
* fifty times an hour after an outage.
|
|
371
|
+
*/
|
|
372
|
+
UserPermission["NOTIFICATION_DELIVERY_OPERATE"] = "notification:delivery:operate";
|
|
373
|
+
// ══ iveri-realtime ══════════════════════════════════════════════════════
|
|
374
|
+
/**
|
|
375
|
+
* Ask the shared gateway to issue a short-lived subscription grant after the owning API has
|
|
376
|
+
* authorized a person to read one resource. Service-only: a human may consume a grant but
|
|
377
|
+
* must never mint one.
|
|
378
|
+
*/
|
|
379
|
+
UserPermission["REALTIME_SUBSCRIPTION_GRANT_ISSUE"] = "realtime:subscription-grant:issue";
|
|
380
|
+
/**
|
|
381
|
+
* Publish an identifier-only resource change. Separate from grant issue because announcing a
|
|
382
|
+
* write and authorizing a read are distinct powers and a service may legitimately need one
|
|
383
|
+
* without the other.
|
|
384
|
+
*/
|
|
385
|
+
UserPermission["REALTIME_EVENT_PUBLISH"] = "realtime:event:publish";
|
|
319
386
|
})(UserPermission || (UserPermission = {}));
|
|
320
387
|
/**
|
|
321
388
|
* Every member, for seeding the owner role and validating custom-role input.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-permission.enum.js","sourceRoot":"","sources":["../../../src/enum/user-permission.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"user-permission.enum.js","sourceRoot":"","sources":["../../../src/enum/user-permission.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAN,IAAY,cAkaX;AAlaD,WAAY,cAAc;IACtB,4EAA4E;IAE5E,2EAA2E;IAC3E,6CAA2B,CAAA;IAC3B,iDAA+B,CAAA;IAC/B,sFAAsF;IACtF,iDAA+B,CAAA;IAE/B,2EAA2E;IAC3E,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,6CAA2B,CAAA;IAC3B,6CAA2B,CAAA;IAE3B,2EAA2E;IAC3E,qDAAmC,CAAA;IACnC,6EAA6E;IAC7E,yDAAuC,CAAA;IACvC;;;OAGG;IACH,mEAAiD,CAAA;IAEjD,2EAA2E;IAC3E,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,6CAA2B,CAAA;IAC3B,6CAA2B,CAAA;IAE3B,2EAA2E;IAC3E,+CAA6B,CAAA;IAC7B,iDAA+B,CAAA;IAC/B,mDAAiC,CAAA;IAEjC,4EAA4E;IAE5E,2EAA2E;IAC3E,qEAAqE;IACrE,iEAA+C,CAAA;IAC/C,qEAAmD,CAAA;IACnD,qEAAmD,CAAA;IACnD,qEAAmD,CAAA;IAEnD,2EAA2E;IAC3E;;;;OAIG;IACH,+DAA6C,CAAA;IAC7C,mEAAiD,CAAA;IAEjD,2EAA2E;IAC3E;;;;OAIG;IACH,mEAAiD,CAAA;IAEjD,2EAA2E;IAC3E,iEAA+C,CAAA;IAC/C,yFAAyF;IACzF,qEAAmD,CAAA;IAEnD,2EAA2E;IAC3E,mEAAmE;IACnE,uEAAqD,CAAA;IACrD;;;;;;;OAOG;IACH,2EAAyD,CAAA;IAEzD,2EAA2E;IAC3E,2DAAyC,CAAA;IACzC,2DAA2D;IAC3D,+DAA6C,CAAA;IAE7C,2EAA2E;IAC3E;;;;;OAKG;IACH,iEAA+C,CAAA;IAC/C;;;;;;OAMG;IACH,uEAAqD,CAAA;IAErD,2EAA2E;IAC3E,wFAAwF;IACxF,mEAAiD,CAAA;IACjD;;;;;;;;OAQG;IACH,uEAAqD,CAAA;IAErD,2EAA2E;IAC3E,sEAAsE;IACtE,qEAAmD,CAAA;IACnD;;;;;OAKG;IACH,yEAAuD,CAAA;IAEvD,2EAA2E;IAC3E;;;;;OAKG;IACH,iEAA+C,CAAA;IAC/C;;;;;;;OAOG;IACH,iEAA+C,CAAA;IAC/C,qEAAqE;IACrE,uEAAqD,CAAA;IAErD,4EAA4E;IAE5E,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAA+C,CAAA;IAC/C,yEAAyE;IACzE,qEAAmD,CAAA;IAEnD,2EAA2E;IAE3E,iEAAiE;IACjE,mEAAiD,CAAA;IACjD,mDAAmD;IACnD,mEAAiD,CAAA;IACjD,qEAAqE;IACrE,2DAAyC,CAAA;IACzC,uEAAuE;IACvE,iEAA+C,CAAA;IAC/C,yFAAyF;IACzF,qEAAmD,CAAA;IAEnD,4EAA4E;IAE5E,2EAA2E;IAC3E,kFAAkF;IAClF,6DAA2C,CAAA;IAC3C;;;;;;OAMG;IACH,iEAA+C,CAAA;IAE/C,2EAA2E;IAC3E,2FAA2F;IAC3F,6DAA2C,CAAA;IAC3C,gDAAgD;IAChD,iEAA+C,CAAA;IAE/C,2EAA2E;IAC3E;;;;;;;OAOG;IACH,uEAAqD,CAAA;IACrD,yFAAyF;IACzF,2EAAyD,CAAA;IACzD;;;;;;OAMG;IACH,2EAAyD,CAAA;IAEzD,2EAA2E;IAC3E;;;;;;OAMG;IACH,6DAA2C,CAAA;IAE3C,2EAA2E;IAC3E,uDAAqC,CAAA;IACrC,8FAA8F;IAC9F,2DAAyC,CAAA;IAEzC,2EAA2E;IAC3E,uEAAqD,CAAA;IACrD,oEAAoE;IACpE,2EAAyD,CAAA;IAEzD,2EAA2E;IAC3E;;;;;;;;;;;OAWG;IACH,qEAAmD,CAAA;IAEnD,2EAA2E;IAC3E,gGAAgG;IAChG,iDAA+B,CAAA;IAE/B,2EAA2E;IAC3E,6EAA6E;IAC7E,qDAAmC,CAAA;IACnC,wDAAwD;IACxD,yDAAuC,CAAA;IAEvC,2EAA2E;IAE3E,0EAA0E;IAC1E,8CAA8C;IAC9C,yDAAuC,CAAA;IACvC,sDAAsD;IACtD,6DAA2C,CAAA;IAE3C,yEAAyE;IACzE,6DAA6D;IAC7D,yEAAuD,CAAA;IACvD,qDAAqD;IACrD,6EAA2D,CAAA;IAE3D,0EAA0E;IAC1E,yCAAyC;IACzC,2DAAyC,CAAA;IACzC,2DAA2D;IAC3D,+DAA6C,CAAA;IAE7C,0EAA0E;IAC1E,+DAA+D;IAC/D,+DAA6C,CAAA;IAC7C,+EAA+E;IAC/E,mEAAiD,CAAA;IAEjD,0EAA0E;IAC1E,2DAA2D;IAC3D,+DAA6C,CAAA;IAC7C,gDAAgD;IAChD,mEAAiD,CAAA;IAEjD,2EAA2E;IAC3E,EAAE;IACF,sFAAsF;IACtF,wFAAwF;IACxF,6FAA6F;IAC7F,0FAA0F;IAC1F,mEAAmE;IAEnE;;;;;;;OAOG;IACH,yDAAuC,CAAA;IAEvC;;;;;;;OAOG;IACH,6EAA2D,CAAA;IAE3D;;;;;;;OAOG;IACH,mEAAiD,CAAA;IAEjD;;;;;;OAMG;IACH,+DAA6C,CAAA;IAE7C;;;;;;OAMG;IACH,6DAA2C,CAAA;IAE3C,2EAA2E;IAE3E;;;;;;;;;;;;;;;OAeG;IACH,yDAAuC,CAAA;IAEvC;;;;;;;;OAQG;IACH,yDAAuC,CAAA;IAEvC,iFAAiF;IACjF,2EAAyD,CAAA;IAEzD;;;;;;;OAOG;IACH,+EAA6D,CAAA;IAE7D;;;;;OAKG;IACH,2EAAyD,CAAA;IAEzD;;;;;;OAMG;IACH,iFAA+D,CAAA;IAE/D,2EAA2E;IAE3E;;;;OAIG;IACH,yFAAuE,CAAA;IAEvE;;;;OAIG;IACH,mEAAiD,CAAA;AACrD,CAAC,EAlaW,cAAc,KAAd,cAAc,QAkazB;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA8B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iveri/contracts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Wire contracts shared by every Iveri backend and frontend. Zero runtime dependencies.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -49,6 +49,16 @@
|
|
|
49
49
|
"import": "./dist/esm/api/localization/index.js",
|
|
50
50
|
"require": "./dist/cjs/api/localization/index.js"
|
|
51
51
|
},
|
|
52
|
+
"./notification": {
|
|
53
|
+
"types": "./dist/cjs/api/notification/index.d.ts",
|
|
54
|
+
"import": "./dist/esm/api/notification/index.js",
|
|
55
|
+
"require": "./dist/cjs/api/notification/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./realtime": {
|
|
58
|
+
"types": "./dist/cjs/api/realtime/index.d.ts",
|
|
59
|
+
"import": "./dist/esm/api/realtime/index.js",
|
|
60
|
+
"require": "./dist/cjs/api/realtime/index.js"
|
|
61
|
+
},
|
|
52
62
|
"./package.json": "./package.json"
|
|
53
63
|
},
|
|
54
64
|
"typesVersions": {
|
|
@@ -62,6 +72,12 @@
|
|
|
62
72
|
"localization": [
|
|
63
73
|
"./dist/cjs/api/localization/index.d.ts"
|
|
64
74
|
],
|
|
75
|
+
"notification": [
|
|
76
|
+
"./dist/cjs/api/notification/index.d.ts"
|
|
77
|
+
],
|
|
78
|
+
"realtime": [
|
|
79
|
+
"./dist/cjs/api/realtime/index.d.ts"
|
|
80
|
+
],
|
|
65
81
|
"unibox": [
|
|
66
82
|
"./dist/cjs/api/unibox/index.d.ts"
|
|
67
83
|
],
|