feat: integrate mobile work chat and Gitea delivery
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { getMobileStatusMessage } from "./mobile-status-message";
|
||||
|
||||
describe("getMobileStatusMessage", () => {
|
||||
it("keeps local composer feedback", () => {
|
||||
expect(
|
||||
getMobileStatusMessage({
|
||||
assistantError: "Flue API error 401",
|
||||
localStatus: "Sent to Zopu",
|
||||
})
|
||||
).toBe("Sent to Zopu");
|
||||
});
|
||||
|
||||
it("does not expose Flue authorization internals", () => {
|
||||
expect(
|
||||
getMobileStatusMessage({
|
||||
assistantError:
|
||||
'Flue API error 401: GET /agents/zopu/example: {"error":"Unauthorized"}',
|
||||
})
|
||||
).toBe("Zopu is reconnecting…");
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
interface MobileStatusMessageInput {
|
||||
readonly assistantError?: string;
|
||||
readonly localStatus?: string;
|
||||
}
|
||||
|
||||
const isAgentAuthorizationError = (message: string) =>
|
||||
message.includes("Flue API error 401") ||
|
||||
message.includes('"Unauthorized"') ||
|
||||
message.includes("GET /agents/");
|
||||
|
||||
export const getMobileStatusMessage = ({
|
||||
assistantError,
|
||||
localStatus,
|
||||
}: MobileStatusMessageInput): string | undefined => {
|
||||
if (localStatus) {
|
||||
return localStatus;
|
||||
}
|
||||
if (!assistantError) {
|
||||
return undefined;
|
||||
}
|
||||
if (isAgentAuthorizationError(assistantError)) {
|
||||
return "Zopu is reconnecting…";
|
||||
}
|
||||
return "Zopu needs attention";
|
||||
};
|
||||
@@ -0,0 +1,13 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { getUserInitials } from "./get-user-initials";
|
||||
|
||||
describe("getUserInitials", () => {
|
||||
it("uses the first two name parts", () => {
|
||||
expect(getUserInitials("Sai Karthik")).toBe("SK");
|
||||
});
|
||||
|
||||
it("uses a neutral fallback while auth loads", () => {
|
||||
expect(getUserInitials()).toBe("U");
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
export const getUserInitials = (name?: string): string => {
|
||||
const parts = name?.trim().split(/\s+/u).filter(Boolean) ?? [];
|
||||
if (parts.length === 0) {
|
||||
return "U";
|
||||
}
|
||||
return parts
|
||||
.slice(0, 2)
|
||||
.map((part) => part[0]?.toUpperCase() ?? "")
|
||||
.join("");
|
||||
};
|
||||
Reference in New Issue
Block a user