psn-mcp 0.3.0 → 0.3.2
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/dist/psn/store.d.ts +5 -0
- package/dist/psn/store.d.ts.map +1 -1
- package/dist/psn/store.js +125 -26
- package/dist/psn/store.js.map +1 -1
- package/package.json +1 -1
package/dist/psn/store.d.ts
CHANGED
|
@@ -54,7 +54,12 @@ export declare class PsnStore {
|
|
|
54
54
|
private readonly locale;
|
|
55
55
|
constructor(locale?: string);
|
|
56
56
|
private fetchNextData;
|
|
57
|
+
private toStorePrice;
|
|
57
58
|
private toStoreItem;
|
|
59
|
+
private extractBatarangCaches;
|
|
60
|
+
private mergeProductEntities;
|
|
61
|
+
private findProductPrice;
|
|
62
|
+
private toStarRating;
|
|
58
63
|
/** One page (24 items) of a store category grid, e.g. the "All deals" category. */
|
|
59
64
|
getCategoryGrid(categoryId: string, page?: number): Promise<CategoryGridPage>;
|
|
60
65
|
/** Product details including price and the community star rating. */
|
package/dist/psn/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/psn/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,yCAAyC,CAAC;AAI5E,qBAAa,aAAc,SAAQ,KAAK;aAGpB,MAAM,CAAC,EAAE,MAAM;IAFjC,YACE,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EAIhC;CACF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/psn/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,yCAAyC,CAAC;AAI5E,qBAAa,aAAc,SAAQ,KAAK;aAGpB,MAAM,CAAC,EAAE,MAAM;IAFjC,YACE,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EAIhC;CACF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAiBD,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,GAAE,MAAgB,EAAI;YAE3C,aAAa;IA4C3B,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,YAAY;IAiBpB,mFAAmF;IAC7E,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,IAAI,SAAI,GACP,OAAO,CAAC,gBAAgB,CAAC,CAoC3B;IAED,qEAAqE;IAC/D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAkCzD;IAED;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA0BzB,kEAAkE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAY/C;IAED;;;OAGG;IACG,QAAQ,CACZ,IAAI,SAAI,EACR,cAAc,UAAQ,EACtB,UAAU,SAAwB,GACjC,OAAO,CACR,gBAAgB,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG;YAAE,UAAU,CAAC,EAAE,UAAU,CAAA;SAAE,CAAC,CAAA;KAAE,CAC7E,CAaA;CACF"}
|
package/dist/psn/store.js
CHANGED
|
@@ -52,8 +52,32 @@ export class PsnStore {
|
|
|
52
52
|
title,
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
toStorePrice(value) {
|
|
56
|
+
if (!value || typeof value !== "object")
|
|
57
|
+
return undefined;
|
|
58
|
+
const price = value;
|
|
59
|
+
const discountText = [
|
|
60
|
+
price.discountText,
|
|
61
|
+
price.displayDiscountText,
|
|
62
|
+
price.savingTag,
|
|
63
|
+
].find((field) => typeof field === "string" && field.length > 0);
|
|
64
|
+
const normalized = {
|
|
65
|
+
basePrice: typeof price.basePrice === "string" ? price.basePrice : undefined,
|
|
66
|
+
discountedPrice: typeof price.discountedPrice === "string"
|
|
67
|
+
? price.discountedPrice
|
|
68
|
+
: undefined,
|
|
69
|
+
discountText,
|
|
70
|
+
isFree: typeof price.isFree === "boolean" ? price.isFree : undefined,
|
|
71
|
+
isTiedToSubscription: typeof price.isTiedToSubscription === "boolean"
|
|
72
|
+
? price.isTiedToSubscription
|
|
73
|
+
: undefined,
|
|
74
|
+
};
|
|
75
|
+
return Object.values(normalized).some((field) => field !== undefined)
|
|
76
|
+
? normalized
|
|
77
|
+
: undefined;
|
|
78
|
+
}
|
|
79
|
+
toStoreItem(entity, priceOverride) {
|
|
80
|
+
const price = priceOverride ?? this.toStorePrice(entity.price);
|
|
57
81
|
const media = entity.media;
|
|
58
82
|
const image = media?.find((m) => m.type === "IMAGE" && m.role === "MASTER") ??
|
|
59
83
|
media?.find((m) => m.type === "IMAGE");
|
|
@@ -63,16 +87,92 @@ export class PsnStore {
|
|
|
63
87
|
type: (entity.localizedStoreDisplayClassification ??
|
|
64
88
|
entity.storeDisplayClassification),
|
|
65
89
|
platforms: entity.platforms,
|
|
66
|
-
price
|
|
67
|
-
basePrice: price.basePrice,
|
|
68
|
-
discountedPrice: price.discountedPrice,
|
|
69
|
-
discountText: price.discountText,
|
|
70
|
-
isFree: price.isFree,
|
|
71
|
-
isTiedToSubscription: price.isTiedToSubscription,
|
|
72
|
-
},
|
|
90
|
+
price,
|
|
73
91
|
imageUrl: image?.url,
|
|
74
92
|
};
|
|
75
93
|
}
|
|
94
|
+
extractBatarangCaches(pageProps) {
|
|
95
|
+
const batarangs = pageProps.batarangs;
|
|
96
|
+
const caches = [];
|
|
97
|
+
for (const batarang of Object.values(batarangs ?? {})) {
|
|
98
|
+
const text = batarang.text;
|
|
99
|
+
if (!text)
|
|
100
|
+
continue;
|
|
101
|
+
const inner = text.match(/<script[^>]*>(.*)<\/script>/s)?.[1];
|
|
102
|
+
if (!inner)
|
|
103
|
+
continue;
|
|
104
|
+
try {
|
|
105
|
+
const payload = JSON.parse(inner);
|
|
106
|
+
if (payload.cache)
|
|
107
|
+
caches.push(payload.cache);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// A malformed optional micro-frontend must not hide the base product.
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return caches;
|
|
114
|
+
}
|
|
115
|
+
mergeProductEntities(states, productId) {
|
|
116
|
+
const matches = [];
|
|
117
|
+
for (const state of states) {
|
|
118
|
+
for (const [key, value] of Object.entries(state)) {
|
|
119
|
+
const productKey = `Product:${productId}`;
|
|
120
|
+
if ((key === productKey ||
|
|
121
|
+
key.startsWith(`${productKey}:`) ||
|
|
122
|
+
(value.__typename === "Product" && value.id === productId)) &&
|
|
123
|
+
!matches.includes(value)) {
|
|
124
|
+
matches.push(value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return matches.length > 0 ? Object.assign({}, ...matches) : undefined;
|
|
129
|
+
}
|
|
130
|
+
findProductPrice(product, states, productId) {
|
|
131
|
+
const direct = this.toStorePrice(product.price);
|
|
132
|
+
if (direct)
|
|
133
|
+
return direct;
|
|
134
|
+
const ctaRefs = product.webctas ?? [];
|
|
135
|
+
for (const ref of ctaRefs) {
|
|
136
|
+
if (!ref.__ref)
|
|
137
|
+
continue;
|
|
138
|
+
for (const state of states) {
|
|
139
|
+
const price = this.toStorePrice(state[ref.__ref]?.price);
|
|
140
|
+
if (price)
|
|
141
|
+
return price;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Current product pages keep the price on a GameCTA entity in a
|
|
145
|
+
// micro-frontend cache. The primary product id is part of that entity key.
|
|
146
|
+
for (const state of states) {
|
|
147
|
+
for (const [key, value] of Object.entries(state)) {
|
|
148
|
+
const matchesProduct = key.split(":").some((segment) => {
|
|
149
|
+
if (segment === productId)
|
|
150
|
+
return true;
|
|
151
|
+
const skuSuffix = segment.slice(productId.length);
|
|
152
|
+
return (segment.startsWith(`${productId}-U`) && /^-U\d+$/.test(skuSuffix));
|
|
153
|
+
});
|
|
154
|
+
if (value.__typename !== "GameCTA" || !matchesProduct) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const price = this.toStorePrice(value.price);
|
|
158
|
+
if (price)
|
|
159
|
+
return price;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
toStarRating(value) {
|
|
165
|
+
if (!value || typeof value !== "object")
|
|
166
|
+
return undefined;
|
|
167
|
+
const rating = value;
|
|
168
|
+
if (rating.averageRating === undefined)
|
|
169
|
+
return undefined;
|
|
170
|
+
return {
|
|
171
|
+
averageRating: rating.averageRating,
|
|
172
|
+
totalRatingsCount: rating.totalRatingsCount ?? 0,
|
|
173
|
+
ratingsDistribution: rating.ratingsDistribution?.map(({ rating: score, percentage }) => ({ rating: score, percentage })),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
76
176
|
/** One page (24 items) of a store category grid, e.g. the "All deals" category. */
|
|
77
177
|
async getCategoryGrid(categoryId, page = 1) {
|
|
78
178
|
const { apollo, title } = await this.fetchNextData(`/category/${encodeURIComponent(categoryId)}/${page}`);
|
|
@@ -102,15 +202,24 @@ export class PsnStore {
|
|
|
102
202
|
/** Product details including price and the community star rating. */
|
|
103
203
|
async getProduct(productId) {
|
|
104
204
|
const { apollo, pageProps } = await this.fetchNextData(`/product/${encodeURIComponent(productId)}`);
|
|
105
|
-
|
|
106
|
-
|
|
205
|
+
// Sony now normalizes product pages across several independently rendered
|
|
206
|
+
// micro-frontends. Merge every fragment for this exact product so the
|
|
207
|
+
// result contains the image/platform/type fields as well as the base name.
|
|
208
|
+
const states = [apollo, ...this.extractBatarangCaches(pageProps)];
|
|
209
|
+
const entity = this.mergeProductEntities(states, productId);
|
|
107
210
|
if (!entity) {
|
|
108
211
|
throw new PsnStoreError(`Product ${productId} not found on the PlayStation Store.`);
|
|
109
212
|
}
|
|
213
|
+
const concept = entity.concept;
|
|
214
|
+
const conceptId = entity.conceptId == null
|
|
215
|
+
? (concept?.id?.toString() ?? concept?.__ref?.replace(/^Concept:/, ""))
|
|
216
|
+
: String(entity.conceptId);
|
|
110
217
|
return {
|
|
111
|
-
...this.toStoreItem(entity),
|
|
112
|
-
starRating: this.
|
|
113
|
-
|
|
218
|
+
...this.toStoreItem(entity, this.findProductPrice(entity, states, productId)),
|
|
219
|
+
starRating: this.toStarRating(entity.starRating) ??
|
|
220
|
+
this.extractStarRating(pageProps, productId),
|
|
221
|
+
conceptId,
|
|
222
|
+
url: `${STORE_BASE}/${this.locale}/product/${encodeURIComponent(productId)}`,
|
|
114
223
|
};
|
|
115
224
|
}
|
|
116
225
|
/**
|
|
@@ -128,18 +237,8 @@ export class PsnStore {
|
|
|
128
237
|
try {
|
|
129
238
|
const payload = JSON.parse(inner);
|
|
130
239
|
const cached = payload.cache?.[`Product:${productId}`] ??
|
|
131
|
-
Object.values(payload.cache ?? {}).find((v) => v.__typename === "Product" && v.starRating);
|
|
132
|
-
|
|
133
|
-
if (rating?.averageRating === undefined)
|
|
134
|
-
return undefined;
|
|
135
|
-
return {
|
|
136
|
-
averageRating: rating.averageRating,
|
|
137
|
-
totalRatingsCount: rating.totalRatingsCount ?? 0,
|
|
138
|
-
ratingsDistribution: rating.ratingsDistribution?.map(({ rating: r, percentage }) => ({
|
|
139
|
-
rating: r,
|
|
140
|
-
percentage,
|
|
141
|
-
})),
|
|
142
|
-
};
|
|
240
|
+
Object.values(payload.cache ?? {}).find((v) => v.__typename === "Product" && v.id === productId && v.starRating);
|
|
241
|
+
return this.toStarRating(cached?.starRating);
|
|
143
242
|
}
|
|
144
243
|
catch {
|
|
145
244
|
return undefined;
|
package/dist/psn/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/psn/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAEnD,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,sCAAsC,CAAC;AAE5E,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,qCAAqC;AAE3D,MAAM,OAAO,aAAc,SAAQ,KAAK;IAGpB,MAAM;IAFxB,YACE,OAAe,EACC,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;sBAFC,MAAM;QAGtB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/psn/store.ts"],"names":[],"mappings":"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"}
|