@osise/api-client 0.0.1

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.
Files changed (116) hide show
  1. package/README.md +474 -0
  2. package/dist/cjs/api/admin.js +277 -0
  3. package/dist/cjs/api/admin.js.map +1 -0
  4. package/dist/cjs/api/artisans.js +277 -0
  5. package/dist/cjs/api/artisans.js.map +1 -0
  6. package/dist/cjs/api/auth.js +83 -0
  7. package/dist/cjs/api/auth.js.map +1 -0
  8. package/dist/cjs/api/consumers.js +170 -0
  9. package/dist/cjs/api/consumers.js.map +1 -0
  10. package/dist/cjs/api/index.js +22 -0
  11. package/dist/cjs/api/index.js.map +1 -0
  12. package/dist/cjs/api/jobs.js +202 -0
  13. package/dist/cjs/api/jobs.js.map +1 -0
  14. package/dist/cjs/hooks/index.js +435 -0
  15. package/dist/cjs/hooks/index.js.map +1 -0
  16. package/dist/cjs/index.js +189 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/types/admin.js +6 -0
  19. package/dist/cjs/types/admin.js.map +1 -0
  20. package/dist/cjs/types/artisan.js +6 -0
  21. package/dist/cjs/types/artisan.js.map +1 -0
  22. package/dist/cjs/types/auth.js +6 -0
  23. package/dist/cjs/types/auth.js.map +1 -0
  24. package/dist/cjs/types/common.js +6 -0
  25. package/dist/cjs/types/common.js.map +1 -0
  26. package/dist/cjs/types/consumer.js +6 -0
  27. package/dist/cjs/types/consumer.js.map +1 -0
  28. package/dist/cjs/types/enums.js +226 -0
  29. package/dist/cjs/types/enums.js.map +1 -0
  30. package/dist/cjs/types/index.js +35 -0
  31. package/dist/cjs/types/index.js.map +1 -0
  32. package/dist/cjs/types/job.js +6 -0
  33. package/dist/cjs/types/job.js.map +1 -0
  34. package/dist/cjs/utils/http-client.js +214 -0
  35. package/dist/cjs/utils/http-client.js.map +1 -0
  36. package/dist/cjs/utils/index.js +19 -0
  37. package/dist/cjs/utils/index.js.map +1 -0
  38. package/dist/cjs/utils/storage.js +105 -0
  39. package/dist/cjs/utils/storage.js.map +1 -0
  40. package/dist/esm/api/admin.js +269 -0
  41. package/dist/esm/api/admin.js.map +1 -0
  42. package/dist/esm/api/artisans.js +270 -0
  43. package/dist/esm/api/artisans.js.map +1 -0
  44. package/dist/esm/api/auth.js +79 -0
  45. package/dist/esm/api/auth.js.map +1 -0
  46. package/dist/esm/api/consumers.js +165 -0
  47. package/dist/esm/api/consumers.js.map +1 -0
  48. package/dist/esm/api/index.js +6 -0
  49. package/dist/esm/api/index.js.map +1 -0
  50. package/dist/esm/api/jobs.js +197 -0
  51. package/dist/esm/api/jobs.js.map +1 -0
  52. package/dist/esm/hooks/index.js +408 -0
  53. package/dist/esm/hooks/index.js.map +1 -0
  54. package/dist/esm/index.js +165 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/types/admin.js +5 -0
  57. package/dist/esm/types/admin.js.map +1 -0
  58. package/dist/esm/types/artisan.js +5 -0
  59. package/dist/esm/types/artisan.js.map +1 -0
  60. package/dist/esm/types/auth.js +5 -0
  61. package/dist/esm/types/auth.js.map +1 -0
  62. package/dist/esm/types/common.js +5 -0
  63. package/dist/esm/types/common.js.map +1 -0
  64. package/dist/esm/types/consumer.js +5 -0
  65. package/dist/esm/types/consumer.js.map +1 -0
  66. package/dist/esm/types/enums.js +223 -0
  67. package/dist/esm/types/enums.js.map +1 -0
  68. package/dist/esm/types/index.js +19 -0
  69. package/dist/esm/types/index.js.map +1 -0
  70. package/dist/esm/types/job.js +5 -0
  71. package/dist/esm/types/job.js.map +1 -0
  72. package/dist/esm/utils/http-client.js +208 -0
  73. package/dist/esm/utils/http-client.js.map +1 -0
  74. package/dist/esm/utils/index.js +3 -0
  75. package/dist/esm/utils/index.js.map +1 -0
  76. package/dist/esm/utils/storage.js +99 -0
  77. package/dist/esm/utils/storage.js.map +1 -0
  78. package/dist/types/api/admin.d.ts +188 -0
  79. package/dist/types/api/admin.d.ts.map +1 -0
  80. package/dist/types/api/artisans.d.ts +183 -0
  81. package/dist/types/api/artisans.d.ts.map +1 -0
  82. package/dist/types/api/auth.d.ts +58 -0
  83. package/dist/types/api/auth.d.ts.map +1 -0
  84. package/dist/types/api/consumers.d.ts +113 -0
  85. package/dist/types/api/consumers.d.ts.map +1 -0
  86. package/dist/types/api/index.d.ts +6 -0
  87. package/dist/types/api/index.d.ts.map +1 -0
  88. package/dist/types/api/jobs.d.ts +136 -0
  89. package/dist/types/api/jobs.d.ts.map +1 -0
  90. package/dist/types/hooks/index.d.ts +225 -0
  91. package/dist/types/hooks/index.d.ts.map +1 -0
  92. package/dist/types/index.d.ts +127 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/types/admin.d.ts +226 -0
  95. package/dist/types/types/admin.d.ts.map +1 -0
  96. package/dist/types/types/artisan.d.ts +438 -0
  97. package/dist/types/types/artisan.d.ts.map +1 -0
  98. package/dist/types/types/auth.d.ts +92 -0
  99. package/dist/types/types/auth.d.ts.map +1 -0
  100. package/dist/types/types/common.d.ts +105 -0
  101. package/dist/types/types/common.d.ts.map +1 -0
  102. package/dist/types/types/consumer.d.ts +144 -0
  103. package/dist/types/types/consumer.d.ts.map +1 -0
  104. package/dist/types/types/enums.d.ts +199 -0
  105. package/dist/types/types/enums.d.ts.map +1 -0
  106. package/dist/types/types/index.d.ts +12 -0
  107. package/dist/types/types/index.d.ts.map +1 -0
  108. package/dist/types/types/job.d.ts +226 -0
  109. package/dist/types/types/job.d.ts.map +1 -0
  110. package/dist/types/utils/http-client.d.ts +65 -0
  111. package/dist/types/utils/http-client.d.ts.map +1 -0
  112. package/dist/types/utils/index.d.ts +3 -0
  113. package/dist/types/utils/index.d.ts.map +1 -0
  114. package/dist/types/utils/storage.d.ts +48 -0
  115. package/dist/types/utils/storage.d.ts.map +1 -0
  116. package/package.json +78 -0
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Job DTOs
3
+ */
4
+ import { JobStatus, PaymentMethod, PaymentStatus, ServiceCategory } from './enums';
5
+ import { Coordinates, PaginationParams, DateRange, Quote, RatingBreakdown } from './common';
6
+ /** Create job request */
7
+ export interface CreateJobRequestDto {
8
+ serviceCategory: ServiceCategory;
9
+ title: string;
10
+ description: string;
11
+ addressId: string;
12
+ preferredDate?: string;
13
+ preferredTimeSlot?: string;
14
+ isUrgent?: boolean;
15
+ photos?: string[];
16
+ notes?: string;
17
+ }
18
+ /** Update job request */
19
+ export interface UpdateJobRequestDto {
20
+ title?: string;
21
+ description?: string;
22
+ addressId?: string;
23
+ preferredDate?: string;
24
+ preferredTimeSlot?: string;
25
+ isUrgent?: boolean;
26
+ photos?: string[];
27
+ notes?: string;
28
+ }
29
+ /** Job request response */
30
+ export interface JobRequestDto {
31
+ id: string;
32
+ requestNumber: string;
33
+ serviceCategory: ServiceCategory;
34
+ title: string;
35
+ description: string;
36
+ status: JobStatus;
37
+ address: JobAddressDto;
38
+ preferredDate?: string;
39
+ preferredTimeSlot?: string;
40
+ isUrgent: boolean;
41
+ photos: string[];
42
+ notes?: string;
43
+ assignedArtisan?: JobArtisanDto;
44
+ quote?: JobQuoteDto;
45
+ payment?: JobPaymentDto;
46
+ rating?: JobRatingDto;
47
+ createdAt: string;
48
+ updatedAt?: string;
49
+ completedAt?: string;
50
+ cancelledAt?: string;
51
+ cancellationReason?: string;
52
+ }
53
+ /** Job address */
54
+ export interface JobAddressDto {
55
+ id: string;
56
+ label: string;
57
+ formattedAddress: string;
58
+ latitude: number;
59
+ longitude: number;
60
+ instructions?: string;
61
+ }
62
+ /** Artisan assigned to job */
63
+ export interface JobArtisanDto {
64
+ id: string;
65
+ firstName: string;
66
+ lastName: string;
67
+ phoneNumber: string;
68
+ profilePhotoUrl?: string;
69
+ rating: RatingBreakdown;
70
+ totalJobsCompleted: number;
71
+ currentLocation?: Coordinates;
72
+ estimatedArrival?: string;
73
+ }
74
+ /** Job quote */
75
+ export interface JobQuoteDto {
76
+ id: string;
77
+ quote: Quote;
78
+ status: 'pending' | 'approved' | 'rejected' | 'revised';
79
+ submittedAt: string;
80
+ approvedAt?: string;
81
+ rejectedAt?: string;
82
+ rejectionReason?: string;
83
+ revisionNumber: number;
84
+ }
85
+ /** Submit quote (artisan) */
86
+ export interface SubmitQuoteDto {
87
+ laborCost: number;
88
+ materials: {
89
+ item: string;
90
+ quantity: number;
91
+ unitPrice: number;
92
+ }[];
93
+ estimatedDuration: string;
94
+ notes?: string;
95
+ }
96
+ /** Approve/reject quote (consumer) */
97
+ export interface QuoteDecisionDto {
98
+ decision: 'approve' | 'reject';
99
+ rejectionReason?: string;
100
+ }
101
+ /** Job payment */
102
+ export interface JobPaymentDto {
103
+ id: string;
104
+ amount: number;
105
+ status: PaymentStatus;
106
+ method?: PaymentMethod;
107
+ paidAt?: string;
108
+ reference?: string;
109
+ receiptUrl?: string;
110
+ }
111
+ /** Initiate payment */
112
+ export interface InitiatePaymentDto {
113
+ method: PaymentMethod;
114
+ saveCard?: boolean;
115
+ }
116
+ /** Payment response */
117
+ export interface PaymentResponseDto {
118
+ paymentId: string;
119
+ status: PaymentStatus;
120
+ authorizationUrl?: string;
121
+ reference: string;
122
+ expiresAt?: string;
123
+ }
124
+ /** Job rating */
125
+ export interface JobRatingDto {
126
+ id: string;
127
+ overall: number;
128
+ quality: number;
129
+ punctuality: number;
130
+ professionalism: number;
131
+ value: number;
132
+ reviewText?: string;
133
+ createdAt: string;
134
+ }
135
+ /** Submit rating (consumer) */
136
+ export interface SubmitRatingDto {
137
+ overall: number;
138
+ quality: number;
139
+ punctuality: number;
140
+ professionalism: number;
141
+ value: number;
142
+ reviewText?: string;
143
+ }
144
+ /** Job list item */
145
+ export interface JobListItemDto {
146
+ id: string;
147
+ requestNumber: string;
148
+ serviceCategory: ServiceCategory;
149
+ title: string;
150
+ status: JobStatus;
151
+ address: string;
152
+ isUrgent: boolean;
153
+ assignedArtisanName?: string;
154
+ assignedArtisanPhoto?: string;
155
+ totalAmount?: number;
156
+ createdAt: string;
157
+ scheduledFor?: string;
158
+ }
159
+ /** Job filter parameters */
160
+ export interface JobFilterDto extends PaginationParams, DateRange {
161
+ status?: JobStatus | JobStatus[];
162
+ serviceCategory?: ServiceCategory;
163
+ isUrgent?: boolean;
164
+ search?: string;
165
+ sortBy?: 'createdAt' | 'scheduledFor' | 'status' | 'amount';
166
+ sortDirection?: 'asc' | 'desc';
167
+ }
168
+ /** Cancel job request */
169
+ export interface CancelJobDto {
170
+ reason: string;
171
+ }
172
+ /** Job timeline event */
173
+ export interface JobTimelineEventDto {
174
+ id: string;
175
+ eventType: string;
176
+ title: string;
177
+ description?: string;
178
+ actor?: string;
179
+ actorRole?: string;
180
+ timestamp: string;
181
+ metadata?: Record<string, unknown>;
182
+ }
183
+ /** Job dispute */
184
+ export interface JobDisputeDto {
185
+ id: string;
186
+ reason: string;
187
+ description: string;
188
+ photos?: string[];
189
+ status: 'open' | 'investigating' | 'resolved' | 'closed';
190
+ resolution?: string;
191
+ createdAt: string;
192
+ resolvedAt?: string;
193
+ }
194
+ /** Create dispute */
195
+ export interface CreateDisputeDto {
196
+ reason: string;
197
+ description: string;
198
+ photos?: string[];
199
+ }
200
+ /** Artisan job view */
201
+ export interface ArtisanJobDto extends JobRequestDto {
202
+ consumerName: string;
203
+ consumerPhone: string;
204
+ distanceKm: number;
205
+ estimatedEarning: number;
206
+ }
207
+ /** Artisan job filter */
208
+ export interface ArtisanJobFilterDto extends PaginationParams, DateRange {
209
+ status?: JobStatus | JobStatus[];
210
+ sortBy?: 'createdAt' | 'completedAt' | 'earning';
211
+ sortDirection?: 'asc' | 'desc';
212
+ }
213
+ /** Update job status (artisan) */
214
+ export interface UpdateJobStatusDto {
215
+ status: JobStatus;
216
+ notes?: string;
217
+ location?: Coordinates;
218
+ }
219
+ /** Artisan location update */
220
+ export interface ArtisanLocationUpdateDto {
221
+ latitude: number;
222
+ longitude: number;
223
+ heading?: number;
224
+ speed?: number;
225
+ }
226
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/types/job.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * HTTP Client for Osise API
3
+ * Zero-dependency fetch wrapper with interceptors
4
+ */
5
+ import { StandardResponse, ApiError } from '../types';
6
+ export interface HttpClientConfig {
7
+ baseUrl: string;
8
+ timeout?: number;
9
+ headers?: Record<string, string>;
10
+ onRequest?: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>;
11
+ onResponse?: <T>(response: StandardResponse<T>) => StandardResponse<T> | Promise<StandardResponse<T>>;
12
+ onError?: (error: OsiseApiError) => void | Promise<void>;
13
+ onTokenRefresh?: () => Promise<string | null>;
14
+ getAccessToken?: () => string | null;
15
+ getRefreshToken?: () => string | null;
16
+ setTokens?: (accessToken: string, refreshToken: string) => void;
17
+ }
18
+ export interface RequestConfig {
19
+ url: string;
20
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
21
+ headers: Record<string, string>;
22
+ body?: unknown;
23
+ params?: Record<string, string | number | boolean | undefined>;
24
+ timeout?: number;
25
+ signal?: AbortSignal;
26
+ }
27
+ export declare class OsiseApiError extends Error {
28
+ readonly statusCode: number;
29
+ readonly errors: string[] | null;
30
+ readonly timestamp: string;
31
+ readonly isNetworkError: boolean;
32
+ readonly isTimeoutError: boolean;
33
+ readonly isUnauthorized: boolean;
34
+ readonly isForbidden: boolean;
35
+ readonly isNotFound: boolean;
36
+ readonly isValidationError: boolean;
37
+ readonly isRateLimited: boolean;
38
+ constructor(message: string, statusCode: number, errors?: string[] | null, timestamp?: string, options?: {
39
+ isNetworkError?: boolean;
40
+ isTimeoutError?: boolean;
41
+ });
42
+ static fromApiError(apiError: ApiError): OsiseApiError;
43
+ static networkError(message?: string): OsiseApiError;
44
+ static timeoutError(message?: string): OsiseApiError;
45
+ }
46
+ export declare class HttpClient {
47
+ private config;
48
+ private isRefreshing;
49
+ private refreshPromise;
50
+ constructor(config: HttpClientConfig);
51
+ private buildUrl;
52
+ private refreshTokenIfNeeded;
53
+ request<T>(config: Omit<RequestConfig, 'headers'> & {
54
+ headers?: Record<string, string>;
55
+ }): Promise<StandardResponse<T>>;
56
+ get<T>(url: string, params?: Record<string, string | number | boolean | undefined>, config?: Partial<RequestConfig>): Promise<StandardResponse<T>>;
57
+ post<T>(url: string, body?: unknown, config?: Partial<RequestConfig>): Promise<StandardResponse<T>>;
58
+ put<T>(url: string, body?: unknown, config?: Partial<RequestConfig>): Promise<StandardResponse<T>>;
59
+ patch<T>(url: string, body?: unknown, config?: Partial<RequestConfig>): Promise<StandardResponse<T>>;
60
+ delete<T>(url: string, config?: Partial<RequestConfig>): Promise<StandardResponse<T>>;
61
+ updateConfig(config: Partial<HttpClientConfig>): void;
62
+ getConfig(): HttpClientConfig;
63
+ }
64
+ export declare function createHttpClient(config: HttpClientConfig): HttpClient;
65
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9E,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,cAAc,EAAE,OAAO,CAAC;IACxC,SAAgB,WAAW,EAAE,OAAO,CAAC;IACrC,SAAgB,UAAU,EAAE,OAAO,CAAC;IACpC,SAAgB,iBAAiB,EAAE,OAAO,CAAC;IAC3C,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAGrC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,EAAE,GAAG,IAAW,EAC9B,SAAS,GAAE,MAAiC,EAC5C,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;KACrB;IAgBR,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa;IAStD,MAAM,CAAC,YAAY,CAAC,OAAO,GAAE,MAAwB,GAAG,aAAa;IAMrE,MAAM,CAAC,YAAY,CAAC,OAAO,GAAE,MAA0B,GAAG,aAAa;CAKxE;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAuC;gBAEjD,MAAM,EAAE,gBAAgB;IAOpC,OAAO,CAAC,QAAQ;YAcF,oBAAoB;IAqB5B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAyGvH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IASlJ,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IASnG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IASlG,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IASpG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAQ3F,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAIrD,SAAS,IAAI,gBAAgB;CAG9B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAErE"}
@@ -0,0 +1,3 @@
1
+ export * from './http-client';
2
+ export * from './storage';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Token Storage Utilities
3
+ * Platform-agnostic storage interface
4
+ */
5
+ export interface TokenStorage {
6
+ getAccessToken(): string | null;
7
+ getRefreshToken(): string | null;
8
+ setTokens(accessToken: string, refreshToken: string): void;
9
+ clearTokens(): void;
10
+ }
11
+ /** In-memory storage for environments without persistent storage */
12
+ export declare class MemoryTokenStorage implements TokenStorage {
13
+ private accessToken;
14
+ private refreshToken;
15
+ getAccessToken(): string | null;
16
+ getRefreshToken(): string | null;
17
+ setTokens(accessToken: string, refreshToken: string): void;
18
+ clearTokens(): void;
19
+ }
20
+ /** Browser localStorage-based storage */
21
+ export declare class BrowserTokenStorage implements TokenStorage {
22
+ private readonly accessTokenKey;
23
+ private readonly refreshTokenKey;
24
+ constructor(keyPrefix?: string);
25
+ getAccessToken(): string | null;
26
+ getRefreshToken(): string | null;
27
+ setTokens(accessToken: string, refreshToken: string): void;
28
+ clearTokens(): void;
29
+ }
30
+ /** Secure storage wrapper for React Native (uses async storage) */
31
+ export declare class SecureTokenStorage implements TokenStorage {
32
+ private memoryCache;
33
+ private storage;
34
+ private readonly accessTokenKey;
35
+ private readonly refreshTokenKey;
36
+ private initialized;
37
+ constructor(storage: {
38
+ getItem: (key: string) => Promise<string | null>;
39
+ setItem: (key: string, value: string) => Promise<void>;
40
+ removeItem: (key: string) => Promise<void>;
41
+ }, keyPrefix?: string);
42
+ initialize(): Promise<void>;
43
+ getAccessToken(): string | null;
44
+ getRefreshToken(): string | null;
45
+ setTokens(accessToken: string, refreshToken: string): void;
46
+ clearTokens(): void;
47
+ }
48
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,WAAW,IAAI,IAAI,CAAC;CACrB;AAED,oEAAoE;AACpE,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;IAE3C,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAK1D,WAAW,IAAI,IAAI;CAIpB;AAED,yCAAyC;AACzC,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,SAAS,GAAE,MAAgB;IAKvC,cAAc,IAAI,MAAM,GAAG,IAAI;IAK/B,eAAe,IAAI,MAAM,GAAG,IAAI;IAKhC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAM1D,WAAW,IAAI,IAAI;CAKpB;AAED,mEAAmE;AACnE,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,OAAO,CAIb;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,WAAW,CAAS;gBAG1B,OAAO,EAAE;QACP,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5C,EACD,SAAS,GAAE,MAAgB;IAQvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAS1D,WAAW,IAAI,IAAI;CAQpB"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@osise/api-client",
3
+ "version": "0.0.1",
4
+ "description": "Official TypeScript SDK for the Osise API - connecting consumers with skilled artisans",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/esm/index.js",
11
+ "require": "./dist/cjs/index.js",
12
+ "types": "./dist/types/index.d.ts"
13
+ },
14
+ "./react": {
15
+ "import": "./dist/esm/hooks/index.js",
16
+ "require": "./dist/cjs/hooks/index.js",
17
+ "types": "./dist/types/hooks/index.d.ts"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "build": "npm run build:esm && npm run build:cjs && npm run build:types",
26
+ "build:esm": "tsc -p tsconfig.esm.json",
27
+ "build:cjs": "tsc -p tsconfig.cjs.json",
28
+ "build:types": "tsc -p tsconfig.types.json",
29
+ "clean": "rm -rf dist",
30
+ "prepare": "npm run clean && npm run build",
31
+ "prepublishOnly": "npm run clean && npm run build",
32
+ "lint": "eslint src --ext .ts,.tsx",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest"
35
+ },
36
+ "keywords": [
37
+ "osise",
38
+ "api",
39
+ "sdk",
40
+ "typescript",
41
+ "artisan",
42
+ "consumer",
43
+ "nigeria",
44
+ "services"
45
+ ],
46
+ "author": "Osise Team",
47
+ "license": "MIT",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/osise/osise-api-client"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/osise/osise-api-client/issues"
54
+ },
55
+ "homepage": "https://github.com/osise/osise-api-client#readme",
56
+ "peerDependencies": {
57
+ "react": ">=17.0.0"
58
+ },
59
+ "peerDependenciesMeta": {
60
+ "react": {
61
+ "optional": true
62
+ }
63
+ },
64
+ "devDependencies": {
65
+ "@types/node": "^20.0.0",
66
+ "@types/react": "^18.2.0",
67
+ "react": "^18.2.0",
68
+ "typescript": "^5.4.0",
69
+ "vitest": "^1.6.0",
70
+ "eslint": "^8.57.0",
71
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
72
+ "@typescript-eslint/parser": "^7.0.0",
73
+ "eslint-plugin-react-hooks": "^4.6.0"
74
+ },
75
+ "engines": {
76
+ "node": ">=18.0.0"
77
+ }
78
+ }