@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 +48 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
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.
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|