vessels 0.2.2 → 0.2.3
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 +58 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -184,6 +184,59 @@ async function cmdWebhooksToggle(id, active) {
|
|
|
184
184
|
});
|
|
185
185
|
console.log(`Webhook ${data.endpoint.id} ${data.endpoint.active ? "enabled" : "disabled"}.`);
|
|
186
186
|
}
|
|
187
|
+
var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
188
|
+
async function resolveVesselId(input) {
|
|
189
|
+
if (UUID_RE.test(input)) return input;
|
|
190
|
+
const data = await api("/api/v1/vessels?limit=200&archived=true");
|
|
191
|
+
const vessel = (data.vessels ?? []).find((v) => v.external_id === input);
|
|
192
|
+
if (!vessel) {
|
|
193
|
+
console.error(`Vessel not found: ${input}`);
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
return vessel.id;
|
|
197
|
+
}
|
|
198
|
+
async function cmdMessage(args) {
|
|
199
|
+
const flags = parseFlags(args);
|
|
200
|
+
if (!flags.vessel || !flags.message) {
|
|
201
|
+
console.error("Usage: vessels message --vessel <id> --message <text>");
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
const vesselId = await resolveVesselId(flags.vessel);
|
|
205
|
+
const since = new Date(Date.now() - 5e3).toISOString();
|
|
206
|
+
const data = await api(`/api/v1/vessels/${vesselId}/messages`, {
|
|
207
|
+
method: "POST",
|
|
208
|
+
body: JSON.stringify({ message: flags.message })
|
|
209
|
+
});
|
|
210
|
+
console.log(`
|
|
211
|
+
Sent.`);
|
|
212
|
+
console.log(` vessel_id ${vesselId}`);
|
|
213
|
+
console.log(` message_id ${data.message_id}`);
|
|
214
|
+
const logsData = await api(`/api/v1/webhooks/deliveries?since=${encodeURIComponent(since)}&limit=10`);
|
|
215
|
+
const deliveries = logsData.deliveries ?? [];
|
|
216
|
+
if (!deliveries.length) {
|
|
217
|
+
console.log("\nNo webhook deliveries \u2014 add an endpoint at vessels-two.vercel.app/settings/webhooks");
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
console.log(`
|
|
221
|
+
Webhook deliveries (${deliveries.length}):
|
|
222
|
+
`);
|
|
223
|
+
for (const d of deliveries) {
|
|
224
|
+
const ok = d.response_status !== null && d.response_status >= 200 && d.response_status < 300;
|
|
225
|
+
const icon = ok ? "\u2713" : "\u2717";
|
|
226
|
+
const status = d.response_status ?? "no response";
|
|
227
|
+
const url = d.endpoint_url ?? "(deleted endpoint)";
|
|
228
|
+
const retry = d.attempt > 1 ? ` \xB7 attempt ${d.attempt}` : "";
|
|
229
|
+
const time = new Date(d.delivered_at).toLocaleTimeString([], { timeStyle: "medium" });
|
|
230
|
+
console.log(` ${icon} ${status} ${url}`);
|
|
231
|
+
console.log(` ${d.event_type}${retry} \xB7 ${time}`);
|
|
232
|
+
if (d.response_body) {
|
|
233
|
+
const body = d.response_body.length > 300 ? d.response_body.slice(0, 300) + "\u2026" : d.response_body;
|
|
234
|
+
console.log(`
|
|
235
|
+
${body.split("\n").join("\n ")}`);
|
|
236
|
+
}
|
|
237
|
+
console.log();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
187
240
|
async function cmdPush(args) {
|
|
188
241
|
const flags = parseFlags(args);
|
|
189
242
|
const apiKey = flags.key ?? process.env.VESSELS_API_KEY;
|
|
@@ -233,6 +286,10 @@ Commands:
|
|
|
233
286
|
vessels push --vessel <id> --message <text> --key <api_key>
|
|
234
287
|
(--key can be omitted if VESSELS_API_KEY is set)
|
|
235
288
|
|
|
289
|
+
vessels message --vessel <id> --message <text>
|
|
290
|
+
Send a message as the logged-in user and print webhook delivery logs.
|
|
291
|
+
Accepts vessel UUID or external_id (e.g. booking-123).
|
|
292
|
+
|
|
236
293
|
Agent/Claude Code setup (fully non-interactive):
|
|
237
294
|
vessels login --email me@example.com
|
|
238
295
|
# tell your agent the OTP from the email
|
|
@@ -291,6 +348,7 @@ Run: vessels help`);
|
|
|
291
348
|
process.exit(1);
|
|
292
349
|
}
|
|
293
350
|
if (cmd === "push") return cmdPush([sub, ...rest].filter(Boolean));
|
|
351
|
+
if (cmd === "message") return cmdMessage([sub, ...rest].filter(Boolean));
|
|
294
352
|
console.error(`Unknown command: ${cmd}
|
|
295
353
|
Run: vessels help`);
|
|
296
354
|
process.exit(1);
|