@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.
- package/README.md +474 -0
- package/dist/cjs/api/admin.js +277 -0
- package/dist/cjs/api/admin.js.map +1 -0
- package/dist/cjs/api/artisans.js +277 -0
- package/dist/cjs/api/artisans.js.map +1 -0
- package/dist/cjs/api/auth.js +83 -0
- package/dist/cjs/api/auth.js.map +1 -0
- package/dist/cjs/api/consumers.js +170 -0
- package/dist/cjs/api/consumers.js.map +1 -0
- package/dist/cjs/api/index.js +22 -0
- package/dist/cjs/api/index.js.map +1 -0
- package/dist/cjs/api/jobs.js +202 -0
- package/dist/cjs/api/jobs.js.map +1 -0
- package/dist/cjs/hooks/index.js +435 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/cjs/index.js +189 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/admin.js +6 -0
- package/dist/cjs/types/admin.js.map +1 -0
- package/dist/cjs/types/artisan.js +6 -0
- package/dist/cjs/types/artisan.js.map +1 -0
- package/dist/cjs/types/auth.js +6 -0
- package/dist/cjs/types/auth.js.map +1 -0
- package/dist/cjs/types/common.js +6 -0
- package/dist/cjs/types/common.js.map +1 -0
- package/dist/cjs/types/consumer.js +6 -0
- package/dist/cjs/types/consumer.js.map +1 -0
- package/dist/cjs/types/enums.js +226 -0
- package/dist/cjs/types/enums.js.map +1 -0
- package/dist/cjs/types/index.js +35 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/job.js +6 -0
- package/dist/cjs/types/job.js.map +1 -0
- package/dist/cjs/utils/http-client.js +214 -0
- package/dist/cjs/utils/http-client.js.map +1 -0
- package/dist/cjs/utils/index.js +19 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/storage.js +105 -0
- package/dist/cjs/utils/storage.js.map +1 -0
- package/dist/esm/api/admin.js +269 -0
- package/dist/esm/api/admin.js.map +1 -0
- package/dist/esm/api/artisans.js +270 -0
- package/dist/esm/api/artisans.js.map +1 -0
- package/dist/esm/api/auth.js +79 -0
- package/dist/esm/api/auth.js.map +1 -0
- package/dist/esm/api/consumers.js +165 -0
- package/dist/esm/api/consumers.js.map +1 -0
- package/dist/esm/api/index.js +6 -0
- package/dist/esm/api/index.js.map +1 -0
- package/dist/esm/api/jobs.js +197 -0
- package/dist/esm/api/jobs.js.map +1 -0
- package/dist/esm/hooks/index.js +408 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/index.js +165 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/admin.js +5 -0
- package/dist/esm/types/admin.js.map +1 -0
- package/dist/esm/types/artisan.js +5 -0
- package/dist/esm/types/artisan.js.map +1 -0
- package/dist/esm/types/auth.js +5 -0
- package/dist/esm/types/auth.js.map +1 -0
- package/dist/esm/types/common.js +5 -0
- package/dist/esm/types/common.js.map +1 -0
- package/dist/esm/types/consumer.js +5 -0
- package/dist/esm/types/consumer.js.map +1 -0
- package/dist/esm/types/enums.js +223 -0
- package/dist/esm/types/enums.js.map +1 -0
- package/dist/esm/types/index.js +19 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/job.js +5 -0
- package/dist/esm/types/job.js.map +1 -0
- package/dist/esm/utils/http-client.js +208 -0
- package/dist/esm/utils/http-client.js.map +1 -0
- package/dist/esm/utils/index.js +3 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/storage.js +99 -0
- package/dist/esm/utils/storage.js.map +1 -0
- package/dist/types/api/admin.d.ts +188 -0
- package/dist/types/api/admin.d.ts.map +1 -0
- package/dist/types/api/artisans.d.ts +183 -0
- package/dist/types/api/artisans.d.ts.map +1 -0
- package/dist/types/api/auth.d.ts +58 -0
- package/dist/types/api/auth.d.ts.map +1 -0
- package/dist/types/api/consumers.d.ts +113 -0
- package/dist/types/api/consumers.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +6 -0
- package/dist/types/api/index.d.ts.map +1 -0
- package/dist/types/api/jobs.d.ts +136 -0
- package/dist/types/api/jobs.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +225 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +127 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/admin.d.ts +226 -0
- package/dist/types/types/admin.d.ts.map +1 -0
- package/dist/types/types/artisan.d.ts +438 -0
- package/dist/types/types/artisan.d.ts.map +1 -0
- package/dist/types/types/auth.d.ts +92 -0
- package/dist/types/types/auth.d.ts.map +1 -0
- package/dist/types/types/common.d.ts +105 -0
- package/dist/types/types/common.d.ts.map +1 -0
- package/dist/types/types/consumer.d.ts +144 -0
- package/dist/types/types/consumer.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +199 -0
- package/dist/types/types/enums.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +12 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/job.d.ts +226 -0
- package/dist/types/types/job.d.ts.map +1 -0
- package/dist/types/utils/http-client.d.ts +65 -0
- package/dist/types/utils/http-client.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/storage.d.ts +48 -0
- package/dist/types/utils/storage.d.ts.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/types/common.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../../src/types/consumer.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Osise API Enums
|
|
4
|
+
* These match the backend C# enums exactly
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BlockReason = exports.AlertSeverity = exports.ContractType = exports.PayoutStatus = exports.PaymentStatus = exports.PaymentMethod = exports.JobStatus = exports.DeviceType = exports.OtpPurpose = exports.Language = exports.ContactMethod = exports.ArtisanStatus = exports.DayOfWeek = exports.SkillTestResult = exports.BadgeType = exports.StrikeType = exports.AvailabilityStatus = exports.GuarantorStatus = exports.DocumentStatus = exports.DocumentType = exports.VerificationStatus = exports.AccountType = exports.ServiceCategory = exports.UserRole = void 0;
|
|
8
|
+
/** User roles for RBAC */
|
|
9
|
+
var UserRole;
|
|
10
|
+
(function (UserRole) {
|
|
11
|
+
UserRole["Consumer"] = "Consumer";
|
|
12
|
+
UserRole["ConsumerB2B"] = "ConsumerB2B";
|
|
13
|
+
UserRole["Artisan"] = "Artisan";
|
|
14
|
+
UserRole["Dispatcher"] = "Dispatcher";
|
|
15
|
+
UserRole["FieldAgent"] = "FieldAgent";
|
|
16
|
+
UserRole["CustomerSupport"] = "CustomerSupport";
|
|
17
|
+
UserRole["AccountManager"] = "AccountManager";
|
|
18
|
+
UserRole["OperationsManager"] = "OperationsManager";
|
|
19
|
+
UserRole["Finance"] = "Finance";
|
|
20
|
+
UserRole["Admin"] = "Admin";
|
|
21
|
+
})(UserRole || (exports.UserRole = UserRole = {}));
|
|
22
|
+
/** Service categories available on the platform (MVP) */
|
|
23
|
+
var ServiceCategory;
|
|
24
|
+
(function (ServiceCategory) {
|
|
25
|
+
ServiceCategory["Electrical"] = "Electrical";
|
|
26
|
+
ServiceCategory["Plumbing"] = "Plumbing";
|
|
27
|
+
ServiceCategory["AcRefrigeration"] = "AcRefrigeration";
|
|
28
|
+
ServiceCategory["Generator"] = "Generator";
|
|
29
|
+
ServiceCategory["Carpentry"] = "Carpentry";
|
|
30
|
+
ServiceCategory["Painting"] = "Painting";
|
|
31
|
+
})(ServiceCategory || (exports.ServiceCategory = ServiceCategory = {}));
|
|
32
|
+
/** Consumer account type */
|
|
33
|
+
var AccountType;
|
|
34
|
+
(function (AccountType) {
|
|
35
|
+
AccountType["Individual"] = "Individual";
|
|
36
|
+
AccountType["Business"] = "Business";
|
|
37
|
+
})(AccountType || (exports.AccountType = AccountType = {}));
|
|
38
|
+
/**
|
|
39
|
+
* Artisan verification workflow status
|
|
40
|
+
* IMPORTANT: Must follow this order - stages cannot be skipped
|
|
41
|
+
*/
|
|
42
|
+
var VerificationStatus;
|
|
43
|
+
(function (VerificationStatus) {
|
|
44
|
+
VerificationStatus["DocumentsPending"] = "DocumentsPending";
|
|
45
|
+
VerificationStatus["DocumentsReview"] = "DocumentsReview";
|
|
46
|
+
VerificationStatus["GuarantorVerification"] = "GuarantorVerification";
|
|
47
|
+
VerificationStatus["FieldVisitPending"] = "FieldVisitPending";
|
|
48
|
+
VerificationStatus["FieldVisitScheduled"] = "FieldVisitScheduled";
|
|
49
|
+
VerificationStatus["SkillTestPending"] = "SkillTestPending";
|
|
50
|
+
VerificationStatus["SkillTestScheduled"] = "SkillTestScheduled";
|
|
51
|
+
VerificationStatus["TrainingPending"] = "TrainingPending";
|
|
52
|
+
VerificationStatus["TrainingScheduled"] = "TrainingScheduled";
|
|
53
|
+
VerificationStatus["FinalReview"] = "FinalReview";
|
|
54
|
+
VerificationStatus["Approved"] = "Approved";
|
|
55
|
+
VerificationStatus["Rejected"] = "Rejected";
|
|
56
|
+
})(VerificationStatus || (exports.VerificationStatus = VerificationStatus = {}));
|
|
57
|
+
/** Document types for artisan verification */
|
|
58
|
+
var DocumentType;
|
|
59
|
+
(function (DocumentType) {
|
|
60
|
+
DocumentType["Nin"] = "Nin";
|
|
61
|
+
DocumentType["AddressProof"] = "AddressProof";
|
|
62
|
+
DocumentType["TradeCertificate"] = "TradeCertificate";
|
|
63
|
+
DocumentType["PassportPhoto"] = "PassportPhoto";
|
|
64
|
+
DocumentType["Other"] = "Other";
|
|
65
|
+
})(DocumentType || (exports.DocumentType = DocumentType = {}));
|
|
66
|
+
/** Document review status */
|
|
67
|
+
var DocumentStatus;
|
|
68
|
+
(function (DocumentStatus) {
|
|
69
|
+
DocumentStatus["Pending"] = "Pending";
|
|
70
|
+
DocumentStatus["Approved"] = "Approved";
|
|
71
|
+
DocumentStatus["Rejected"] = "Rejected";
|
|
72
|
+
})(DocumentStatus || (exports.DocumentStatus = DocumentStatus = {}));
|
|
73
|
+
/** Guarantor verification status */
|
|
74
|
+
var GuarantorStatus;
|
|
75
|
+
(function (GuarantorStatus) {
|
|
76
|
+
GuarantorStatus["Pending"] = "Pending";
|
|
77
|
+
GuarantorStatus["Verified"] = "Verified";
|
|
78
|
+
GuarantorStatus["Rejected"] = "Rejected";
|
|
79
|
+
})(GuarantorStatus || (exports.GuarantorStatus = GuarantorStatus = {}));
|
|
80
|
+
/** Artisan availability status */
|
|
81
|
+
var AvailabilityStatus;
|
|
82
|
+
(function (AvailabilityStatus) {
|
|
83
|
+
AvailabilityStatus["Online"] = "Online";
|
|
84
|
+
AvailabilityStatus["Offline"] = "Offline";
|
|
85
|
+
AvailabilityStatus["Busy"] = "Busy";
|
|
86
|
+
AvailabilityStatus["OnBreak"] = "OnBreak";
|
|
87
|
+
})(AvailabilityStatus || (exports.AvailabilityStatus = AvailabilityStatus = {}));
|
|
88
|
+
/** Strike types for artisan performance tracking */
|
|
89
|
+
var StrikeType;
|
|
90
|
+
(function (StrikeType) {
|
|
91
|
+
StrikeType["QualityIssue"] = "QualityIssue";
|
|
92
|
+
StrikeType["PunctualityIssue"] = "PunctualityIssue";
|
|
93
|
+
StrikeType["CancellationIssue"] = "CancellationIssue";
|
|
94
|
+
StrikeType["DisputeIssue"] = "DisputeIssue";
|
|
95
|
+
})(StrikeType || (exports.StrikeType = StrikeType = {}));
|
|
96
|
+
/** Badge types for artisan achievements */
|
|
97
|
+
var BadgeType;
|
|
98
|
+
(function (BadgeType) {
|
|
99
|
+
BadgeType["TopRated"] = "TopRated";
|
|
100
|
+
BadgeType["Reliable"] = "Reliable";
|
|
101
|
+
BadgeType["Fast"] = "Fast";
|
|
102
|
+
BadgeType["Expert"] = "Expert";
|
|
103
|
+
BadgeType["Verified"] = "Verified";
|
|
104
|
+
BadgeType["NewArtisan"] = "NewArtisan";
|
|
105
|
+
})(BadgeType || (exports.BadgeType = BadgeType = {}));
|
|
106
|
+
/** Skill test result */
|
|
107
|
+
var SkillTestResult;
|
|
108
|
+
(function (SkillTestResult) {
|
|
109
|
+
SkillTestResult["Passed"] = "Passed";
|
|
110
|
+
SkillTestResult["Failed"] = "Failed";
|
|
111
|
+
SkillTestResult["Pending"] = "Pending";
|
|
112
|
+
})(SkillTestResult || (exports.SkillTestResult = SkillTestResult = {}));
|
|
113
|
+
/** Days of the week */
|
|
114
|
+
var DayOfWeek;
|
|
115
|
+
(function (DayOfWeek) {
|
|
116
|
+
DayOfWeek["Sunday"] = "Sunday";
|
|
117
|
+
DayOfWeek["Monday"] = "Monday";
|
|
118
|
+
DayOfWeek["Tuesday"] = "Tuesday";
|
|
119
|
+
DayOfWeek["Wednesday"] = "Wednesday";
|
|
120
|
+
DayOfWeek["Thursday"] = "Thursday";
|
|
121
|
+
DayOfWeek["Friday"] = "Friday";
|
|
122
|
+
DayOfWeek["Saturday"] = "Saturday";
|
|
123
|
+
})(DayOfWeek || (exports.DayOfWeek = DayOfWeek = {}));
|
|
124
|
+
/** Artisan account status */
|
|
125
|
+
var ArtisanStatus;
|
|
126
|
+
(function (ArtisanStatus) {
|
|
127
|
+
ArtisanStatus["Active"] = "Active";
|
|
128
|
+
ArtisanStatus["Inactive"] = "Inactive";
|
|
129
|
+
ArtisanStatus["OnBreak"] = "OnBreak";
|
|
130
|
+
ArtisanStatus["Suspended"] = "Suspended";
|
|
131
|
+
ArtisanStatus["Deleted"] = "Deleted";
|
|
132
|
+
})(ArtisanStatus || (exports.ArtisanStatus = ArtisanStatus = {}));
|
|
133
|
+
/** Preferred contact method */
|
|
134
|
+
var ContactMethod;
|
|
135
|
+
(function (ContactMethod) {
|
|
136
|
+
ContactMethod["InApp"] = "InApp";
|
|
137
|
+
ContactMethod["Phone"] = "Phone";
|
|
138
|
+
ContactMethod["Email"] = "Email";
|
|
139
|
+
})(ContactMethod || (exports.ContactMethod = ContactMethod = {}));
|
|
140
|
+
/** Supported languages */
|
|
141
|
+
var Language;
|
|
142
|
+
(function (Language) {
|
|
143
|
+
Language["English"] = "English";
|
|
144
|
+
Language["Yoruba"] = "Yoruba";
|
|
145
|
+
Language["Pidgin"] = "Pidgin";
|
|
146
|
+
})(Language || (exports.Language = Language = {}));
|
|
147
|
+
/** OTP purpose */
|
|
148
|
+
var OtpPurpose;
|
|
149
|
+
(function (OtpPurpose) {
|
|
150
|
+
OtpPurpose["Login"] = "Login";
|
|
151
|
+
OtpPurpose["Registration"] = "Registration";
|
|
152
|
+
OtpPurpose["PasswordReset"] = "PasswordReset";
|
|
153
|
+
OtpPurpose["PhoneVerification"] = "PhoneVerification";
|
|
154
|
+
})(OtpPurpose || (exports.OtpPurpose = OtpPurpose = {}));
|
|
155
|
+
/** Device type for sessions */
|
|
156
|
+
var DeviceType;
|
|
157
|
+
(function (DeviceType) {
|
|
158
|
+
DeviceType["iOS"] = "iOS";
|
|
159
|
+
DeviceType["Android"] = "Android";
|
|
160
|
+
DeviceType["Web"] = "Web";
|
|
161
|
+
DeviceType["Unknown"] = "Unknown";
|
|
162
|
+
})(DeviceType || (exports.DeviceType = DeviceType = {}));
|
|
163
|
+
/**
|
|
164
|
+
* Job workflow status
|
|
165
|
+
* IMPORTANT: Must follow this order for job lifecycle
|
|
166
|
+
*/
|
|
167
|
+
var JobStatus;
|
|
168
|
+
(function (JobStatus) {
|
|
169
|
+
JobStatus["Pending"] = "Pending";
|
|
170
|
+
JobStatus["Assigned"] = "Assigned";
|
|
171
|
+
JobStatus["ArtisanEnRoute"] = "ArtisanEnRoute";
|
|
172
|
+
JobStatus["Arrived"] = "Arrived";
|
|
173
|
+
JobStatus["QuotePending"] = "QuotePending";
|
|
174
|
+
JobStatus["InProgress"] = "InProgress";
|
|
175
|
+
JobStatus["Completed"] = "Completed";
|
|
176
|
+
JobStatus["Cancelled"] = "Cancelled";
|
|
177
|
+
JobStatus["Disputed"] = "Disputed";
|
|
178
|
+
})(JobStatus || (exports.JobStatus = JobStatus = {}));
|
|
179
|
+
/** Payment method types */
|
|
180
|
+
var PaymentMethod;
|
|
181
|
+
(function (PaymentMethod) {
|
|
182
|
+
PaymentMethod["Card"] = "Card";
|
|
183
|
+
PaymentMethod["BankTransfer"] = "BankTransfer";
|
|
184
|
+
PaymentMethod["Cash"] = "Cash";
|
|
185
|
+
})(PaymentMethod || (exports.PaymentMethod = PaymentMethod = {}));
|
|
186
|
+
/** Payment status */
|
|
187
|
+
var PaymentStatus;
|
|
188
|
+
(function (PaymentStatus) {
|
|
189
|
+
PaymentStatus["Pending"] = "Pending";
|
|
190
|
+
PaymentStatus["Processing"] = "Processing";
|
|
191
|
+
PaymentStatus["Completed"] = "Completed";
|
|
192
|
+
PaymentStatus["Failed"] = "Failed";
|
|
193
|
+
PaymentStatus["Refunded"] = "Refunded";
|
|
194
|
+
})(PaymentStatus || (exports.PaymentStatus = PaymentStatus = {}));
|
|
195
|
+
/** Payout status for artisan earnings */
|
|
196
|
+
var PayoutStatus;
|
|
197
|
+
(function (PayoutStatus) {
|
|
198
|
+
PayoutStatus["Pending"] = "Pending";
|
|
199
|
+
PayoutStatus["Processing"] = "Processing";
|
|
200
|
+
PayoutStatus["Completed"] = "Completed";
|
|
201
|
+
PayoutStatus["Failed"] = "Failed";
|
|
202
|
+
})(PayoutStatus || (exports.PayoutStatus = PayoutStatus = {}));
|
|
203
|
+
/** B2B contract type */
|
|
204
|
+
var ContractType;
|
|
205
|
+
(function (ContractType) {
|
|
206
|
+
ContractType["Basic"] = "Basic";
|
|
207
|
+
ContractType["Standard"] = "Standard";
|
|
208
|
+
ContractType["Premium"] = "Premium";
|
|
209
|
+
})(ContractType || (exports.ContractType = ContractType = {}));
|
|
210
|
+
/** Alert severity for performance alerts */
|
|
211
|
+
var AlertSeverity;
|
|
212
|
+
(function (AlertSeverity) {
|
|
213
|
+
AlertSeverity["Info"] = "Info";
|
|
214
|
+
AlertSeverity["Warning"] = "Warning";
|
|
215
|
+
AlertSeverity["Critical"] = "Critical";
|
|
216
|
+
})(AlertSeverity || (exports.AlertSeverity = AlertSeverity = {}));
|
|
217
|
+
/** Consumer block reason */
|
|
218
|
+
var BlockReason;
|
|
219
|
+
(function (BlockReason) {
|
|
220
|
+
BlockReason["Fraud"] = "Fraud";
|
|
221
|
+
BlockReason["Abuse"] = "Abuse";
|
|
222
|
+
BlockReason["NonPayment"] = "NonPayment";
|
|
223
|
+
BlockReason["ViolationOfTerms"] = "ViolationOfTerms";
|
|
224
|
+
BlockReason["Other"] = "Other";
|
|
225
|
+
})(BlockReason || (exports.BlockReason = BlockReason = {}));
|
|
226
|
+
//# sourceMappingURL=enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/types/enums.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Osise API Types
|
|
4
|
+
* Export all types for easy consumption
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
// Enums
|
|
22
|
+
__exportStar(require("./enums"), exports);
|
|
23
|
+
// Common types
|
|
24
|
+
__exportStar(require("./common"), exports);
|
|
25
|
+
// Auth types
|
|
26
|
+
__exportStar(require("./auth"), exports);
|
|
27
|
+
// Consumer types
|
|
28
|
+
__exportStar(require("./consumer"), exports);
|
|
29
|
+
// Artisan types
|
|
30
|
+
__exportStar(require("./artisan"), exports);
|
|
31
|
+
// Admin types
|
|
32
|
+
__exportStar(require("./admin"), exports);
|
|
33
|
+
// Job types
|
|
34
|
+
__exportStar(require("./job"), exports);
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,eAAe;AACf,2CAAyB;AAEzB,aAAa;AACb,yCAAuB;AAEvB,iBAAiB;AACjB,6CAA2B;AAE3B,gBAAgB;AAChB,4CAA0B;AAE1B,cAAc;AACd,0CAAwB;AAExB,YAAY;AACZ,wCAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/types/job.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HTTP Client for Osise API
|
|
4
|
+
* Zero-dependency fetch wrapper with interceptors
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.HttpClient = exports.OsiseApiError = void 0;
|
|
8
|
+
exports.createHttpClient = createHttpClient;
|
|
9
|
+
class OsiseApiError extends Error {
|
|
10
|
+
constructor(message, statusCode, errors = null, timestamp = new Date().toISOString(), options = {}) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'OsiseApiError';
|
|
13
|
+
this.statusCode = statusCode;
|
|
14
|
+
this.errors = errors;
|
|
15
|
+
this.timestamp = timestamp;
|
|
16
|
+
this.isNetworkError = options.isNetworkError ?? false;
|
|
17
|
+
this.isTimeoutError = options.isTimeoutError ?? false;
|
|
18
|
+
this.isUnauthorized = statusCode === 401;
|
|
19
|
+
this.isForbidden = statusCode === 403;
|
|
20
|
+
this.isNotFound = statusCode === 404;
|
|
21
|
+
this.isValidationError = statusCode === 422;
|
|
22
|
+
this.isRateLimited = statusCode === 429;
|
|
23
|
+
}
|
|
24
|
+
static fromApiError(apiError) {
|
|
25
|
+
return new OsiseApiError(apiError.message, apiError.statusCode, apiError.errors, apiError.timestamp);
|
|
26
|
+
}
|
|
27
|
+
static networkError(message = 'Network error') {
|
|
28
|
+
return new OsiseApiError(message, 0, null, new Date().toISOString(), {
|
|
29
|
+
isNetworkError: true,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static timeoutError(message = 'Request timeout') {
|
|
33
|
+
return new OsiseApiError(message, 0, null, new Date().toISOString(), {
|
|
34
|
+
isTimeoutError: true,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.OsiseApiError = OsiseApiError;
|
|
39
|
+
class HttpClient {
|
|
40
|
+
constructor(config) {
|
|
41
|
+
this.isRefreshing = false;
|
|
42
|
+
this.refreshPromise = null;
|
|
43
|
+
this.config = {
|
|
44
|
+
timeout: 30000,
|
|
45
|
+
...config,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
buildUrl(url, params) {
|
|
49
|
+
const fullUrl = new URL(url, this.config.baseUrl);
|
|
50
|
+
if (params) {
|
|
51
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
52
|
+
if (value !== undefined && value !== null) {
|
|
53
|
+
fullUrl.searchParams.append(key, String(value));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return fullUrl.toString();
|
|
58
|
+
}
|
|
59
|
+
async refreshTokenIfNeeded() {
|
|
60
|
+
if (!this.config.onTokenRefresh) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
if (this.isRefreshing && this.refreshPromise) {
|
|
64
|
+
return this.refreshPromise;
|
|
65
|
+
}
|
|
66
|
+
this.isRefreshing = true;
|
|
67
|
+
this.refreshPromise = this.config.onTokenRefresh();
|
|
68
|
+
try {
|
|
69
|
+
const newToken = await this.refreshPromise;
|
|
70
|
+
return newToken;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
this.isRefreshing = false;
|
|
74
|
+
this.refreshPromise = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async request(config) {
|
|
78
|
+
const timeout = config.timeout ?? this.config.timeout ?? 30000;
|
|
79
|
+
const controller = new AbortController();
|
|
80
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
81
|
+
const headers = {
|
|
82
|
+
'Content-Type': 'application/json',
|
|
83
|
+
'Accept': 'application/json',
|
|
84
|
+
...this.config.headers,
|
|
85
|
+
...config.headers,
|
|
86
|
+
};
|
|
87
|
+
// Add auth token if available
|
|
88
|
+
const token = this.config.getAccessToken?.();
|
|
89
|
+
if (token) {
|
|
90
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
91
|
+
}
|
|
92
|
+
let requestConfig = {
|
|
93
|
+
...config,
|
|
94
|
+
headers,
|
|
95
|
+
signal: config.signal ?? controller.signal,
|
|
96
|
+
};
|
|
97
|
+
// Apply request interceptor
|
|
98
|
+
if (this.config.onRequest) {
|
|
99
|
+
requestConfig = await this.config.onRequest(requestConfig);
|
|
100
|
+
}
|
|
101
|
+
const url = this.buildUrl(requestConfig.url, requestConfig.params);
|
|
102
|
+
try {
|
|
103
|
+
const response = await fetch(url, {
|
|
104
|
+
method: requestConfig.method,
|
|
105
|
+
headers: requestConfig.headers,
|
|
106
|
+
body: requestConfig.body ? JSON.stringify(requestConfig.body) : undefined,
|
|
107
|
+
signal: requestConfig.signal,
|
|
108
|
+
});
|
|
109
|
+
clearTimeout(timeoutId);
|
|
110
|
+
const data = await response.json();
|
|
111
|
+
// Handle 401 with token refresh
|
|
112
|
+
if (response.status === 401 && this.config.onTokenRefresh) {
|
|
113
|
+
const newToken = await this.refreshTokenIfNeeded();
|
|
114
|
+
if (newToken) {
|
|
115
|
+
// Retry the request with new token
|
|
116
|
+
headers['Authorization'] = `Bearer ${newToken}`;
|
|
117
|
+
const retryResponse = await fetch(url, {
|
|
118
|
+
method: requestConfig.method,
|
|
119
|
+
headers,
|
|
120
|
+
body: requestConfig.body ? JSON.stringify(requestConfig.body) : undefined,
|
|
121
|
+
});
|
|
122
|
+
const retryData = await retryResponse.json();
|
|
123
|
+
if (!retryData.success) {
|
|
124
|
+
const error = OsiseApiError.fromApiError(retryData);
|
|
125
|
+
await this.config.onError?.(error);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
// Apply response interceptor
|
|
129
|
+
if (this.config.onResponse) {
|
|
130
|
+
return await this.config.onResponse(retryData);
|
|
131
|
+
}
|
|
132
|
+
return retryData;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (!data.success) {
|
|
136
|
+
const error = OsiseApiError.fromApiError(data);
|
|
137
|
+
await this.config.onError?.(error);
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
// Apply response interceptor
|
|
141
|
+
if (this.config.onResponse) {
|
|
142
|
+
return await this.config.onResponse(data);
|
|
143
|
+
}
|
|
144
|
+
return data;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
if (error instanceof OsiseApiError) {
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
if (error instanceof Error) {
|
|
152
|
+
if (error.name === 'AbortError') {
|
|
153
|
+
const timeoutError = OsiseApiError.timeoutError();
|
|
154
|
+
await this.config.onError?.(timeoutError);
|
|
155
|
+
throw timeoutError;
|
|
156
|
+
}
|
|
157
|
+
const networkError = OsiseApiError.networkError(error.message);
|
|
158
|
+
await this.config.onError?.(networkError);
|
|
159
|
+
throw networkError;
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async get(url, params, config) {
|
|
165
|
+
return this.request({
|
|
166
|
+
...config,
|
|
167
|
+
url,
|
|
168
|
+
method: 'GET',
|
|
169
|
+
params,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async post(url, body, config) {
|
|
173
|
+
return this.request({
|
|
174
|
+
...config,
|
|
175
|
+
url,
|
|
176
|
+
method: 'POST',
|
|
177
|
+
body,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
async put(url, body, config) {
|
|
181
|
+
return this.request({
|
|
182
|
+
...config,
|
|
183
|
+
url,
|
|
184
|
+
method: 'PUT',
|
|
185
|
+
body,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
async patch(url, body, config) {
|
|
189
|
+
return this.request({
|
|
190
|
+
...config,
|
|
191
|
+
url,
|
|
192
|
+
method: 'PATCH',
|
|
193
|
+
body,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async delete(url, config) {
|
|
197
|
+
return this.request({
|
|
198
|
+
...config,
|
|
199
|
+
url,
|
|
200
|
+
method: 'DELETE',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
updateConfig(config) {
|
|
204
|
+
this.config = { ...this.config, ...config };
|
|
205
|
+
}
|
|
206
|
+
getConfig() {
|
|
207
|
+
return { ...this.config };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.HttpClient = HttpClient;
|
|
211
|
+
function createHttpClient(config) {
|
|
212
|
+
return new HttpClient(config);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./http-client"), exports);
|
|
18
|
+
__exportStar(require("./storage"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,4CAA0B"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Token Storage Utilities
|
|
4
|
+
* Platform-agnostic storage interface
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SecureTokenStorage = exports.BrowserTokenStorage = exports.MemoryTokenStorage = void 0;
|
|
8
|
+
/** In-memory storage for environments without persistent storage */
|
|
9
|
+
class MemoryTokenStorage {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.accessToken = null;
|
|
12
|
+
this.refreshToken = null;
|
|
13
|
+
}
|
|
14
|
+
getAccessToken() {
|
|
15
|
+
return this.accessToken;
|
|
16
|
+
}
|
|
17
|
+
getRefreshToken() {
|
|
18
|
+
return this.refreshToken;
|
|
19
|
+
}
|
|
20
|
+
setTokens(accessToken, refreshToken) {
|
|
21
|
+
this.accessToken = accessToken;
|
|
22
|
+
this.refreshToken = refreshToken;
|
|
23
|
+
}
|
|
24
|
+
clearTokens() {
|
|
25
|
+
this.accessToken = null;
|
|
26
|
+
this.refreshToken = null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.MemoryTokenStorage = MemoryTokenStorage;
|
|
30
|
+
/** Browser localStorage-based storage */
|
|
31
|
+
class BrowserTokenStorage {
|
|
32
|
+
constructor(keyPrefix = 'osise') {
|
|
33
|
+
this.accessTokenKey = `${keyPrefix}_access_token`;
|
|
34
|
+
this.refreshTokenKey = `${keyPrefix}_refresh_token`;
|
|
35
|
+
}
|
|
36
|
+
getAccessToken() {
|
|
37
|
+
if (typeof window === 'undefined')
|
|
38
|
+
return null;
|
|
39
|
+
return localStorage.getItem(this.accessTokenKey);
|
|
40
|
+
}
|
|
41
|
+
getRefreshToken() {
|
|
42
|
+
if (typeof window === 'undefined')
|
|
43
|
+
return null;
|
|
44
|
+
return localStorage.getItem(this.refreshTokenKey);
|
|
45
|
+
}
|
|
46
|
+
setTokens(accessToken, refreshToken) {
|
|
47
|
+
if (typeof window === 'undefined')
|
|
48
|
+
return;
|
|
49
|
+
localStorage.setItem(this.accessTokenKey, accessToken);
|
|
50
|
+
localStorage.setItem(this.refreshTokenKey, refreshToken);
|
|
51
|
+
}
|
|
52
|
+
clearTokens() {
|
|
53
|
+
if (typeof window === 'undefined')
|
|
54
|
+
return;
|
|
55
|
+
localStorage.removeItem(this.accessTokenKey);
|
|
56
|
+
localStorage.removeItem(this.refreshTokenKey);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.BrowserTokenStorage = BrowserTokenStorage;
|
|
60
|
+
/** Secure storage wrapper for React Native (uses async storage) */
|
|
61
|
+
class SecureTokenStorage {
|
|
62
|
+
constructor(storage, keyPrefix = 'osise') {
|
|
63
|
+
this.initialized = false;
|
|
64
|
+
this.storage = storage;
|
|
65
|
+
this.memoryCache = new MemoryTokenStorage();
|
|
66
|
+
this.accessTokenKey = `${keyPrefix}_access_token`;
|
|
67
|
+
this.refreshTokenKey = `${keyPrefix}_refresh_token`;
|
|
68
|
+
}
|
|
69
|
+
async initialize() {
|
|
70
|
+
if (this.initialized)
|
|
71
|
+
return;
|
|
72
|
+
const [accessToken, refreshToken] = await Promise.all([
|
|
73
|
+
this.storage.getItem(this.accessTokenKey),
|
|
74
|
+
this.storage.getItem(this.refreshTokenKey),
|
|
75
|
+
]);
|
|
76
|
+
if (accessToken && refreshToken) {
|
|
77
|
+
this.memoryCache.setTokens(accessToken, refreshToken);
|
|
78
|
+
}
|
|
79
|
+
this.initialized = true;
|
|
80
|
+
}
|
|
81
|
+
getAccessToken() {
|
|
82
|
+
return this.memoryCache.getAccessToken();
|
|
83
|
+
}
|
|
84
|
+
getRefreshToken() {
|
|
85
|
+
return this.memoryCache.getRefreshToken();
|
|
86
|
+
}
|
|
87
|
+
setTokens(accessToken, refreshToken) {
|
|
88
|
+
this.memoryCache.setTokens(accessToken, refreshToken);
|
|
89
|
+
// Fire and forget async storage update
|
|
90
|
+
Promise.all([
|
|
91
|
+
this.storage.setItem(this.accessTokenKey, accessToken),
|
|
92
|
+
this.storage.setItem(this.refreshTokenKey, refreshToken),
|
|
93
|
+
]).catch(console.error);
|
|
94
|
+
}
|
|
95
|
+
clearTokens() {
|
|
96
|
+
this.memoryCache.clearTokens();
|
|
97
|
+
// Fire and forget async storage removal
|
|
98
|
+
Promise.all([
|
|
99
|
+
this.storage.removeItem(this.accessTokenKey),
|
|
100
|
+
this.storage.removeItem(this.refreshTokenKey),
|
|
101
|
+
]).catch(console.error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.SecureTokenStorage = SecureTokenStorage;
|
|
105
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"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"}
|