@rookdaemon/agora 0.2.0 → 0.2.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/dist/config.d.ts CHANGED
@@ -16,15 +16,20 @@ export interface AgoraPeerConfig {
16
16
  token: string;
17
17
  name?: string;
18
18
  }
19
+ /**
20
+ * Identity with optional display name (e.g. for relay registration).
21
+ */
22
+ export interface AgoraIdentity {
23
+ publicKey: string;
24
+ privateKey: string;
25
+ name?: string;
26
+ }
19
27
  /**
20
28
  * Canonical Agora configuration shape.
21
29
  * Use loadAgoraConfig() to load from file with normalized relay.
22
30
  */
23
31
  export interface AgoraConfig {
24
- identity: {
25
- publicKey: string;
26
- privateKey: string;
27
- };
32
+ identity: AgoraIdentity;
28
33
  peers: Record<string, AgoraPeerConfig>;
29
34
  relay?: RelayConfig;
30
35
  }
@@ -33,7 +38,7 @@ export interface AgoraConfig {
33
38
  */
34
39
  export declare function getDefaultConfigPath(): string;
35
40
  /**
36
- * Load and normalize Agora configuration from a JSON file.
41
+ * Load and normalize Agora configuration from a JSON file (sync).
37
42
  * Supports relay as string (backward compat) or object { url?, autoConnect?, name?, reconnectMaxMs? }.
38
43
  *
39
44
  * @param path - Config file path; defaults to getDefaultConfigPath()
@@ -41,4 +46,12 @@ export declare function getDefaultConfigPath(): string;
41
46
  * @throws Error if file doesn't exist or config is invalid
42
47
  */
43
48
  export declare function loadAgoraConfig(path?: string): AgoraConfig;
49
+ /**
50
+ * Load and normalize Agora configuration from a JSON file (async).
51
+ *
52
+ * @param path - Config file path; defaults to getDefaultConfigPath()
53
+ * @returns Normalized AgoraConfig
54
+ * @throws Error if file doesn't exist or config is invalid
55
+ */
56
+ export declare function loadAgoraConfigAsync(path?: string): Promise<AgoraConfig>;
44
57
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAwD1D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAsDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAgB1D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsB9E"}
package/dist/config.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { readFileSync, existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
2
3
  import { resolve } from 'node:path';
3
4
  import { homedir } from 'node:os';
4
5
  /**
@@ -11,30 +12,18 @@ export function getDefaultConfigPath() {
11
12
  return resolve(homedir(), '.config', 'agora', 'config.json');
12
13
  }
13
14
  /**
14
- * Load and normalize Agora configuration from a JSON file.
15
- * Supports relay as string (backward compat) or object { url?, autoConnect?, name?, reconnectMaxMs? }.
16
- *
17
- * @param path - Config file path; defaults to getDefaultConfigPath()
18
- * @returns Normalized AgoraConfig
19
- * @throws Error if file doesn't exist or config is invalid
15
+ * Parse and normalize config from a JSON object (shared by sync and async loaders).
20
16
  */
21
- export function loadAgoraConfig(path) {
22
- const configPath = path ?? getDefaultConfigPath();
23
- if (!existsSync(configPath)) {
24
- throw new Error(`Config file not found at ${configPath}. Run 'npx @rookdaemon/agora init' first.`);
25
- }
26
- const content = readFileSync(configPath, 'utf-8');
27
- let config;
28
- try {
29
- config = JSON.parse(content);
30
- }
31
- catch {
32
- throw new Error(`Invalid JSON in config file: ${configPath}`);
33
- }
34
- const identity = config.identity;
35
- if (!identity?.publicKey || !identity?.privateKey) {
17
+ function parseConfig(config) {
18
+ const rawIdentity = config.identity;
19
+ if (!rawIdentity?.publicKey || !rawIdentity?.privateKey) {
36
20
  throw new Error('Invalid config: missing identity.publicKey or identity.privateKey');
37
21
  }
22
+ const identity = {
23
+ publicKey: rawIdentity.publicKey,
24
+ privateKey: rawIdentity.privateKey,
25
+ name: typeof rawIdentity.name === 'string' ? rawIdentity.name : undefined,
26
+ };
38
27
  const peers = {};
39
28
  if (config.peers && typeof config.peers === 'object') {
40
29
  for (const [name, entry] of Object.entries(config.peers)) {
@@ -66,9 +55,61 @@ export function loadAgoraConfig(path) {
66
55
  }
67
56
  }
68
57
  return {
69
- identity: { publicKey: identity.publicKey, privateKey: identity.privateKey },
58
+ identity,
70
59
  peers,
71
60
  ...(relay ? { relay } : {}),
72
61
  };
73
62
  }
63
+ /**
64
+ * Load and normalize Agora configuration from a JSON file (sync).
65
+ * Supports relay as string (backward compat) or object { url?, autoConnect?, name?, reconnectMaxMs? }.
66
+ *
67
+ * @param path - Config file path; defaults to getDefaultConfigPath()
68
+ * @returns Normalized AgoraConfig
69
+ * @throws Error if file doesn't exist or config is invalid
70
+ */
71
+ export function loadAgoraConfig(path) {
72
+ const configPath = path ?? getDefaultConfigPath();
73
+ if (!existsSync(configPath)) {
74
+ throw new Error(`Config file not found at ${configPath}. Run 'npx @rookdaemon/agora init' first.`);
75
+ }
76
+ const content = readFileSync(configPath, 'utf-8');
77
+ let config;
78
+ try {
79
+ config = JSON.parse(content);
80
+ }
81
+ catch {
82
+ throw new Error(`Invalid JSON in config file: ${configPath}`);
83
+ }
84
+ return parseConfig(config);
85
+ }
86
+ /**
87
+ * Load and normalize Agora configuration from a JSON file (async).
88
+ *
89
+ * @param path - Config file path; defaults to getDefaultConfigPath()
90
+ * @returns Normalized AgoraConfig
91
+ * @throws Error if file doesn't exist or config is invalid
92
+ */
93
+ export async function loadAgoraConfigAsync(path) {
94
+ const configPath = path ?? getDefaultConfigPath();
95
+ let content;
96
+ try {
97
+ content = await readFile(configPath, 'utf-8');
98
+ }
99
+ catch (err) {
100
+ const code = err && typeof err === 'object' && 'code' in err ? err.code : undefined;
101
+ if (code === 'ENOENT') {
102
+ throw new Error(`Config file not found at ${configPath}. Run 'npx @rookdaemon/agora init' first.`);
103
+ }
104
+ throw err;
105
+ }
106
+ let config;
107
+ try {
108
+ config = JSON.parse(content);
109
+ }
110
+ catch {
111
+ throw new Error(`Invalid JSON in config file: ${configPath}`);
112
+ }
113
+ return parseConfig(config);
114
+ }
74
115
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export * from './config.js';
13
13
  export * from './relay/server.js';
14
14
  export * from './relay/client.js';
15
15
  export * from './relay/types.js';
16
+ export * from './utils.js';
17
+ export * from './service.js';
16
18
  export * from './discovery/peer-discovery.js';
17
19
  export * from './discovery/bootstrap.js';
18
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,8 @@ export * from './config.js';
13
13
  export * from './relay/server.js';
14
14
  export * from './relay/client.js';
15
15
  export * from './relay/types.js';
16
+ export * from './utils.js';
17
+ export * from './service.js';
16
18
  export * from './discovery/peer-discovery.js';
17
19
  export * from './discovery/bootstrap.js';
18
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,82 @@
1
+ import type { AgoraIdentity, RelayConfig } from './config.js';
2
+ import type { Envelope } from './message/envelope.js';
3
+ import type { MessageType } from './message/envelope.js';
4
+ import type { PeerConfig } from './transport/http.js';
5
+ /**
6
+ * Service config: identity, peers keyed by name, optional relay.
7
+ */
8
+ export interface AgoraServiceConfig {
9
+ identity: AgoraIdentity;
10
+ peers: Map<string, PeerConfig>;
11
+ relay?: RelayConfig;
12
+ }
13
+ export interface SendMessageOptions {
14
+ peerName: string;
15
+ type: MessageType;
16
+ payload: unknown;
17
+ inReplyTo?: string;
18
+ }
19
+ export interface SendMessageResult {
20
+ ok: boolean;
21
+ status: number;
22
+ error?: string;
23
+ }
24
+ export interface DecodeInboundResult {
25
+ ok: boolean;
26
+ envelope?: Envelope;
27
+ reason?: string;
28
+ }
29
+ export type RelayMessageHandler = (envelope: Envelope) => void;
30
+ export interface Logger {
31
+ debug(message: string): void;
32
+ }
33
+ export interface RelayClientLike {
34
+ connect(): Promise<void>;
35
+ disconnect(): void;
36
+ connected(): boolean;
37
+ on(event: 'message', handler: (envelope: Envelope, from: string, fromName?: string) => void): void;
38
+ on(event: 'error', handler: (error: Error) => void): void;
39
+ }
40
+ export interface RelayClientFactory {
41
+ (opts: {
42
+ relayUrl: string;
43
+ publicKey: string;
44
+ privateKey: string;
45
+ name?: string;
46
+ pingInterval: number;
47
+ maxReconnectDelay: number;
48
+ }): RelayClientLike;
49
+ }
50
+ /**
51
+ * High-level Agora service: send by peer name, decode inbound, relay lifecycle.
52
+ */
53
+ export declare class AgoraService {
54
+ private config;
55
+ private relayClient;
56
+ private relayMessageHandler;
57
+ private logger;
58
+ private relayClientFactory;
59
+ constructor(config: AgoraServiceConfig, logger?: Logger, relayClientFactory?: RelayClientFactory);
60
+ /**
61
+ * Send a signed message to a named peer.
62
+ */
63
+ sendMessage(options: SendMessageOptions): Promise<SendMessageResult>;
64
+ /**
65
+ * Decode and verify an inbound envelope from a webhook message.
66
+ */
67
+ decodeInbound(message: string): Promise<DecodeInboundResult>;
68
+ getPeers(): string[];
69
+ getPeerConfig(name: string): PeerConfig | undefined;
70
+ /**
71
+ * Connect to the relay server.
72
+ */
73
+ connectRelay(url: string): Promise<void>;
74
+ setRelayMessageHandler(handler: RelayMessageHandler): void;
75
+ disconnectRelay(): Promise<void>;
76
+ isRelayConnected(): boolean;
77
+ /**
78
+ * Load Agora configuration and return service config (peers as Map).
79
+ */
80
+ static loadConfig(path?: string): Promise<AgoraServiceConfig>;
81
+ }
82
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { getDefaultConfigPath, loadAgoraConfigAsync } from './config.js';
2
+ import { RelayClient } from './relay/client.js';
3
+ import { decodeInboundEnvelope, sendToPeer } from './transport/http.js';
4
+ /**
5
+ * High-level Agora service: send by peer name, decode inbound, relay lifecycle.
6
+ */
7
+ export class AgoraService {
8
+ config;
9
+ relayClient = null;
10
+ relayMessageHandler = null;
11
+ logger;
12
+ relayClientFactory;
13
+ constructor(config, logger, relayClientFactory) {
14
+ this.config = config;
15
+ this.logger = logger ?? null;
16
+ this.relayClientFactory = relayClientFactory ?? null;
17
+ }
18
+ /**
19
+ * Send a signed message to a named peer.
20
+ */
21
+ async sendMessage(options) {
22
+ const peer = this.config.peers.get(options.peerName);
23
+ if (!peer) {
24
+ return {
25
+ ok: false,
26
+ status: 0,
27
+ error: `Unknown peer: ${options.peerName}`,
28
+ };
29
+ }
30
+ const transportConfig = {
31
+ identity: {
32
+ publicKey: this.config.identity.publicKey,
33
+ privateKey: this.config.identity.privateKey,
34
+ },
35
+ peers: new Map([[peer.publicKey, peer]]),
36
+ };
37
+ return sendToPeer(transportConfig, peer.publicKey, options.type, options.payload, options.inReplyTo);
38
+ }
39
+ /**
40
+ * Decode and verify an inbound envelope from a webhook message.
41
+ */
42
+ async decodeInbound(message) {
43
+ const peersByPubKey = new Map();
44
+ for (const peer of this.config.peers.values()) {
45
+ peersByPubKey.set(peer.publicKey, peer);
46
+ }
47
+ const result = decodeInboundEnvelope(message, peersByPubKey);
48
+ if (result.ok) {
49
+ return { ok: true, envelope: result.envelope };
50
+ }
51
+ return { ok: false, reason: result.reason };
52
+ }
53
+ getPeers() {
54
+ return Array.from(this.config.peers.keys());
55
+ }
56
+ getPeerConfig(name) {
57
+ return this.config.peers.get(name);
58
+ }
59
+ /**
60
+ * Connect to the relay server.
61
+ */
62
+ async connectRelay(url) {
63
+ if (this.relayClient) {
64
+ return;
65
+ }
66
+ const maxReconnectDelay = this.config.relay?.reconnectMaxMs ?? 300000;
67
+ const name = this.config.identity.name ?? this.config.relay?.name;
68
+ const opts = {
69
+ relayUrl: url,
70
+ publicKey: this.config.identity.publicKey,
71
+ privateKey: this.config.identity.privateKey,
72
+ name,
73
+ pingInterval: 30000,
74
+ maxReconnectDelay,
75
+ };
76
+ if (this.relayClientFactory) {
77
+ this.relayClient = this.relayClientFactory(opts);
78
+ }
79
+ else {
80
+ this.relayClient = new RelayClient(opts);
81
+ }
82
+ this.relayClient.on('error', (error) => {
83
+ this.logger?.debug(`Agora relay error: ${error.message}`);
84
+ });
85
+ this.relayClient.on('message', (envelope) => {
86
+ if (this.relayMessageHandler) {
87
+ this.relayMessageHandler(envelope);
88
+ }
89
+ });
90
+ try {
91
+ await this.relayClient.connect();
92
+ }
93
+ catch (error) {
94
+ const message = error instanceof Error ? error.message : String(error);
95
+ this.logger?.debug(`Agora relay connect failed (${url}): ${message}`);
96
+ this.relayClient = null;
97
+ }
98
+ }
99
+ setRelayMessageHandler(handler) {
100
+ this.relayMessageHandler = handler;
101
+ }
102
+ async disconnectRelay() {
103
+ if (this.relayClient) {
104
+ this.relayClient.disconnect();
105
+ this.relayClient = null;
106
+ }
107
+ }
108
+ isRelayConnected() {
109
+ return this.relayClient?.connected() ?? false;
110
+ }
111
+ /**
112
+ * Load Agora configuration and return service config (peers as Map).
113
+ */
114
+ static async loadConfig(path) {
115
+ const configPath = path ?? getDefaultConfigPath();
116
+ const loaded = await loadAgoraConfigAsync(configPath);
117
+ const peers = new Map();
118
+ for (const [name, p] of Object.entries(loaded.peers)) {
119
+ peers.set(name, {
120
+ publicKey: p.publicKey,
121
+ url: p.url,
122
+ token: p.token,
123
+ });
124
+ }
125
+ return {
126
+ identity: loaded.identity,
127
+ peers,
128
+ relay: loaded.relay,
129
+ };
130
+ }
131
+ }
132
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Get a short display version of a public key using the last 8 characters.
3
+ * Ed25519 public keys all share the same OID prefix, so the last 8 characters
4
+ * are more distinguishable than the first 8.
5
+ *
6
+ * @param publicKey - The full public key hex string
7
+ * @returns "..." followed by the last 8 characters of the key
8
+ */
9
+ export declare function shortKey(publicKey: string): string;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElD"}
package/dist/utils.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Get a short display version of a public key using the last 8 characters.
3
+ * Ed25519 public keys all share the same OID prefix, so the last 8 characters
4
+ * are more distinguishable than the first 8.
5
+ *
6
+ * @param publicKey - The full public key hex string
7
+ * @returns "..." followed by the last 8 characters of the key
8
+ */
9
+ export function shortKey(publicKey) {
10
+ return "..." + publicKey.slice(-8);
11
+ }
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rookdaemon/agora",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "A coordination network for AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",