@pvh-afl/core 1.0.16 → 1.0.18

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 (32) hide show
  1. package/dist/integrations/index.d.ts +2 -0
  2. package/dist/integrations/index.d.ts.map +1 -1
  3. package/dist/integrations/index.js +4 -0
  4. package/dist/integrations/index.js.map +1 -1
  5. package/dist/integrations/integrations.module.d.ts.map +1 -1
  6. package/dist/integrations/integrations.module.js +10 -0
  7. package/dist/integrations/integrations.module.js.map +1 -1
  8. package/dist/integrations/reviews/index.d.ts +3 -0
  9. package/dist/integrations/reviews/index.d.ts.map +1 -0
  10. package/dist/integrations/reviews/index.js +6 -0
  11. package/dist/integrations/reviews/index.js.map +1 -0
  12. package/dist/integrations/reviews/judgeme.service.d.ts +86 -0
  13. package/dist/integrations/reviews/judgeme.service.d.ts.map +1 -0
  14. package/dist/integrations/reviews/judgeme.service.js +448 -0
  15. package/dist/integrations/reviews/judgeme.service.js.map +1 -0
  16. package/dist/integrations/reviews/judgeme.types.d.ts +127 -0
  17. package/dist/integrations/reviews/judgeme.types.d.ts.map +1 -0
  18. package/dist/integrations/reviews/judgeme.types.js +9 -0
  19. package/dist/integrations/reviews/judgeme.types.js.map +1 -0
  20. package/dist/integrations/swish/index.d.ts +3 -0
  21. package/dist/integrations/swish/index.d.ts.map +1 -0
  22. package/dist/integrations/swish/index.js +6 -0
  23. package/dist/integrations/swish/index.js.map +1 -0
  24. package/dist/integrations/swish/swish.service.d.ts +93 -0
  25. package/dist/integrations/swish/swish.service.d.ts.map +1 -0
  26. package/dist/integrations/swish/swish.service.js +478 -0
  27. package/dist/integrations/swish/swish.service.js.map +1 -0
  28. package/dist/integrations/swish/swish.types.d.ts +115 -0
  29. package/dist/integrations/swish/swish.types.d.ts.map +1 -0
  30. package/dist/integrations/swish/swish.types.js +9 -0
  31. package/dist/integrations/swish/swish.types.js.map +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwishService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const logger_1 = require("../../common/logger");
7
+ /**
8
+ * Swish Wishlist Service
9
+ *
10
+ * Provides integration with Swish's Wishlist API.
11
+ * Handles:
12
+ * - Token/session management (POST /profiles/token)
13
+ * - Wishlist items (GET/POST/DELETE /items)
14
+ * - Wishlist lists (GET/POST/PATCH/DELETE /lists)
15
+ *
16
+ * @see https://developers.swish.app/swish-api/authentication
17
+ */
18
+ let SwishService = class SwishService {
19
+ config = null;
20
+ brand = '';
21
+ defaultTimeout = 10000;
22
+ /**
23
+ * Configure the service for a specific brand
24
+ */
25
+ configure(brand, config) {
26
+ this.brand = brand;
27
+ this.config = {
28
+ timeout: this.defaultTimeout,
29
+ ...config,
30
+ };
31
+ logger_1.logger.info('Swish wishlist service configured', { brand });
32
+ }
33
+ /**
34
+ * Check if the service is configured
35
+ */
36
+ isConfigured() {
37
+ return this.config !== null;
38
+ }
39
+ /**
40
+ * Create an anonymous session for guest users.
41
+ */
42
+ async createSession() {
43
+ if (!this.config) {
44
+ return this.notConfiguredError();
45
+ }
46
+ const response = await this.request('POST', '/profiles/token', {});
47
+ if (!response.success) {
48
+ return { success: false, error: response.error };
49
+ }
50
+ const token = response.data.data.token;
51
+ const profileGid = response.data.data.profile;
52
+ logger_1.logger.info('Created Swish session', { brand: this.brand, profileGid });
53
+ return {
54
+ success: true,
55
+ data: {
56
+ session: {
57
+ gid: profileGid,
58
+ token: token,
59
+ expiresAt: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
60
+ },
61
+ },
62
+ };
63
+ }
64
+ /**
65
+ * Create or get a customer profile token for logged-in users.
66
+ */
67
+ async createCustomerProfile(customerId) {
68
+ if (!this.config) {
69
+ return this.notConfiguredError();
70
+ }
71
+ const numericId = this.extractNumericId(customerId);
72
+ const response = await this.request('POST', '/profiles/token', {
73
+ customer: `gid://shopify/Customer/${numericId}`,
74
+ });
75
+ if (!response.success) {
76
+ return { success: false, error: response.error };
77
+ }
78
+ logger_1.logger.info('Created/retrieved Swish customer profile', {
79
+ brand: this.brand,
80
+ customerId,
81
+ profileGid: response.data.data.profile,
82
+ });
83
+ return {
84
+ success: true,
85
+ data: {
86
+ profile: {
87
+ gid: response.data.data.profile,
88
+ customerId: numericId,
89
+ },
90
+ token: response.data.data.token,
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Merge guest session into customer account.
96
+ *
97
+ * Per Swish API docs: "When a customer logs in, replace their session token
98
+ * with a customer token. To link the previous session to the new customer
99
+ * session, provide the customer and session IDs when creating the customer token."
100
+ *
101
+ * This calls POST /profiles/token with both customer and session to merge them.
102
+ */
103
+ async mergeSession(sessionGid, customerId) {
104
+ if (!this.config) {
105
+ return this.notConfiguredError();
106
+ }
107
+ const numericId = this.extractNumericId(customerId);
108
+ // Call /profiles/token with both customer AND session to merge them
109
+ const response = await this.request('POST', '/profiles/token', {
110
+ customer: `gid://shopify/Customer/${numericId}`,
111
+ session: sessionGid,
112
+ });
113
+ if (!response.success) {
114
+ return { success: false, error: response.error };
115
+ }
116
+ logger_1.logger.info('Merged Swish session into customer', {
117
+ brand: this.brand,
118
+ sessionGid,
119
+ customerId,
120
+ profileGid: response.data.data.profile,
121
+ });
122
+ return {
123
+ success: true,
124
+ data: {
125
+ token: response.data.data.token,
126
+ profileGid: response.data.data.profile,
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Get wishlist items with pagination.
132
+ */
133
+ async getItems(token, page = 1, limit = 50) {
134
+ if (!this.config) {
135
+ return this.notConfiguredError();
136
+ }
137
+ const params = new URLSearchParams();
138
+ params.set('page', page.toString());
139
+ params.set('limit', limit.toString());
140
+ const response = await this.requestWithToken('GET', `/items?${params.toString()}`, token);
141
+ if (!response.success) {
142
+ return { success: false, error: response.error };
143
+ }
144
+ const items = response.data.data || [];
145
+ return {
146
+ success: true,
147
+ data: {
148
+ items: items.map((item) => ({
149
+ id: item.id,
150
+ productId: item.productId.toString(),
151
+ variantId: item.variantId ? item.variantId.toString() : undefined,
152
+ listId: item.lists?.[0],
153
+ createdAt: item.createdAt,
154
+ })),
155
+ pageInfo: {
156
+ hasNextPage: items.length >= limit,
157
+ endCursor: items.length >= limit ? (page + 1).toString() : undefined,
158
+ },
159
+ },
160
+ };
161
+ }
162
+ /**
163
+ * Add item to wishlist.
164
+ */
165
+ async addItem(token, productId, variantId, listId) {
166
+ if (!this.config) {
167
+ return this.notConfiguredError();
168
+ }
169
+ const body = {
170
+ productId: parseInt(this.extractNumericId(productId), 10),
171
+ };
172
+ if (variantId) {
173
+ body.variantId = parseInt(this.extractNumericId(variantId), 10);
174
+ }
175
+ const response = await this.requestWithToken('POST', '/items', token, body);
176
+ if (!response.success) {
177
+ return { success: false, error: response.error };
178
+ }
179
+ const item = response.data.data;
180
+ // If listId provided, associate item with list
181
+ if (listId) {
182
+ await this.requestWithToken('PUT', `/items/${item.id}/lists`, token, {
183
+ listIds: [listId],
184
+ });
185
+ }
186
+ logger_1.logger.info('Added item to Swish wishlist', {
187
+ brand: this.brand,
188
+ productId,
189
+ variantId,
190
+ itemId: item.id,
191
+ });
192
+ return {
193
+ success: true,
194
+ data: {
195
+ item: {
196
+ id: item.id,
197
+ productId: item.productId.toString(),
198
+ variantId: item.variantId?.toString(),
199
+ listId,
200
+ createdAt: item.createdAt,
201
+ },
202
+ },
203
+ };
204
+ }
205
+ /**
206
+ * Remove item from wishlist.
207
+ */
208
+ async removeItem(token, itemId) {
209
+ if (!this.config) {
210
+ return this.notConfiguredError();
211
+ }
212
+ const response = await this.requestWithToken('DELETE', `/items/${itemId}`, token);
213
+ if (!response.success) {
214
+ return { success: false, error: response.error };
215
+ }
216
+ logger_1.logger.info('Removed item from Swish wishlist', { brand: this.brand, itemId });
217
+ return { success: true };
218
+ }
219
+ /**
220
+ * Get all lists for a profile.
221
+ */
222
+ async getLists(token) {
223
+ if (!this.config) {
224
+ return this.notConfiguredError();
225
+ }
226
+ const response = await this.requestWithToken('GET', '/lists', token);
227
+ if (!response.success) {
228
+ return { success: false, error: response.error };
229
+ }
230
+ const lists = response.data.data || [];
231
+ return {
232
+ success: true,
233
+ data: {
234
+ lists: lists.map((list) => ({
235
+ id: list.id,
236
+ name: list.name,
237
+ isDefault: list.isDefault ?? false,
238
+ itemCount: list.itemCount ?? 0,
239
+ createdAt: list.createdAt,
240
+ })),
241
+ },
242
+ };
243
+ }
244
+ /**
245
+ * Create a new list.
246
+ */
247
+ async createList(token, name) {
248
+ if (!this.config) {
249
+ return this.notConfiguredError();
250
+ }
251
+ const response = await this.requestWithToken('POST', '/lists', token, { name });
252
+ if (!response.success) {
253
+ return { success: false, error: response.error };
254
+ }
255
+ const list = response.data.data;
256
+ logger_1.logger.info('Created Swish list', { brand: this.brand, listId: list.id, name });
257
+ return {
258
+ success: true,
259
+ data: {
260
+ list: {
261
+ id: list.id,
262
+ name: list.name,
263
+ isDefault: list.isDefault ?? false,
264
+ itemCount: list.itemCount ?? 0,
265
+ createdAt: list.createdAt,
266
+ },
267
+ },
268
+ };
269
+ }
270
+ /**
271
+ * Update a list.
272
+ */
273
+ async updateList(token, listId, name) {
274
+ if (!this.config) {
275
+ return this.notConfiguredError();
276
+ }
277
+ const response = await this.requestWithToken('PATCH', `/lists/${listId}`, token, { name });
278
+ if (!response.success) {
279
+ return { success: false, error: response.error };
280
+ }
281
+ const list = response.data.data;
282
+ logger_1.logger.info('Updated Swish list', { brand: this.brand, listId, name });
283
+ return {
284
+ success: true,
285
+ data: {
286
+ list: {
287
+ id: list.id,
288
+ name: list.name,
289
+ isDefault: list.isDefault ?? false,
290
+ itemCount: list.itemCount ?? 0,
291
+ createdAt: list.createdAt,
292
+ },
293
+ },
294
+ };
295
+ }
296
+ /**
297
+ * Delete a list.
298
+ */
299
+ async deleteList(token, listId) {
300
+ if (!this.config) {
301
+ return this.notConfiguredError();
302
+ }
303
+ const response = await this.requestWithToken('DELETE', `/lists/${listId}`, token);
304
+ if (!response.success) {
305
+ return { success: false, error: response.error };
306
+ }
307
+ logger_1.logger.info('Deleted Swish list', { brand: this.brand, listId });
308
+ return { success: true };
309
+ }
310
+ // ===========================================================================
311
+ // Private Methods
312
+ // ===========================================================================
313
+ /**
314
+ * Make a request using admin token (for session/profile management)
315
+ */
316
+ async request(method, path, body) {
317
+ if (!this.config) {
318
+ return this.notConfiguredError();
319
+ }
320
+ const url = `${this.config.baseUrl}${path}`;
321
+ const headers = {
322
+ Authorization: `Bearer ${this.config.adminToken}`,
323
+ };
324
+ if (body && Object.keys(body).length > 0) {
325
+ headers['Content-Type'] = 'application/json';
326
+ }
327
+ try {
328
+ const controller = new AbortController();
329
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout ?? this.defaultTimeout);
330
+ const response = await fetch(url, {
331
+ method,
332
+ headers,
333
+ body: body && Object.keys(body).length > 0 ? JSON.stringify(body) : undefined,
334
+ signal: controller.signal,
335
+ });
336
+ clearTimeout(timeoutId);
337
+ if (!response.ok) {
338
+ const errorText = await response.text();
339
+ return {
340
+ success: false,
341
+ error: this.normalizeError(response.status, errorText),
342
+ };
343
+ }
344
+ if (response.status === 204) {
345
+ return { success: true, data: {} };
346
+ }
347
+ const data = await response.json();
348
+ return { success: true, data: data };
349
+ }
350
+ catch (error) {
351
+ logger_1.logger.error('Swish request failed', {
352
+ brand: this.brand,
353
+ method,
354
+ path,
355
+ error: error instanceof Error ? error.message : 'Unknown error',
356
+ });
357
+ return {
358
+ success: false,
359
+ error: {
360
+ code: 'REQUEST_FAILED',
361
+ message: error instanceof Error ? error.message : 'Request failed',
362
+ details: error,
363
+ },
364
+ };
365
+ }
366
+ }
367
+ /**
368
+ * Make a request using session/customer token (for items/lists operations)
369
+ */
370
+ async requestWithToken(method, path, token, body) {
371
+ if (!this.config) {
372
+ return this.notConfiguredError();
373
+ }
374
+ const url = `${this.config.baseUrl}${path}`;
375
+ const headers = {
376
+ Authorization: `Bearer ${token}`,
377
+ };
378
+ if (body) {
379
+ headers['Content-Type'] = 'application/json';
380
+ }
381
+ try {
382
+ const controller = new AbortController();
383
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout ?? this.defaultTimeout);
384
+ const response = await fetch(url, {
385
+ method,
386
+ headers,
387
+ body: body ? JSON.stringify(body) : undefined,
388
+ signal: controller.signal,
389
+ });
390
+ clearTimeout(timeoutId);
391
+ if (!response.ok) {
392
+ const errorText = await response.text();
393
+ return {
394
+ success: false,
395
+ error: this.normalizeError(response.status, errorText),
396
+ };
397
+ }
398
+ if (response.status === 204) {
399
+ return { success: true, data: {} };
400
+ }
401
+ const data = await response.json();
402
+ return { success: true, data: data };
403
+ }
404
+ catch (error) {
405
+ logger_1.logger.error('Swish token request failed', {
406
+ brand: this.brand,
407
+ method,
408
+ path,
409
+ error: error instanceof Error ? error.message : 'Unknown error',
410
+ });
411
+ return {
412
+ success: false,
413
+ error: {
414
+ code: 'REQUEST_FAILED',
415
+ message: error instanceof Error ? error.message : 'Request failed',
416
+ details: error,
417
+ },
418
+ };
419
+ }
420
+ }
421
+ /**
422
+ * Return not configured error
423
+ */
424
+ notConfiguredError() {
425
+ return {
426
+ success: false,
427
+ error: {
428
+ code: 'NOT_CONFIGURED',
429
+ message: 'Swish service is not configured',
430
+ },
431
+ };
432
+ }
433
+ /**
434
+ * Extract numeric ID from Shopify GID or return as-is if already numeric.
435
+ */
436
+ extractNumericId(id) {
437
+ if (id.startsWith('gid://')) {
438
+ const parts = id.split('/');
439
+ return parts[parts.length - 1];
440
+ }
441
+ return id;
442
+ }
443
+ /**
444
+ * Normalize error responses
445
+ */
446
+ normalizeError(status, body) {
447
+ let parsed;
448
+ try {
449
+ parsed = JSON.parse(body);
450
+ }
451
+ catch {
452
+ parsed = { message: body };
453
+ }
454
+ const errorMap = {
455
+ 400: 'BAD_REQUEST',
456
+ 401: 'UNAUTHORIZED',
457
+ 403: 'FORBIDDEN',
458
+ 404: 'NOT_FOUND',
459
+ 429: 'RATE_LIMITED',
460
+ 500: 'INTERNAL_ERROR',
461
+ };
462
+ const message = typeof parsed === 'object' && parsed !== null
463
+ ? parsed.message ||
464
+ parsed.error ||
465
+ `HTTP ${status}`
466
+ : `HTTP ${status}`;
467
+ return {
468
+ code: errorMap[status] ?? 'UNKNOWN_ERROR',
469
+ message: String(message),
470
+ details: parsed,
471
+ };
472
+ }
473
+ };
474
+ exports.SwishService = SwishService;
475
+ exports.SwishService = SwishService = tslib_1.__decorate([
476
+ (0, common_1.Injectable)()
477
+ ], SwishService);
478
+ //# sourceMappingURL=swish.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swish.service.js","sourceRoot":"","sources":["../../../src/integrations/swish/swish.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Swish Wishlist API Types
3
+ *
4
+ * Type definitions for Swish Wishlist integration.
5
+ * @see https://developers.swish.app/swish-api/authentication
6
+ */
7
+ import { IntegrationResponse } from '../integration.types';
8
+ /**
9
+ * Swish service configuration
10
+ */
11
+ export interface SwishConfig {
12
+ /** Base URL for Swish API (e.g., https://swish.app/api/2025-04) */
13
+ baseUrl: string;
14
+ /** Admin API token for authentication */
15
+ adminToken: string;
16
+ /** Shop domain for Shopify integration */
17
+ shopDomain: string;
18
+ /** Request timeout in milliseconds (default: 10000) */
19
+ timeout?: number;
20
+ }
21
+ /**
22
+ * Swish session data
23
+ */
24
+ export interface SwishSession {
25
+ gid: string;
26
+ token: string;
27
+ expiresAt: string;
28
+ }
29
+ /**
30
+ * Create session response
31
+ */
32
+ export interface SwishCreateSessionResponse {
33
+ session: SwishSession;
34
+ }
35
+ /**
36
+ * Customer profile response
37
+ */
38
+ export interface SwishCustomerProfileResponse {
39
+ profile: {
40
+ gid: string;
41
+ customerId: string;
42
+ };
43
+ token: string;
44
+ }
45
+ /**
46
+ * Swish item from API
47
+ */
48
+ export interface SwishItem {
49
+ id: string;
50
+ productId: string;
51
+ variantId?: string;
52
+ listId?: string;
53
+ createdAt: string;
54
+ }
55
+ /**
56
+ * Items response with pagination
57
+ */
58
+ export interface SwishItemsResponse {
59
+ items: SwishItem[];
60
+ pageInfo: {
61
+ hasNextPage: boolean;
62
+ endCursor?: string;
63
+ };
64
+ }
65
+ /**
66
+ * Add item response
67
+ */
68
+ export interface SwishAddItemResponse {
69
+ item: SwishItem;
70
+ }
71
+ /**
72
+ * Swish list
73
+ */
74
+ export interface SwishList {
75
+ id: string;
76
+ name: string;
77
+ isDefault: boolean;
78
+ itemCount: number;
79
+ createdAt: string;
80
+ }
81
+ /**
82
+ * Lists response
83
+ */
84
+ export interface SwishListsResponse {
85
+ lists: SwishList[];
86
+ }
87
+ /**
88
+ * Single list response
89
+ */
90
+ export interface SwishListResponse {
91
+ list: SwishList;
92
+ }
93
+ /**
94
+ * Merge session response
95
+ */
96
+ export interface SwishMergeResponse {
97
+ token: string;
98
+ profileGid: string;
99
+ }
100
+ /**
101
+ * Wishlist service interface
102
+ */
103
+ export interface IWishlistService {
104
+ createSession(): Promise<IntegrationResponse<SwishCreateSessionResponse>>;
105
+ createCustomerProfile(customerId: string): Promise<IntegrationResponse<SwishCustomerProfileResponse>>;
106
+ mergeSession(sessionGid: string, customerId: string): Promise<IntegrationResponse<SwishMergeResponse>>;
107
+ getItems(token: string, page?: number, limit?: number): Promise<IntegrationResponse<SwishItemsResponse>>;
108
+ addItem(token: string, productId: string, variantId?: string, listId?: string): Promise<IntegrationResponse<SwishAddItemResponse>>;
109
+ removeItem(token: string, itemId: string): Promise<IntegrationResponse<void>>;
110
+ getLists(token: string): Promise<IntegrationResponse<SwishListsResponse>>;
111
+ createList(token: string, name: string): Promise<IntegrationResponse<SwishListResponse>>;
112
+ updateList(token: string, listId: string, name: string): Promise<IntegrationResponse<SwishListResponse>>;
113
+ deleteList(token: string, listId: string): Promise<IntegrationResponse<void>>;
114
+ }
115
+ //# sourceMappingURL=swish.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swish.types.d.ts","sourceRoot":"","sources":["../../../src/integrations/swish/swish.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Swish Wishlist API Types
4
+ *
5
+ * Type definitions for Swish Wishlist integration.
6
+ * @see https://developers.swish.app/swish-api/authentication
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=swish.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swish.types.js","sourceRoot":"","sources":["../../../src/integrations/swish/swish.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pvh-afl/core",
3
- "version": "1.0.16",
3
+ "version": "1.0.18",
4
4
  "description": "AFL Core - Shared services for multi-brand commerce platform",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",