@go-avro/avro-js 0.0.2-beta.6 → 0.0.2-beta.61

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/README.md CHANGED
@@ -10,6 +10,7 @@ This SDK provides:
10
10
  - Typed API interfaces for Avro entities (users, jobs, teams, etc.)
11
11
  - Pluggable token storage (in-memory, localStorage, SecureStore, etc.)
12
12
  - XHR-based requests for compatibility with React Native WebViews and older environments
13
+ - Mutation and Data Hooks for easy plug-in use in React and React Native projects.
13
14
 
14
15
  ## Installation
15
16
 
@@ -2,6 +2,7 @@ import { TokenStorage, Tokens } from '../types/auth';
2
2
  export declare class AuthManager {
3
3
  private storages;
4
4
  private baseUrl;
5
+ private tokenRefreshedCallbacks;
5
6
  constructor({ baseUrl, storage, }: {
6
7
  baseUrl: string;
7
8
  storage: TokenStorage | TokenStorage[];
@@ -9,6 +10,7 @@ export declare class AuthManager {
9
10
  isAuthenticated(): Promise<boolean>;
10
11
  fetchNewTokens(): Promise<Tokens>;
11
12
  accessToken(): Promise<string | undefined>;
13
+ onTokenRefreshed(callback: (accessToken: string) => void): void;
12
14
  refreshTokens(): Promise<Tokens | null>;
13
15
  setTokens(tokens: Tokens): Promise<void>;
14
16
  clearTokens(): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  export class AuthManager {
2
2
  constructor({ baseUrl, storage, }) {
3
+ this.tokenRefreshedCallbacks = [];
3
4
  this.storages = Array.isArray(storage) ? storage : [storage];
4
5
  if (this.storages.length === 0) {
5
6
  throw new Error('At least one token storage must be provided');
@@ -88,10 +89,17 @@ export class AuthManager {
88
89
  const newToken = await this.refreshTokens();
89
90
  return newToken?.access_token;
90
91
  }
92
+ onTokenRefreshed(callback) {
93
+ this.tokenRefreshedCallbacks.push(callback);
94
+ }
91
95
  async refreshTokens() {
92
96
  try {
93
97
  const newToken = await this.fetchNewTokens();
94
98
  await Promise.all(this.storages.map(s => s.set(newToken)));
99
+ this.tokenRefreshedCallbacks.forEach(cb => {
100
+ if (newToken?.access_token)
101
+ cb(newToken.access_token);
102
+ });
95
103
  return newToken;
96
104
  }
97
105
  catch (error) {
@@ -1,5 +1,10 @@
1
+ import { InfiniteData, UseInfiniteQueryResult, useMutation, UseQueryResult } from '@tanstack/react-query';
1
2
  import { AuthManager } from '../auth/AuthManager';
3
+ import { _Event, ApiInfo, Bill, Break, Company, Job, LineItem, Route, ServiceMonth, Session, User, UserCompanyAssociation } from '../types/api';
4
+ import { Tokens } from '../types/auth';
2
5
  import { CancelToken, RetryStrategy } from '../types/client';
6
+ import { StandardError } from '../types/error';
7
+ import { Socket } from 'socket.io-client';
3
8
  export interface AvroQueryClientConfig {
4
9
  baseUrl: string;
5
10
  authManager: AuthManager;
@@ -7,20 +12,261 @@ export interface AvroQueryClientConfig {
7
12
  retryStrategy?: RetryStrategy;
8
13
  timeout?: number;
9
14
  }
15
+ declare module '../client/QueryClient' {
16
+ interface AvroQueryClient {
17
+ _xhr<T>(method: string, path: string, body: any, cancelToken?: CancelToken, headers?: Record<string, string>, isIdempotent?: boolean, retryCount?: number, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<T>;
18
+ _fetch<T>(method: string, path: string, body: any, cancelToken?: CancelToken, headers?: Record<string, string>, isIdempotent?: boolean, retryCount?: number): Promise<T>;
19
+ getDelay(strategy: RetryStrategy, attempt: number): number;
20
+ useGetRoot(): UseQueryResult<ApiInfo, StandardError>;
21
+ useGetJobs(companyGuid: string, body: {
22
+ amt?: number;
23
+ query?: string;
24
+ }, total: number, onProgress?: (fraction: number) => void, isMainLoad?: boolean): UseQueryResult<Job[], StandardError>;
25
+ useGetRoutes(companyGuid: string, body: {
26
+ amt?: number;
27
+ query?: string;
28
+ }, total: number, onProgress?: (fraction: number) => void): UseQueryResult<any[], StandardError>;
29
+ useGetEvents(companyGuid: string, body: {
30
+ amt?: number;
31
+ known_ids?: string[];
32
+ unknown_ids?: string[];
33
+ query?: string;
34
+ unbilled?: boolean;
35
+ billed?: boolean;
36
+ paid?: boolean;
37
+ jobId?: string;
38
+ }): UseInfiniteQueryResult<InfiniteData<_Event[], unknown>, StandardError>;
39
+ useGetMonths(companyGuid: string, body: {
40
+ amt?: number;
41
+ known_ids?: string[];
42
+ unknown_ids?: string[];
43
+ query?: string;
44
+ unbilled?: boolean;
45
+ billed?: boolean;
46
+ paid?: boolean;
47
+ jobId?: string;
48
+ }): UseInfiniteQueryResult<InfiniteData<ServiceMonth[], unknown>, StandardError>;
49
+ useGetBills(companyGuid: string, body: {
50
+ amt?: number;
51
+ known_ids?: string[];
52
+ unknown_ids?: string[];
53
+ query?: string;
54
+ paid?: boolean;
55
+ }): UseInfiniteQueryResult<InfiniteData<Bill[], unknown>, StandardError>;
56
+ useGetCompanies(options?: {}): UseQueryResult<{
57
+ name: string;
58
+ id: string;
59
+ }[], StandardError>;
60
+ useGetCompany(companyId: string): UseQueryResult<Company, StandardError>;
61
+ useGetJob(jobId: string): UseQueryResult<Job, StandardError>;
62
+ useGetEvent(eventId: string): UseQueryResult<_Event, StandardError>;
63
+ useGetUser(userId: string): UseQueryResult<User, StandardError>;
64
+ useGetSelf(): UseQueryResult<User, StandardError>;
65
+ useGetBill(billId: string): UseQueryResult<Bill, StandardError>;
66
+ useGetRoute(routeId: string): UseQueryResult<Route, StandardError>;
67
+ useGetUserSessions(): UseQueryResult<Session[], StandardError>;
68
+ useCreateEvent(): ReturnType<typeof useMutation<{
69
+ id: string;
70
+ }, StandardError, {
71
+ companyId: string;
72
+ eventData: Partial<_Event>;
73
+ }>>;
74
+ useCreateUserSession(): ReturnType<typeof useMutation<{
75
+ id: string;
76
+ }, StandardError, {
77
+ companyId: string;
78
+ sessionData: Partial<Session>;
79
+ }>>;
80
+ useCreateBill(): ReturnType<typeof useMutation<{
81
+ id: string;
82
+ invoice_id: number;
83
+ }, StandardError, {
84
+ companyId: string;
85
+ data: {
86
+ line_items: LineItem[];
87
+ due_date: number;
88
+ users: string[];
89
+ custom_emails: [string, string][];
90
+ };
91
+ }>>;
92
+ useCreateJob(): ReturnType<typeof useMutation<{
93
+ id: string;
94
+ }, StandardError, {
95
+ companyId: string;
96
+ jobData: Partial<Job>;
97
+ }>>;
98
+ useCreateSelf(): ReturnType<typeof useMutation<{
99
+ msg: string;
100
+ }, StandardError, {
101
+ username: string;
102
+ name: string;
103
+ email: string;
104
+ password: string;
105
+ phone_number: string;
106
+ }>>;
107
+ useCreateSessionBreak(): ReturnType<typeof useMutation<{
108
+ id: string;
109
+ }, StandardError, {
110
+ sessionId: string;
111
+ breakData: Partial<Break>;
112
+ }>>;
113
+ useUpdateEvent(): ReturnType<typeof useMutation<{
114
+ msg: string;
115
+ }, StandardError, {
116
+ eventId: string;
117
+ updates: Partial<_Event>;
118
+ }>>;
119
+ useUpdateUserSession(): ReturnType<typeof useMutation<{
120
+ msg: string;
121
+ }, StandardError, {
122
+ sessionId: string;
123
+ updates: Partial<Session>;
124
+ }>>;
125
+ useUpdateJob(): ReturnType<typeof useMutation<{
126
+ msg: string;
127
+ }, StandardError, {
128
+ jobId: string;
129
+ updates: Partial<Job>;
130
+ }>>;
131
+ useUpdateBill(): ReturnType<typeof useMutation<{
132
+ msg: string;
133
+ }, StandardError, {
134
+ billId: string;
135
+ updates: Partial<Bill>;
136
+ }>>;
137
+ useUpdateRoute(): ReturnType<typeof useMutation<{
138
+ msg: string;
139
+ }, StandardError, {
140
+ routeId: string;
141
+ updates: Partial<Route>;
142
+ }>>;
143
+ useUpdateEvents(): ReturnType<typeof useMutation<void, StandardError, {
144
+ companyId: string;
145
+ events: (_Event & {
146
+ page?: number;
147
+ })[];
148
+ action: "billed" | "paid";
149
+ }>>;
150
+ useUpdateMonths(): ReturnType<typeof useMutation<void, StandardError, {
151
+ companyId: string;
152
+ months: (ServiceMonth & {
153
+ page?: number;
154
+ })[];
155
+ action: "billed" | "paid";
156
+ }>>;
157
+ useUpdateUserCompany(): ReturnType<typeof useMutation<{
158
+ msg: string;
159
+ }, StandardError, {
160
+ company_id: string;
161
+ user_id: string;
162
+ data: Partial<UserCompanyAssociation>;
163
+ }>>;
164
+ useUpdateSessionBreak(): ReturnType<typeof useMutation<{
165
+ msg: string;
166
+ }, StandardError, {
167
+ breakId: string;
168
+ updates: Partial<Break>;
169
+ }>>;
170
+ useDeleteJob(): ReturnType<typeof useMutation<{
171
+ msg: string;
172
+ }, StandardError, {
173
+ jobId: string;
174
+ }>>;
175
+ useUpdateCompany(): ReturnType<typeof useMutation<{
176
+ msg: string;
177
+ }, StandardError, {
178
+ companyId: string;
179
+ companyData: Partial<Company | {
180
+ logo: File | null;
181
+ }>;
182
+ }>>;
183
+ useDeleteEvent(): ReturnType<typeof useMutation<{
184
+ msg: string;
185
+ }, StandardError, {
186
+ eventId: string;
187
+ }>>;
188
+ useDeleteBill(): ReturnType<typeof useMutation<{
189
+ msg: string;
190
+ }, StandardError, {
191
+ billId: string;
192
+ }>>;
193
+ useDeleteRoute(): ReturnType<typeof useMutation<{
194
+ msg: string;
195
+ }, StandardError, {
196
+ routeId: string;
197
+ }>>;
198
+ useDeleteSelf(): ReturnType<typeof useMutation<{
199
+ msg: string;
200
+ }, StandardError, void>>;
201
+ }
202
+ }
10
203
  export declare class AvroQueryClient {
11
- private config;
204
+ protected config: Required<AvroQueryClientConfig>;
205
+ readonly socket: Socket;
12
206
  constructor(config: AvroQueryClientConfig);
13
- getDelay(strategy: RetryStrategy, attempt: number): number;
14
- private _xhr;
15
- private _fetch;
16
- get<T>(path: string, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<T>;
17
- post<T>(path: string, data: any, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<T>;
18
- put<T>(path: string, data: any, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<T>;
19
- delete<T>(path: string, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<T>;
207
+ emit(eventName: string, data: unknown): void;
208
+ on<T>(eventName: string, callback: (data: T) => void): void;
209
+ off(eventName: string, callback?: Function): void;
210
+ get<T>(path: string, cancelToken?: CancelToken, headers?: Record<string, string>, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<T>;
211
+ post<T>(path: string, data: any, cancelToken?: CancelToken, headers?: Record<string, string>, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<T>;
212
+ put<T>(path: string, data: any, cancelToken?: CancelToken, headers?: Record<string, string>, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<T>;
213
+ delete<T>(path: string, cancelToken?: CancelToken, headers?: Record<string, string>, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<T>;
20
214
  login(data: {
21
215
  username: string;
22
216
  password: string;
23
217
  }, cancelToken?: CancelToken): Promise<Boolean>;
24
- logout(cancelToken?: CancelToken): Promise<void>;
25
- fetchJobs(companyGuid: string, amt?: number, knownIds?: string[], unknownIds?: string[], keyword?: string, offset?: number, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
218
+ setTokens(tokens: Tokens): Promise<void>;
219
+ clearTokens(): Promise<void>;
220
+ useLogout(): ReturnType<typeof useMutation<void, StandardError, CancelToken | undefined>>;
221
+ fetchJobs(companyGuid: string, body?: {
222
+ amt?: number;
223
+ known_ids?: string[];
224
+ unknown_ids?: string[];
225
+ query?: string;
226
+ offset?: number;
227
+ }, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
228
+ fetchEvents(companyGuid: string, body?: {
229
+ amt?: number;
230
+ known_ids?: string[];
231
+ unknown_ids?: string[];
232
+ query?: string;
233
+ offset?: number;
234
+ unbilled?: boolean;
235
+ billed?: boolean;
236
+ paid?: boolean;
237
+ jobId?: string | null;
238
+ }, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
239
+ fetchMonths(companyGuid: string, body?: {
240
+ amt?: number;
241
+ known_ids?: string[];
242
+ unknown_ids?: string[];
243
+ query?: string;
244
+ offset?: number;
245
+ unbilled?: boolean;
246
+ billed?: boolean;
247
+ paid?: boolean;
248
+ jobId?: string | null;
249
+ }, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
250
+ fetchBills(companyGuid: string, body?: {
251
+ amt?: number;
252
+ known_ids?: string[];
253
+ unknown_ids?: string[];
254
+ query?: string;
255
+ offset?: number;
256
+ paid?: boolean;
257
+ }, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
258
+ fetchRoutes(companyGuid: string, body?: {
259
+ amt?: number;
260
+ known_ids?: string[];
261
+ unknown_ids?: string[];
262
+ query?: string;
263
+ offset?: number;
264
+ }, cancelToken?: CancelToken, headers?: Record<string, string>): Promise<any>;
265
+ sendEmail(emailId: string, formData: FormData, progressUpdateCallback?: (loaded: number, total: number) => void): Promise<void>;
266
+ createBill(companyGuid: string, data: {
267
+ line_items: LineItem[];
268
+ due_date: number;
269
+ users: string[];
270
+ custom_emails: [string, string][];
271
+ }, cancelToken?: CancelToken): Promise<any>;
26
272
  }