codex-commerce-platform 0.1.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.
Files changed (50) hide show
  1. package/README.md +51 -0
  2. package/dist/cart/index.d.ts +41 -0
  3. package/dist/cart/index.d.ts.map +1 -0
  4. package/dist/cart/index.js +278 -0
  5. package/dist/cart/index.js.map +1 -0
  6. package/dist/catalog/index.d.ts +4 -0
  7. package/dist/catalog/index.d.ts.map +1 -0
  8. package/dist/catalog/index.js +2 -0
  9. package/dist/catalog/index.js.map +1 -0
  10. package/dist/connectors/pinnacle/catalog.d.ts +63 -0
  11. package/dist/connectors/pinnacle/catalog.d.ts.map +1 -0
  12. package/dist/connectors/pinnacle/catalog.js +238 -0
  13. package/dist/connectors/pinnacle/catalog.js.map +1 -0
  14. package/dist/connectors/pinnacle/index.d.ts +3 -0
  15. package/dist/connectors/pinnacle/index.d.ts.map +1 -0
  16. package/dist/connectors/pinnacle/index.js +3 -0
  17. package/dist/connectors/pinnacle/index.js.map +1 -0
  18. package/dist/connectors/pinnacle/taxonomy.d.ts +53 -0
  19. package/dist/connectors/pinnacle/taxonomy.d.ts.map +1 -0
  20. package/dist/connectors/pinnacle/taxonomy.js +206 -0
  21. package/dist/connectors/pinnacle/taxonomy.js.map +1 -0
  22. package/dist/errors/index.d.ts +47 -0
  23. package/dist/errors/index.d.ts.map +1 -0
  24. package/dist/errors/index.js +257 -0
  25. package/dist/errors/index.js.map +1 -0
  26. package/dist/images/index.d.ts +31 -0
  27. package/dist/images/index.d.ts.map +1 -0
  28. package/dist/images/index.js +39 -0
  29. package/dist/images/index.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/money/index.d.ts +5 -0
  35. package/dist/money/index.d.ts.map +1 -0
  36. package/dist/money/index.js +29 -0
  37. package/dist/money/index.js.map +1 -0
  38. package/dist/react-router/index.d.ts +3 -0
  39. package/dist/react-router/index.d.ts.map +1 -0
  40. package/dist/react-router/index.js +2 -0
  41. package/dist/react-router/index.js.map +1 -0
  42. package/dist/shopify/index.d.ts +107 -0
  43. package/dist/shopify/index.d.ts.map +1 -0
  44. package/dist/shopify/index.js +524 -0
  45. package/dist/shopify/index.js.map +1 -0
  46. package/dist/types/index.d.ts +172 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/index.js +2 -0
  49. package/dist/types/index.js.map +1 -0
  50. package/package.json +72 -0
@@ -0,0 +1,524 @@
1
+ const DEFAULT_STOREFRONT_API_VERSION = "2025-10";
2
+ const HOMEPAGE_COLLECTION_LIMIT = 6;
3
+ const HOMEPAGE_PRODUCT_LIMIT = 12;
4
+ const COLLECTION_PRODUCT_LIMIT = 24;
5
+ const COLLECTION_INDEX_LIMIT = 24;
6
+ const SEARCH_PRODUCT_LIMIT = 24;
7
+ const PRODUCT_IMAGE_LIMIT = 12;
8
+ const PRODUCT_VARIANT_LIMIT = 50;
9
+ export class ShopifyConfigError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = "ShopifyConfigError";
13
+ }
14
+ }
15
+ export class StorefrontApiError extends Error {
16
+ status;
17
+ errors;
18
+ constructor(message, options) {
19
+ super(message);
20
+ this.name = "StorefrontApiError";
21
+ this.status = options?.status ?? null;
22
+ this.errors = options?.errors ?? [];
23
+ }
24
+ }
25
+ export function createShopifyStorefrontConfig(input) {
26
+ const storeDomain = normalizeStoreDomain(input.storeDomain);
27
+ const apiVersion = (input.apiVersion ?? DEFAULT_STOREFRONT_API_VERSION).trim();
28
+ const storefrontAccessToken = input.storefrontAccessToken.trim();
29
+ if (!storeDomain)
30
+ throw new ShopifyConfigError("Shopify storeDomain is required.");
31
+ if (!apiVersion)
32
+ throw new ShopifyConfigError("Shopify apiVersion is required.");
33
+ if (!storefrontAccessToken)
34
+ throw new ShopifyConfigError("Shopify storefrontAccessToken is required.");
35
+ return {
36
+ storeDomain,
37
+ storefrontAccessToken,
38
+ apiVersion,
39
+ endpoint: `https://${storeDomain}/api/${apiVersion}/graphql.json`,
40
+ };
41
+ }
42
+ export function createShopifyStorefrontClient(input, options = {}) {
43
+ const config = createShopifyStorefrontConfig(input);
44
+ const fetcher = options.fetch ?? ((request, init) => globalThis.fetch(request, init));
45
+ if (typeof fetcher !== "function") {
46
+ throw new ShopifyConfigError("A fetch implementation is required for Shopify Storefront API requests.");
47
+ }
48
+ return {
49
+ config,
50
+ request(query, variables) {
51
+ return storefrontRequest({ config, fetch: fetcher }, query, variables);
52
+ },
53
+ };
54
+ }
55
+ export async function storefrontRequest(client, query, variables) {
56
+ if (isShopifyStorefrontClient(client)) {
57
+ return client.request(query, variables);
58
+ }
59
+ const response = await client.fetch(client.config.endpoint, {
60
+ method: "POST",
61
+ headers: {
62
+ "Content-Type": "application/json",
63
+ "X-Shopify-Storefront-Access-Token": client.config.storefrontAccessToken,
64
+ },
65
+ body: JSON.stringify({ query, variables: variables ?? {} }),
66
+ });
67
+ const payload = await parseStorefrontResponse(response);
68
+ if (!response.ok) {
69
+ throw new StorefrontApiError(`Shopify Storefront API request failed with status ${response.status}`, {
70
+ status: response.status,
71
+ errors: payload.errors,
72
+ });
73
+ }
74
+ if (payload.errors?.length) {
75
+ throw new StorefrontApiError(payload.errors.map((error) => error.message).join("; "), {
76
+ status: response.status,
77
+ errors: payload.errors,
78
+ });
79
+ }
80
+ if (payload.data === undefined) {
81
+ throw new StorefrontApiError("Shopify Storefront API response did not include data", {
82
+ status: response.status,
83
+ });
84
+ }
85
+ return payload.data;
86
+ }
87
+ function isShopifyStorefrontClient(client) {
88
+ return "request" in client && typeof client.request === "function";
89
+ }
90
+ export async function getHomepage(client) {
91
+ const data = await client.request(HOMEPAGE_QUERY, {
92
+ collectionCount: HOMEPAGE_COLLECTION_LIMIT,
93
+ productCount: HOMEPAGE_PRODUCT_LIMIT,
94
+ imageCount: PRODUCT_IMAGE_LIMIT,
95
+ variantCount: PRODUCT_VARIANT_LIMIT,
96
+ });
97
+ return {
98
+ featuredCollections: connectionNodes(data.collections).map(normalizeShopifyCollection),
99
+ featuredProducts: connectionNodes(data.products).map(normalizeShopifyProduct),
100
+ };
101
+ }
102
+ export async function getCollections(client, limit = COLLECTION_INDEX_LIMIT) {
103
+ const data = await client.request(COLLECTIONS_QUERY, {
104
+ collectionCount: limit,
105
+ imageCount: PRODUCT_IMAGE_LIMIT,
106
+ variantCount: PRODUCT_VARIANT_LIMIT,
107
+ });
108
+ return connectionNodes(data.collections).map(normalizeShopifyCollection);
109
+ }
110
+ export async function searchProducts(client, input, options = {}) {
111
+ const query = buildSearchQuery(input);
112
+ const data = await client.request(SEARCH_PRODUCTS_QUERY, {
113
+ query,
114
+ productCount: SEARCH_PRODUCT_LIMIT,
115
+ imageCount: productImageLimit(options),
116
+ variantCount: productVariantLimit(options),
117
+ });
118
+ return connectionNodes(data.products).map(normalizeShopifyProduct);
119
+ }
120
+ export async function searchProductsCatalog(client, input, options = {}) {
121
+ const query = buildSearchQuery(input);
122
+ const paginationVariables = catalogPaginationVariables(input);
123
+ const sortVariables = catalogSortVariables(input.sortMode);
124
+ const data = await client.request(SEARCH_PRODUCTS_CATALOG_QUERY, {
125
+ query,
126
+ ...paginationVariables,
127
+ ...sortVariables,
128
+ imageCount: productImageLimit(options),
129
+ variantCount: productVariantLimit(options),
130
+ });
131
+ return {
132
+ products: connectionNodes(data.products).map(normalizeShopifyProduct),
133
+ pageInfo: data.products.pageInfo ?? emptyPageInfo(),
134
+ filters: data.products.filters ?? [],
135
+ query,
136
+ };
137
+ }
138
+ export async function getCollectionByHandle(client, handle) {
139
+ const data = await client.request(COLLECTION_BY_HANDLE_QUERY, {
140
+ handle,
141
+ productCount: COLLECTION_PRODUCT_LIMIT,
142
+ imageCount: PRODUCT_IMAGE_LIMIT,
143
+ variantCount: PRODUCT_VARIANT_LIMIT,
144
+ });
145
+ return data.collection ? normalizeShopifyCollection(data.collection) : null;
146
+ }
147
+ export async function getProductByHandle(client, handle, options = {}) {
148
+ const data = await client.request(PRODUCT_BY_HANDLE_QUERY, {
149
+ handle,
150
+ imageCount: productImageLimit(options),
151
+ variantCount: productVariantLimit(options),
152
+ });
153
+ return data.product ? normalizeShopifyProduct(data.product) : null;
154
+ }
155
+ function productImageLimit(options = {}) {
156
+ return normalizedPositiveLimit(options.imageCount, PRODUCT_IMAGE_LIMIT);
157
+ }
158
+ function productVariantLimit(options = {}) {
159
+ return normalizedPositiveLimit(options.variantCount, PRODUCT_VARIANT_LIMIT);
160
+ }
161
+ function normalizedPositiveLimit(value, fallback) {
162
+ if (typeof value !== "number" || !Number.isFinite(value))
163
+ return fallback;
164
+ return Math.max(1, Math.floor(value));
165
+ }
166
+ export function buildSearchQuery(input) {
167
+ const parts = [];
168
+ if (input.query) {
169
+ const query = input.query.trim();
170
+ if (query)
171
+ parts.push(query);
172
+ }
173
+ for (const rawPart of input.rawQueryParts ?? []) {
174
+ const part = rawPart.trim();
175
+ if (part)
176
+ parts.push(part);
177
+ }
178
+ if (input.make) {
179
+ parts.push(quoteSearch(input.make));
180
+ }
181
+ if (input.model) {
182
+ parts.push(quoteSearch(input.model));
183
+ }
184
+ if (input.year) {
185
+ parts.push(quoteSearch(input.year));
186
+ }
187
+ if (input.productType) {
188
+ parts.push(quoteSearch(input.productType));
189
+ }
190
+ const tagQuery = buildFieldGroup("tag", input.tags);
191
+ if (tagQuery) {
192
+ parts.push(tagQuery);
193
+ }
194
+ const productTypeQuery = buildFieldGroup("product_type", input.productTypes);
195
+ if (productTypeQuery) {
196
+ parts.push(productTypeQuery);
197
+ }
198
+ const minPrice = parsePriceBoundary(input.minPrice);
199
+ if (minPrice !== null) {
200
+ parts.push(`variants.price:>=${minPrice}`);
201
+ }
202
+ const maxPrice = parsePriceBoundary(input.maxPrice);
203
+ if (maxPrice !== null) {
204
+ parts.push(`variants.price:<=${maxPrice}`);
205
+ }
206
+ if (typeof input.available === "boolean") {
207
+ parts.push(`available_for_sale:${input.available ? "true" : "false"}`);
208
+ }
209
+ return parts.length > 0 ? parts.join(" AND ") : null;
210
+ }
211
+ export function connectionNodes(connection) {
212
+ if (!connection) {
213
+ return [];
214
+ }
215
+ if (connection.nodes) {
216
+ return connection.nodes.filter((node) => node !== null && node !== undefined);
217
+ }
218
+ return (connection.edges ?? [])
219
+ .map((edge) => edge.node)
220
+ .filter((node) => node !== null && node !== undefined);
221
+ }
222
+ export function normalizeShopifyCollection(collection) {
223
+ return {
224
+ ...collection,
225
+ products: connectionNodes(collection.products).map(normalizeShopifyProduct),
226
+ };
227
+ }
228
+ export function normalizeShopifyProduct(product) {
229
+ return {
230
+ ...product,
231
+ images: connectionNodes(product.images),
232
+ variants: connectionNodes(product.variants),
233
+ };
234
+ }
235
+ export function normalizeStoreDomain(storeDomain) {
236
+ return storeDomain
237
+ .trim()
238
+ .replace(/^https?:\/\//iu, "")
239
+ .replace(/\/.*$/u, "")
240
+ .toLowerCase();
241
+ }
242
+ async function parseStorefrontResponse(response) {
243
+ try {
244
+ return (await response.json());
245
+ }
246
+ catch {
247
+ throw new StorefrontApiError("Shopify Storefront API returned invalid JSON", {
248
+ status: response.status,
249
+ });
250
+ }
251
+ }
252
+ function catalogPaginationVariables(input) {
253
+ const pageSize = clampProductLimit(input.before ? input.last ?? input.first : input.first ?? input.last);
254
+ if (input.before) {
255
+ return {
256
+ last: pageSize,
257
+ before: input.before,
258
+ };
259
+ }
260
+ return {
261
+ first: pageSize,
262
+ after: input.after || undefined,
263
+ };
264
+ }
265
+ function catalogSortVariables(sortMode) {
266
+ switch (sortMode) {
267
+ case "price-low":
268
+ return { sortKey: "PRICE", reverse: false };
269
+ case "price-high":
270
+ return { sortKey: "PRICE", reverse: true };
271
+ case "newest":
272
+ return { sortKey: "CREATED_AT", reverse: true };
273
+ default:
274
+ return { reverse: false };
275
+ }
276
+ }
277
+ function clampProductLimit(value) {
278
+ if (!Number.isFinite(value ?? Number.NaN))
279
+ return SEARCH_PRODUCT_LIMIT;
280
+ return Math.min(Math.max(Math.trunc(value), 1), 100);
281
+ }
282
+ function emptyPageInfo() {
283
+ return {
284
+ hasNextPage: false,
285
+ hasPreviousPage: false,
286
+ startCursor: null,
287
+ endCursor: null,
288
+ };
289
+ }
290
+ function quoteSearch(value) {
291
+ return `"${value.trim().replace(/"/gu, '\\"')}"`;
292
+ }
293
+ function buildFieldGroup(field, values) {
294
+ const tokens = [...new Set(values?.map((value) => value.trim()).filter(Boolean) ?? [])].map((value) => `${field}:${quoteFieldValue(value)}`);
295
+ if (tokens.length === 0)
296
+ return null;
297
+ if (tokens.length === 1)
298
+ return tokens[0] ?? null;
299
+ return `(${tokens.join(" OR ")})`;
300
+ }
301
+ function quoteFieldValue(value) {
302
+ return /^[A-Za-z0-9_]+$/u.test(value) ? value : quoteSearch(value);
303
+ }
304
+ function parsePriceBoundary(value) {
305
+ if (!value)
306
+ return null;
307
+ const parsed = Number.parseFloat(value);
308
+ if (!Number.isFinite(parsed) || parsed < 0)
309
+ return null;
310
+ return parsed.toFixed(2);
311
+ }
312
+ const MONEY_FRAGMENT = `#graphql
313
+ fragment MoneyFields on MoneyV2 {
314
+ amount
315
+ currencyCode
316
+ }
317
+ `;
318
+ const IMAGE_FRAGMENT = `#graphql
319
+ fragment ImageFields on Image {
320
+ url
321
+ mainUrl: url(transform: {maxWidth: 1200})
322
+ cardUrl: url(transform: {maxWidth: 720})
323
+ smallUrl: url(transform: {maxWidth: 480})
324
+ thumbnailUrl: url(transform: {maxWidth: 240})
325
+ altText
326
+ width
327
+ height
328
+ }
329
+ `;
330
+ const PRODUCT_VARIANT_FRAGMENT = `#graphql
331
+ fragment ProductVariantFields on ProductVariant {
332
+ id
333
+ title
334
+ availableForSale
335
+ sku
336
+ selectedOptions {
337
+ name
338
+ value
339
+ }
340
+ price {
341
+ ...MoneyFields
342
+ }
343
+ compareAtPrice {
344
+ ...MoneyFields
345
+ }
346
+ image {
347
+ ...ImageFields
348
+ }
349
+ }
350
+ `;
351
+ const PRODUCT_FRAGMENT = `#graphql
352
+ fragment ProductFields on Product {
353
+ id
354
+ handle
355
+ title
356
+ description
357
+ descriptionHtml
358
+ vendor
359
+ productType
360
+ tags
361
+ availableForSale
362
+ featuredImage {
363
+ ...ImageFields
364
+ }
365
+ images(first: $imageCount) {
366
+ nodes {
367
+ ...ImageFields
368
+ }
369
+ }
370
+ options {
371
+ id
372
+ name
373
+ values
374
+ }
375
+ variants(first: $variantCount) {
376
+ nodes {
377
+ ...ProductVariantFields
378
+ }
379
+ }
380
+ priceRange {
381
+ minVariantPrice {
382
+ ...MoneyFields
383
+ }
384
+ maxVariantPrice {
385
+ ...MoneyFields
386
+ }
387
+ }
388
+ }
389
+ `;
390
+ const COLLECTION_FRAGMENT = `#graphql
391
+ fragment CollectionFields on Collection {
392
+ id
393
+ handle
394
+ title
395
+ description
396
+ descriptionHtml
397
+ image {
398
+ ...ImageFields
399
+ }
400
+ }
401
+ `;
402
+ const PRODUCT_STOREFRONT_FRAGMENTS = [
403
+ MONEY_FRAGMENT,
404
+ IMAGE_FRAGMENT,
405
+ PRODUCT_VARIANT_FRAGMENT,
406
+ PRODUCT_FRAGMENT,
407
+ ].join("\n");
408
+ const COLLECTION_STOREFRONT_FRAGMENTS = [
409
+ PRODUCT_STOREFRONT_FRAGMENTS,
410
+ COLLECTION_FRAGMENT,
411
+ ].join("\n");
412
+ const HOMEPAGE_QUERY = `#graphql
413
+ ${COLLECTION_STOREFRONT_FRAGMENTS}
414
+
415
+ query Homepage($collectionCount: Int!, $productCount: Int!, $imageCount: Int!, $variantCount: Int!) {
416
+ collections(first: $collectionCount) {
417
+ nodes {
418
+ ...CollectionFields
419
+ products(first: 4) {
420
+ nodes {
421
+ ...ProductFields
422
+ }
423
+ }
424
+ }
425
+ }
426
+ products(first: $productCount) {
427
+ nodes {
428
+ ...ProductFields
429
+ }
430
+ }
431
+ }
432
+ `;
433
+ const COLLECTIONS_QUERY = `#graphql
434
+ ${COLLECTION_STOREFRONT_FRAGMENTS}
435
+
436
+ query Collections($collectionCount: Int!, $imageCount: Int!, $variantCount: Int!) {
437
+ collections(first: $collectionCount) {
438
+ nodes {
439
+ ...CollectionFields
440
+ products(first: 3) {
441
+ nodes {
442
+ ...ProductFields
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ `;
449
+ const SEARCH_PRODUCTS_QUERY = `#graphql
450
+ ${PRODUCT_STOREFRONT_FRAGMENTS}
451
+
452
+ query SearchProducts($query: String, $productCount: Int!, $imageCount: Int!, $variantCount: Int!) {
453
+ products(first: $productCount, query: $query) {
454
+ nodes {
455
+ ...ProductFields
456
+ }
457
+ }
458
+ }
459
+ `;
460
+ const SEARCH_PRODUCTS_CATALOG_QUERY = `#graphql
461
+ ${PRODUCT_STOREFRONT_FRAGMENTS}
462
+
463
+ query SearchProductsCatalog(
464
+ $query: String
465
+ $first: Int
466
+ $last: Int
467
+ $after: String
468
+ $before: String
469
+ $sortKey: ProductSortKeys
470
+ $reverse: Boolean
471
+ $imageCount: Int!
472
+ $variantCount: Int!
473
+ ) {
474
+ products(first: $first, last: $last, after: $after, before: $before, query: $query, sortKey: $sortKey, reverse: $reverse) {
475
+ edges {
476
+ cursor
477
+ node {
478
+ ...ProductFields
479
+ }
480
+ }
481
+ pageInfo {
482
+ hasNextPage
483
+ hasPreviousPage
484
+ startCursor
485
+ endCursor
486
+ }
487
+ filters {
488
+ id
489
+ label
490
+ type
491
+ values {
492
+ id
493
+ label
494
+ count
495
+ input
496
+ }
497
+ }
498
+ }
499
+ }
500
+ `;
501
+ const COLLECTION_BY_HANDLE_QUERY = `#graphql
502
+ ${COLLECTION_STOREFRONT_FRAGMENTS}
503
+
504
+ query CollectionByHandle($handle: String!, $productCount: Int!, $imageCount: Int!, $variantCount: Int!) {
505
+ collection(handle: $handle) {
506
+ ...CollectionFields
507
+ products(first: $productCount) {
508
+ nodes {
509
+ ...ProductFields
510
+ }
511
+ }
512
+ }
513
+ }
514
+ `;
515
+ const PRODUCT_BY_HANDLE_QUERY = `#graphql
516
+ ${PRODUCT_STOREFRONT_FRAGMENTS}
517
+
518
+ query ProductByHandle($handle: String!, $imageCount: Int!, $variantCount: Int!) {
519
+ product(handle: $handle) {
520
+ ...ProductFields
521
+ }
522
+ }
523
+ `;
524
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shopify/index.ts"],"names":[],"mappings":"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"}