@murphai/gateway-core 0.1.1

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/dist/routes.js ADDED
@@ -0,0 +1,319 @@
1
+ import { normalizeNullableString } from './shared.js';
2
+ import { gatewayConversationDirectnessValues, gatewayConversationRouteSchema, } from './contracts.js';
3
+ export function normalizeGatewayConversationRoute(input) {
4
+ return gatewayConversationRouteSchema.parse({
5
+ channel: normalizeNullableString(input?.channel),
6
+ identityId: normalizeNullableString(input?.identityId),
7
+ participantId: normalizeNullableString(input?.participantId),
8
+ threadId: normalizeNullableString(input?.threadId),
9
+ directness: normalizeGatewayConversationDirectness(input?.directness),
10
+ reply: {
11
+ kind: input?.reply?.kind ?? null,
12
+ target: normalizeNullableString(input?.reply?.target),
13
+ },
14
+ });
15
+ }
16
+ export function gatewayConversationRouteFromBinding(binding) {
17
+ const conversation = gatewayConversationRefFromBinding(binding);
18
+ return gatewayConversationRouteFromConversationRef(conversation, {
19
+ kind: binding.delivery?.kind ?? null,
20
+ target: binding.delivery?.target ?? null,
21
+ });
22
+ }
23
+ export function gatewayConversationRouteFromOutboxIntent(intent) {
24
+ const conversation = gatewayConversationRefFromBinding({
25
+ actorId: intent.actorId,
26
+ channel: intent.channel,
27
+ identityId: intent.identityId,
28
+ threadId: intent.threadId,
29
+ threadIsDirect: intent.threadIsDirect,
30
+ });
31
+ return gatewayConversationRouteFromConversationRef(conversation, {
32
+ kind: intent.bindingDelivery?.kind ?? null,
33
+ target: intent.bindingDelivery?.target ?? null,
34
+ });
35
+ }
36
+ export function gatewayConversationRouteFromCapture(capture) {
37
+ const conversation = gatewayConversationRefFromCapture({
38
+ accountId: capture.accountId ?? null,
39
+ actorId: capture.actor.id ?? null,
40
+ source: capture.source,
41
+ threadId: capture.thread.id,
42
+ threadIsDirect: capture.thread.isDirect ?? null,
43
+ });
44
+ return gatewayConversationRouteFromConversationRef(conversation);
45
+ }
46
+ export function mergeGatewayConversationRoutes(base, patch) {
47
+ const merged = mergeGatewayConversationRefs(gatewayConversationRouteToConversationRef(base), gatewayConversationRouteToConversationRef(patch));
48
+ const reply = mergeGatewayReplyRoute(base?.reply, patch?.reply, merged);
49
+ return gatewayConversationRouteFromConversationRef(merged, {
50
+ kind: reply.kind,
51
+ target: reply.target,
52
+ });
53
+ }
54
+ export function resolveGatewayConversationRouteKey(route) {
55
+ const normalized = normalizeGatewayConversationRoute(route);
56
+ return resolveGatewayConversationKey({
57
+ actorId: normalized.participantId,
58
+ channel: normalized.channel,
59
+ identityId: normalized.identityId,
60
+ threadId: normalized.threadId,
61
+ threadIsDirect: threadIsDirectFromGatewayDirectness(normalized.directness),
62
+ });
63
+ }
64
+ export function gatewayConversationRouteCanSend(route) {
65
+ const normalized = normalizeGatewayConversationRoute(route);
66
+ const inferredDelivery = inferGatewayBindingDelivery({
67
+ channel: normalized.channel,
68
+ conversation: gatewayConversationRouteToConversationRef(normalized),
69
+ deliveryKind: normalized.reply.kind,
70
+ deliveryTarget: normalized.reply.target,
71
+ });
72
+ if (!normalized.channel || !inferredDelivery) {
73
+ return false;
74
+ }
75
+ if (normalized.channel === 'email' && !normalized.identityId) {
76
+ return false;
77
+ }
78
+ if (normalized.channel === 'linq' && inferredDelivery.kind !== 'thread') {
79
+ return false;
80
+ }
81
+ return true;
82
+ }
83
+ export function gatewayChannelSupportsReplyToMessage(channel) {
84
+ return normalizeNullableString(channel) === 'linq';
85
+ }
86
+ export function gatewayBindingDeliveryFromRoute(route) {
87
+ const normalized = normalizeGatewayConversationRoute(route);
88
+ return inferGatewayBindingDelivery({
89
+ channel: normalized.channel,
90
+ conversation: gatewayConversationRouteToConversationRef(normalized),
91
+ deliveryKind: normalized.reply.kind,
92
+ deliveryTarget: normalized.reply.target,
93
+ });
94
+ }
95
+ function inferGatewayBindingDelivery(input) {
96
+ switch (input.channel) {
97
+ case 'telegram':
98
+ case 'email':
99
+ return inferThreadFirstGatewayReply({
100
+ conversation: input.conversation ?? {},
101
+ deliveryKind: input.deliveryKind ?? null,
102
+ deliveryTarget: input.deliveryTarget ?? null,
103
+ includeParticipant: true,
104
+ });
105
+ case 'linq':
106
+ return inferThreadFirstGatewayReply({
107
+ conversation: input.conversation ?? {},
108
+ deliveryKind: input.deliveryKind ?? null,
109
+ deliveryTarget: input.deliveryTarget ?? null,
110
+ includeParticipant: false,
111
+ });
112
+ default:
113
+ return inferFallbackGatewayReply({
114
+ conversation: input.conversation ?? {},
115
+ deliveryKind: input.deliveryKind ?? null,
116
+ deliveryTarget: input.deliveryTarget ?? null,
117
+ });
118
+ }
119
+ }
120
+ function gatewayConversationRouteFromConversationRef(conversation, reply) {
121
+ return normalizeGatewayConversationRoute({
122
+ channel: conversation.channel,
123
+ identityId: conversation.identityId,
124
+ participantId: conversation.participantId,
125
+ threadId: conversation.threadId,
126
+ directness: normalizeGatewayConversationDirectness(conversation.directness),
127
+ reply: reply
128
+ ? {
129
+ kind: reply.kind ?? null,
130
+ target: reply.target ?? null,
131
+ }
132
+ : null,
133
+ });
134
+ }
135
+ function gatewayConversationRouteToConversationRef(input) {
136
+ return {
137
+ channel: normalizeNullableString(input?.channel),
138
+ identityId: normalizeNullableString(input?.identityId),
139
+ participantId: normalizeNullableString(input?.participantId),
140
+ threadId: normalizeNullableString(input?.threadId),
141
+ directness: normalizeGatewayConversationDirectness(input?.directness),
142
+ };
143
+ }
144
+ function gatewayConversationRefFromBinding(binding) {
145
+ return normalizeGatewayConversationRef({
146
+ channel: binding.channel,
147
+ identityId: binding.identityId,
148
+ participantId: binding.actorId,
149
+ threadId: binding.threadId,
150
+ directness: gatewayConversationDirectnessFromThreadIsDirect(binding.threadIsDirect),
151
+ });
152
+ }
153
+ function gatewayConversationRefFromCapture(input) {
154
+ return normalizeGatewayConversationRef({
155
+ channel: input.source,
156
+ identityId: input.source === 'email' || input.source === 'linq' ? input.accountId : null,
157
+ participantId: input.actorId,
158
+ threadId: input.threadId,
159
+ directness: gatewayConversationDirectnessFromThreadIsDirect(input.threadIsDirect),
160
+ });
161
+ }
162
+ function normalizeGatewayConversationRef(input) {
163
+ if (!input) {
164
+ return {};
165
+ }
166
+ return {
167
+ channel: normalizeNullableString(input.channel),
168
+ identityId: normalizeNullableString(input.identityId),
169
+ participantId: normalizeNullableString(input.participantId),
170
+ threadId: normalizeNullableString(input.threadId),
171
+ directness: normalizeGatewayConversationDirectness(input.directness),
172
+ };
173
+ }
174
+ function mergeGatewayConversationRefs(base, patch) {
175
+ const normalizedBase = normalizeGatewayConversationRef(base);
176
+ const normalizedPatch = normalizeGatewayConversationRef(patch);
177
+ return {
178
+ channel: normalizedPatch.channel ?? normalizedBase.channel,
179
+ identityId: normalizedPatch.identityId ?? normalizedBase.identityId,
180
+ participantId: normalizedPatch.participantId ?? normalizedBase.participantId,
181
+ threadId: normalizedPatch.threadId ?? normalizedBase.threadId,
182
+ directness: normalizedPatch.directness ?? normalizedBase.directness,
183
+ };
184
+ }
185
+ function mergeGatewayReplyRoute(base, patch, mergedConversation) {
186
+ const explicitKind = patch && 'kind' in patch ? patch.kind ?? null : base?.kind ?? null;
187
+ const explicitTarget = patch && 'target' in patch
188
+ ? normalizeNullableString(patch.target)
189
+ : normalizeNullableString(base?.target);
190
+ if (patch && 'kind' in patch) {
191
+ return {
192
+ kind: explicitKind,
193
+ target: explicitTarget,
194
+ };
195
+ }
196
+ if (explicitKind === 'thread' && (!patch || !('target' in patch))) {
197
+ return {
198
+ kind: 'thread',
199
+ target: mergedConversation.threadId ?? null,
200
+ };
201
+ }
202
+ return {
203
+ kind: explicitKind,
204
+ target: explicitTarget,
205
+ };
206
+ }
207
+ function resolveGatewayConversationKey(input) {
208
+ const channel = normalizeNullableString(input.channel);
209
+ const identityId = normalizeNullableString(input.identityId);
210
+ const actorId = normalizeNullableString(input.actorId);
211
+ const threadId = normalizeNullableString(input.threadId);
212
+ if (!channel) {
213
+ return null;
214
+ }
215
+ const scope = input.threadIsDirect === true
216
+ ? actorId
217
+ ? ['actor', actorId]
218
+ : threadId
219
+ ? ['thread', threadId]
220
+ : null
221
+ : input.threadIsDirect === false
222
+ ? threadId
223
+ ? ['thread', threadId]
224
+ : null
225
+ : actorId
226
+ ? ['actor', actorId]
227
+ : threadId
228
+ ? ['thread', threadId]
229
+ : null;
230
+ if (!scope) {
231
+ return null;
232
+ }
233
+ const entries = [
234
+ ['channel', channel],
235
+ ['identity', identityId],
236
+ scope,
237
+ ].filter((entry) => entry[1] !== null);
238
+ return entries
239
+ .map(([key, value]) => `${key}:${encodeURIComponent(value)}`)
240
+ .join('|');
241
+ }
242
+ function normalizeGatewayConversationDirectness(value) {
243
+ const normalized = normalizeNullableString(value);
244
+ return gatewayConversationDirectnessValues.includes(normalized)
245
+ ? normalized
246
+ : null;
247
+ }
248
+ function threadIsDirectFromGatewayDirectness(directness) {
249
+ switch (normalizeGatewayConversationDirectness(directness)) {
250
+ case 'direct':
251
+ return true;
252
+ case 'group':
253
+ return false;
254
+ default:
255
+ return null;
256
+ }
257
+ }
258
+ function gatewayConversationDirectnessFromThreadIsDirect(threadIsDirect) {
259
+ if (threadIsDirect === true) {
260
+ return 'direct';
261
+ }
262
+ if (threadIsDirect === false) {
263
+ return 'group';
264
+ }
265
+ return null;
266
+ }
267
+ function inferThreadFirstGatewayReply(input) {
268
+ const explicit = resolveExplicitGatewayReply(input);
269
+ if (explicit) {
270
+ return explicit;
271
+ }
272
+ if (input.conversation.threadId) {
273
+ return {
274
+ kind: 'thread',
275
+ target: input.conversation.threadId,
276
+ };
277
+ }
278
+ if (input.includeParticipant && input.conversation.participantId) {
279
+ return {
280
+ kind: 'participant',
281
+ target: input.conversation.participantId,
282
+ };
283
+ }
284
+ return null;
285
+ }
286
+ function inferFallbackGatewayReply(input) {
287
+ const explicit = resolveExplicitGatewayReply(input);
288
+ if (explicit) {
289
+ return explicit;
290
+ }
291
+ if (input.conversation.directness === 'group' && input.conversation.threadId) {
292
+ return {
293
+ kind: 'thread',
294
+ target: input.conversation.threadId,
295
+ };
296
+ }
297
+ if (input.conversation.participantId) {
298
+ return {
299
+ kind: 'participant',
300
+ target: input.conversation.participantId,
301
+ };
302
+ }
303
+ if (input.conversation.threadId) {
304
+ return {
305
+ kind: 'thread',
306
+ target: input.conversation.threadId,
307
+ };
308
+ }
309
+ return null;
310
+ }
311
+ function resolveExplicitGatewayReply(input) {
312
+ const kind = input.deliveryKind ?? null;
313
+ const target = normalizeNullableString(input.deliveryTarget);
314
+ if (!kind || !target) {
315
+ return null;
316
+ }
317
+ return { kind, target };
318
+ }
319
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { z } from 'incur';
2
+ export declare function normalizeNullableString(value: string | null | undefined): string | null;
3
+ export declare const isoTimestampSchema: z.ZodString;
4
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAEzB,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvF;AAED,eAAO,MAAM,kBAAkB,aAK3B,CAAA"}
package/dist/shared.js ADDED
@@ -0,0 +1,15 @@
1
+ import { z } from 'incur';
2
+ export function normalizeNullableString(value) {
3
+ if (typeof value !== 'string') {
4
+ return null;
5
+ }
6
+ const normalized = value.trim();
7
+ return normalized.length > 0 ? normalized : null;
8
+ }
9
+ export const isoTimestampSchema = z
10
+ .string()
11
+ .min(1)
12
+ .refine((value) => !Number.isNaN(Date.parse(value)), {
13
+ message: 'Expected an ISO timestamp.',
14
+ });
15
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAEzB,MAAM,UAAU,uBAAuB,CAAC,KAAgC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC/B,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;IACnD,OAAO,EAAE,4BAA4B;CACtC,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { type GatewayAttachment, type GatewayConversation, type GatewayEvent, type GatewayFetchAttachmentsInput, type GatewayGetConversationInput, type GatewayListConversationsInput, type GatewayListConversationsResult, type GatewayMessage, type GatewayPermissionRequest, type GatewayPollEventsInput, type GatewayPollEventsResult, type GatewayProjectionSnapshot, type GatewayReadMessagesInput, type GatewayReadMessagesResult } from './contracts.js';
2
+ export interface GatewayEventEmission extends Omit<GatewayEvent, 'cursor' | 'schema'> {
3
+ }
4
+ export interface GatewayEventLogState {
5
+ events: GatewayEvent[];
6
+ nextCursor: number;
7
+ snapshot: GatewayProjectionSnapshot | null;
8
+ }
9
+ export declare const DEFAULT_GATEWAY_EVENT_RETENTION = 512;
10
+ export declare function listGatewayConversationsFromSnapshot(snapshot: GatewayProjectionSnapshot, input?: GatewayListConversationsInput): GatewayListConversationsResult;
11
+ export declare function getGatewayConversationFromSnapshot(snapshot: GatewayProjectionSnapshot, input: GatewayGetConversationInput): GatewayConversation | null;
12
+ export declare function readGatewayMessagesFromSnapshot(snapshot: GatewayProjectionSnapshot, input: GatewayReadMessagesInput): GatewayReadMessagesResult;
13
+ export declare function fetchGatewayAttachmentsFromSnapshot(snapshot: GatewayProjectionSnapshot, input: GatewayFetchAttachmentsInput): GatewayAttachment[];
14
+ export declare function listGatewayOpenPermissionsFromSnapshot(snapshot: GatewayProjectionSnapshot, input?: {
15
+ sessionKey?: string | null;
16
+ }): GatewayPermissionRequest[];
17
+ export declare function diffGatewayProjectionSnapshots(previous: GatewayProjectionSnapshot | null, next: GatewayProjectionSnapshot): GatewayEventEmission[];
18
+ export declare function applyGatewayProjectionSnapshotToEventLog(state: GatewayEventLogState, snapshot: GatewayProjectionSnapshot, retention?: number): GatewayEventLogState;
19
+ export declare function pollGatewayEventLogState(state: GatewayEventLogState, input?: GatewayPollEventsInput): GatewayPollEventsResult;
20
+ export declare function compareGatewayConversationsDescending(left: GatewayConversation, right: GatewayConversation): number;
21
+ export declare function compareGatewayMessagesAscending(left: GatewayMessage, right: GatewayMessage): number;
22
+ export declare function deriveLastMessagePreview(message: GatewayMessage | null): string | null;
23
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,gBAAgB,CAAA;AASvB,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAAG;AAEpD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC3C;AAED,eAAO,MAAM,+BAA+B,MAAM,CAAA;AAElD,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,yBAAyB,EACnC,KAAK,CAAC,EAAE,6BAA6B,GACpC,8BAA8B,CAuBhC;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,yBAAyB,EACnC,KAAK,EAAE,2BAA2B,GACjC,mBAAmB,GAAG,IAAI,CAgB5B;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,yBAAyB,EACnC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CAwB3B;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,yBAAyB,EACnC,KAAK,EAAE,4BAA4B,GAClC,iBAAiB,EAAE,CAiDrB;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,yBAAyB,EACnC,KAAK,CAAC,EAAE;IACN,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B,GACA,wBAAwB,EAAE,CAmB5B;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,yBAAyB,GAAG,IAAI,EAC1C,IAAI,EAAE,yBAAyB,GAC9B,oBAAoB,EAAE,CA8ExB;AAED,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,yBAAyB,EACnC,SAAS,GAAE,MAAwC,GAClD,oBAAoB,CAyCtB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,CAAC,EAAE,sBAAsB,GAC7B,uBAAuB,CAmBzB;AAED,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,mBAAmB,GACzB,MAAM,CAKR;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,GACpB,MAAM,CAKR;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQtF"}