astrogators-shared-ui 0.17.5 → 0.18.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/index.js CHANGED
@@ -1394,6 +1394,6 @@ var He = {
1394
1394
  if (e.length === 0) return {};
1395
1395
  let t = [...new Set(e)], n = await L.get(`/api/v1/users/lookup?ids=${t.join(",")}`);
1396
1396
  return Object.fromEntries(n.users.map((e) => [e.id, e.username]));
1397
- };
1397
+ }, Xe = async (e) => L.post(`/api/v1/users/me/ally-codes/${e}/verify/start`), Ze = async (e) => L.get(`/api/v1/users/me/ally-codes/${e}/verify/status`), Qe = async (e) => L.post(`/api/v1/users/me/ally-codes/${e}/verify/check`);
1398
1398
  //#endregion
1399
- export { je as AllyCodeDropdown, ce as ApiClient, Ce as AuthProvider, Ke as Badge, G as Button, We as Card, p as Container, Re as Footer, ke as Input, Je as Loader, qe as Modal, Le as NavBar, Ue as RosterRefresh, _ as SUITE_NAV, Oe as Select, h as TopBar, L as apiClient, se as authedFetch, ve as clearAllyCodes, k as clearTokens, ne as configureAuthRefresh, Ye as fetchUsernames, q as formatAllyCode, Ve as formatCountdown, Be as formatRelativeTime, S as getAccessToken, z as getAllyCodesFromStorage, T as getRefreshToken, _e as getSelectedAllyCode, le as initializeApiClient, ee as isAuthenticated, g as isSuiteNavGroup, ze as parseBackendTimestamp, M as refreshAccessToken, w as removeAccessToken, he as removeAllyCodeFromStorage, D as removeRefreshToken, me as saveAllyCodeToStorage, C as setAccessToken, E as setRefreshToken, B as setSelectedAllyCode, O as setTokens, Ae as unformatAllyCode, ge as updateAllyCodeLastUsed, V as useAuth };
1399
+ export { je as AllyCodeDropdown, ce as ApiClient, Ce as AuthProvider, Ke as Badge, G as Button, We as Card, p as Container, Re as Footer, ke as Input, Je as Loader, qe as Modal, Le as NavBar, Ue as RosterRefresh, _ as SUITE_NAV, Oe as Select, h as TopBar, L as apiClient, se as authedFetch, Qe as checkAllyCodeVerification, ve as clearAllyCodes, k as clearTokens, ne as configureAuthRefresh, Ye as fetchUsernames, q as formatAllyCode, Ve as formatCountdown, Be as formatRelativeTime, S as getAccessToken, Ze as getAllyCodeVerificationStatus, z as getAllyCodesFromStorage, T as getRefreshToken, _e as getSelectedAllyCode, le as initializeApiClient, ee as isAuthenticated, g as isSuiteNavGroup, ze as parseBackendTimestamp, M as refreshAccessToken, w as removeAccessToken, he as removeAllyCodeFromStorage, D as removeRefreshToken, me as saveAllyCodeToStorage, C as setAccessToken, E as setRefreshToken, B as setSelectedAllyCode, O as setTokens, Xe as startAllyCodeVerification, Ae as unformatAllyCode, ge as updateAllyCodeLastUsed, V as useAuth };
@@ -17,7 +17,8 @@ export type { AuthRefreshConfig } from './services/tokenRefresh';
17
17
  export { getAccessToken, setAccessToken, removeAccessToken, getRefreshToken, setRefreshToken, removeRefreshToken, setTokens, clearTokens, isAuthenticated, } from './services/auth';
18
18
  export { getAllyCodesFromStorage, saveAllyCodeToStorage, removeAllyCodeFromStorage, updateAllyCodeLastUsed, getSelectedAllyCode, setSelectedAllyCode, clearAllyCodes, } from './services/allyCodeStorage';
19
19
  export { fetchUsernames } from './services/users';
20
+ export { startAllyCodeVerification, getAllyCodeVerificationStatus, checkAllyCodeVerification, } from './services/allyCodeVerification';
20
21
  export type { StoredAllyCode } from './services/allyCodeStorage';
21
22
  export { formatAllyCode, unformatAllyCode } from './utils/formatAllyCode';
22
23
  export { parseBackendTimestamp, formatRelativeTime, formatCountdown } from './utils/formatTime';
23
- export type { User, LoginRequest, LoginResponse, RegisterRequest, RegisterResponse, RefreshTokenRequest, RefreshTokenResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, VerifyEmailRequest, VerifyEmailResponse, ResendVerificationRequest, ResendVerificationResponse, AllyCode, AllyCodeCreate, AllyCodeListResponse, AllyCodeMigrationPrompt, TokenResponse, UpdateAccountRequest, UpdateAccountResponse, LogoutAllResponse, ApiResponse, ApiError, PaginatedResponse, ModStat, ParsedMod, ModListResponse, EvaluationScores, ModEvaluation, EvaluationRequest, EvaluationResponse, } from './types';
24
+ export type { User, LoginRequest, LoginResponse, RegisterRequest, RegisterResponse, RefreshTokenRequest, RefreshTokenResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, VerifyEmailRequest, VerifyEmailResponse, ResendVerificationRequest, ResendVerificationResponse, AllyCode, AllyCodeCreate, AllyCodeListResponse, AllyCodeMigrationPrompt, TokenResponse, UpdateAccountRequest, UpdateAccountResponse, LogoutAllResponse, VerifyChallengeResponse, VerifyStatusResponse, VerifyCheckResponse, ApiResponse, ApiError, PaginatedResponse, ModStat, ParsedMod, ModListResponse, EvaluationScores, ModEvaluation, EvaluationRequest, EvaluationResponse, } from './types';
@@ -0,0 +1,7 @@
1
+ import { VerifyChallengeResponse, VerifyCheckResponse, VerifyStatusResponse } from '../types';
2
+ /** POST .../verify/start — issue or regenerate a challenge. */
3
+ export declare const startAllyCodeVerification: (allyCodeId: number) => Promise<VerifyChallengeResponse>;
4
+ /** GET .../verify/status — resume state without spending a Comlink pull. */
5
+ export declare const getAllyCodeVerificationStatus: (allyCodeId: number) => Promise<VerifyStatusResponse>;
6
+ /** POST .../verify/check — check whether the challenged change has landed yet. */
7
+ export declare const checkAllyCodeVerification: (allyCodeId: number) => Promise<VerifyCheckResponse>;
@@ -1,3 +1,3 @@
1
- export type { User, LoginRequest, LoginResponse, RegisterRequest, RegisterResponse, RefreshTokenRequest, RefreshTokenResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, VerifyEmailRequest, VerifyEmailResponse, ResendVerificationRequest, ResendVerificationResponse, AllyCode, AllyCodeCreate, AllyCodeListResponse, AllyCodeMigrationPrompt, TokenResponse, UpdateAccountRequest, UpdateAccountResponse, LogoutAllResponse, } from './user';
1
+ export type { User, LoginRequest, LoginResponse, RegisterRequest, RegisterResponse, RefreshTokenRequest, RefreshTokenResponse, ForgotPasswordRequest, ForgotPasswordResponse, ResetPasswordRequest, ResetPasswordResponse, VerifyEmailRequest, VerifyEmailResponse, ResendVerificationRequest, ResendVerificationResponse, AllyCode, AllyCodeCreate, AllyCodeListResponse, AllyCodeMigrationPrompt, TokenResponse, UpdateAccountRequest, UpdateAccountResponse, LogoutAllResponse, VerifyChallengeResponse, VerifyStatusResponse, VerifyCheckResponse, } from './user';
2
2
  export type { ApiResponse, ApiError, PaginatedResponse } from './api';
3
3
  export type { ModStat, ParsedMod, ModListResponse, EvaluationScores, ModEvaluation, EvaluationRequest, EvaluationResponse, } from './mod';
@@ -74,6 +74,12 @@ export interface AllyCode {
74
74
  player_name: string | null;
75
75
  last_used_at: string | null;
76
76
  created_at: string;
77
+ /**
78
+ * Comlink-verified ownership state (astrogators-table's
79
+ * ally_code_ownerships). 'unverified' until the caller completes the
80
+ * title/portrait challenge via allyCodeVerification.ts.
81
+ */
82
+ ownership_status: 'unverified' | 'verified_by_me' | 'verified_by_other';
77
83
  }
78
84
  export interface AllyCodeCreate {
79
85
  ally_code: string;
@@ -110,3 +116,30 @@ export interface UpdateAccountResponse extends User {
110
116
  export interface LogoutAllResponse {
111
117
  message: string;
112
118
  }
119
+ /**
120
+ * Ally-code ownership verification (astrogators-table's
121
+ * /users/me/ally-codes/{id}/verify/*). The caller is challenged to change
122
+ * their in-game Title or Portrait to `target_id`/`target_display`; `signal`
123
+ * says which.
124
+ */
125
+ export interface VerifyChallengeResponse {
126
+ status: 'already_verified' | 'challenge_issued';
127
+ signal?: 'title' | 'portrait';
128
+ target_id?: string;
129
+ target_display?: string;
130
+ expires_in_seconds?: number;
131
+ verified_at?: string;
132
+ }
133
+ export interface VerifyStatusResponse {
134
+ status: 'unverified' | 'already_verified' | 'challenge_active' | 'challenge_expired';
135
+ owner_user_id?: number;
136
+ verified_at?: string;
137
+ signal?: 'title' | 'portrait';
138
+ target_display?: string;
139
+ expires_in_seconds?: number;
140
+ }
141
+ export interface VerifyCheckResponse {
142
+ status: 'verified' | 'not_matched_yet' | 'pending_floor_wait' | 'already_claimed_by_other' | 'no_active_challenge';
143
+ next_refresh_in_seconds?: number;
144
+ owner_user_id?: number;
145
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astrogators-shared-ui",
3
- "version": "0.17.5",
3
+ "version": "0.18.0",
4
4
  "description": "Shared UI components and utilities for Astrogator's Table applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",