diff --git a/src/cli/cli_chat.c b/src/cli/cli_chat.c index d150083..94fc128 100644 --- a/src/cli/cli_chat.c +++ b/src/cli/cli_chat.c @@ -27,9 +27,24 @@ int cmd_convos(int argc, char **argv) { wf_agent *agent = agent_login_or_err(argv[1], argv[2], argv[3]); if (!agent) return 1; - wf_response res = {0}; - wf_status s = wf_agent_chat_list_convos(agent, limit, NULL, &res); - return finish_agent_response(agent, s, &res); + wf_chat_convo_list list = {0}; + wf_status s = wf_agent_chat_list_convos(agent, limit, NULL, &list); + if (s != WF_OK) { + fprintf(stderr, "error: listConvos failed (status %d)\n", (int)s); + wf_chat_convo_list_free(&list); + wf_agent_free(agent); + return 1; + } + for (size_t i = 0; i < list.convo_count; ++i) { + printf("%s\tunread=%d\t%s\n", list.convos[i].id, + list.convos[i].unread_count, + list.convos[i].last_message_text + ? list.convos[i].last_message_text + : "(no last message)"); + } + wf_chat_convo_list_free(&list); + wf_agent_free(agent); + return 0; } /* wolfram messages --convo [limit] */ @@ -53,10 +68,22 @@ int cmd_messages(int argc, char **argv) { wf_agent *agent = agent_login_or_err(pos[0], pos[1], pos[2]); if (!agent) return 1; - wf_response res = {0}; + wf_chat_message_list list = {0}; wf_status s = - wf_agent_chat_get_messages(agent, convo_id, limit, NULL, &res); - return finish_agent_response(agent, s, &res); + wf_agent_chat_get_messages(agent, convo_id, limit, NULL, &list); + if (s != WF_OK) { + fprintf(stderr, "error: getMessages failed (status %d)\n", (int)s); + wf_chat_message_list_free(&list); + wf_agent_free(agent); + return 1; + } + for (size_t i = 0; i < list.message_count; ++i) { + printf("[%s] %s: %s\n", list.messages[i].sent_at, + list.messages[i].sender, list.messages[i].text); + } + wf_chat_message_list_free(&list); + wf_agent_free(agent); + return 0; } /* wolfram chat send --convo @@ -90,10 +117,20 @@ int cmd_chat(int argc, char **argv) { wf_agent *agent = agent_login_or_err(pos[0], pos[1], pos[2]); if (!agent) return 1; - wf_response res = {0}; + wf_chat_message msg = {0}; wf_status s = - wf_agent_chat_send_message(agent, convo_id, text, NULL, &res); - return finish_agent_response(agent, s, &res); + wf_agent_chat_send_message(agent, convo_id, text, NULL, &msg); + if (s != WF_OK) { + fprintf(stderr, "error: sendMessage failed (status %d)\n", (int)s); + wf_chat_message_reset(&msg); + wf_agent_free(agent); + return 1; + } + printf("sent: id=%s text=%s\n", msg.id ? msg.id : "?", + msg.text ? msg.text : "?"); + wf_chat_message_reset(&msg); + wf_agent_free(agent); + return 0; } fprintf(stderr, "error: unknown chat subcommand '%s' (try send)\n", sub); @@ -106,7 +143,8 @@ int cmd_chat(int argc, char **argv) { * --name * wolfram groups add-members --convo * --members ... - * wolfram groups remove-members --convo + * wolfram groups remove-members --convo + * * --members ... */ int cmd_groups(int argc, char **argv) { if (argc < 2) { @@ -125,8 +163,7 @@ int cmd_groups(int argc, char **argv) { if (strcmp(argv[i], "--name") == 0 && i + 1 < argc) name = argv[++i]; else if (strcmp(argv[i], "--members") == 0) { - while (i + 1 < argc && argv[i + 1][0] != '-' && - n_members < 16) + while (i + 1 < argc && argv[i + 1][0] != '-' && n_members < 16) members[n_members++] = argv[++i]; } else if (pi < 3) pos[pi++] = argv[i]; @@ -142,8 +179,8 @@ int cmd_groups(int argc, char **argv) { if (!agent) return 1; wf_response res = {0}; - wf_status s = wf_agent_chat_create_group(agent, members, n_members, - name, &res); + wf_status s = + wf_agent_chat_create_group(agent, members, n_members, name, &res); return finish_agent_response(agent, s, &res); } @@ -192,16 +229,16 @@ int cmd_groups(int argc, char **argv) { if (strcmp(argv[i], "--convo") == 0 && i + 1 < argc) convo_id = argv[++i]; else if (strcmp(argv[i], "--members") == 0) { - while (i + 1 < argc && argv[i + 1][0] != '-' && - n_members < 16) + while (i + 1 < argc && argv[i + 1][0] != '-' && n_members < 16) members[n_members++] = argv[++i]; } else if (pi < 3) pos[pi++] = argv[i]; } if (pi < 3 || !convo_id || n_members == 0) { - fprintf(stderr, "error: usage: wolfram groups %s " - " --convo --members " - "...\n", + fprintf(stderr, + "error: usage: wolfram groups %s " + " --convo --members " + "...\n", sub); return 1; } @@ -212,8 +249,8 @@ int cmd_groups(int argc, char **argv) { wf_response res = {0}; wf_status s; if (strcmp(sub, "add-members") == 0) - s = wf_agent_chat_add_members(agent, convo_id, members, - n_members, &res); + s = wf_agent_chat_add_members(agent, convo_id, members, n_members, + &res); else s = wf_agent_chat_remove_members(agent, convo_id, members, n_members, &res); @@ -221,21 +258,21 @@ int cmd_groups(int argc, char **argv) { if (s != WF_OK) { fprintf(stderr, "error: %s failed (status %d)\n", strcmp(sub, "add-members") == 0 ? "addMembers" - : "removeMembers", + : "removeMembers", (int)s); wf_agent_free(agent); return 1; } printf("%s %d members %s convo %s\n", - strcmp(sub, "add-members") == 0 ? "added" : "removed", - n_members, + strcmp(sub, "add-members") == 0 ? "added" : "removed", n_members, strcmp(sub, "add-members") == 0 ? "to" : "from", convo_id); wf_agent_free(agent); return 0; } - fprintf(stderr, "error: unknown groups subcommand '%s' (try create/edit/" - "add-members/remove-members)\n", + fprintf(stderr, + "error: unknown groups subcommand '%s' (try create/edit/" + "add-members/remove-members)\n", sub); return 1; } @@ -243,8 +280,7 @@ int cmd_groups(int argc, char **argv) { /* wolfram reactions * --convo --message --value */ int cmd_reactions(int argc, char **argv) { - const char *action = NULL, *convo_id = NULL, *msg_id = NULL, - *value = NULL; + const char *action = NULL, *convo_id = NULL, *msg_id = NULL, *value = NULL; const char *pos[3]; int pi = 0; for (int i = 1; i < argc; ++i) { @@ -275,8 +311,9 @@ int cmd_reactions(int argc, char **argv) { else if (strcmp(action, "remove") == 0) s = wf_agent_chat_remove_reaction(agent, convo_id, msg_id, value); else { - fprintf(stderr, "error: unknown reactions action '%s' (try " - "add/remove)\n", + fprintf(stderr, + "error: unknown reactions action '%s' (try " + "add/remove)\n", action); wf_agent_free(agent); return 1; diff --git a/src/cli/cli_identity.c b/src/cli/cli_identity.c index 843d0dd..9ca4536 100644 --- a/src/cli/cli_identity.c +++ b/src/cli/cli_identity.c @@ -50,9 +50,18 @@ int cmd_check_handle(int argc, char **argv) { return 1; } - wf_response res = {0}; - wf_status s = wf_agent_check_handle(agent, handle, &res); - return finish_agent_response(agent, s, &res); + wf_identity_check_handle_input input = {.handle = handle}; + wf_identity_check_handle_result result = {0}; + wf_status s = wf_agent_check_handle(agent, &input, &result); + if (s != WF_OK) { + fprintf(stderr, "error: checkHandle failed (status %d)\n", (int)s); + wf_agent_free(agent); + return 1; + } + printf("handle %s: %s\n", handle, + result.valid == 1 ? "valid" : "not available"); + wf_agent_free(agent); + return 0; } int cmd_get_recommended_did_credentials(int argc, char **argv) { @@ -92,7 +101,8 @@ int cmd_rotate_handle(int argc, char **argv) { wf_status s; if (token) { - s = wf_agent_request_plc_operation_signature_typed(agent, wf_agent_get_did(agent)); + s = wf_agent_request_plc_operation_signature_typed( + agent, wf_agent_get_did(agent)); if (s == WF_OK) { s = wf_agent_update_handle_typed(agent, new_handle); } @@ -145,9 +155,10 @@ int cmd_plc(int argc, char **argv) { if (strcmp(sub, "sign") == 0) { if (argc < 4) { - fprintf(stderr, "error: usage: wolfram plc sign " - " [--rotation-key ]... [--also-known-as " - "]...\n"); + fprintf(stderr, + "error: usage: wolfram plc sign " + " [--rotation-key ]... [--also-known-as " + "]...\n"); return 1; } const char *service = argv[2]; @@ -174,8 +185,7 @@ int cmd_plc(int argc, char **argv) { wf_identity_signed_operation out = {0}; wf_status s = wf_agent_sign_plc_operation_typed( - agent, token, rotation_keys, n_rot, aka, n_aka, NULL, NULL, - &out); + agent, token, rotation_keys, n_rot, aka, n_aka, NULL, NULL, &out); wf_agent_free(agent); if (s != WF_OK) { fprintf(stderr, "error: signPlcOperation failed (status %d)\n", @@ -204,8 +214,7 @@ int cmd_plc(int argc, char **argv) { return 1; } - wf_status s = - wf_agent_submit_plc_operation_typed(agent, op_json); + wf_status s = wf_agent_submit_plc_operation_typed(agent, op_json); wf_agent_free(agent); if (s != WF_OK) { fprintf(stderr, "error: submitPlcOperation failed (status %d)\n", @@ -216,8 +225,9 @@ int cmd_plc(int argc, char **argv) { return 0; } - fprintf(stderr, "error: unknown plc subcommand '%s' (try " - "request-signature/sign/submit)\n", + fprintf(stderr, + "error: unknown plc subcommand '%s' (try " + "request-signature/sign/submit)\n", sub); return 1; } diff --git a/src/cli/cli_server.c b/src/cli/cli_server.c index f8b243b..f36f2c2 100644 --- a/src/cli/cli_server.c +++ b/src/cli/cli_server.c @@ -56,8 +56,7 @@ int cmd_create_account(int argc, char **argv) { wf_agent_free(agent); return 1; } - printf("account created: %s (%s)\n", handle, - result.did ? result.did : "?"); + printf("account created: %s (%s)\n", handle, result.did ? result.did : "?"); wf_server_create_account_result_free(&result); wf_agent_free(agent); return 0; @@ -109,9 +108,8 @@ int cmd_app_password(int argc, char **argv) { for (size_t i = 0; i < list.password_count; ++i) { printf("name=%s created=%s\n", list.passwords[i].name ? list.passwords[i].name : "?", - list.passwords[i].created_at - ? list.passwords[i].created_at - : "?"); + list.passwords[i].created_at ? list.passwords[i].created_at + : "?"); } if (list.password_count == 0) printf("(no app passwords)\n"); wf_server_app_password_list_free(&list); @@ -131,8 +129,9 @@ int cmd_app_password(int argc, char **argv) { } printf("revoked app password '%s'\n", argv[5]); } else { - fprintf(stderr, "error: unknown app-password subcommand '%s' (try " - "create/list/revoke)\n", + fprintf(stderr, + "error: unknown app-password subcommand '%s' (try " + "create/list/revoke)\n", sub); wf_agent_free(agent); return 1; @@ -285,8 +284,9 @@ int cmd_email(int argc, char **argv) { } printf("email update requested\n"); } else { - fprintf(stderr, "error: unknown email subcommand '%s' (try " - "confirm/update)\n", + fprintf(stderr, + "error: unknown email subcommand '%s' (try " + "confirm/update)\n", sub); wf_agent_free(agent); return 1; @@ -330,9 +330,19 @@ int cmd_reserve_signing_key(int argc, char **argv) { if (!agent) return 1; const char *did = (argc >= 5) ? argv[4] : NULL; - wf_response res = {0}; - wf_status s = wf_agent_reserve_signing_key_typed(agent, did, &res); - return finish_agent_response(agent, s, &res); + wf_server_auth_token tok = {0}; + wf_status s = wf_agent_reserve_signing_key_typed(agent, did, &tok); + if (s != WF_OK) { + fprintf(stderr, "error: reserveSigningKey failed (status %d)\n", + (int)s); + wf_server_auth_token_free(&tok); + wf_agent_free(agent); + return 1; + } + printf("signing key reserved: %s\n", tok.token ? tok.token : "?"); + wf_server_auth_token_free(&tok); + wf_agent_free(agent); + return 0; } int cmd_get_service_auth(int argc, char **argv) { @@ -360,10 +370,18 @@ int cmd_get_service_auth(int argc, char **argv) { wf_agent *agent = agent_login_or_err(pos[0], pos[1], pos[2]); if (!agent) return 1; - wf_response res = {0}; - wf_status s = - wf_agent_get_service_auth_typed(agent, aud, exp, lxm, &res); - return finish_agent_response(agent, s, &res); + wf_server_auth_token tok = {0}; + wf_status s = wf_agent_get_service_auth_typed(agent, aud, exp, lxm, &tok); + if (s != WF_OK) { + fprintf(stderr, "error: getServiceAuth failed (status %d)\n", (int)s); + wf_server_auth_token_free(&tok); + wf_agent_free(agent); + return 1; + } + printf("service auth token: %s\n", tok.token ? tok.token : "?"); + wf_server_auth_token_free(&tok); + wf_agent_free(agent); + return 0; } int cmd_request_account_delete(int argc, char **argv) { @@ -394,9 +412,20 @@ int cmd_request_email_update(int argc, char **argv) { wf_agent *agent = agent_login_or_err(argv[1], argv[2], argv[3]); if (!agent) return 1; - wf_response res = {0}; - wf_status s = wf_agent_request_email_update_typed(agent, &res); - return finish_agent_response(agent, s, &res); + wf_server_email_update_request req = {0}; + wf_status s = wf_agent_request_email_update_typed(agent, &req); + if (s != WF_OK) { + fprintf(stderr, "error: requestEmailUpdate failed (status %d)\n", + (int)s); + wf_server_email_update_request_free(&req); + wf_agent_free(agent); + return 1; + } + printf("email update request: tokenRequired=%s\n", + req.token_required ? "true" : "false"); + wf_server_email_update_request_free(&req); + wf_agent_free(agent); + return 0; } int cmd_request_email_confirmation(int argc, char **argv) {