macbid-ts-api 1.0.0-beta.2 → 1.0.0-beta.4
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/MacBid.d.ts +1 -0
- package/MacBid.d.ts.map +1 -1
- package/MacBid.js +39 -11
- package/MacBid.js.map +1 -1
- package/MacBid.ts +41 -11
- package/package.json +1 -1
package/MacBid.d.ts
CHANGED
package/MacBid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MacBid.d.ts","sourceRoot":"","sources":["MacBid.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MacBid.d.ts","sourceRoot":"","sources":["MacBid.ts"],"names":[],"mappings":"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"}
|
package/MacBid.js
CHANGED
|
@@ -22,30 +22,39 @@ export class MacBid {
|
|
|
22
22
|
constructor(auth_info, tokenFilePath) {
|
|
23
23
|
this.auth_info = auth_info;
|
|
24
24
|
this.tokenFilePath = tokenFilePath;
|
|
25
|
-
|
|
25
|
+
// Don't authenticate in constructor - wait until actually needed
|
|
26
26
|
}
|
|
27
27
|
authenticate = async () => {
|
|
28
28
|
if (this.auth_info) {
|
|
29
|
-
// If we have a token,
|
|
29
|
+
// If we have a token, use it (will be auto-refreshed if expired)
|
|
30
30
|
if (this.auth_info.token) {
|
|
31
31
|
this.macbid_session_headers["Authorization"] = this.auth_info
|
|
32
32
|
.token;
|
|
33
|
+
console.log("Using existing access token");
|
|
33
34
|
// Token will be auto-refreshed by ensureValidToken if needed
|
|
34
35
|
return;
|
|
35
36
|
}
|
|
36
37
|
// If we have a refresh token but no access token, try to refresh first
|
|
37
|
-
if (this.auth_info.refresh_token
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return;
|
|
38
|
+
if (this.auth_info.refresh_token) {
|
|
39
|
+
if (this.isRefreshTokenExpired()) {
|
|
40
|
+
console.log("Refresh token has expired, need to login");
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
else {
|
|
43
|
+
console.log("No access token, attempting to refresh using refresh token");
|
|
44
|
+
try {
|
|
45
|
+
await this.refreshToken();
|
|
46
|
+
console.log("Successfully refreshed token");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
// If refresh fails, fall through to login
|
|
51
|
+
console.warn("Failed to refresh token, attempting login:", error);
|
|
52
|
+
}
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
55
|
// No valid tokens, need to login
|
|
48
56
|
if (this.auth_info.email && this.auth_info.password) {
|
|
57
|
+
console.log("No valid tokens found, attempting login");
|
|
49
58
|
await this.login(this.auth_info.email, this.auth_info.password);
|
|
50
59
|
}
|
|
51
60
|
else {
|
|
@@ -88,8 +97,13 @@ export class MacBid {
|
|
|
88
97
|
* @param validation_code - Optional validation code. If not provided, will check auth_info.validation_code
|
|
89
98
|
*/
|
|
90
99
|
login = async (email, password, validation_code) => {
|
|
100
|
+
// Use existing device_id if available, otherwise generate a new one
|
|
101
|
+
const device_id = this.auth_info.device_id || crypto.randomUUID();
|
|
102
|
+
if (!this.auth_info.device_id) {
|
|
103
|
+
this.auth_info.device_id = device_id;
|
|
104
|
+
}
|
|
91
105
|
const login_params = {
|
|
92
|
-
device_id:
|
|
106
|
+
device_id: device_id,
|
|
93
107
|
email: email,
|
|
94
108
|
password: password,
|
|
95
109
|
ref_code: null,
|
|
@@ -125,6 +139,11 @@ export class MacBid {
|
|
|
125
139
|
body: JSON.stringify(validation_params),
|
|
126
140
|
});
|
|
127
141
|
const validation_resJson = await validation_res.json();
|
|
142
|
+
// Check if validation failed
|
|
143
|
+
if (validation_res.status !== 200 || validation_resJson["error"]) {
|
|
144
|
+
console.error("Validation failed:", JSON.stringify(validation_resJson, null, 2));
|
|
145
|
+
throw new Error(`Validation failed: ${validation_resJson["error"] || validation_resJson["message"] || "Unknown error"}`);
|
|
146
|
+
}
|
|
128
147
|
const access_token = validation_resJson["access_token"];
|
|
129
148
|
const refresh_token = validation_resJson["refresh_token"];
|
|
130
149
|
const user_id = validation_resJson["user_id"];
|
|
@@ -138,10 +157,15 @@ export class MacBid {
|
|
|
138
157
|
this.auth_info.refresh_token = refresh_token;
|
|
139
158
|
this.auth_info.refresh_token_expiration = new Date(expiration_refresh * 1000);
|
|
140
159
|
await this.saveTokens();
|
|
160
|
+
console.log("Login successful, tokens saved");
|
|
141
161
|
return true;
|
|
142
162
|
}
|
|
163
|
+
else {
|
|
164
|
+
console.error("No access token in validation response:", JSON.stringify(validation_resJson, null, 2));
|
|
165
|
+
throw new Error("Login failed: No access token received");
|
|
166
|
+
}
|
|
143
167
|
}
|
|
144
|
-
console.error(JSON.stringify(resJson, null, 2));
|
|
168
|
+
console.error("Unexpected login response:", JSON.stringify(resJson, null, 2));
|
|
145
169
|
throw new Error("Login failed");
|
|
146
170
|
};
|
|
147
171
|
get_refresh_token_expiration = () => {
|
|
@@ -241,6 +265,7 @@ export class MacBid {
|
|
|
241
265
|
*/
|
|
242
266
|
saveTokens = async () => {
|
|
243
267
|
if (!this.tokenFilePath) {
|
|
268
|
+
console.log("No token file path provided, skipping token save");
|
|
244
269
|
return;
|
|
245
270
|
}
|
|
246
271
|
try {
|
|
@@ -250,8 +275,10 @@ export class MacBid {
|
|
|
250
275
|
token_expiration: this.auth_info.token_expiration?.toISOString(),
|
|
251
276
|
refresh_token_expiration: this.auth_info.refresh_token_expiration?.toISOString(),
|
|
252
277
|
user_id: this.auth_info.user_id,
|
|
278
|
+
device_id: this.auth_info.device_id,
|
|
253
279
|
};
|
|
254
280
|
await fs.writeFile(this.tokenFilePath, JSON.stringify(tokenData, null, 2), "utf-8");
|
|
281
|
+
console.log("Tokens saved to file:", this.tokenFilePath);
|
|
255
282
|
}
|
|
256
283
|
catch (error) {
|
|
257
284
|
console.warn("Failed to save tokens:", error);
|
|
@@ -270,6 +297,7 @@ export class MacBid {
|
|
|
270
297
|
token_expiration: tokenData.token_expiration ? new Date(tokenData.token_expiration) : undefined,
|
|
271
298
|
refresh_token_expiration: tokenData.refresh_token_expiration ? new Date(tokenData.refresh_token_expiration) : undefined,
|
|
272
299
|
user_id: tokenData.user_id,
|
|
300
|
+
device_id: tokenData.device_id,
|
|
273
301
|
};
|
|
274
302
|
}
|
|
275
303
|
catch (error) {
|
package/MacBid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MacBid.js","sourceRoot":"","sources":["MacBid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MacBid.js","sourceRoot":"","sources":["MacBid.ts"],"names":[],"mappings":"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"}
|
package/MacBid.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface AuthInfo {
|
|
|
10
10
|
refresh_token?: string;
|
|
11
11
|
refresh_token_expiration?: Date;
|
|
12
12
|
validation_code?: string;
|
|
13
|
+
device_id?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
export interface WatchlistFull {
|
|
@@ -79,32 +80,40 @@ export class MacBid {
|
|
|
79
80
|
constructor(auth_info: AuthInfo, tokenFilePath?: string) {
|
|
80
81
|
this.auth_info = auth_info;
|
|
81
82
|
this.tokenFilePath = tokenFilePath;
|
|
82
|
-
|
|
83
|
+
// Don't authenticate in constructor - wait until actually needed
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
public authenticate = async () => {
|
|
86
87
|
if (this.auth_info) {
|
|
87
|
-
// If we have a token,
|
|
88
|
+
// If we have a token, use it (will be auto-refreshed if expired)
|
|
88
89
|
if (this.auth_info.token) {
|
|
89
90
|
this.macbid_session_headers["Authorization"] = this.auth_info
|
|
90
91
|
.token as string;
|
|
92
|
+
console.log("Using existing access token");
|
|
91
93
|
// Token will be auto-refreshed by ensureValidToken if needed
|
|
92
94
|
return;
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
// If we have a refresh token but no access token, try to refresh first
|
|
96
|
-
if (this.auth_info.refresh_token
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
if (this.auth_info.refresh_token) {
|
|
99
|
+
if (this.isRefreshTokenExpired()) {
|
|
100
|
+
console.log("Refresh token has expired, need to login");
|
|
101
|
+
} else {
|
|
102
|
+
console.log("No access token, attempting to refresh using refresh token");
|
|
103
|
+
try {
|
|
104
|
+
await this.refreshToken();
|
|
105
|
+
console.log("Successfully refreshed token");
|
|
106
|
+
return;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
// If refresh fails, fall through to login
|
|
109
|
+
console.warn("Failed to refresh token, attempting login:", error);
|
|
110
|
+
}
|
|
103
111
|
}
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
// No valid tokens, need to login
|
|
107
115
|
if (this.auth_info.email && this.auth_info.password) {
|
|
116
|
+
console.log("No valid tokens found, attempting login");
|
|
108
117
|
await this.login(this.auth_info.email, this.auth_info.password);
|
|
109
118
|
} else {
|
|
110
119
|
throw new Error("Invalid auth_info");
|
|
@@ -157,8 +166,14 @@ export class MacBid {
|
|
|
157
166
|
password: string,
|
|
158
167
|
validation_code?: string
|
|
159
168
|
): Promise<boolean> => {
|
|
169
|
+
// Use existing device_id if available, otherwise generate a new one
|
|
170
|
+
const device_id = this.auth_info.device_id || crypto.randomUUID();
|
|
171
|
+
if (!this.auth_info.device_id) {
|
|
172
|
+
this.auth_info.device_id = device_id;
|
|
173
|
+
}
|
|
174
|
+
|
|
160
175
|
const login_params = {
|
|
161
|
-
device_id:
|
|
176
|
+
device_id: device_id,
|
|
162
177
|
email: email,
|
|
163
178
|
password: password,
|
|
164
179
|
ref_code: null,
|
|
@@ -204,6 +219,12 @@ export class MacBid {
|
|
|
204
219
|
|
|
205
220
|
const validation_resJson = await validation_res.json();
|
|
206
221
|
|
|
222
|
+
// Check if validation failed
|
|
223
|
+
if (validation_res.status !== 200 || validation_resJson["error"]) {
|
|
224
|
+
console.error("Validation failed:", JSON.stringify(validation_resJson, null, 2));
|
|
225
|
+
throw new Error(`Validation failed: ${validation_resJson["error"] || validation_resJson["message"] || "Unknown error"}`);
|
|
226
|
+
}
|
|
227
|
+
|
|
207
228
|
const access_token = validation_resJson["access_token"] as string;
|
|
208
229
|
const refresh_token = validation_resJson["refresh_token"] as string;
|
|
209
230
|
const user_id = validation_resJson["user_id"] as string;
|
|
@@ -218,10 +239,14 @@ export class MacBid {
|
|
|
218
239
|
this.auth_info.refresh_token = refresh_token;
|
|
219
240
|
this.auth_info.refresh_token_expiration = new Date(expiration_refresh * 1000);
|
|
220
241
|
await this.saveTokens();
|
|
242
|
+
console.log("Login successful, tokens saved");
|
|
221
243
|
return true;
|
|
244
|
+
} else {
|
|
245
|
+
console.error("No access token in validation response:", JSON.stringify(validation_resJson, null, 2));
|
|
246
|
+
throw new Error("Login failed: No access token received");
|
|
222
247
|
}
|
|
223
248
|
}
|
|
224
|
-
console.error(JSON.stringify(resJson, null, 2));
|
|
249
|
+
console.error("Unexpected login response:", JSON.stringify(resJson, null, 2));
|
|
225
250
|
throw new Error("Login failed");
|
|
226
251
|
};
|
|
227
252
|
|
|
@@ -344,6 +369,7 @@ export class MacBid {
|
|
|
344
369
|
*/
|
|
345
370
|
private saveTokens = async (): Promise<void> => {
|
|
346
371
|
if (!this.tokenFilePath) {
|
|
372
|
+
console.log("No token file path provided, skipping token save");
|
|
347
373
|
return;
|
|
348
374
|
}
|
|
349
375
|
|
|
@@ -354,9 +380,11 @@ export class MacBid {
|
|
|
354
380
|
token_expiration: this.auth_info.token_expiration?.toISOString(),
|
|
355
381
|
refresh_token_expiration: this.auth_info.refresh_token_expiration?.toISOString(),
|
|
356
382
|
user_id: this.auth_info.user_id,
|
|
383
|
+
device_id: this.auth_info.device_id,
|
|
357
384
|
};
|
|
358
385
|
|
|
359
386
|
await fs.writeFile(this.tokenFilePath, JSON.stringify(tokenData, null, 2), "utf-8");
|
|
387
|
+
console.log("Tokens saved to file:", this.tokenFilePath);
|
|
360
388
|
} catch (error) {
|
|
361
389
|
console.warn("Failed to save tokens:", error);
|
|
362
390
|
}
|
|
@@ -374,6 +402,7 @@ export class MacBid {
|
|
|
374
402
|
token_expiration?: string;
|
|
375
403
|
refresh_token_expiration?: string;
|
|
376
404
|
user_id?: string;
|
|
405
|
+
device_id?: string;
|
|
377
406
|
};
|
|
378
407
|
|
|
379
408
|
return {
|
|
@@ -382,6 +411,7 @@ export class MacBid {
|
|
|
382
411
|
token_expiration: tokenData.token_expiration ? new Date(tokenData.token_expiration) : undefined,
|
|
383
412
|
refresh_token_expiration: tokenData.refresh_token_expiration ? new Date(tokenData.refresh_token_expiration) : undefined,
|
|
384
413
|
user_id: tokenData.user_id,
|
|
414
|
+
device_id: tokenData.device_id,
|
|
385
415
|
};
|
|
386
416
|
} catch (error) {
|
|
387
417
|
// File doesn't exist or is invalid, return null
|