Skip to content

Commit 2870c2f

Browse files
committed
Merge remote-tracking branch 'origin' into fix/acl-syn
* origin: fix(interval-discovery)!: now use a != topic in order not to have many invalid operation logs (#589) feat!: restrict set key access (#582) fix: log_config pass down to disco interval (#590) feat(object): drpobject become generic (#565)
2 parents 55b68b3 + cc3b63b commit 2870c2f

35 files changed

+696
-690
lines changed

examples/canvas/src/index.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { DRP_DISCOVERY_TOPIC } from "@ts-drp/types";
55
import { Canvas } from "./objects/canvas";
66

77
const node = new DRPNode();
8-
let drpObject: DRPObject;
9-
let canvasDRP: Canvas;
8+
let drpObject: DRPObject<Canvas>;
109
let peers: string[] = [];
1110
let discoveryPeers: string[] = [];
1211
let objectPeers: string[] = [];
@@ -22,8 +21,8 @@ const render = (): void => {
2221
object_element.innerHTML = `[${objectPeers.join(", ")}]`;
2322
(<HTMLSpanElement>document.getElementById("canvasId")).innerText = drpObject?.id;
2423

25-
if (!canvasDRP) return;
26-
const canvas = canvasDRP.canvas;
24+
if (!drpObject.drp) return;
25+
const canvas = drpObject.drp.canvas;
2726
for (let x = 0; x < canvas.length; x++) {
2827
for (let y = 0; y < canvas[x].length; y++) {
2928
const pixel = document.getElementById(`${x}-${y}`);
@@ -38,8 +37,8 @@ const random_int = (max: number): number => Math.floor(Math.random() * max);
3837
function paint_pixel(pixel: HTMLDivElement): void {
3938
const [x, y] = pixel.id.split("-").map((v) => Number.parseInt(v, 10));
4039
const painting: [number, number, number] = [random_int(256), random_int(256), random_int(256)];
41-
canvasDRP.paint([x, y], painting);
42-
const [r, g, b] = canvasDRP.query_pixel(x, y).color();
40+
drpObject.drp?.paint([x, y], painting);
41+
const [r, g, b] = drpObject.drp?.query_pixel(x, y).color() ?? [0, 0, 0];
4342
pixel.style.backgroundColor = `rgb(${r}, ${g}, ${b})`;
4443
}
4544

@@ -85,7 +84,6 @@ async function init(): Promise<void> {
8584
const create_button = <HTMLButtonElement>document.getElementById("create");
8685
const create = async (): Promise<void> => {
8786
drpObject = await node.createObject({ drp: new Canvas(5, 10) });
88-
canvasDRP = drpObject.drp as Canvas;
8987

9088
createConnectHandlers();
9189
render();
@@ -101,7 +99,6 @@ async function init(): Promise<void> {
10199
id: drpId,
102100
drp: new Canvas(5, 10),
103101
});
104-
canvasDRP = drpObject.drp as Canvas;
105102

106103
createConnectHandlers();
107104
render();

examples/canvas/tsconfig.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@
1010
"esModuleInterop": true,
1111
"skipLibCheck": true,
1212
"forceConsistentCasingInFileNames": true
13-
}
13+
},
14+
"exclude": [
15+
"node_modules",
16+
"dist"
17+
]
1418
}

examples/chat/src/index.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { DRP_DISCOVERY_TOPIC } from "@ts-drp/types";
55
import { Chat } from "./objects/chat";
66

77
const node = new DRPNode();
8-
let drpObject: DRPObject;
9-
let chatDRP: Chat;
8+
let drpObject: DRPObject<Chat>;
109
let peers: string[] = [];
1110
let discoveryPeers: string[] = [];
1211
let objectPeers: string[] = [];
@@ -25,8 +24,8 @@ const render = (): void => {
2524
const element_objectPeers = <HTMLDivElement>document.getElementById("objectPeers");
2625
element_objectPeers.innerHTML = `[${objectPeers.join(", ")}]`;
2726

28-
if (!chatDRP) return;
29-
const chat = chatDRP.query_messages();
27+
if (!drpObject.drp) return;
28+
const chat = drpObject.drp.query_messages();
3029
const element_chat = <HTMLDivElement>document.getElementById("chat");
3130
element_chat.innerHTML = "";
3231

@@ -47,13 +46,13 @@ const render = (): void => {
4746

4847
function sendMessage(message: string): void {
4948
const timestamp: string = Date.now().toString();
50-
if (!chatDRP) {
49+
if (!drpObject.drp) {
5150
console.error("Chat DRP not initialized");
5251
alert("Please create or join a chat room first");
5352
return;
5453
}
5554

56-
chatDRP.addMessage(timestamp, message, node.networkNode.peerId);
55+
drpObject.drp.addMessage(timestamp, message, node.networkNode.peerId);
5756
render();
5857
}
5958

@@ -86,7 +85,6 @@ async function main(): Promise<void> {
8685

8786
const create = async (): Promise<void> => {
8887
drpObject = await node.createObject({ drp: new Chat() });
89-
chatDRP = drpObject.drp as Chat;
9088
createConnectHandlers();
9189
render();
9290
};
@@ -101,7 +99,6 @@ async function main(): Promise<void> {
10199
}
102100

103101
drpObject = await node.createObject({ id: objectId, drp: new Chat() });
104-
chatDRP = drpObject.drp as Chat;
105102
createConnectHandlers();
106103
render();
107104
};

examples/chat/tsconfig.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@
1010
"esModuleInterop": true,
1111
"skipLibCheck": true,
1212
"forceConsistentCasingInFileNames": true
13-
}
13+
},
14+
"exclude": [
15+
"node_modules",
16+
"dist"
17+
]
1418
}

examples/grid/src/index.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,27 @@ export function getNetworkConfigFromEnv(): DRPNodeConfig {
4545
}
4646

4747
function addUser(): void {
48-
if (!gridState.gridDRP) {
48+
if (!gridState.drpObject?.drp) {
4949
console.error("Grid DRP not initialized");
5050
alert("Please create or join a grid first");
5151
return;
5252
}
5353

54-
gridState.gridDRP.addUser(
54+
gridState.drpObject.drp.addUser(
5555
gridState.node.networkNode.peerId,
5656
getColorForPeerId(gridState.node.networkNode.peerId)
5757
);
5858
render();
5959
}
6060

6161
function moveUser(direction: string): void {
62-
if (!gridState.gridDRP) {
62+
if (!gridState.drpObject?.drp) {
6363
console.error("Grid DRP not initialized");
6464
alert("Please create or join a grid first");
6565
return;
6666
}
6767

68-
gridState.gridDRP?.moveUser(gridState.node.networkNode.peerId, direction);
68+
gridState.drpObject.drp.moveUser(gridState.node.networkNode.peerId, direction);
6969
render();
7070
}
7171

@@ -96,7 +96,6 @@ function run(metrics?: IMetrics): void {
9696
drp: new Grid(),
9797
metrics,
9898
});
99-
gridState.gridDRP = gridState.drpObject.drp as Grid;
10099
createConnectHandlers();
101100
addUser();
102101
render();
@@ -120,7 +119,6 @@ function run(metrics?: IMetrics): void {
120119
drp: new Grid(),
121120
metrics,
122121
});
123-
gridState.gridDRP = gridState.drpObject.drp as Grid;
124122
createConnectHandlers();
125123
addUser();
126124
render();

examples/grid/src/render.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export const render = (): void => {
131131
}
132132

133133
if (!gridState.drpObject) return;
134-
const users = gridState.gridDRP?.query_users();
134+
const users = gridState.drpObject.drp?.query_users();
135135
const element_grid = <HTMLDivElement>document.getElementById("grid");
136136
element_grid.innerHTML = "";
137137

@@ -169,7 +169,7 @@ export const render = (): void => {
169169
if (!users) return;
170170
for (const userColorString of users) {
171171
const [id, color] = userColorString.split(":");
172-
const position = gridState.gridDRP?.query_userPosition(userColorString);
172+
const position = gridState.drpObject.drp?.query_userPosition(userColorString);
173173

174174
if (position) {
175175
const div = document.createElement("div");

examples/grid/src/state.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { type Grid } from "./objects/grid";
55

66
interface GridState {
77
node: DRPNode;
8-
drpObject: IDRPObject | undefined;
9-
gridDRP: Grid | undefined;
8+
drpObject: IDRPObject<Grid> | undefined;
109
peers: string[];
1110
discoveryPeers: string[];
1211
objectPeers: string[];
@@ -15,7 +14,6 @@ interface GridState {
1514
export const gridState: GridState = {
1615
node: new DRPNode(),
1716
drpObject: undefined,
18-
gridDRP: undefined,
1917
peers: [],
2018
discoveryPeers: [],
2119
objectPeers: [],

examples/grid/tsconfig.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@
1010
"esModuleInterop": true,
1111
"skipLibCheck": true,
1212
"forceConsistentCasingInFileNames": true
13-
}
13+
},
14+
"exclude": [
15+
"node_modules",
16+
"dist"
17+
]
1418
}

packages/interval-discovery/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ sequenceDiagram
3939
4040
alt No peers found for objectId
4141
Note over Node_A_DRPIntervalDiscovery: Start search timer
42-
Node_A_DRPIntervalDiscovery->>Node_A_NetworkNode: broadcastMessage(DRP_DISCOVERY_TOPIC)
42+
Node_A_DRPIntervalDiscovery->>Node_A_NetworkNode: broadcastMessage(DRP_INTERVAL_DISCOVERY_TOPIC)
4343
Node_A_NetworkNode-->>Node_B_NetworkNode: DRPDiscoveryRequest message
4444
4545
alt Node B has matching objectId
@@ -88,7 +88,7 @@ interface DRPIntervalDiscoveryOptions {
8888

8989
2. **Peer Discovery**
9090
- Broadcasts discovery messages when no peers are found
91-
- Uses `DRP_DISCOVERY_TOPIC` for discovery messages
91+
- Uses `DRP_INTERVAL_DISCOVERY_TOPIC` for discovery messages
9292
- Includes object ID for targeted peer matching
9393

9494
3. **Connection Management**

packages/interval-discovery/src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { IntervalRunner } from "@ts-drp/interval-runner";
22
import { Logger } from "@ts-drp/logger";
33
import {
4-
DRP_INTERVAL_TOPIC,
4+
DRP_INTERVAL_DISCOVERY_TOPIC,
55
DRPDiscovery as DRPDiscoveryRequest,
66
DRPDiscoveryResponse,
77
type DRPIntervalDiscoveryOptions,
@@ -106,7 +106,7 @@ export class DRPIntervalDiscovery implements IDRPIntervalDiscovery {
106106
});
107107

108108
this._logger.info("Broadcasting discovery request");
109-
await this.networkNode.broadcastMessage(DRP_INTERVAL_TOPIC, message);
109+
await this.networkNode.broadcastMessage(DRP_INTERVAL_DISCOVERY_TOPIC, message);
110110
} catch (error) {
111111
this._logger.error("Error broadcasting discovery request:", error);
112112
}

packages/network/src/node.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { WebRTC } from "@multiformats/multiaddr-matcher";
3535
import { Logger } from "@ts-drp/logger";
3636
import {
3737
DRP_DISCOVERY_TOPIC,
38-
DRP_INTERVAL_TOPIC,
38+
DRP_INTERVAL_DISCOVERY_TOPIC,
3939
type DRPNetworkNode as DRPNetworkNodeInterface,
4040
type LoggerOptions,
4141
Message,
@@ -240,7 +240,7 @@ export class DRPNetworkNode implements DRPNetworkNodeInterface {
240240

241241
// needded as I've disabled the pubsubPeerDiscovery
242242
this._pubsub?.subscribe(DRP_DISCOVERY_TOPIC);
243-
this._pubsub?.subscribe(DRP_INTERVAL_TOPIC);
243+
this._pubsub?.subscribe(DRP_INTERVAL_DISCOVERY_TOPIC);
244244
}
245245

246246
async stop(): Promise<void> {

0 commit comments

Comments
 (0)