@agentvault/agentvault 0.19.9 → 0.19.10

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/index.js CHANGED
@@ -49053,46 +49053,67 @@ var init_channel = __esm({
49053
49053
  const channelData = data.data || data;
49054
49054
  const channelId = channelData.channel_id;
49055
49055
  const convId = channelData.conversation_id;
49056
- const myHub = this._persisted?.hubAddress || "";
49057
- const role = channelData.role || (channelData.initiator_hub_address === myHub ? "initiator" : "responder");
49058
- const peerHub = role === "initiator" ? channelData.responder_hub_address || "" : channelData.initiator_hub_address || "";
49059
- if (this._persisted && convId) {
49060
- if (!this._persisted.a2aChannels) this._persisted.a2aChannels = {};
49061
- const a2aEphemeral = await generateEphemeralKeypair();
49062
- const ephPubHex = bytesToHex(a2aEphemeral.publicKey);
49063
- const ephPrivHex = bytesToHex(a2aEphemeral.privateKey);
49064
- this._persisted.a2aChannels[channelId] = {
49065
- channelId,
49066
- hubAddress: peerHub,
49067
- conversationId: convId,
49068
- role,
49069
- pendingEphemeralPrivateKey: ephPrivHex
49070
- };
49071
- if (this._ws) {
49072
- this._ws.send(
49073
- JSON.stringify({
49074
- event: "a2a_key_exchange",
49075
- data: {
49076
- channel_id: channelId,
49077
- ephemeral_key: ephPubHex
49078
- }
49079
- })
49080
- );
49081
- console.log(
49082
- `[SecureChannel] A2A key exchange sent for channel ${channelId.slice(0, 8)}... (role=${role})`
49056
+ const existingEntry = this._persisted?.a2aChannels?.[channelId];
49057
+ if (existingEntry?.conversationId && existingEntry?.hubAddress && (existingEntry.session || existingEntry.pendingEphemeralPrivateKey)) {
49058
+ console.log(
49059
+ `[SecureChannel] A2A channel ${channelId.slice(0, 8)}... already synced (peer=${existingEntry.hubAddress}), skipping approved event`
49060
+ );
49061
+ this.emit("a2a_channel_approved", channelData);
49062
+ if (this.config.onA2AChannelReady && convId) {
49063
+ this.config.onA2AChannelReady({
49064
+ channelId,
49065
+ peerHubAddress: existingEntry.hubAddress,
49066
+ role: existingEntry.role || "responder",
49067
+ conversationId: existingEntry.conversationId
49068
+ });
49069
+ }
49070
+ } else {
49071
+ const myHub = this._persisted?.hubAddress || "";
49072
+ const role = channelData.role || (myHub && channelData.initiator_hub_address === myHub ? "initiator" : "responder");
49073
+ const peerHub = role === "initiator" ? channelData.responder_hub_address || "" : channelData.initiator_hub_address || "";
49074
+ if (!myHub) {
49075
+ console.warn(
49076
+ `[SecureChannel] WARNING: hubAddress not set during a2a_channel_approved \u2014 peer address may be wrong (role=${role} peer=${peerHub})`
49083
49077
  );
49084
49078
  }
49085
- await this._persistState();
49086
- }
49087
- this.emit("a2a_channel_approved", channelData);
49088
- if (this.config.onA2AChannelReady && convId) {
49089
- this.config.onA2AChannelReady({
49090
- channelId,
49091
- peerHubAddress: peerHub,
49092
- role,
49093
- conversationId: convId,
49094
- topic: channelData.topic || void 0
49095
- });
49079
+ if (this._persisted && convId) {
49080
+ if (!this._persisted.a2aChannels) this._persisted.a2aChannels = {};
49081
+ const a2aEphemeral = await generateEphemeralKeypair();
49082
+ const ephPubHex = bytesToHex(a2aEphemeral.publicKey);
49083
+ const ephPrivHex = bytesToHex(a2aEphemeral.privateKey);
49084
+ this._persisted.a2aChannels[channelId] = {
49085
+ channelId,
49086
+ hubAddress: peerHub,
49087
+ conversationId: convId,
49088
+ role,
49089
+ pendingEphemeralPrivateKey: ephPrivHex
49090
+ };
49091
+ if (this._ws) {
49092
+ this._ws.send(
49093
+ JSON.stringify({
49094
+ event: "a2a_key_exchange",
49095
+ data: {
49096
+ channel_id: channelId,
49097
+ ephemeral_key: ephPubHex
49098
+ }
49099
+ })
49100
+ );
49101
+ console.log(
49102
+ `[SecureChannel] A2A key exchange sent for channel ${channelId.slice(0, 8)}... (role=${role})`
49103
+ );
49104
+ }
49105
+ await this._persistState();
49106
+ }
49107
+ this.emit("a2a_channel_approved", channelData);
49108
+ if (this.config.onA2AChannelReady && convId) {
49109
+ this.config.onA2AChannelReady({
49110
+ channelId,
49111
+ peerHubAddress: peerHub,
49112
+ role,
49113
+ conversationId: convId,
49114
+ topic: channelData.topic || void 0
49115
+ });
49116
+ }
49096
49117
  }
49097
49118
  }
49098
49119
  if (data.event === "a2a_channel_activated") {