@moltzap/protocol 2026.328.2 → 2026.330.0
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/phone-hash.d.ts +10 -0
- package/dist/phone-hash.d.ts.map +1 -0
- package/dist/phone-hash.js +17 -0
- package/dist/phone-hash.js.map +1 -0
- package/dist/test-client.d.ts +34 -0
- package/dist/test-client.d.ts.map +1 -0
- package/dist/test-client.js +176 -0
- package/dist/test-client.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +21 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure phone has E.164 '+' prefix.
|
|
3
|
+
* GoTrue strips '+' from phone numbers in API responses.
|
|
4
|
+
*/
|
|
5
|
+
export declare function normalizeE164(phone: string): string;
|
|
6
|
+
/** SHA-256 hash of an E.164 phone number for privacy-preserving contact discovery. */
|
|
7
|
+
export declare function hashPhone(e164Phone: string): string;
|
|
8
|
+
/** Validates that a string is a 64-character lowercase hex SHA-256 hash. */
|
|
9
|
+
export declare function isValidPhoneHash(hash: string): boolean;
|
|
10
|
+
//# sourceMappingURL=phone-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-hash.d.ts","sourceRoot":"","sources":["../src/phone-hash.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Ensure phone has E.164 '+' prefix.
|
|
4
|
+
* GoTrue strips '+' from phone numbers in API responses.
|
|
5
|
+
*/
|
|
6
|
+
export function normalizeE164(phone) {
|
|
7
|
+
return phone.startsWith("+") ? phone : `+${phone}`;
|
|
8
|
+
}
|
|
9
|
+
/** SHA-256 hash of an E.164 phone number for privacy-preserving contact discovery. */
|
|
10
|
+
export function hashPhone(e164Phone) {
|
|
11
|
+
return createHash("sha256").update(e164Phone).digest("hex");
|
|
12
|
+
}
|
|
13
|
+
/** Validates that a string is a 64-character lowercase hex SHA-256 hash. */
|
|
14
|
+
export function isValidPhoneHash(hash) {
|
|
15
|
+
return /^[0-9a-f]{64}$/.test(hash);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=phone-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-hash.js","sourceRoot":"","sources":["../src/phone-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { EventFrame } from "./schema/frames.js";
|
|
2
|
+
export declare class MoltZapTestClient {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
private wsUrl;
|
|
5
|
+
private ws;
|
|
6
|
+
private pending;
|
|
7
|
+
private events;
|
|
8
|
+
private eventWaiters;
|
|
9
|
+
constructor(baseUrl: string, wsUrl: string);
|
|
10
|
+
/** Register a new agent via HTTP. */
|
|
11
|
+
register(name: string, opts?: {
|
|
12
|
+
description?: string;
|
|
13
|
+
inviteCode?: string;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
agentId: string;
|
|
16
|
+
apiKey: string;
|
|
17
|
+
claimUrl: string;
|
|
18
|
+
claimToken: string;
|
|
19
|
+
}>;
|
|
20
|
+
/** Open a WebSocket and send auth/connect with an API key. */
|
|
21
|
+
connect(apiKey: string): Promise<unknown>;
|
|
22
|
+
/** Open a WebSocket and send auth/connect with a JWT. */
|
|
23
|
+
connectJwt(jwt: string): Promise<unknown>;
|
|
24
|
+
private connectWithParams;
|
|
25
|
+
/** Send a JSON-RPC request and wait for the response. */
|
|
26
|
+
rpc(method: string, params?: unknown): Promise<unknown>;
|
|
27
|
+
/** Wait for a specific event type. */
|
|
28
|
+
waitForEvent(eventName: string, timeoutMs?: number): Promise<EventFrame>;
|
|
29
|
+
/** Return all collected events and clear the buffer. */
|
|
30
|
+
drainEvents(): EventFrame[];
|
|
31
|
+
/** Close the WebSocket connection. */
|
|
32
|
+
close(): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=test-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-client.d.ts","sourceRoot":"","sources":["../src/test-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,oBAAoB,CAAC;AAI5B,qBAAa,iBAAiB;IAiB1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IAjBf,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAMX;IACJ,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAIZ;gBAGE,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;IAGvB,qCAAqC;IAC/B,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAqBF,8DAA8D;IACxD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/C,yDAAyD;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAQjC,iBAAiB;IA2D/B,yDAAyD;IACnD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA2C7D,sCAAsC;IAChC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B5E,wDAAwD;IACxD,WAAW,IAAI,UAAU,EAAE;IAM3B,sCAAsC;IACtC,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
let requestCounter = 0;
|
|
3
|
+
export class MoltZapTestClient {
|
|
4
|
+
baseUrl;
|
|
5
|
+
wsUrl;
|
|
6
|
+
ws = null;
|
|
7
|
+
pending = new Map();
|
|
8
|
+
events = [];
|
|
9
|
+
eventWaiters = [];
|
|
10
|
+
constructor(baseUrl, wsUrl) {
|
|
11
|
+
this.baseUrl = baseUrl;
|
|
12
|
+
this.wsUrl = wsUrl;
|
|
13
|
+
}
|
|
14
|
+
/** Register a new agent via HTTP. */
|
|
15
|
+
async register(name, opts) {
|
|
16
|
+
const body = { name };
|
|
17
|
+
if (opts?.description)
|
|
18
|
+
body.description = opts.description;
|
|
19
|
+
if (opts?.inviteCode)
|
|
20
|
+
body.inviteCode = opts.inviteCode;
|
|
21
|
+
const res = await fetch(`${this.baseUrl}/api/v1/auth/register`, {
|
|
22
|
+
method: "POST",
|
|
23
|
+
headers: { "Content-Type": "application/json" },
|
|
24
|
+
body: JSON.stringify(body),
|
|
25
|
+
});
|
|
26
|
+
if (!res.ok) {
|
|
27
|
+
throw new Error(`Register failed: ${res.status} ${await res.text()}`);
|
|
28
|
+
}
|
|
29
|
+
return res.json();
|
|
30
|
+
}
|
|
31
|
+
/** Open a WebSocket and send auth/connect with an API key. */
|
|
32
|
+
async connect(apiKey) {
|
|
33
|
+
return this.connectWithParams({
|
|
34
|
+
agentKey: apiKey,
|
|
35
|
+
minProtocol: "0.1.0",
|
|
36
|
+
maxProtocol: "0.1.0",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Open a WebSocket and send auth/connect with a JWT. */
|
|
40
|
+
async connectJwt(jwt) {
|
|
41
|
+
return this.connectWithParams({
|
|
42
|
+
jwt,
|
|
43
|
+
minProtocol: "0.1.0",
|
|
44
|
+
maxProtocol: "0.1.0",
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async connectWithParams(params) {
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
const ws = new WebSocket(this.wsUrl);
|
|
50
|
+
ws.on("open", async () => {
|
|
51
|
+
this.ws = ws;
|
|
52
|
+
try {
|
|
53
|
+
const result = await this.rpc("auth/connect", params);
|
|
54
|
+
resolve(result);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
reject(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
ws.on("message", (data) => {
|
|
61
|
+
const msg = JSON.parse(data.toString());
|
|
62
|
+
if (msg.type === "response" && msg.id) {
|
|
63
|
+
const waiter = this.pending.get(msg.id);
|
|
64
|
+
if (waiter) {
|
|
65
|
+
this.pending.delete(msg.id);
|
|
66
|
+
waiter.resolve(msg);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (msg.type === "event") {
|
|
70
|
+
const event = msg;
|
|
71
|
+
// Deliver to first matching waiter, or buffer if none
|
|
72
|
+
let consumed = false;
|
|
73
|
+
for (let i = this.eventWaiters.length - 1; i >= 0; i--) {
|
|
74
|
+
if (this.eventWaiters[i].eventName === event.event) {
|
|
75
|
+
this.eventWaiters[i].resolve(event);
|
|
76
|
+
this.eventWaiters.splice(i, 1);
|
|
77
|
+
consumed = true;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!consumed) {
|
|
82
|
+
this.events.push(event);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
ws.on("error", (err) => {
|
|
87
|
+
reject(err);
|
|
88
|
+
});
|
|
89
|
+
ws.on("close", () => {
|
|
90
|
+
// Reject all pending requests
|
|
91
|
+
for (const [, waiter] of this.pending) {
|
|
92
|
+
waiter.reject(new Error("WebSocket closed"));
|
|
93
|
+
}
|
|
94
|
+
this.pending.clear();
|
|
95
|
+
this.ws = null;
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/** Send a JSON-RPC request and wait for the response. */
|
|
100
|
+
async rpc(method, params) {
|
|
101
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
102
|
+
throw new Error("WebSocket not connected");
|
|
103
|
+
}
|
|
104
|
+
const id = `req-${++requestCounter}`;
|
|
105
|
+
const frame = {
|
|
106
|
+
jsonrpc: "2.0",
|
|
107
|
+
type: "request",
|
|
108
|
+
id,
|
|
109
|
+
method,
|
|
110
|
+
params,
|
|
111
|
+
};
|
|
112
|
+
return new Promise((resolve, reject) => {
|
|
113
|
+
const timer = setTimeout(() => {
|
|
114
|
+
this.pending.delete(id);
|
|
115
|
+
reject(new Error(`RPC timeout for ${method}`));
|
|
116
|
+
}, 10_000);
|
|
117
|
+
this.pending.set(id, {
|
|
118
|
+
resolve: (resp) => {
|
|
119
|
+
clearTimeout(timer);
|
|
120
|
+
if (resp.error) {
|
|
121
|
+
const err = new Error(resp.error.message);
|
|
122
|
+
err.code = resp.error.code;
|
|
123
|
+
reject(err);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
resolve(resp.result);
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
reject: (err) => {
|
|
130
|
+
clearTimeout(timer);
|
|
131
|
+
reject(err);
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
this.ws.send(JSON.stringify(frame));
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/** Wait for a specific event type. */
|
|
138
|
+
async waitForEvent(eventName, timeoutMs = 5000) {
|
|
139
|
+
// Check already-collected events
|
|
140
|
+
const idx = this.events.findIndex((e) => e.event === eventName);
|
|
141
|
+
if (idx !== -1) {
|
|
142
|
+
return this.events.splice(idx, 1)[0];
|
|
143
|
+
}
|
|
144
|
+
return new Promise((resolve, reject) => {
|
|
145
|
+
const timer = setTimeout(() => {
|
|
146
|
+
const i = this.eventWaiters.findIndex((w) => w.resolve === resolve);
|
|
147
|
+
if (i !== -1)
|
|
148
|
+
this.eventWaiters.splice(i, 1);
|
|
149
|
+
reject(new Error(`Timeout waiting for event: ${eventName}`));
|
|
150
|
+
}, timeoutMs);
|
|
151
|
+
this.eventWaiters.push({
|
|
152
|
+
eventName,
|
|
153
|
+
resolve: (e) => {
|
|
154
|
+
clearTimeout(timer);
|
|
155
|
+
resolve(e);
|
|
156
|
+
},
|
|
157
|
+
reject: (err) => {
|
|
158
|
+
clearTimeout(timer);
|
|
159
|
+
reject(err);
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/** Return all collected events and clear the buffer. */
|
|
165
|
+
drainEvents() {
|
|
166
|
+
const events = [...this.events];
|
|
167
|
+
this.events = [];
|
|
168
|
+
return events;
|
|
169
|
+
}
|
|
170
|
+
/** Close the WebSocket connection. */
|
|
171
|
+
close() {
|
|
172
|
+
this.ws?.close();
|
|
173
|
+
this.ws = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=test-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-client.js","sourceRoot":"","sources":["../src/test-client.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const PROTOCOL_VERSION = "2026.
|
|
1
|
+
export declare const PROTOCOL_VERSION = "2026.330.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moltzap/protocol",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.330.0",
|
|
4
4
|
"description": "Protocol types and validators for MoltZap messaging",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,20 +22,39 @@
|
|
|
22
22
|
"types": "./dist/schema/index.d.ts",
|
|
23
23
|
"import": "./dist/schema/index.js"
|
|
24
24
|
},
|
|
25
|
+
"./phone-hash": {
|
|
26
|
+
"types": "./dist/phone-hash.d.ts",
|
|
27
|
+
"import": "./dist/phone-hash.js"
|
|
28
|
+
},
|
|
29
|
+
"./test-client": {
|
|
30
|
+
"types": "./dist/test-client.d.ts",
|
|
31
|
+
"import": "./dist/test-client.js"
|
|
32
|
+
},
|
|
25
33
|
"./test-fixtures/phone-hashes": {
|
|
26
34
|
"types": "./dist/test-fixtures/phone-hashes.d.ts",
|
|
27
35
|
"import": "./dist/test-fixtures/phone-hashes.js"
|
|
28
36
|
}
|
|
29
37
|
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"ws": "^8.0.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"ws": {
|
|
43
|
+
"optional": true
|
|
44
|
+
}
|
|
45
|
+
},
|
|
30
46
|
"dependencies": {
|
|
31
47
|
"@sinclair/typebox": "^0.34.0",
|
|
32
48
|
"ajv": "^8.17.0",
|
|
33
49
|
"ajv-formats": "^3.0.0"
|
|
34
50
|
},
|
|
35
51
|
"devDependencies": {
|
|
52
|
+
"@types/node": "^25.5.0",
|
|
53
|
+
"@types/ws": "^8.5.0",
|
|
36
54
|
"tsx": "^4.19.0",
|
|
37
55
|
"typescript": "^5.7.0",
|
|
38
|
-
"vitest": "^3.0.0"
|
|
56
|
+
"vitest": "^3.0.0",
|
|
57
|
+
"ws": "^8.18.0"
|
|
39
58
|
},
|
|
40
59
|
"scripts": {
|
|
41
60
|
"build": "tsc",
|