@openora/core 0.4.1-canary.113 → 0.4.1-canary.114
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/.tsbuildinfo +1 -1
- package/dist/audit/plugin.d.ts.map +1 -1
- package/dist/audit/plugin.js +16 -0
- package/dist/audit/plugin.js.map +1 -1
- package/dist/contracts/adapters/index.d.ts +1 -1
- package/dist/contracts/adapters/index.d.ts.map +1 -1
- package/dist/contracts/adapters/index.js.map +1 -1
- package/dist/contracts/adapters/realtime.d.ts +36 -3
- package/dist/contracts/adapters/realtime.d.ts.map +1 -1
- package/dist/contracts/adapters/realtime.js.map +1 -1
- package/dist/contracts/schemas/events.d.ts +16 -0
- package/dist/contracts/schemas/events.d.ts.map +1 -1
- package/dist/contracts/schemas/events.js +13 -0
- package/dist/contracts/schemas/events.js.map +1 -1
- package/dist/engagement/chat/__tests__/chat.router.test.d.ts +2 -0
- package/dist/engagement/chat/__tests__/chat.router.test.d.ts.map +1 -0
- package/dist/engagement/chat/__tests__/chat.router.test.js +44 -0
- package/dist/engagement/chat/__tests__/chat.router.test.js.map +1 -0
- package/dist/engagement/chat/__tests__/chat.service.int.test.js +590 -6
- package/dist/engagement/chat/__tests__/chat.service.int.test.js.map +1 -1
- package/dist/engagement/chat/contract/constants.d.ts +2 -0
- package/dist/engagement/chat/contract/constants.d.ts.map +1 -1
- package/dist/engagement/chat/contract/constants.js +7 -0
- package/dist/engagement/chat/contract/constants.js.map +1 -1
- package/dist/engagement/chat/contract/index.d.ts +39 -0
- package/dist/engagement/chat/contract/index.d.ts.map +1 -1
- package/dist/engagement/chat/contract/index.js +25 -1
- package/dist/engagement/chat/contract/index.js.map +1 -1
- package/dist/engagement/chat/drizzle/migrations/0009_massive_bill_hollister.sql +1 -0
- package/dist/engagement/chat/drizzle/migrations/0010_backfill_role_assigned_at.sql +9 -0
- package/dist/engagement/chat/drizzle/migrations/meta/0009_snapshot.json +1468 -0
- package/dist/engagement/chat/drizzle/migrations/meta/0010_snapshot.json +1468 -0
- package/dist/engagement/chat/drizzle/migrations/meta/_journal.json +14 -0
- package/dist/engagement/chat/router/index.d.ts +19 -0
- package/dist/engagement/chat/router/index.d.ts.map +1 -1
- package/dist/engagement/chat/router/index.js +31 -2
- package/dist/engagement/chat/router/index.js.map +1 -1
- package/dist/engagement/chat/schema/index.d.ts +17 -0
- package/dist/engagement/chat/schema/index.d.ts.map +1 -1
- package/dist/engagement/chat/schema/index.js +3 -0
- package/dist/engagement/chat/schema/index.js.map +1 -1
- package/dist/engagement/chat/service/chat-ban.service.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat-ban.service.js +6 -6
- package/dist/engagement/chat/service/chat-ban.service.js.map +1 -1
- package/dist/engagement/chat/service/chat-room-ban.service.js +1 -1
- package/dist/engagement/chat/service/chat-room-ban.service.js.map +1 -1
- package/dist/engagement/chat/service/chat-room-membership.service.d.ts +15 -0
- package/dist/engagement/chat/service/chat-room-membership.service.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat-room-membership.service.js +96 -4
- package/dist/engagement/chat/service/chat-room-membership.service.js.map +1 -1
- package/dist/engagement/chat/service/chat.service.d.ts +3 -2
- package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
- package/dist/engagement/chat/service/chat.service.js +73 -24
- package/dist/engagement/chat/service/chat.service.js.map +1 -1
- package/dist/engagement/chat/service/errors/chat-moderation.errors.d.ts +1 -0
- package/dist/engagement/chat/service/errors/chat-moderation.errors.d.ts.map +1 -1
- package/dist/engagement/chat/service/errors/chat-moderation.errors.js +1 -0
- package/dist/engagement/chat/service/errors/chat-moderation.errors.js.map +1 -1
- package/dist/react/context/__tests__/realtime-client.test.d.ts +2 -0
- package/dist/react/context/__tests__/realtime-client.test.d.ts.map +1 -0
- package/dist/react/context/__tests__/realtime-client.test.js +75 -0
- package/dist/react/context/__tests__/realtime-client.test.js.map +1 -0
- package/dist/react/context/realtime-client.d.ts +14 -0
- package/dist/react/context/realtime-client.d.ts.map +1 -1
- package/dist/react/context/realtime-client.js.map +1 -1
- package/dist/server/kernel/realtime-transport.d.ts +11 -3
- package/dist/server/kernel/realtime-transport.d.ts.map +1 -1
- package/dist/server/kernel/realtime-transport.js +53 -10
- package/dist/server/kernel/realtime-transport.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-moderation.errors.js","sourceRoot":"","sources":["../../../../../src/engagement/chat/service/errors/chat-moderation.errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;AAGzE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAAsB;IAEnC,YAAY,KAA2B;QACrC,KAAK,CACH,KAAK,KAAK,IAAI;YACZ,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,uBAAuB,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CACjF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAAsB;IAEnC,YAAY,KAA2B;QACrC,KAAK,CACH,KAAK,KAAK,IAAI;YACZ,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,wBAAwB,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAClF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7E,CAAC;CACF;AACD,MAAM,CAAC,MAAM,mCAAmC,GAAG,iBAAiB,CAClE,qCAAqC,EACrC,GAAG,EAAE,CAAC,8DAA8D,CACrE,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CACrD,wBAAwB,EACxB,CAAC,MAAY,EAAE,EAAE,CAAC,iCAAiC,MAAM,EAAE,CAC5D,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,2BAA2B,EAC3B,CAAC,MAAY,EAAE,EAAE,CAAC,oCAAoC,MAAM,EAAE,CAC/D,CAAC;AACF,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAC1D,6BAA6B,EAC7B,GAAG,EAAE,CAAC,iCAAiC,CACxC,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CACzD,4BAA4B,EAC5B,GAAG,EAAE,CAAC,uDAAuD,CAC9D,CAAC;AACF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAC5D,+BAA+B,EAC/B,CAAC,IAAY,EAAE,EAAE,CAAC,iCAAiC,IAAI,EAAE,CAC1D,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,CAAC,MAAY,EAAE,EAAE,CAAC,6BAA6B,MAAM,EAAE,CACxD,CAAC"}
|
|
1
|
+
{"version":3,"file":"chat-moderation.errors.js","sourceRoot":"","sources":["../../../../../src/engagement/chat/service/errors/chat-moderation.errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;AAGzE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAAsB;IAEnC,YAAY,KAA2B;QACrC,KAAK,CACH,KAAK,KAAK,IAAI;YACZ,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,uBAAuB,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CACjF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAAsB;IAEnC,YAAY,KAA2B;QACrC,KAAK,CACH,KAAK,KAAK,IAAI;YACZ,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,wBAAwB,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAClF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7E,CAAC;CACF;AACD,MAAM,CAAC,MAAM,mCAAmC,GAAG,iBAAiB,CAClE,qCAAqC,EACrC,GAAG,EAAE,CAAC,8DAA8D,CACrE,CAAC;AACF,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CACrD,wBAAwB,EACxB,CAAC,MAAY,EAAE,EAAE,CAAC,iCAAiC,MAAM,EAAE,CAC5D,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,2BAA2B,EAC3B,CAAC,MAAY,EAAE,EAAE,CAAC,oCAAoC,MAAM,EAAE,CAC/D,CAAC;AACF,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAC1D,6BAA6B,EAC7B,GAAG,EAAE,CAAC,iCAAiC,CACxC,CAAC;AACF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CACzD,4BAA4B,EAC5B,GAAG,EAAE,CAAC,uDAAuD,CAC9D,CAAC;AACF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAC5D,+BAA+B,EAC/B,GAAG,EAAE,CAAC,2DAA2D,CAClE,CAAC;AACF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAC5D,+BAA+B,EAC/B,CAAC,IAAY,EAAE,EAAE,CAAC,iCAAiC,IAAI,EAAE,CAC1D,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,CAAC,MAAY,EAAE,EAAE,CAAC,6BAA6B,MAAM,EAAE,CACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-client.test.d.ts","sourceRoot":"","sources":["../../../../src/react/context/__tests__/realtime-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import { createElement } from 'react';
|
|
3
|
+
import { renderHook } from '@testing-library/react';
|
|
4
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
5
|
+
import { RealtimeClientProvider, useOptionalRealtimeClient, } from '../realtime-client.js';
|
|
6
|
+
/**
|
|
7
|
+
* Stands in for a vendor adapter: it records what each channel was subscribed with, and
|
|
8
|
+
* `deliver`/`emit` play the two lanes back the way Ably's named events would. `subscribe` is
|
|
9
|
+
* generic, so the map cannot know a channel's payload type - it stores the handlers under
|
|
10
|
+
* `never`, which every `RealtimeSubscribeHandlers<T>` satisfies. Only `deliver` states a
|
|
11
|
+
* payload type, and it is the one this file subscribes with.
|
|
12
|
+
*/
|
|
13
|
+
function fakeAdapter() {
|
|
14
|
+
const channels = new Map();
|
|
15
|
+
const closed = vi.fn();
|
|
16
|
+
const adapter = {
|
|
17
|
+
subscribe(channel, handlers) {
|
|
18
|
+
channels.set(channel, handlers);
|
|
19
|
+
return () => channels.delete(channel);
|
|
20
|
+
},
|
|
21
|
+
close: closed,
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
adapter,
|
|
25
|
+
closed,
|
|
26
|
+
deliver: (channel, message) => channels.get(channel)?.onMessage(message),
|
|
27
|
+
emit: (channel, name, payload) => channels.get(channel)?.onSignal?.(name, payload),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function mountWith(adapter) {
|
|
31
|
+
return renderHook(() => useOptionalRealtimeClient(), {
|
|
32
|
+
wrapper: ({ children }) => createElement(RealtimeClientProvider, { adapter, children }),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
describe('RealtimeClientProvider', () => {
|
|
36
|
+
it('returns null when no provider is mounted, so the caller can fall back to SSE', () => {
|
|
37
|
+
expect(renderHook(() => useOptionalRealtimeClient()).result.current).toBeNull();
|
|
38
|
+
});
|
|
39
|
+
it('hands the mounted adapter to consumers and closes it on unmount', () => {
|
|
40
|
+
const { adapter, closed } = fakeAdapter();
|
|
41
|
+
const { result, unmount } = mountWith(adapter);
|
|
42
|
+
expect(result.current).toBe(adapter);
|
|
43
|
+
expect(closed).not.toHaveBeenCalled();
|
|
44
|
+
unmount();
|
|
45
|
+
expect(closed).toHaveBeenCalledOnce();
|
|
46
|
+
});
|
|
47
|
+
it('delivers a named signal to onSignal and never to the payload lane', () => {
|
|
48
|
+
const { adapter, deliver, emit } = fakeAdapter();
|
|
49
|
+
const onMessage = vi.fn();
|
|
50
|
+
const onSignal = vi.fn();
|
|
51
|
+
const { result } = mountWith(adapter);
|
|
52
|
+
result.current?.subscribe('chat:room:r1', { onMessage, onSignal });
|
|
53
|
+
emit('chat:room:r1', 'chat:member-role-changed', {
|
|
54
|
+
roomId: 'r1',
|
|
55
|
+
userId: 'u1',
|
|
56
|
+
role: 'moderator',
|
|
57
|
+
});
|
|
58
|
+
deliver('chat:room:r1', { id: 'm1' });
|
|
59
|
+
expect(onSignal.mock.calls).toEqual([
|
|
60
|
+
['chat:member-role-changed', { roomId: 'r1', userId: 'u1', role: 'moderator' }],
|
|
61
|
+
]);
|
|
62
|
+
expect(onMessage.mock.calls).toEqual([[{ id: 'm1' }]]);
|
|
63
|
+
});
|
|
64
|
+
it('leaves a caller that only wants messages unaffected by a signal', () => {
|
|
65
|
+
const { adapter, deliver, emit } = fakeAdapter();
|
|
66
|
+
const onMessage = vi.fn();
|
|
67
|
+
const { result } = mountWith(adapter);
|
|
68
|
+
// No onSignal: an SSE-backed adapter never calls it, and a caller need not supply it.
|
|
69
|
+
result.current?.subscribe('chat:room:r1', { onMessage });
|
|
70
|
+
expect(() => emit('chat:room:r1', 'chat:member-role-changed', {})).not.toThrow();
|
|
71
|
+
deliver('chat:room:r1', { id: 'm1' });
|
|
72
|
+
expect(onMessage.mock.calls).toEqual([[{ id: 'm1' }]]);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=realtime-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-client.test.js","sourceRoot":"","sources":["../../../../src/react/context/__tests__/realtime-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
export type RealtimeClientStatus = 'idle' | 'connecting' | 'open' | 'closed';
|
|
3
3
|
export type RealtimeSubscribeHandlers<T> = {
|
|
4
|
+
/**
|
|
5
|
+
* The channel's payload stream - for chat, a `ChatMessage`. Its shape is the channel's
|
|
6
|
+
* contract, which is why it is typed and `onSignal`'s payload is not.
|
|
7
|
+
*/
|
|
4
8
|
onMessage: (event: T) => void;
|
|
5
9
|
onStatus?: (status: RealtimeClientStatus) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Optional: the receiving half of `RealtimeTransport.signal` (contracts/adapters/realtime.ts).
|
|
12
|
+
* A named control signal - "something about this channel changed, refetch" - delivered on its
|
|
13
|
+
* own lane, so it never reaches `onMessage` and cannot corrupt the payload stream. `payload` is
|
|
14
|
+
* `unknown` on purpose: the vocabulary of names is open, so the caller parses what it asked
|
|
15
|
+
* for (eg `ChatMemberRoleChangedSignalSchema` for `chat:member-role-changed`) and ignores the
|
|
16
|
+
* rest. A managed adapter feeds this from the vendor's named events; an SSE-backed one feeds
|
|
17
|
+
* it from the `/chat/signals` stream, which carries the same lane for the default transport.
|
|
18
|
+
*/
|
|
19
|
+
onSignal?: (name: string, payload: unknown) => void;
|
|
6
20
|
};
|
|
7
21
|
export type RealtimeClientAdapter = {
|
|
8
22
|
/** Returns an unsubscribe fn the caller MUST invoke on teardown. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-client.d.ts","sourceRoot":"","sources":["../../../src/react/context/realtime-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAE9B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime-client.d.ts","sourceRoot":"","sources":["../../../src/react/context/realtime-client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM7E,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IACzC;;;OAGG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAE9B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAClD;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,oEAAoE;IACpE,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAGlF,KAAK,CAAC,IAAI,IAAI,CAAC;IAGf,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAKA;AAED,0FAA0F;AAC1F,wBAAgB,yBAAyB,IAAI,qBAAqB,GAAG,IAAI,CAExE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-client.js","sourceRoot":"","sources":["../../../src/react/context/realtime-client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime-client.js","sourceRoot":"","sources":["../../../src/react/context/realtime-client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAuC7E,MAAM,qBAAqB,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAC;AAEhF,MAAM,UAAU,sBAAsB,CAAC,EACrC,OAAO,EACP,QAAQ,GAIT;IACC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,OAAO,CACL,KAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAAkC,CAC5F,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
import type { RealtimePresence, RealtimeTransport } from '@openora/core/contracts';
|
|
1
|
+
import type { RealtimePresence, RealtimeSignal, RealtimeTransport } from '@openora/core/contracts';
|
|
2
2
|
/** First-party process-local fan-out used by the default SSE transport. */
|
|
3
3
|
export declare class InProcessRealtimeTransport implements RealtimeTransport {
|
|
4
4
|
private readonly channels;
|
|
5
|
+
private readonly signalChannels;
|
|
5
6
|
private readonly inProcessPresence;
|
|
6
7
|
readonly presence: RealtimePresence;
|
|
7
8
|
publish<T>(channel: string, event: T): void;
|
|
8
9
|
remove<T>(channel: string, event: T): void;
|
|
9
|
-
subscribe<T>(channel: string, handler: (event: T) => void,
|
|
10
|
-
|
|
10
|
+
subscribe<T>(channel: string, handler: (event: T) => void, userId?: string): () => void;
|
|
11
|
+
signal(channel: string, name: string, payload: unknown): void;
|
|
12
|
+
subscribeSignal(channel: string, handler: (signal: RealtimeSignal) => void, userId?: string): () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Cuts every subscription this user holds on the channel. Both lanes are pruned
|
|
15
|
+
* independently: a client can hold a signal stream without a message stream, and revoked
|
|
16
|
+
* access has to end both.
|
|
17
|
+
*/
|
|
18
|
+
revokeUserFromChannel(userId: string, channel: string): void;
|
|
11
19
|
getOnlineUserIds(channel: string): Promise<string[]>;
|
|
12
20
|
}
|
|
13
21
|
//# sourceMappingURL=realtime-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-transport.d.ts","sourceRoot":"","sources":["../../../src/server/kernel/realtime-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime-transport.d.ts","sourceRoot":"","sources":["../../../src/server/kernel/realtime-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAkEnG,2EAA2E;AAC3E,qBAAa,0BAA2B,YAAW,iBAAiB;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAGjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAC7E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAA0B;IAE7D,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe3C,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI1C,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI;IAiBvF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAc7D,eAAe,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,EACzC,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,IAAI;IAiBb;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAGrD"}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/** Drops one user's subscriptions from a single lane, forgetting the channel once empty. */
|
|
2
|
+
function pruneUser(lanes, channel, userId) {
|
|
3
|
+
const subscribers = lanes.get(channel);
|
|
4
|
+
if (!subscribers) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
for (const subscription of Array.from(subscribers)) {
|
|
8
|
+
if (subscription.userId === userId) {
|
|
9
|
+
subscribers.delete(subscription);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
if (subscribers.size === 0) {
|
|
13
|
+
lanes.delete(channel);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
1
16
|
class InProcessPresence {
|
|
2
17
|
members = new Map();
|
|
3
18
|
join(channel, memberId, connectionId) {
|
|
@@ -36,6 +51,9 @@ class InProcessPresence {
|
|
|
36
51
|
/** First-party process-local fan-out used by the default SSE transport. */
|
|
37
52
|
export class InProcessRealtimeTransport {
|
|
38
53
|
channels = new Map();
|
|
54
|
+
// Second, independent lane per channel: a signal must never reach a payload subscriber,
|
|
55
|
+
// which is the whole reason `signal` exists next to `publish`.
|
|
56
|
+
signalChannels = new Map();
|
|
39
57
|
inProcessPresence = new InProcessPresence();
|
|
40
58
|
presence = this.inProcessPresence;
|
|
41
59
|
publish(channel, event) {
|
|
@@ -56,9 +74,9 @@ export class InProcessRealtimeTransport {
|
|
|
56
74
|
remove(channel, event) {
|
|
57
75
|
this.publish(channel, event);
|
|
58
76
|
}
|
|
59
|
-
subscribe(channel, handler,
|
|
77
|
+
subscribe(channel, handler, userId) {
|
|
60
78
|
const subscribers = this.channels.get(channel) ?? new Set();
|
|
61
|
-
const subscription = { handler: handler,
|
|
79
|
+
const subscription = { handler: handler, userId };
|
|
62
80
|
subscribers.add(subscription);
|
|
63
81
|
this.channels.set(channel, subscribers);
|
|
64
82
|
return () => {
|
|
@@ -72,19 +90,44 @@ export class InProcessRealtimeTransport {
|
|
|
72
90
|
}
|
|
73
91
|
};
|
|
74
92
|
}
|
|
75
|
-
|
|
76
|
-
const subscribers = this.
|
|
93
|
+
signal(channel, name, payload) {
|
|
94
|
+
const subscribers = this.signalChannels.get(channel);
|
|
77
95
|
if (!subscribers) {
|
|
78
96
|
return;
|
|
79
97
|
}
|
|
80
|
-
for (const
|
|
81
|
-
|
|
82
|
-
|
|
98
|
+
for (const { handler } of Array.from(subscribers)) {
|
|
99
|
+
try {
|
|
100
|
+
handler({ name, payload });
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// One disconnected subscriber must not stop fan-out to others.
|
|
83
104
|
}
|
|
84
105
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
106
|
+
}
|
|
107
|
+
subscribeSignal(channel, handler, userId) {
|
|
108
|
+
const subscribers = this.signalChannels.get(channel) ?? new Set();
|
|
109
|
+
const subscription = { handler, userId };
|
|
110
|
+
subscribers.add(subscription);
|
|
111
|
+
this.signalChannels.set(channel, subscribers);
|
|
112
|
+
return () => {
|
|
113
|
+
const current = this.signalChannels.get(channel);
|
|
114
|
+
if (!current) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
current.delete(subscription);
|
|
118
|
+
if (current.size === 0) {
|
|
119
|
+
this.signalChannels.delete(channel);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Cuts every subscription this user holds on the channel. Both lanes are pruned
|
|
125
|
+
* independently: a client can hold a signal stream without a message stream, and revoked
|
|
126
|
+
* access has to end both.
|
|
127
|
+
*/
|
|
128
|
+
revokeUserFromChannel(userId, channel) {
|
|
129
|
+
pruneUser(this.channels, channel, userId);
|
|
130
|
+
pruneUser(this.signalChannels, channel, userId);
|
|
88
131
|
}
|
|
89
132
|
getOnlineUserIds(channel) {
|
|
90
133
|
return Promise.resolve(this.inProcessPresence.getUserIds(channel));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-transport.js","sourceRoot":"","sources":["../../../src/server/kernel/realtime-transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"realtime-transport.js","sourceRoot":"","sources":["../../../src/server/kernel/realtime-transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openora/core",
|
|
3
|
-
"version": "0.4.1-canary.
|
|
3
|
+
"version": "0.4.1-canary.114",
|
|
4
4
|
"description": "Open-source, headless, plugin-based, AI-native iGaming framework - domain modules, plugin engine, Zod-first contracts, typed React SDK",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-native",
|