@gd-kirie/ipc-eventa 0.1.2

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 ADDED
@@ -0,0 +1,48 @@
1
+ # @gd-kirie/ipc-eventa
2
+
3
+ Eventa adapter for Kirie WebView pages.
4
+
5
+ The package connects upstream `@moeru/eventa` contexts to Kirie's low-level
6
+ text IPC lane. Eventa messages are serialized as JSON text and sent through
7
+ `@gd-kirie/ipc`; Kirie core remains a transport layer and does not learn
8
+ Eventa semantics.
9
+
10
+ This first transport is debug-first and text-based. A later binary or structured
11
+ transport should use Kirie's CBOR-backed data or binary lane directly, exposed
12
+ as an explicit opt-in before it becomes the default.
13
+
14
+ ## Events
15
+
16
+ ```ts
17
+ import { defineEventa } from "@moeru/eventa";
18
+ import { createContext } from "@gd-kirie/ipc-eventa";
19
+
20
+ const move = defineEventa<{ x: number; y: number }>("player:move");
21
+ const { context, dispose } = createContext();
22
+
23
+ context.on(move, ({ body }) => {
24
+ console.log(body.x, body.y);
25
+ });
26
+
27
+ context.emit(move, { x: 100, y: 200 });
28
+
29
+ dispose();
30
+ ```
31
+
32
+ ## Unary RPC
33
+
34
+ ```ts
35
+ import { defineInvoke, defineInvokeEventa } from "@moeru/eventa";
36
+ import { createContext } from "@gd-kirie/ipc-eventa";
37
+
38
+ const lookupUser = defineInvokeEventa<{ id: string }, { name: string }>("user:lookup");
39
+ const { context } = createContext();
40
+ const invokeLookupUser = defineInvoke(context, lookupUser);
41
+
42
+ const user = await invokeLookupUser({ name: "alice" });
43
+ console.log(user.id);
44
+ ```
45
+
46
+ Validate payloads at application boundaries before sending them to untrusted
47
+ peers. The adapter forwards Eventa payloads as JSON text and does not perform
48
+ application schema validation.
@@ -0,0 +1,22 @@
1
+ import { EventContext, EventTag, Eventa } from "@moeru/eventa";
2
+
3
+ //#region src/index.d.ts
4
+ interface KirieEventaMessage {
5
+ id: string;
6
+ type: EventTag<unknown, unknown>;
7
+ payload: Eventa<unknown>;
8
+ }
9
+ interface KirieEventaRawMessage {
10
+ raw: {
11
+ message: string;
12
+ };
13
+ }
14
+ type KirieEventaContext = EventContext<unknown, KirieEventaRawMessage>;
15
+ interface KirieEventaContextHandle {
16
+ context: KirieEventaContext;
17
+ dispose: () => void;
18
+ }
19
+ declare function createContext(): KirieEventaContextHandle;
20
+ //#endregion
21
+ export { KirieEventaContext, KirieEventaContextHandle, KirieEventaMessage, createContext };
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;UAYiB,kBAAA;EACf,EAAA;EACA,IAAA,EAAM,QAAA;EACN,OAAA,EAAS,MAAA;AAAA;AAAA,UAGD,qBAAA;EACR,GAAA;IACE,OAAA;EAAA;AAAA;AAAA,KAQQ,kBAAA,GAAqB,YAAA,UAAsB,qBAAA;AAAA,UAEtC,wBAAA;EACf,OAAA,EAAS,kBAAA;EACT,OAAA;AAAA;AAAA,iBAcc,aAAA,IAAiB,wBAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,40 @@
1
+ import { onTextReceived, sendText } from "@gd-kirie/ipc";
2
+ import { EventaFlowDirection, and, createContext as createContext$1, defineInboundEventa, defineOutboundEventa, matchBy, nanoid } from "@moeru/eventa";
3
+ //#region src/index.ts
4
+ function createMessage(event) {
5
+ return {
6
+ id: nanoid(),
7
+ payload: {
8
+ ...defineOutboundEventa(event.type),
9
+ ...event
10
+ },
11
+ type: event.id
12
+ };
13
+ }
14
+ function createContext() {
15
+ const context = createContext$1();
16
+ const offOutbound = context.on(and(matchBy((event) => {
17
+ return event._flowDirection === EventaFlowDirection.Outbound || !event._flowDirection;
18
+ }), matchBy("*")), (event) => {
19
+ sendText(JSON.stringify(createMessage(event)));
20
+ });
21
+ const offInbound = onTextReceived((message) => {
22
+ try {
23
+ const parsed = JSON.parse(message);
24
+ context.emit(defineInboundEventa(parsed.type), parsed.payload.body, { raw: { message } });
25
+ } catch (error) {
26
+ console.error("Failed to parse Kirie Eventa message:", error);
27
+ }
28
+ });
29
+ return {
30
+ context,
31
+ dispose: () => {
32
+ offOutbound();
33
+ offInbound();
34
+ }
35
+ };
36
+ }
37
+ //#endregion
38
+ export { createContext };
39
+
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["createEventaContext"],"sources":["../src/index.ts"],"sourcesContent":["import { onTextReceived, sendText } from \"@gd-kirie/ipc\";\nimport type { Eventa, EventContext, EventTag } from \"@moeru/eventa\";\nimport {\n and,\n createContext as createEventaContext,\n defineInboundEventa,\n defineOutboundEventa,\n EventaFlowDirection,\n matchBy,\n nanoid,\n} from \"@moeru/eventa\";\n\nexport interface KirieEventaMessage {\n id: string;\n type: EventTag<unknown, unknown>;\n payload: Eventa<unknown>;\n}\n\ninterface KirieEventaRawMessage {\n raw: {\n message: string;\n };\n}\n\ntype KirieDirectionalEvent = Eventa<unknown> & {\n _flowDirection?: EventaFlowDirection;\n};\n\nexport type KirieEventaContext = EventContext<unknown, KirieEventaRawMessage>;\n\nexport interface KirieEventaContextHandle {\n context: KirieEventaContext;\n dispose: () => void;\n}\n\nfunction createMessage(event: Eventa<unknown>): KirieEventaMessage {\n return {\n id: nanoid(),\n payload: {\n ...defineOutboundEventa(event.type),\n ...event,\n },\n type: event.id,\n };\n}\n\nexport function createContext(): KirieEventaContextHandle {\n const context = createEventaContext<unknown, KirieEventaRawMessage>();\n const offOutbound = context.on(\n and(\n matchBy((event: KirieDirectionalEvent) => {\n return event._flowDirection === EventaFlowDirection.Outbound || !event._flowDirection;\n }),\n matchBy(\"*\"),\n ),\n (event) => {\n sendText(JSON.stringify(createMessage(event)));\n },\n );\n\n const offInbound = onTextReceived((message) => {\n try {\n const parsed = JSON.parse(message) as KirieEventaMessage;\n context.emit(defineInboundEventa(parsed.type), parsed.payload.body, {\n raw: {\n message,\n },\n });\n } catch (error) {\n console.error(\"Failed to parse Kirie Eventa message:\", error);\n }\n });\n\n return {\n context,\n dispose: () => {\n offOutbound();\n offInbound();\n },\n };\n}\n"],"mappings":";;;AAmCA,SAAS,cAAc,OAA4C;CACjE,OAAO;EACL,IAAI,OAAO;EACX,SAAS;GACP,GAAG,qBAAqB,MAAM,IAAI;GAClC,GAAG;EACL;EACA,MAAM,MAAM;CACd;AACF;AAEA,SAAgB,gBAA0C;CACxD,MAAM,UAAUA,gBAAoD;CACpE,MAAM,cAAc,QAAQ,GAC1B,IACE,SAAS,UAAiC;EACxC,OAAO,MAAM,mBAAmB,oBAAoB,YAAY,CAAC,MAAM;CACzE,CAAC,GACD,QAAQ,GAAG,CACb,IACC,UAAU;EACT,SAAS,KAAK,UAAU,cAAc,KAAK,CAAC,CAAC;CAC/C,CACF;CAEA,MAAM,aAAa,gBAAgB,YAAY;EAC7C,IAAI;GACF,MAAM,SAAS,KAAK,MAAM,OAAO;GACjC,QAAQ,KAAK,oBAAoB,OAAO,IAAI,GAAG,OAAO,QAAQ,MAAM,EAClE,KAAK,EACH,QACF,EACF,CAAC;EACH,SAAS,OAAO;GACd,QAAQ,MAAM,yCAAyC,KAAK;EAC9D;CACF,CAAC;CAED,OAAO;EACL;EACA,eAAe;GACb,YAAY;GACZ,WAAW;EACb;CACF;AACF"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@gd-kirie/ipc-eventa",
3
+ "version": "0.1.2",
4
+ "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/moeru-ai/godot-kirie.git",
8
+ "directory": "packages/ipc-eventa"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "dependencies": {
22
+ "@moeru/eventa": "^1.0.0-beta.3",
23
+ "@gd-kirie/ipc": "0.1.2"
24
+ },
25
+ "devDependencies": {
26
+ "tsdown": "^0.22.2",
27
+ "typescript": "^6.0.3",
28
+ "vitest": "^4.0.15"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public",
32
+ "registry": "https://registry.npmjs.org"
33
+ },
34
+ "scripts": {
35
+ "build": "tsdown",
36
+ "test:run": "vitest run",
37
+ "typecheck": "tsc -p tsconfig.json --noEmit"
38
+ }
39
+ }