@thorprovider/adapters 4.2.1 → 4.3.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/PROVIDER_IMPLEMENTATION_ANALYSIS.md +659 -0
- package/dist/index.d.mts +160 -1
- package/dist/index.d.ts +160 -1
- package/dist/index.js +384 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +384 -2
- package/dist/index.mjs.map +1 -1
- package/docs/RETRY_SOLUTION_SUMMARY.md +26 -11
- package/docs/authentication.md +115 -62
- package/docs/capabilities-system.md +4 -2
- package/docs/category-customization.md +37 -29
- package/docs/fetch-reliability-solution.md +127 -278
- package/docs/getting-started.md +43 -29
- package/docs/profile-management.md +68 -38
- package/docs/services-overview.md +4 -2
- package/package.json +1 -1
- package/quick-reference.md +33 -0
- package/src/providers/medusa/admin.test.ts +404 -0
- package/src/providers/medusa/admin.ts +442 -0
- package/src/providers/medusa/auth.test.ts +137 -0
- package/src/providers/medusa/auth.ts +96 -1
- package/src/providers/medusa/index.ts +21 -1
- package/src/providers/shopify/auth.ts +6 -0
- package/src/resilience/README.md +70 -48
- package/src/core/errors.js +0 -161
- package/src/core/fetch-utils.js +0 -240
- package/src/core/logger.js +0 -63
- package/src/metadata/channel-scope-validation.js +0 -136
- package/src/metadata/channel-scope.js +0 -174
- package/src/metadata/index.js +0 -31
- package/src/providers/medusa/auth.js +0 -601
- package/src/providers/medusa/index.js +0 -2485
- package/src/providers/medusa/payment.js +0 -265
- package/src/providers/medusa/transforms.js +0 -505
- package/src/types/capabilities.types.js +0 -141
- package/src/types/provider.js +0 -9
- package/src/utils/payment-utils.js +0 -152
|
@@ -1,601 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Medusa Authentication Provider
|
|
4
|
-
* @module @thorprovider/adapters/providers/medusa/auth
|
|
5
|
-
*
|
|
6
|
-
* Implementation of AuthProvider for Medusa.js v2
|
|
7
|
-
* Supports JWT and session-based authentication
|
|
8
|
-
*/
|
|
9
|
-
var __assign = (this && this.__assign) || function () {
|
|
10
|
-
__assign = Object.assign || function(t) {
|
|
11
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
12
|
-
s = arguments[i];
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
}
|
|
16
|
-
return t;
|
|
17
|
-
};
|
|
18
|
-
return __assign.apply(this, arguments);
|
|
19
|
-
};
|
|
20
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
21
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
22
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
23
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
24
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
25
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
26
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
30
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
31
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
32
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
33
|
-
function step(op) {
|
|
34
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
35
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
36
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
37
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
38
|
-
switch (op[0]) {
|
|
39
|
-
case 0: case 1: t = op; break;
|
|
40
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
41
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
42
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
43
|
-
default:
|
|
44
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
45
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
46
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
47
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
48
|
-
if (t[2]) _.ops.pop();
|
|
49
|
-
_.trys.pop(); continue;
|
|
50
|
-
}
|
|
51
|
-
op = body.call(thisArg, _);
|
|
52
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
53
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
-
exports.MedusaAuthProvider = void 0;
|
|
58
|
-
var logger_1 = require("../../core/logger");
|
|
59
|
-
var errors_1 = require("../../core/errors");
|
|
60
|
-
var transforms_1 = require("./transforms");
|
|
61
|
-
/**
|
|
62
|
-
* Storage manager for authentication tokens
|
|
63
|
-
*/
|
|
64
|
-
var AuthStorageManager = /** @class */ (function () {
|
|
65
|
-
function AuthStorageManager(config) {
|
|
66
|
-
var _a;
|
|
67
|
-
this.storage = null;
|
|
68
|
-
this.tokenKey = 'thor_auth_token';
|
|
69
|
-
this.storageType = config.storage;
|
|
70
|
-
this.storage = (_a = config.customStorage) !== null && _a !== void 0 ? _a : null;
|
|
71
|
-
}
|
|
72
|
-
AuthStorageManager.prototype.getToken = function () {
|
|
73
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
74
|
-
return __generator(this, function (_a) {
|
|
75
|
-
if (this.storage) {
|
|
76
|
-
return [2 /*return*/, this.storage.getItem(this.tokenKey)];
|
|
77
|
-
}
|
|
78
|
-
if (typeof window === 'undefined') {
|
|
79
|
-
// Server-side: no storage available
|
|
80
|
-
return [2 /*return*/, null];
|
|
81
|
-
}
|
|
82
|
-
switch (this.storageType) {
|
|
83
|
-
case 'localStorage':
|
|
84
|
-
return [2 /*return*/, window.localStorage.getItem(this.tokenKey)];
|
|
85
|
-
case 'sessionStorage':
|
|
86
|
-
return [2 /*return*/, window.sessionStorage.getItem(this.tokenKey)];
|
|
87
|
-
case 'cookie':
|
|
88
|
-
// Cookies are handled automatically by fetch, just return null
|
|
89
|
-
return [2 /*return*/, null];
|
|
90
|
-
case 'memory':
|
|
91
|
-
return [2 /*return*/, null];
|
|
92
|
-
default:
|
|
93
|
-
return [2 /*return*/, null];
|
|
94
|
-
}
|
|
95
|
-
return [2 /*return*/];
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
AuthStorageManager.prototype.setToken = function (token) {
|
|
100
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
101
|
-
return __generator(this, function (_a) {
|
|
102
|
-
switch (_a.label) {
|
|
103
|
-
case 0:
|
|
104
|
-
if (!this.storage) return [3 /*break*/, 2];
|
|
105
|
-
return [4 /*yield*/, this.storage.setItem(this.tokenKey, token)];
|
|
106
|
-
case 1:
|
|
107
|
-
_a.sent();
|
|
108
|
-
return [2 /*return*/];
|
|
109
|
-
case 2:
|
|
110
|
-
if (typeof window === 'undefined') {
|
|
111
|
-
return [2 /*return*/];
|
|
112
|
-
}
|
|
113
|
-
switch (this.storageType) {
|
|
114
|
-
case 'localStorage':
|
|
115
|
-
window.localStorage.setItem(this.tokenKey, token);
|
|
116
|
-
break;
|
|
117
|
-
case 'sessionStorage':
|
|
118
|
-
window.sessionStorage.setItem(this.tokenKey, token);
|
|
119
|
-
break;
|
|
120
|
-
case 'cookie':
|
|
121
|
-
case 'memory':
|
|
122
|
-
// No action needed for cookie (handled by SDK) or memory
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
return [2 /*return*/];
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
};
|
|
130
|
-
AuthStorageManager.prototype.removeToken = function () {
|
|
131
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
132
|
-
return __generator(this, function (_a) {
|
|
133
|
-
switch (_a.label) {
|
|
134
|
-
case 0:
|
|
135
|
-
if (!this.storage) return [3 /*break*/, 2];
|
|
136
|
-
return [4 /*yield*/, this.storage.removeItem(this.tokenKey)];
|
|
137
|
-
case 1:
|
|
138
|
-
_a.sent();
|
|
139
|
-
return [2 /*return*/];
|
|
140
|
-
case 2:
|
|
141
|
-
if (typeof window === 'undefined') {
|
|
142
|
-
return [2 /*return*/];
|
|
143
|
-
}
|
|
144
|
-
switch (this.storageType) {
|
|
145
|
-
case 'localStorage':
|
|
146
|
-
window.localStorage.removeItem(this.tokenKey);
|
|
147
|
-
break;
|
|
148
|
-
case 'sessionStorage':
|
|
149
|
-
window.sessionStorage.removeItem(this.tokenKey);
|
|
150
|
-
break;
|
|
151
|
-
case 'cookie':
|
|
152
|
-
case 'memory':
|
|
153
|
-
// No action needed
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
return [2 /*return*/];
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
};
|
|
161
|
-
return AuthStorageManager;
|
|
162
|
-
}());
|
|
163
|
-
/**
|
|
164
|
-
* Medusa authentication provider implementation
|
|
165
|
-
*/
|
|
166
|
-
var MedusaAuthProvider = /** @class */ (function () {
|
|
167
|
-
function MedusaAuthProvider(sdk, authConfig, debug) {
|
|
168
|
-
if (debug === void 0) { debug = false; }
|
|
169
|
-
this.sdk = sdk;
|
|
170
|
-
this.authConfig = authConfig;
|
|
171
|
-
this.logger = (0, logger_1.createLogger)('MedusaAuthProvider', debug);
|
|
172
|
-
this.storageManager = new AuthStorageManager(authConfig);
|
|
173
|
-
this.logger.info('Medusa Auth Provider initialized', {
|
|
174
|
-
method: authConfig.method,
|
|
175
|
-
storage: authConfig.storage,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
// ========================================
|
|
179
|
-
// Authentication Methods
|
|
180
|
-
// ========================================
|
|
181
|
-
MedusaAuthProvider.prototype.login = function (credentials) {
|
|
182
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
183
|
-
var token, customer, error_1;
|
|
184
|
-
return __generator(this, function (_a) {
|
|
185
|
-
switch (_a.label) {
|
|
186
|
-
case 0:
|
|
187
|
-
this.logger.debug('login', { email: credentials.email });
|
|
188
|
-
_a.label = 1;
|
|
189
|
-
case 1:
|
|
190
|
-
_a.trys.push([1, 6, , 7]);
|
|
191
|
-
return [4 /*yield*/, this.sdk.auth.login('customer', 'emailpass', {
|
|
192
|
-
email: credentials.email,
|
|
193
|
-
password: credentials.password,
|
|
194
|
-
})];
|
|
195
|
-
case 2:
|
|
196
|
-
token = _a.sent();
|
|
197
|
-
// Check if token requires additional actions (OAuth flow)
|
|
198
|
-
if (typeof token !== 'string') {
|
|
199
|
-
this.logger.warn('Authentication requires additional actions', token);
|
|
200
|
-
return [2 /*return*/, {
|
|
201
|
-
requiresAction: true,
|
|
202
|
-
redirectUrl: token.location,
|
|
203
|
-
}];
|
|
204
|
-
}
|
|
205
|
-
if (!(this.authConfig.method === 'jwt')) return [3 /*break*/, 4];
|
|
206
|
-
return [4 /*yield*/, this.storageManager.setToken(token)];
|
|
207
|
-
case 3:
|
|
208
|
-
_a.sent();
|
|
209
|
-
_a.label = 4;
|
|
210
|
-
case 4: return [4 /*yield*/, this.getCurrentCustomer()];
|
|
211
|
-
case 5:
|
|
212
|
-
customer = _a.sent();
|
|
213
|
-
this.logger.info('Login successful', { customerId: customer === null || customer === void 0 ? void 0 : customer.id });
|
|
214
|
-
return [2 /*return*/, {
|
|
215
|
-
token: this.authConfig.method === 'jwt' ? token : undefined,
|
|
216
|
-
customer: customer !== null && customer !== void 0 ? customer : undefined,
|
|
217
|
-
}];
|
|
218
|
-
case 6:
|
|
219
|
-
error_1 = _a.sent();
|
|
220
|
-
this.logger.error('Login failed', error_1);
|
|
221
|
-
throw new errors_1.ProviderAPIError("Authentication failed: ".concat(error_1.message), 'LOGIN_FAILED', error_1);
|
|
222
|
-
case 7: return [2 /*return*/];
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
};
|
|
227
|
-
MedusaAuthProvider.prototype.register = function (data) {
|
|
228
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
229
|
-
var token, customer, error_2;
|
|
230
|
-
return __generator(this, function (_a) {
|
|
231
|
-
switch (_a.label) {
|
|
232
|
-
case 0:
|
|
233
|
-
this.logger.debug('register', { email: data.email });
|
|
234
|
-
_a.label = 1;
|
|
235
|
-
case 1:
|
|
236
|
-
_a.trys.push([1, 6, , 7]);
|
|
237
|
-
return [4 /*yield*/, this.sdk.auth.register('customer', 'emailpass', {
|
|
238
|
-
email: data.email,
|
|
239
|
-
password: data.password,
|
|
240
|
-
})];
|
|
241
|
-
case 2:
|
|
242
|
-
token = _a.sent();
|
|
243
|
-
if (typeof token !== 'string') {
|
|
244
|
-
throw new Error('Registration returned non-string token');
|
|
245
|
-
}
|
|
246
|
-
return [4 /*yield*/, this.sdk.store.customer.create({
|
|
247
|
-
email: data.email,
|
|
248
|
-
first_name: data.first_name,
|
|
249
|
-
last_name: data.last_name,
|
|
250
|
-
phone: data.phone,
|
|
251
|
-
})];
|
|
252
|
-
case 3:
|
|
253
|
-
customer = (_a.sent()).customer;
|
|
254
|
-
if (!(this.authConfig.method === 'jwt')) return [3 /*break*/, 5];
|
|
255
|
-
return [4 /*yield*/, this.storageManager.setToken(token)];
|
|
256
|
-
case 4:
|
|
257
|
-
_a.sent();
|
|
258
|
-
_a.label = 5;
|
|
259
|
-
case 5:
|
|
260
|
-
// Note: For session-based auth, the SDK automatically handles cookies
|
|
261
|
-
// when auth.register() is called with auth.type='session' in SDK config
|
|
262
|
-
this.logger.info('Registration successful', { customerId: customer.id });
|
|
263
|
-
return [2 /*return*/, {
|
|
264
|
-
token: this.authConfig.method === 'jwt' ? token : undefined,
|
|
265
|
-
customer: (0, transforms_1.transformCustomer)(customer, customer.email),
|
|
266
|
-
}];
|
|
267
|
-
case 6:
|
|
268
|
-
error_2 = _a.sent();
|
|
269
|
-
this.logger.error('Registration failed', error_2);
|
|
270
|
-
throw new errors_1.ProviderAPIError("Registration failed: ".concat(error_2.message), 'REGISTRATION_FAILED', error_2);
|
|
271
|
-
case 7: return [2 /*return*/];
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
};
|
|
276
|
-
MedusaAuthProvider.prototype.logout = function () {
|
|
277
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
278
|
-
var error_3;
|
|
279
|
-
return __generator(this, function (_a) {
|
|
280
|
-
switch (_a.label) {
|
|
281
|
-
case 0:
|
|
282
|
-
this.logger.debug('logout');
|
|
283
|
-
_a.label = 1;
|
|
284
|
-
case 1:
|
|
285
|
-
_a.trys.push([1, 5, , 6]);
|
|
286
|
-
return [4 /*yield*/, this.storageManager.removeToken()];
|
|
287
|
-
case 2:
|
|
288
|
-
_a.sent();
|
|
289
|
-
if (!(this.authConfig.method === 'session')) return [3 /*break*/, 4];
|
|
290
|
-
return [4 /*yield*/, this.sdk.auth.logout()];
|
|
291
|
-
case 3:
|
|
292
|
-
_a.sent();
|
|
293
|
-
_a.label = 4;
|
|
294
|
-
case 4:
|
|
295
|
-
this.logger.info('Logout successful');
|
|
296
|
-
return [3 /*break*/, 6];
|
|
297
|
-
case 5:
|
|
298
|
-
error_3 = _a.sent();
|
|
299
|
-
this.logger.error('Logout failed', error_3);
|
|
300
|
-
return [3 /*break*/, 6];
|
|
301
|
-
case 6: return [2 /*return*/];
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
};
|
|
306
|
-
// ========================================
|
|
307
|
-
// Password Management
|
|
308
|
-
// ========================================
|
|
309
|
-
MedusaAuthProvider.prototype.requestPasswordReset = function (email) {
|
|
310
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
311
|
-
var error_4;
|
|
312
|
-
return __generator(this, function (_a) {
|
|
313
|
-
switch (_a.label) {
|
|
314
|
-
case 0:
|
|
315
|
-
this.logger.debug('requestPasswordReset', { email: email });
|
|
316
|
-
_a.label = 1;
|
|
317
|
-
case 1:
|
|
318
|
-
_a.trys.push([1, 3, , 4]);
|
|
319
|
-
return [4 /*yield*/, this.sdk.auth.resetPassword('customer', 'emailpass', {
|
|
320
|
-
identifier: email,
|
|
321
|
-
})];
|
|
322
|
-
case 2:
|
|
323
|
-
_a.sent();
|
|
324
|
-
this.logger.info('Password reset email sent', { email: email });
|
|
325
|
-
return [3 /*break*/, 4];
|
|
326
|
-
case 3:
|
|
327
|
-
error_4 = _a.sent();
|
|
328
|
-
this.logger.error('Password reset request failed', error_4);
|
|
329
|
-
throw new errors_1.ProviderAPIError("Password reset request failed: ".concat(error_4.message), 'PASSWORD_RESET_FAILED', error_4);
|
|
330
|
-
case 4: return [2 /*return*/];
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
});
|
|
334
|
-
};
|
|
335
|
-
MedusaAuthProvider.prototype.resetPassword = function (token, password, metadata) {
|
|
336
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
337
|
-
var email, error_5;
|
|
338
|
-
return __generator(this, function (_a) {
|
|
339
|
-
switch (_a.label) {
|
|
340
|
-
case 0:
|
|
341
|
-
this.logger.debug('resetPassword', { hasMetadata: !!metadata });
|
|
342
|
-
email = metadata === null || metadata === void 0 ? void 0 : metadata.email;
|
|
343
|
-
if (!email) {
|
|
344
|
-
throw new errors_1.ProviderAPIError('Email is required in metadata for Medusa password reset', 'MEDUSA_AUTH_PROVIDER', 400);
|
|
345
|
-
}
|
|
346
|
-
_a.label = 1;
|
|
347
|
-
case 1:
|
|
348
|
-
_a.trys.push([1, 3, , 4]);
|
|
349
|
-
// Medusa v2.6+ API: email + password in body, token as 3rd param
|
|
350
|
-
return [4 /*yield*/, this.sdk.auth.updateProvider('customer', 'emailpass', {
|
|
351
|
-
email: email,
|
|
352
|
-
password: password,
|
|
353
|
-
}, token)];
|
|
354
|
-
case 2:
|
|
355
|
-
// Medusa v2.6+ API: email + password in body, token as 3rd param
|
|
356
|
-
_a.sent();
|
|
357
|
-
this.logger.info('Password reset successful');
|
|
358
|
-
return [3 /*break*/, 4];
|
|
359
|
-
case 3:
|
|
360
|
-
error_5 = _a.sent();
|
|
361
|
-
this.logger.error('Password reset failed', error_5);
|
|
362
|
-
throw new errors_1.ProviderAPIError("Password reset failed: ".concat(error_5.message), 'PASSWORD_RESET_CONFIRM_FAILED', error_5);
|
|
363
|
-
case 4: return [2 /*return*/];
|
|
364
|
-
}
|
|
365
|
-
});
|
|
366
|
-
});
|
|
367
|
-
};
|
|
368
|
-
// ========================================
|
|
369
|
-
// Session Management
|
|
370
|
-
// ========================================
|
|
371
|
-
MedusaAuthProvider.prototype.getCurrentCustomer = function () {
|
|
372
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
373
|
-
var customer, error_6;
|
|
374
|
-
return __generator(this, function (_a) {
|
|
375
|
-
switch (_a.label) {
|
|
376
|
-
case 0:
|
|
377
|
-
this.logger.debug('getCurrentCustomer');
|
|
378
|
-
_a.label = 1;
|
|
379
|
-
case 1:
|
|
380
|
-
_a.trys.push([1, 3, , 4]);
|
|
381
|
-
return [4 /*yield*/, this.sdk.store.customer.retrieve()];
|
|
382
|
-
case 2:
|
|
383
|
-
customer = (_a.sent()).customer;
|
|
384
|
-
if (!customer) {
|
|
385
|
-
return [2 /*return*/, null];
|
|
386
|
-
}
|
|
387
|
-
return [2 /*return*/, (0, transforms_1.transformCustomer)(customer, customer.email)];
|
|
388
|
-
case 3:
|
|
389
|
-
error_6 = _a.sent();
|
|
390
|
-
this.logger.debug('No authenticated customer');
|
|
391
|
-
return [2 /*return*/, null];
|
|
392
|
-
case 4: return [2 /*return*/];
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
};
|
|
397
|
-
MedusaAuthProvider.prototype.updateCustomer = function (data) {
|
|
398
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
399
|
-
var updateData, customer, error_7;
|
|
400
|
-
return __generator(this, function (_a) {
|
|
401
|
-
switch (_a.label) {
|
|
402
|
-
case 0:
|
|
403
|
-
this.logger.debug('updateCustomer');
|
|
404
|
-
_a.label = 1;
|
|
405
|
-
case 1:
|
|
406
|
-
_a.trys.push([1, 3, , 4]);
|
|
407
|
-
updateData = __assign({}, data);
|
|
408
|
-
if (updateData.phone === null) {
|
|
409
|
-
delete updateData.phone; // Medusa doesn't accept null, only undefined
|
|
410
|
-
}
|
|
411
|
-
return [4 /*yield*/, this.sdk.store.customer.update(updateData)];
|
|
412
|
-
case 2:
|
|
413
|
-
customer = (_a.sent()).customer;
|
|
414
|
-
return [2 /*return*/, (0, transforms_1.transformCustomer)(customer, customer.email)];
|
|
415
|
-
case 3:
|
|
416
|
-
error_7 = _a.sent();
|
|
417
|
-
this.logger.error('Update customer failed', error_7);
|
|
418
|
-
throw new errors_1.ProviderAPIError("Failed to update customer: ".concat(error_7.message), 'UPDATE_CUSTOMER_FAILED', error_7);
|
|
419
|
-
case 4: return [2 /*return*/];
|
|
420
|
-
}
|
|
421
|
-
});
|
|
422
|
-
});
|
|
423
|
-
};
|
|
424
|
-
MedusaAuthProvider.prototype.isAuthenticated = function () {
|
|
425
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
426
|
-
var customer;
|
|
427
|
-
return __generator(this, function (_a) {
|
|
428
|
-
switch (_a.label) {
|
|
429
|
-
case 0: return [4 /*yield*/, this.getCurrentCustomer()];
|
|
430
|
-
case 1:
|
|
431
|
-
customer = _a.sent();
|
|
432
|
-
return [2 /*return*/, customer !== null];
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
});
|
|
436
|
-
};
|
|
437
|
-
MedusaAuthProvider.prototype.getAuthToken = function () {
|
|
438
|
-
// For JWT auth, return stored token
|
|
439
|
-
if (this.authConfig.method === 'jwt') {
|
|
440
|
-
// This is sync, so we can't use async storage
|
|
441
|
-
// Return null and rely on storage manager
|
|
442
|
-
return null;
|
|
443
|
-
}
|
|
444
|
-
// For session auth, return null (cookies are handled automatically)
|
|
445
|
-
return null;
|
|
446
|
-
};
|
|
447
|
-
// ========================================
|
|
448
|
-
// Address Management
|
|
449
|
-
// ========================================
|
|
450
|
-
MedusaAuthProvider.prototype.getAddresses = function () {
|
|
451
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
452
|
-
var addresses, error_8;
|
|
453
|
-
return __generator(this, function (_a) {
|
|
454
|
-
switch (_a.label) {
|
|
455
|
-
case 0:
|
|
456
|
-
this.logger.debug('getAddresses');
|
|
457
|
-
_a.label = 1;
|
|
458
|
-
case 1:
|
|
459
|
-
_a.trys.push([1, 3, , 4]);
|
|
460
|
-
return [4 /*yield*/, this.sdk.store.customer.listAddress()];
|
|
461
|
-
case 2:
|
|
462
|
-
addresses = (_a.sent()).addresses;
|
|
463
|
-
return [2 /*return*/, addresses.map(function (address) { return (0, transforms_1.transformAddress)(address); })];
|
|
464
|
-
case 3:
|
|
465
|
-
error_8 = _a.sent();
|
|
466
|
-
this.logger.error('Get addresses failed', error_8);
|
|
467
|
-
throw new errors_1.ProviderAPIError("Failed to get addresses: ".concat(error_8.message), 'GET_ADDRESSES_FAILED', error_8);
|
|
468
|
-
case 4: return [2 /*return*/];
|
|
469
|
-
}
|
|
470
|
-
});
|
|
471
|
-
});
|
|
472
|
-
};
|
|
473
|
-
MedusaAuthProvider.prototype.createAddress = function (data) {
|
|
474
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
475
|
-
var medusaData, customer, addresses, address, error_9;
|
|
476
|
-
return __generator(this, function (_a) {
|
|
477
|
-
switch (_a.label) {
|
|
478
|
-
case 0:
|
|
479
|
-
this.logger.debug('createAddress');
|
|
480
|
-
_a.label = 1;
|
|
481
|
-
case 1:
|
|
482
|
-
_a.trys.push([1, 3, , 4]);
|
|
483
|
-
medusaData = {
|
|
484
|
-
first_name: data.firstName,
|
|
485
|
-
last_name: data.lastName,
|
|
486
|
-
company: data.company,
|
|
487
|
-
address_1: data.address1,
|
|
488
|
-
address_2: data.address2,
|
|
489
|
-
city: data.city,
|
|
490
|
-
province: data.province,
|
|
491
|
-
postal_code: data.postalCode,
|
|
492
|
-
country_code: data.countryCode,
|
|
493
|
-
phone: data.phone,
|
|
494
|
-
metadata: data.metadata,
|
|
495
|
-
};
|
|
496
|
-
return [4 /*yield*/, this.sdk.store.customer.createAddress(medusaData)];
|
|
497
|
-
case 2:
|
|
498
|
-
customer = (_a.sent()).customer;
|
|
499
|
-
addresses = customer.addresses || [];
|
|
500
|
-
address = addresses[addresses.length - 1];
|
|
501
|
-
if (!address) {
|
|
502
|
-
throw new Error('No address returned from createAddress');
|
|
503
|
-
}
|
|
504
|
-
return [2 /*return*/, (0, transforms_1.transformAddress)(address)];
|
|
505
|
-
case 3:
|
|
506
|
-
error_9 = _a.sent();
|
|
507
|
-
this.logger.error('Create address failed', error_9);
|
|
508
|
-
throw new errors_1.ProviderAPIError("Failed to create address: ".concat(error_9.message), 'CREATE_ADDRESS_FAILED', error_9);
|
|
509
|
-
case 4: return [2 /*return*/];
|
|
510
|
-
}
|
|
511
|
-
});
|
|
512
|
-
});
|
|
513
|
-
};
|
|
514
|
-
MedusaAuthProvider.prototype.updateAddress = function (addressId, data) {
|
|
515
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
516
|
-
var medusaData, customer, addresses, address, error_10;
|
|
517
|
-
return __generator(this, function (_a) {
|
|
518
|
-
switch (_a.label) {
|
|
519
|
-
case 0:
|
|
520
|
-
this.logger.debug('updateAddress', { addressId: addressId });
|
|
521
|
-
_a.label = 1;
|
|
522
|
-
case 1:
|
|
523
|
-
_a.trys.push([1, 3, , 4]);
|
|
524
|
-
medusaData = {};
|
|
525
|
-
if (data.firstName !== undefined)
|
|
526
|
-
medusaData.first_name = data.firstName;
|
|
527
|
-
if (data.lastName !== undefined)
|
|
528
|
-
medusaData.last_name = data.lastName;
|
|
529
|
-
if (data.company !== undefined)
|
|
530
|
-
medusaData.company = data.company;
|
|
531
|
-
if (data.address1 !== undefined)
|
|
532
|
-
medusaData.address_1 = data.address1;
|
|
533
|
-
if (data.address2 !== undefined)
|
|
534
|
-
medusaData.address_2 = data.address2;
|
|
535
|
-
if (data.city !== undefined)
|
|
536
|
-
medusaData.city = data.city;
|
|
537
|
-
if (data.province !== undefined)
|
|
538
|
-
medusaData.province = data.province;
|
|
539
|
-
if (data.postalCode !== undefined)
|
|
540
|
-
medusaData.postal_code = data.postalCode;
|
|
541
|
-
if (data.countryCode !== undefined)
|
|
542
|
-
medusaData.country_code = data.countryCode;
|
|
543
|
-
if (data.phone !== undefined)
|
|
544
|
-
medusaData.phone = data.phone;
|
|
545
|
-
if (data.metadata !== undefined)
|
|
546
|
-
medusaData.metadata = data.metadata;
|
|
547
|
-
return [4 /*yield*/, this.sdk.store.customer.updateAddress(addressId, medusaData)];
|
|
548
|
-
case 2:
|
|
549
|
-
customer = (_a.sent()).customer;
|
|
550
|
-
addresses = customer.addresses || [];
|
|
551
|
-
address = addresses.find(function (addr) { return addr.id === addressId; });
|
|
552
|
-
if (!address) {
|
|
553
|
-
throw new Error("Address ".concat(addressId, " not found after update"));
|
|
554
|
-
}
|
|
555
|
-
return [2 /*return*/, (0, transforms_1.transformAddress)(address)];
|
|
556
|
-
case 3:
|
|
557
|
-
error_10 = _a.sent();
|
|
558
|
-
this.logger.error('Update address failed', error_10);
|
|
559
|
-
throw new errors_1.ProviderAPIError("Failed to update address: ".concat(error_10.message), 'UPDATE_ADDRESS_FAILED', error_10);
|
|
560
|
-
case 4: return [2 /*return*/];
|
|
561
|
-
}
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
};
|
|
565
|
-
MedusaAuthProvider.prototype.deleteAddress = function (addressId) {
|
|
566
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
567
|
-
var error_11;
|
|
568
|
-
return __generator(this, function (_a) {
|
|
569
|
-
switch (_a.label) {
|
|
570
|
-
case 0:
|
|
571
|
-
this.logger.debug('deleteAddress', { addressId: addressId });
|
|
572
|
-
_a.label = 1;
|
|
573
|
-
case 1:
|
|
574
|
-
_a.trys.push([1, 3, , 4]);
|
|
575
|
-
return [4 /*yield*/, this.sdk.store.customer.deleteAddress(addressId)];
|
|
576
|
-
case 2:
|
|
577
|
-
_a.sent();
|
|
578
|
-
this.logger.info('Address deleted', { addressId: addressId });
|
|
579
|
-
return [3 /*break*/, 4];
|
|
580
|
-
case 3:
|
|
581
|
-
error_11 = _a.sent();
|
|
582
|
-
this.logger.error('Delete address failed', error_11);
|
|
583
|
-
throw new errors_1.ProviderAPIError("Failed to delete address: ".concat(error_11.message), 'DELETE_ADDRESS_FAILED', error_11);
|
|
584
|
-
case 4: return [2 /*return*/];
|
|
585
|
-
}
|
|
586
|
-
});
|
|
587
|
-
});
|
|
588
|
-
};
|
|
589
|
-
MedusaAuthProvider.prototype.deleteCustomerAccount = function () {
|
|
590
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
591
|
-
return __generator(this, function (_a) {
|
|
592
|
-
this.logger.debug('deleteCustomerAccount');
|
|
593
|
-
// TODO: Implement when custom Medusa backend endpoint is ready
|
|
594
|
-
// DELETE /store/customers/me
|
|
595
|
-
throw new errors_1.ProviderAPIError('Delete customer account is not yet implemented. Requires custom Medusa backend endpoint.', 'NOT_IMPLEMENTED', undefined);
|
|
596
|
-
});
|
|
597
|
-
});
|
|
598
|
-
};
|
|
599
|
-
return MedusaAuthProvider;
|
|
600
|
-
}());
|
|
601
|
-
exports.MedusaAuthProvider = MedusaAuthProvider;
|