commerce-kit 0.15.0 → 0.16.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/dist/api-types.d.ts +235 -232
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/api-types.d.ts
CHANGED
|
@@ -6319,247 +6319,250 @@ type APICollectionGetByIdResult = {
|
|
|
6319
6319
|
type APICollectionGetByIdParams = {
|
|
6320
6320
|
idOrSlug: string;
|
|
6321
6321
|
};
|
|
6322
|
-
type
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
|
|
6334
|
-
|
|
6335
|
-
|
|
6336
|
-
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
paletteName?: string | null | undefined;
|
|
6366
|
-
palette?: {
|
|
6367
|
-
theme?: {
|
|
6368
|
-
background?: string | undefined;
|
|
6369
|
-
} | undefined;
|
|
6370
|
-
"theme-primary"?: {
|
|
6371
|
-
DEFAULT?: string | undefined;
|
|
6372
|
-
background?: string | undefined;
|
|
6373
|
-
} | undefined;
|
|
6374
|
-
"theme-button"?: {
|
|
6375
|
-
DEFAULT?: string | undefined;
|
|
6376
|
-
background?: string | undefined;
|
|
6377
|
-
} | undefined;
|
|
6378
|
-
} | undefined;
|
|
6379
|
-
} | null | undefined;
|
|
6380
|
-
invoiceSettings?: {
|
|
6381
|
-
template: string;
|
|
6382
|
-
cadence: "monthly" | "yearly";
|
|
6383
|
-
enabled?: boolean | null | undefined;
|
|
6384
|
-
} | null | undefined;
|
|
6385
|
-
outboundEmail?: string | null | undefined;
|
|
6386
|
-
notificationEmail?: string | null | undefined;
|
|
6387
|
-
notifications?: {
|
|
6388
|
-
newOrderNotifications: boolean | null;
|
|
6389
|
-
lowStockNotifications: boolean | null;
|
|
6390
|
-
} | null | undefined;
|
|
6391
|
-
buttons?: {
|
|
6392
|
-
borderWidth?: number | null | undefined;
|
|
6393
|
-
borderRadius?: "full" | "none" | "sm" | "md" | "lg" | null | undefined;
|
|
6394
|
-
shadow?: "none" | "sm" | "md" | "lg" | null | undefined;
|
|
6322
|
+
type APIMeGetResult = {
|
|
6323
|
+
store: NonNullable<{
|
|
6324
|
+
settings: {
|
|
6325
|
+
enabledTools: {
|
|
6326
|
+
blog: boolean;
|
|
6327
|
+
newsletter: boolean;
|
|
6328
|
+
loyalty: boolean;
|
|
6329
|
+
reviews: boolean;
|
|
6330
|
+
productSubscriptions: boolean;
|
|
6331
|
+
contactForm: boolean;
|
|
6332
|
+
wishlist: boolean;
|
|
6333
|
+
cookieConsent: boolean;
|
|
6334
|
+
auctions: boolean;
|
|
6335
|
+
surveys: boolean;
|
|
6336
|
+
bookings: boolean;
|
|
6337
|
+
productSets: boolean;
|
|
6338
|
+
restockNotifications: boolean;
|
|
6339
|
+
abandonedCarts: boolean;
|
|
6340
|
+
} | null;
|
|
6341
|
+
storeName?: string | null | undefined;
|
|
6342
|
+
storeDescription?: string | null | undefined;
|
|
6343
|
+
freeShippingThreshold?: string | number | bigint | null | undefined;
|
|
6344
|
+
pageWidth?: "default" | "full" | "narrow" | "wider" | "widest" | null | undefined;
|
|
6345
|
+
fontFamily?: "default" | "roboto" | "poppins" | "inter" | "merriweather" | "montserrat" | "nunito" | "inconsolata" | "ibmPlexSans" | "cardo" | "spaceMono" | "buenard" | "titanOne" | "bartok" | "robotoSlab" | "playwritePl" | "jetBrainsMono" | null | undefined;
|
|
6346
|
+
fontFamilyHeadings?: "default" | "roboto" | "poppins" | "inter" | "merriweather" | "montserrat" | "nunito" | "inconsolata" | "ibmPlexSans" | "cardo" | "spaceMono" | "buenard" | "titanOne" | "bartok" | "robotoSlab" | "playwritePl" | "jetBrainsMono" | null | undefined;
|
|
6347
|
+
fontSizes?: {
|
|
6348
|
+
h2?: number | null | undefined;
|
|
6349
|
+
h3?: number | null | undefined;
|
|
6350
|
+
h4?: number | null | undefined;
|
|
6351
|
+
h5?: number | null | undefined;
|
|
6352
|
+
text?: number | null | undefined;
|
|
6353
|
+
} | null | undefined;
|
|
6354
|
+
logo?: string | {
|
|
6355
|
+
imageUrl: string;
|
|
6356
|
+
width?: number | null | undefined;
|
|
6357
|
+
height?: number | null | undefined;
|
|
6358
|
+
} | null | undefined;
|
|
6359
|
+
ogimage?: string | null | undefined;
|
|
6360
|
+
favicon?: {
|
|
6361
|
+
imageUrl: string;
|
|
6362
|
+
width?: number | null | undefined;
|
|
6363
|
+
height?: number | null | undefined;
|
|
6364
|
+
} | null | undefined;
|
|
6395
6365
|
colors?: {
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6366
|
+
paletteName?: string | null | undefined;
|
|
6367
|
+
palette?: {
|
|
6368
|
+
theme?: {
|
|
6369
|
+
background?: string | undefined;
|
|
6370
|
+
} | undefined;
|
|
6371
|
+
"theme-primary"?: {
|
|
6372
|
+
DEFAULT?: string | undefined;
|
|
6373
|
+
background?: string | undefined;
|
|
6374
|
+
} | undefined;
|
|
6375
|
+
"theme-button"?: {
|
|
6376
|
+
DEFAULT?: string | undefined;
|
|
6377
|
+
background?: string | undefined;
|
|
6378
|
+
} | undefined;
|
|
6379
|
+
} | undefined;
|
|
6401
6380
|
} | null | undefined;
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6381
|
+
invoiceSettings?: {
|
|
6382
|
+
template: string;
|
|
6383
|
+
cadence: "monthly" | "yearly";
|
|
6384
|
+
enabled?: boolean | null | undefined;
|
|
6385
|
+
} | null | undefined;
|
|
6386
|
+
outboundEmail?: string | null | undefined;
|
|
6387
|
+
notificationEmail?: string | null | undefined;
|
|
6388
|
+
notifications?: {
|
|
6389
|
+
newOrderNotifications: boolean | null;
|
|
6390
|
+
lowStockNotifications: boolean | null;
|
|
6391
|
+
} | null | undefined;
|
|
6392
|
+
buttons?: {
|
|
6393
|
+
borderWidth?: number | null | undefined;
|
|
6394
|
+
borderRadius?: "full" | "none" | "sm" | "md" | "lg" | null | undefined;
|
|
6395
|
+
shadow?: "none" | "sm" | "md" | "lg" | null | undefined;
|
|
6396
|
+
colors?: {
|
|
6397
|
+
background?: string | null | undefined;
|
|
6398
|
+
text?: string | null | undefined;
|
|
6399
|
+
backgroundHover?: string | null | undefined;
|
|
6400
|
+
textHover?: string | null | undefined;
|
|
6401
|
+
border?: string | null | undefined;
|
|
6402
|
+
} | null | undefined;
|
|
6403
|
+
} | null | undefined;
|
|
6404
|
+
cartIcon?: "shopping-bag" | "shopping-cart" | "shopping-basket" | null | undefined;
|
|
6405
|
+
productCards?: {
|
|
6406
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
6407
|
+
} | null | undefined;
|
|
6408
|
+
blogFilterConfig?: {
|
|
6409
|
+
mode: "simple" | "faceted";
|
|
6410
|
+
facets: {
|
|
6411
|
+
id: string;
|
|
6415
6412
|
label: string;
|
|
6413
|
+
type: "single" | "multiple";
|
|
6414
|
+
options: {
|
|
6415
|
+
value: string;
|
|
6416
|
+
label: string;
|
|
6417
|
+
}[];
|
|
6416
6418
|
}[];
|
|
6417
|
-
}
|
|
6418
|
-
|
|
6419
|
-
|
|
6420
|
-
apiKeys?: {
|
|
6421
|
-
id: string;
|
|
6422
|
-
apiKeyLookup: string;
|
|
6423
|
-
apiKeyHash: string;
|
|
6424
|
-
apiKeyDisplay: string;
|
|
6425
|
-
createdAt: string;
|
|
6426
|
-
name?: string | undefined;
|
|
6427
|
-
}[] | null | undefined;
|
|
6428
|
-
loyalty?: {
|
|
6429
|
-
pointsPerUnit: number;
|
|
6430
|
-
redemptionRate: number;
|
|
6431
|
-
minRedemption: number;
|
|
6432
|
-
maxRedeemPercent: number;
|
|
6433
|
-
pointsExpiryMonths: number | null;
|
|
6434
|
-
} | null | undefined;
|
|
6435
|
-
bookings?: {
|
|
6436
|
-
timezone: string;
|
|
6437
|
-
defaultSlotDuration: number;
|
|
6438
|
-
bufferTime: number;
|
|
6439
|
-
advanceBookingDays: number;
|
|
6440
|
-
cancellationHours: number;
|
|
6441
|
-
autoConfirm: boolean;
|
|
6442
|
-
requireApproval: boolean;
|
|
6443
|
-
sendReminders: boolean;
|
|
6444
|
-
reminderHours: number;
|
|
6445
|
-
} | null | undefined;
|
|
6446
|
-
subscriptions?: Record<string, never> | null | undefined;
|
|
6447
|
-
dashboard?: {
|
|
6448
|
-
widgets: {
|
|
6419
|
+
} | null | undefined;
|
|
6420
|
+
omnibus?: boolean | null | undefined;
|
|
6421
|
+
apiKeys?: {
|
|
6449
6422
|
id: string;
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6423
|
+
apiKeyLookup: string;
|
|
6424
|
+
apiKeyHash: string;
|
|
6425
|
+
apiKeyDisplay: string;
|
|
6426
|
+
createdAt: string;
|
|
6427
|
+
name?: string | undefined;
|
|
6428
|
+
}[] | null | undefined;
|
|
6429
|
+
loyalty?: {
|
|
6430
|
+
pointsPerUnit: number;
|
|
6431
|
+
redemptionRate: number;
|
|
6432
|
+
minRedemption: number;
|
|
6433
|
+
maxRedeemPercent: number;
|
|
6434
|
+
pointsExpiryMonths: number | null;
|
|
6435
|
+
} | null | undefined;
|
|
6436
|
+
bookings?: {
|
|
6437
|
+
timezone: string;
|
|
6438
|
+
defaultSlotDuration: number;
|
|
6439
|
+
bufferTime: number;
|
|
6440
|
+
advanceBookingDays: number;
|
|
6441
|
+
cancellationHours: number;
|
|
6442
|
+
autoConfirm: boolean;
|
|
6443
|
+
requireApproval: boolean;
|
|
6444
|
+
sendReminders: boolean;
|
|
6445
|
+
reminderHours: number;
|
|
6446
|
+
} | null | undefined;
|
|
6447
|
+
subscriptions?: Record<string, never> | null | undefined;
|
|
6448
|
+
dashboard?: {
|
|
6449
|
+
widgets: {
|
|
6450
|
+
id: string;
|
|
6451
|
+
type: "revenue-summary" | "orders-summary" | "aov-summary" | "customers-summary" | "revenue-chart" | "order-status" | "customer-retention" | "top-products";
|
|
6452
|
+
position: number;
|
|
6453
|
+
size: {
|
|
6454
|
+
width: 1 | 2 | 3 | 4;
|
|
6455
|
+
height: 1 | 2 | 3 | 4;
|
|
6456
|
+
};
|
|
6457
|
+
visible: boolean;
|
|
6458
|
+
settings?: Record<string, unknown> | undefined;
|
|
6459
|
+
}[];
|
|
6460
|
+
} | null | undefined;
|
|
6459
6461
|
} | null | undefined;
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
gold?: boolean | null | undefined;
|
|
6464
|
-
} | undefined;
|
|
6465
|
-
id: string;
|
|
6466
|
-
name: string;
|
|
6467
|
-
createdAt: string;
|
|
6468
|
-
updatedAt: string;
|
|
6469
|
-
organizationId: string | null;
|
|
6470
|
-
addressId: string | null;
|
|
6471
|
-
subdomain: string;
|
|
6472
|
-
domain: string | null;
|
|
6473
|
-
emailDomain: string | null;
|
|
6474
|
-
emailDomainId: string | null;
|
|
6475
|
-
locale: string;
|
|
6476
|
-
currency: string;
|
|
6477
|
-
taxBehavior: "inclusive" | "exclusive";
|
|
6478
|
-
clerkOrganizationId: string | null;
|
|
6479
|
-
stripeAccountId: string | null;
|
|
6480
|
-
stripeCustomerId: string | null;
|
|
6481
|
-
environment: "live" | "test";
|
|
6482
|
-
subscribed: boolean;
|
|
6483
|
-
stripeSubscriptionId: string | null;
|
|
6484
|
-
stripeSubscriptionName: "free_monthly" | "free_yearly" | "starter_monthly" | "starter_yearly" | "growth_monthly" | "growth_yearly" | "pro_monthly" | "pro_yearly" | null;
|
|
6485
|
-
storeStatus: "active" | "suspended" | "maintenance";
|
|
6486
|
-
legacyFreeGracePeriodEnd: string | null;
|
|
6487
|
-
customTransactionFee: string | null;
|
|
6488
|
-
lastAppliedStoreThemeId: string | null;
|
|
6489
|
-
builderType: "aibuilder" | "storebuilder";
|
|
6490
|
-
builderConfig: {
|
|
6491
|
-
method: "v0";
|
|
6492
|
-
chatId: string;
|
|
6493
|
-
demoUrl?: string | undefined;
|
|
6494
|
-
} | {
|
|
6495
|
-
method: "internal";
|
|
6496
|
-
sandboxId: string;
|
|
6497
|
-
sandboxUrl: string;
|
|
6498
|
-
vercelProjectId: string;
|
|
6499
|
-
gitHubDeployKey: string;
|
|
6500
|
-
styles?: {
|
|
6501
|
-
colorPalette: {
|
|
6502
|
-
id: string;
|
|
6503
|
-
name: string;
|
|
6504
|
-
colors: {
|
|
6505
|
-
background: string;
|
|
6506
|
-
accent1: string;
|
|
6507
|
-
accent2: string;
|
|
6508
|
-
text: string;
|
|
6509
|
-
};
|
|
6510
|
-
};
|
|
6511
|
-
typography: {
|
|
6512
|
-
id: string;
|
|
6513
|
-
name: string;
|
|
6514
|
-
fontFamily: string;
|
|
6515
|
-
};
|
|
6516
|
-
corners: {
|
|
6517
|
-
id: string;
|
|
6518
|
-
name: string;
|
|
6519
|
-
radius: string;
|
|
6520
|
-
};
|
|
6521
|
-
theme?: {
|
|
6522
|
-
background: string;
|
|
6523
|
-
foreground: string;
|
|
6524
|
-
primary: string;
|
|
6525
|
-
primaryForeground: string;
|
|
6526
|
-
secondary: string;
|
|
6527
|
-
secondaryForeground: string;
|
|
6528
|
-
muted: string;
|
|
6529
|
-
mutedForeground: string;
|
|
6530
|
-
accent: string;
|
|
6531
|
-
accentForeground: string;
|
|
6532
|
-
border: string;
|
|
6533
|
-
radius: string;
|
|
6534
|
-
} | undefined;
|
|
6462
|
+
flags: {
|
|
6463
|
+
verifyPKD?: boolean | null | undefined;
|
|
6464
|
+
gold?: boolean | null | undefined;
|
|
6535
6465
|
} | undefined;
|
|
6536
|
-
} | null;
|
|
6537
|
-
appSumoLicenseKey: string | null;
|
|
6538
|
-
appSumoLicense: {
|
|
6539
|
-
createdAt: string;
|
|
6540
|
-
updatedAt: string;
|
|
6541
|
-
userId: string | null;
|
|
6542
|
-
licenseKey: string;
|
|
6543
|
-
licenseStatus: "active" | "inactive";
|
|
6544
|
-
tier: number | null;
|
|
6545
|
-
extra: unknown;
|
|
6546
|
-
} | null;
|
|
6547
|
-
address: {
|
|
6548
6466
|
id: string;
|
|
6549
|
-
name: string
|
|
6467
|
+
name: string;
|
|
6550
6468
|
createdAt: string;
|
|
6551
6469
|
updatedAt: string;
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6557
|
-
|
|
6558
|
-
|
|
6559
|
-
|
|
6560
|
-
|
|
6561
|
-
|
|
6562
|
-
|
|
6470
|
+
organizationId: string | null;
|
|
6471
|
+
addressId: string | null;
|
|
6472
|
+
subdomain: string;
|
|
6473
|
+
domain: string | null;
|
|
6474
|
+
emailDomain: string | null;
|
|
6475
|
+
emailDomainId: string | null;
|
|
6476
|
+
locale: string;
|
|
6477
|
+
currency: string;
|
|
6478
|
+
taxBehavior: "inclusive" | "exclusive";
|
|
6479
|
+
clerkOrganizationId: string | null;
|
|
6480
|
+
stripeAccountId: string | null;
|
|
6481
|
+
stripeCustomerId: string | null;
|
|
6482
|
+
environment: "live" | "test";
|
|
6483
|
+
subscribed: boolean;
|
|
6484
|
+
stripeSubscriptionId: string | null;
|
|
6485
|
+
stripeSubscriptionName: "free_monthly" | "free_yearly" | "starter_monthly" | "starter_yearly" | "growth_monthly" | "growth_yearly" | "pro_monthly" | "pro_yearly" | null;
|
|
6486
|
+
storeStatus: "active" | "suspended" | "maintenance";
|
|
6487
|
+
legacyFreeGracePeriodEnd: string | null;
|
|
6488
|
+
customTransactionFee: string | null;
|
|
6489
|
+
lastAppliedStoreThemeId: string | null;
|
|
6490
|
+
builderType: "aibuilder" | "storebuilder";
|
|
6491
|
+
builderConfig: {
|
|
6492
|
+
method: "v0";
|
|
6493
|
+
chatId: string;
|
|
6494
|
+
demoUrl?: string | undefined;
|
|
6495
|
+
} | {
|
|
6496
|
+
method: "internal";
|
|
6497
|
+
sandboxId: string;
|
|
6498
|
+
sandboxUrl: string;
|
|
6499
|
+
vercelProjectId: string;
|
|
6500
|
+
gitHubDeployKey: string;
|
|
6501
|
+
styles?: {
|
|
6502
|
+
colorPalette: {
|
|
6503
|
+
id: string;
|
|
6504
|
+
name: string;
|
|
6505
|
+
colors: {
|
|
6506
|
+
background: string;
|
|
6507
|
+
accent1: string;
|
|
6508
|
+
accent2: string;
|
|
6509
|
+
text: string;
|
|
6510
|
+
};
|
|
6511
|
+
};
|
|
6512
|
+
typography: {
|
|
6513
|
+
id: string;
|
|
6514
|
+
name: string;
|
|
6515
|
+
fontFamily: string;
|
|
6516
|
+
};
|
|
6517
|
+
corners: {
|
|
6518
|
+
id: string;
|
|
6519
|
+
name: string;
|
|
6520
|
+
radius: string;
|
|
6521
|
+
};
|
|
6522
|
+
theme?: {
|
|
6523
|
+
background: string;
|
|
6524
|
+
foreground: string;
|
|
6525
|
+
primary: string;
|
|
6526
|
+
primaryForeground: string;
|
|
6527
|
+
secondary: string;
|
|
6528
|
+
secondaryForeground: string;
|
|
6529
|
+
muted: string;
|
|
6530
|
+
mutedForeground: string;
|
|
6531
|
+
accent: string;
|
|
6532
|
+
accentForeground: string;
|
|
6533
|
+
border: string;
|
|
6534
|
+
radius: string;
|
|
6535
|
+
} | undefined;
|
|
6536
|
+
} | undefined;
|
|
6537
|
+
} | null;
|
|
6538
|
+
appSumoLicenseKey: string | null;
|
|
6539
|
+
appSumoLicense: {
|
|
6540
|
+
createdAt: string;
|
|
6541
|
+
updatedAt: string;
|
|
6542
|
+
userId: string | null;
|
|
6543
|
+
licenseKey: string;
|
|
6544
|
+
licenseStatus: "active" | "inactive";
|
|
6545
|
+
tier: number | null;
|
|
6546
|
+
extra: unknown;
|
|
6547
|
+
} | null;
|
|
6548
|
+
address: {
|
|
6549
|
+
id: string;
|
|
6550
|
+
name: string | null;
|
|
6551
|
+
createdAt: string;
|
|
6552
|
+
updatedAt: string;
|
|
6553
|
+
type: "shipping" | "billing" | "merchant";
|
|
6554
|
+
company: string | null;
|
|
6555
|
+
city: string | null;
|
|
6556
|
+
country: string | null;
|
|
6557
|
+
line1: string | null;
|
|
6558
|
+
line2: string | null;
|
|
6559
|
+
postalCode: string | null;
|
|
6560
|
+
state: string | null;
|
|
6561
|
+
phone: string | null;
|
|
6562
|
+
taxId: string | null;
|
|
6563
|
+
} | null;
|
|
6564
|
+
}>;
|
|
6565
|
+
baseUrl: string;
|
|
6563
6566
|
};
|
|
6564
6567
|
|
|
6565
|
-
export type { APICartAddBody, APICartAddResult, APICartCreateBody, APICartCreateResult, APICartGetResult, APICartRemoveItemQueryParams, APICartRemoveItemResult, APICategoriesBrowseQueryParams, APICategoriesBrowseResult, APICategoryGetByIdParams, APICategoryGetByIdResult, APICollectionGetByIdParams, APICollectionGetByIdResult, APICollectionsBrowseQueryParams, APICollectionsBrowseResult, APIOrderGetByIdParams, APIOrderGetByIdResult, APIOrdersBrowseQueryParams, APIOrdersBrowseResult, APIProductGetByIdParams, APIProductGetByIdResult, APIProductsBrowseQueryParams, APIProductsBrowseResult,
|
|
6568
|
+
export type { APICartAddBody, APICartAddResult, APICartCreateBody, APICartCreateResult, APICartGetResult, APICartRemoveItemQueryParams, APICartRemoveItemResult, APICategoriesBrowseQueryParams, APICategoriesBrowseResult, APICategoryGetByIdParams, APICategoryGetByIdResult, APICollectionGetByIdParams, APICollectionGetByIdResult, APICollectionsBrowseQueryParams, APICollectionsBrowseResult, APIMeGetResult, APIOrderGetByIdParams, APIOrderGetByIdResult, APIOrdersBrowseQueryParams, APIOrdersBrowseResult, APIProductGetByIdParams, APIProductGetByIdResult, APIProductsBrowseQueryParams, APIProductsBrowseResult, JSONContent };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { APIMeGetResult, APIProductsBrowseQueryParams, APIProductsBrowseResult, APIProductGetByIdParams, APIProductGetByIdResult, APIOrdersBrowseQueryParams, APIOrdersBrowseResult, APIOrderGetByIdParams, APIOrderGetByIdResult, APICartCreateBody, APICartCreateResult, APICartGetResult, APICollectionGetByIdParams, APICollectionGetByIdResult, APICollectionsBrowseQueryParams, APICollectionsBrowseResult, APICategoryGetByIdParams, APICategoryGetByIdResult, APICategoriesBrowseQueryParams, APICategoriesBrowseResult } from './api-types.js';
|
|
2
2
|
export { APICartAddBody, APICartAddResult, APICartRemoveItemQueryParams, APICartRemoveItemResult, JSONContent } from './api-types.js';
|
|
3
3
|
|
|
4
4
|
interface CommerceConfig {
|
|
@@ -11,7 +11,7 @@ interface CommerceConfig {
|
|
|
11
11
|
declare class YNSProvider {
|
|
12
12
|
#private;
|
|
13
13
|
constructor(config?: CommerceConfig);
|
|
14
|
-
|
|
14
|
+
meGet(): Promise<APIMeGetResult>;
|
|
15
15
|
productBrowse(params: APIProductsBrowseQueryParams): Promise<APIProductsBrowseResult>;
|
|
16
16
|
productGet(params: APIProductGetByIdParams): Promise<APIProductGetByIdResult | null>;
|
|
17
17
|
orderBrowse(params: APIOrdersBrowseQueryParams): Promise<APIOrdersBrowseResult>;
|
|
@@ -59,4 +59,4 @@ declare class YNSProvider {
|
|
|
59
59
|
|
|
60
60
|
declare function Commerce(config?: CommerceConfig): YNSProvider;
|
|
61
61
|
|
|
62
|
-
export { APICartCreateBody, APICartCreateResult, APICartGetResult, APICategoriesBrowseQueryParams, APICategoriesBrowseResult, APICategoryGetByIdParams, APICategoryGetByIdResult, APICollectionGetByIdParams, APICollectionGetByIdResult, APICollectionsBrowseQueryParams, APICollectionsBrowseResult, APIOrderGetByIdParams, APIOrderGetByIdResult, APIOrdersBrowseQueryParams, APIOrdersBrowseResult, APIProductGetByIdParams, APIProductGetByIdResult, APIProductsBrowseQueryParams, APIProductsBrowseResult,
|
|
62
|
+
export { APICartCreateBody, APICartCreateResult, APICartGetResult, APICategoriesBrowseQueryParams, APICategoriesBrowseResult, APICategoryGetByIdParams, APICategoryGetByIdResult, APICollectionGetByIdParams, APICollectionGetByIdResult, APICollectionsBrowseQueryParams, APICollectionsBrowseResult, APIMeGetResult, APIOrderGetByIdParams, APIOrderGetByIdResult, APIOrdersBrowseQueryParams, APIOrdersBrowseResult, APIProductGetByIdParams, APIProductGetByIdResult, APIProductsBrowseQueryParams, APIProductsBrowseResult, Commerce, type CommerceConfig, YNSProvider };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./chunk-PNKB6P4V.js";var p=process.env.YNS_API_KEY,m={YNS_API_KEY:p};var i={DEBUG:0,LOG:1,WARN:2,ERROR:3},R=process.env.NEXT_PUBLIC_LOG_LEVEL||"LOG",a=i[R],P="\x1B[0m",B="\x1B[34m",w="\x1B[32m",A="\x1B[33m",h="\x1B[31m",E="\u23F1\uFE0F",C="\u{1F41B}",G="\u2714\uFE0F"
|
|
1
|
+
import"./chunk-PNKB6P4V.js";var p=process.env.YNS_API_KEY,m={YNS_API_KEY:p};var i={DEBUG:0,LOG:1,WARN:2,ERROR:3},R=process.env.NEXT_PUBLIC_LOG_LEVEL||"LOG",a=i[R],P="\x1B[0m",B="\x1B[34m",w="\x1B[32m",A="\x1B[33m",h="\x1B[31m",E="\u23F1\uFE0F",C="\u{1F41B}",G="\u2714\uFE0F",$="\u26A0\uFE0F",S="\u274C",I=`${E} `,L=`${B}${C}${P} `,v=`${w}${G}${P} `,O=`${A}${$}${P} `,T=`${h}${S}${P} `,g=c=>{let e=c?`[${c}] `:"";return{getLogger(t){return g([c,t].filter(Boolean).join(" > "))},time(t){a>i.DEBUG||console.time([I,e,t].filter(Boolean).join(" "))},timeEnd(t){a>i.DEBUG||console.timeEnd([I,e,t].filter(Boolean).join(" "))},debug(...t){a>i.DEBUG||console.log(...[L,e,...t].filter(Boolean))},log(...t){a>i.LOG||console.log(...[v,e,...t].filter(Boolean))},dir(t,r){a>i.LOG||console.dir(t,r)},warn(...t){a>i.WARN||console.warn(...[O,e,...t].filter(Boolean))},error(...t){a>i.ERROR||console.error(...[T,e,...t].filter(Boolean))}}},b=g();var l=class{#r;#t=g("YNSProvider");constructor(e={}){let t=e.token??m.YNS_API_KEY,r=m.YNS_API_KEY?.startsWith("sk-s-");if(!t)throw new Error("YNS API key is required. Set YNS_API_KEY environment variable or pass token in config.");let s=e.endpoint??(r?"https://yns.cx":"https://yns.store");this.#r={version:"v1",...e,token:t,endpoint:s},this.#t.debug("YNSProvider initialized",{endpoint:s,token:e.token?"from config":"from env"})}async#e(e,t="GET",r){let s=this.#t.getLogger("#restRequest"),n=`${this.#r.endpoint}/api/${this.#r.version}${e}`;s.debug(`Making ${t} request to YNS API: ${n}`);let o=await fetch(n,{method:t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.#r.token}`},body:r?JSON.stringify(r):void 0});if(!o.ok){let f=o.headers.get("content-type"),d=`YNS REST request failed: ${t} ${n} ${o.status} ${o.statusText}`;if(f?.includes("application/json"))try{let u=await o.json();d=u.error||u.message||d}catch(u){s.error("Failed to parse YNS error response as JSON",u)}else{let u=await o.text();s.error(`YNS API request failed: ${o.status} ${o.statusText}`,d,u)}throw new Error(d)}let y=o.headers.get("content-type");if(!y?.includes("application/json"))throw new Error(`YNS API returned ${y} instead of JSON for ${e}`);return o.json()}async meGet(){let e=this.#t.getLogger("meGet");e.debug("Fetching my information");let r=await this.#e("/me");return e.debug("Received my information:",r),r}async productBrowse(e){let t=this.#t.getLogger("productBrowse");t.debug("Browsing products with params:",e);let r=new URLSearchParams;e.limit&&r.append("limit",e.limit.toString()),e.offset&&r.append("offset",e.offset.toString()),e.category&&r.append("category",e.category),e.query&&r.append("query",e.query),e.active!==void 0&&r.append("active",e.active.toString()),e.orderBy&&r.append("orderBy",e.orderBy),e.orderDirection&&r.append("orderDirection",e.orderDirection);let n=`/products${r.size?`?${r}`:""}`;t.debug("Constructed pathname:",n);let o=await this.#e(n);return t.debug("Received product browse result:",{meta:o.meta}),o}async productGet(e){let t=`/products/${e.idOrSlug}`,r=await this.#e(t);return r||null}async orderBrowse(e){let t=this.#t.getLogger("orderBrowse");t.debug("Browsing orders with params:",e);let r=new URLSearchParams;e.limit&&r.append("limit",e.limit.toString()),e.offset&&r.append("offset",e.offset.toString());let n=`/orders${r.size?`?${r}`:""}`;t.debug("Constructed pathname:",n);let o=await this.#e(n);return t.debug("Received orders browse result:",{meta:o.meta}),o}async orderGet(e){let t=`/orders/${e.id}`,r=await this.#e(t);return r||null}async cartUpsert(e){return await this.#e("/carts","POST",e)}async cartRemoveItem(e){let t=`/carts/${e.cartId}/line-items/${e.variantId}`,r=await this.#e(t,"DELETE");return null}async cartGet(e){let t=`/carts/${e.cartId}`;return await this.#e(t)}async collectionGet(e){let t=`/collections/${e.idOrSlug}`;return await this.#e(t)}async collectionBrowse(e){let t=new URLSearchParams;e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.query&&t.append("query",e.query),e.active!==void 0&&t.append("active",e.active.toString());let s=`/collections${t.size?`?${t}`:""}`;return await this.#e(s)}async categoryGet(e){let t=`/categories/${e.idOrSlug}`;return await this.#e(t)}async categoriesBrowse(e){let t=new URLSearchParams;e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.query&&t.append("query",e.query),e.active!==void 0&&t.append("active",e.active.toString());let s=`/categories${t.size?`?${t}`:""}`;return await this.#e(s)}async request(e,t){let r=t?.query?`?${new URLSearchParams(Object.entries(t.query).map(([s,n])=>[s,String(n)]))}`:"";return this.#e(`${e}${r}`,t?.method??"GET",t?.body)}};function q(c={}){return new l(c)}export{q as Commerce,l as YNSProvider};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/env.ts","../src/logger.ts","../src/providers/yns.ts","../src/commerce.ts"],"sourcesContent":["const YNS_API_KEY = process.env.YNS_API_KEY;\n\nexport const env = {\n\tYNS_API_KEY,\n};\n","import type { InspectOptions } from \"node:util\";\n\ntype LogParms = [message: unknown, ...optionalParams: unknown[]];\n\n/**\n * Vercel only supports 3 levels of logging. We're adding additional DEBUG level.\n * https://vercel.com/docs/observability/runtime-logs#level\n *\n * ERROR - Fatal for a particular request. Should be fixed sooner than later.\n *\n * WARN - A note on something that should probably be looked at eventually.\n *\n * LOG - Detail on regular operation.\n *\n * DEBUG - Debug only info as well as time and timeEnd functions.\n */\nconst LogLevel = {\n\tDEBUG: 0,\n\tLOG: 1,\n\tWARN: 2,\n\tERROR: 3,\n} as const;\ntype LogLevel = keyof typeof LogLevel;\n\nconst strLogLevel = (process.env.NEXT_PUBLIC_LOG_LEVEL || \"LOG\") as LogLevel;\nconst valueLogLevel = LogLevel[strLogLevel];\n\nconst RESET = \"\\x1b[0m\";\nconst BLUE = \"\\x1b[34m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\n\nconst TIME = `⏱️`;\nconst DEBUG = `🐛`;\nconst OK = `✔️`;\nconst WARN = `⚠️`;\nconst ERROR = `❌`;\n\nconst PREFIX_TIME = `${TIME} `;\nconst PREFIX_DEBUG = `${BLUE}${DEBUG}${RESET} `;\nconst PREFIX_OK = `${GREEN}${OK}${RESET} `;\nconst PREFIX_WARN = `${YELLOW}${WARN}${RESET} `;\nconst PREFIX_ERROR = `${RED}${ERROR}${RESET} `;\n\nexport const getLogger = (groupLabel?: string) => {\n\tconst PREFIX = groupLabel ? `[${groupLabel}] ` : \"\";\n\treturn {\n\t\tgetLogger(subGroupLabel: string) {\n\t\t\treturn getLogger([groupLabel, subGroupLabel].filter(Boolean).join(\" > \"));\n\t\t},\n\t\ttime(label: string) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.time([PREFIX_TIME, PREFIX, label].filter(Boolean).join(\" \"));\n\t\t},\n\t\ttimeEnd(label: string) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.timeEnd([PREFIX_TIME, PREFIX, label].filter(Boolean).join(\" \"));\n\t\t},\n\t\tdebug(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.log(...[PREFIX_DEBUG, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\tlog(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.LOG) return;\n\t\t\tconsole.log(...[PREFIX_OK, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\tdir(item?: unknown, options?: InspectOptions) {\n\t\t\tif (valueLogLevel > LogLevel.LOG) return;\n\t\t\tconsole.dir(item, options);\n\t\t},\n\t\twarn(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.WARN) return;\n\t\t\tconsole.warn(...[PREFIX_WARN, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\terror(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.ERROR) return;\n\t\t\tconsole.error(...[PREFIX_ERROR, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t};\n};\n\nexport const logger = getLogger();\n","import type {\n\tAPICartCreateBody,\n\tAPICartCreateResult,\n\tAPICartGetResult,\n\tAPICategoriesBrowseQueryParams,\n\tAPICategoriesBrowseResult,\n\tAPICategoryGetByIdParams,\n\tAPICategoryGetByIdResult,\n\tAPICollectionGetByIdParams,\n\tAPICollectionGetByIdResult,\n\tAPICollectionsBrowseQueryParams,\n\tAPICollectionsBrowseResult,\n\tAPIOrderGetByIdParams,\n\tAPIOrderGetByIdResult,\n\tAPIOrdersBrowseQueryParams,\n\tAPIOrdersBrowseResult,\n\tAPIProductGetByIdParams,\n\tAPIProductGetByIdResult,\n\tAPIProductsBrowseQueryParams,\n\tAPIProductsBrowseResult,\n\tAPIStoresGetResult,\n} from \"../api-types\";\nimport { env } from \"../env\";\nimport { getLogger } from \"../logger\";\nimport type { CommerceConfig } from \"../types\";\n\nexport class YNSProvider {\n\t#config: CommerceConfig;\n\t#logger = getLogger(\"YNSProvider\");\n\n\tconstructor(config: CommerceConfig = {}) {\n\t\tconst token = config.token ?? env.YNS_API_KEY;\n\t\tconst isStaging = env.YNS_API_KEY?.startsWith(\"sk-s-\");\n\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t\"YNS API key is required. Set YNS_API_KEY environment variable or pass token in config.\",\n\t\t\t);\n\t\t}\n\t\tconst endpoint = config.endpoint ?? (isStaging ? \"https://yns.cx\" : \"https://yns.store\");\n\n\t\tthis.#config = { version: \"v1\", ...config, token, endpoint };\n\n\t\tthis.#logger.debug(\"YNSProvider initialized\", {\n\t\t\tendpoint,\n\t\t\ttoken: config.token ? `from config` : \"from env\",\n\t\t});\n\t}\n\n\tasync #restRequest<T>(\n\t\tpathname: `/${string}`,\n\t\tmethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" = \"GET\",\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst logger = this.#logger.getLogger(\"#restRequest\");\n\n\t\tconst endpoint = `${this.#config.endpoint}/api/${this.#config.version}${pathname}`;\n\t\tlogger.debug(`Making ${method} request to YNS API: ${endpoint}`);\n\t\tconst response = await fetch(endpoint, {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tAuthorization: `Bearer ${this.#config.token}`,\n\t\t\t},\n\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\t// Handle different error types\n\t\t\tconst contentType = response.headers.get(\"content-type\");\n\t\t\tlet errorMessage = `YNS REST request failed: ${method} ${endpoint} ${response.status} ${response.statusText}`;\n\n\t\t\tif (contentType?.includes(\"application/json\")) {\n\t\t\t\ttry {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\terrorMessage = errorData.error || errorData.message || errorMessage;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\"Failed to parse YNS error response as JSON\", error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tlogger.error(\n\t\t\t\t\t`YNS API request failed: ${response.status} ${response.statusText}`,\n\t\t\t\t\terrorMessage,\n\t\t\t\t\terrorText,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\t// Check if response is JSON before parsing\n\t\tconst contentType = response.headers.get(\"content-type\");\n\t\tif (!contentType?.includes(\"application/json\")) {\n\t\t\tthrow new Error(`YNS API returned ${contentType} instead of JSON for ${pathname}`);\n\t\t}\n\n\t\treturn response.json();\n\t}\n\n\tasync storesGet(): Promise<APIStoresGetResult> {\n\t\tconst logger = this.#logger.getLogger(\"storesGet\");\n\t\tlogger.debug(\"Fetching store information\");\n\n\t\tconst pathname = `/stores` as const;\n\t\tconst result = await this.#restRequest<APIStoresGetResult>(pathname);\n\t\tlogger.debug(\"Received store information:\", result);\n\t\treturn result;\n\t}\n\n\tasync productBrowse(params: APIProductsBrowseQueryParams): Promise<APIProductsBrowseResult> {\n\t\tconst logger = this.#logger.getLogger(\"productBrowse\");\n\t\tlogger.debug(\"Browsing products with params:\", params);\n\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.category) queryParams.append(\"category\", params.category);\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\t\tif (params.orderBy) queryParams.append(\"orderBy\", params.orderBy);\n\t\tif (params.orderDirection) queryParams.append(\"orderDirection\", params.orderDirection);\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/products${searchParams}` as const;\n\t\tlogger.debug(\"Constructed pathname:\", pathname);\n\t\tconst result = await this.#restRequest<APIProductsBrowseResult>(pathname);\n\t\tlogger.debug(\"Received product browse result:\", { meta: result.meta });\n\t\treturn result;\n\t}\n\n\tasync productGet(params: APIProductGetByIdParams): Promise<APIProductGetByIdResult | null> {\n\t\tconst pathname = `/products/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APIProductGetByIdResult>(pathname);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync orderBrowse(params: APIOrdersBrowseQueryParams): Promise<APIOrdersBrowseResult> {\n\t\tconst logger = this.#logger.getLogger(\"orderBrowse\");\n\t\tlogger.debug(\"Browsing orders with params:\", params);\n\n\t\tconst queryParams = new URLSearchParams();\n\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/orders${searchParams}` as const;\n\t\tlogger.debug(\"Constructed pathname:\", pathname);\n\t\tconst result = await this.#restRequest<APIOrdersBrowseResult>(pathname);\n\t\tlogger.debug(\"Received orders browse result:\", { meta: result.meta });\n\t\treturn result;\n\t}\n\n\tasync orderGet(params: APIOrderGetByIdParams): Promise<APIOrderGetByIdResult | null> {\n\t\tconst pathname = `/orders/${params.id}` as const;\n\n\t\tconst result = await this.#restRequest<APIOrderGetByIdResult>(pathname);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// @todo\n\t// async cartAdd(params: APICartAddBody): Promise<APICartAddResult> {\n\t// \tconst body = {\n\t// \t\tvariantId: params.variantId,\n\t// \t\tcartId: params.cartId,\n\t// \t\tquantity: params.quantity,\n\t// \t\tsubscriptionId: params.subscriptionId,\n\t// \t};\n\n\t// \tconst result = await this.#restRequest<APICartCreateResult>(\"/carts\", \"PUT\", body);\n\t// \treturn result;\n\t// }\n\n\tasync cartUpsert(body: APICartCreateBody): Promise<APICartCreateResult> {\n\t\tconst result = await this.#restRequest<APICartCreateResult>(\"/carts\", \"POST\", body);\n\t\treturn result;\n\t}\n\n\tasync cartRemoveItem(params: { cartId: string; variantId: string }): Promise<null> {\n\t\tconst pathname = `/carts/${params.cartId}/line-items/${params.variantId}` as const;\n\t\tconst result = await this.#restRequest<unknown>(pathname, \"DELETE\");\n\t\t// return result;\n\t\treturn null;\n\t}\n\n\tasync cartGet(params: { cartId: string }): Promise<APICartGetResult | null> {\n\t\tconst pathname = `/carts/${params.cartId}` as const;\n\t\tconst result = await this.#restRequest<APICartGetResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync collectionGet(params: APICollectionGetByIdParams): Promise<APICollectionGetByIdResult | null> {\n\t\tconst pathname = `/collections/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APICollectionGetByIdResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync collectionBrowse(params: APICollectionsBrowseQueryParams): Promise<APICollectionsBrowseResult> {\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/collections${searchParams}` as const;\n\n\t\tconst result = await this.#restRequest<APICollectionsBrowseResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync categoryGet(params: APICategoryGetByIdParams): Promise<APICategoryGetByIdResult | null> {\n\t\tconst pathname = `/categories/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APICategoryGetByIdResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync categoriesBrowse(params: APICategoriesBrowseQueryParams): Promise<APICategoriesBrowseResult> {\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/categories${searchParams}` as const;\n\n\t\tconst result = await this.#restRequest<APICategoriesBrowseResult>(pathname);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Make a raw API request to any endpoint.\n\t * Use this for new API features not yet supported by typed methods.\n\t *\n\t * @example\n\t * // GET request (default method)\n\t * const webhooks = await provider.request<Webhook[]>('/webhooks');\n\t *\n\t * // POST with typed body\n\t * const webhook = await provider.request<Webhook, CreateWebhookBody>('/webhooks', {\n\t * method: 'POST',\n\t * body: { url: 'https://...' }\n\t * });\n\t *\n\t * // GET with query parameters\n\t * const products = await provider.request<Product[]>('/products', {\n\t * query: { limit: 10, category: 'shoes' }\n\t * });\n\t *\n\t * // Path parameters via template literals\n\t * const product = await provider.request<Product>(`/products/${id}`);\n\t */\n\tasync request<TResponse = unknown, TBody = unknown>(\n\t\tpathname: `/${string}`,\n\t\toptions?: {\n\t\t\tmethod?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: TBody;\n\t\t\tquery?: Record<string, string | number | boolean>;\n\t\t},\n\t) {\n\t\tconst queryString = options?.query\n\t\t\t? `?${new URLSearchParams(Object.entries(options.query).map(([k, v]) => [k, String(v)]))}`\n\t\t\t: \"\";\n\n\t\treturn this.#restRequest<TResponse>(`${pathname}${queryString}`, options?.method ?? \"GET\", options?.body);\n\t}\n}\n","import { YNSProvider } from \"./providers/yns\";\nimport type { CommerceConfig } from \"./types\";\n\nexport function Commerce(config: CommerceConfig = {}): YNSProvider {\n\treturn new YNSProvider(config);\n}\n"],"mappings":"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","names":["YNS_API_KEY","env","LogLevel","strLogLevel","valueLogLevel","RESET","BLUE","GREEN","YELLOW","RED","TIME","DEBUG","OK","WARN","ERROR","PREFIX_TIME","PREFIX_DEBUG","PREFIX_OK","PREFIX_WARN","PREFIX_ERROR","getLogger","groupLabel","PREFIX","subGroupLabel","label","args","item","options","logger","YNSProvider","#config","#logger","getLogger","config","token","env","isStaging","endpoint","#restRequest","pathname","method","body","logger","response","contentType","errorMessage","errorData","error","errorText","result","params","queryParams","options","queryString","k","v","Commerce","config","YNSProvider"]}
|
|
1
|
+
{"version":3,"sources":["../src/env.ts","../src/logger.ts","../src/providers/yns.ts","../src/commerce.ts"],"sourcesContent":["const YNS_API_KEY = process.env.YNS_API_KEY;\n\nexport const env = {\n\tYNS_API_KEY,\n};\n","import type { InspectOptions } from \"node:util\";\n\ntype LogParms = [message: unknown, ...optionalParams: unknown[]];\n\n/**\n * Vercel only supports 3 levels of logging. We're adding additional DEBUG level.\n * https://vercel.com/docs/observability/runtime-logs#level\n *\n * ERROR - Fatal for a particular request. Should be fixed sooner than later.\n *\n * WARN - A note on something that should probably be looked at eventually.\n *\n * LOG - Detail on regular operation.\n *\n * DEBUG - Debug only info as well as time and timeEnd functions.\n */\nconst LogLevel = {\n\tDEBUG: 0,\n\tLOG: 1,\n\tWARN: 2,\n\tERROR: 3,\n} as const;\ntype LogLevel = keyof typeof LogLevel;\n\nconst strLogLevel = (process.env.NEXT_PUBLIC_LOG_LEVEL || \"LOG\") as LogLevel;\nconst valueLogLevel = LogLevel[strLogLevel];\n\nconst RESET = \"\\x1b[0m\";\nconst BLUE = \"\\x1b[34m\";\nconst GREEN = \"\\x1b[32m\";\nconst YELLOW = \"\\x1b[33m\";\nconst RED = \"\\x1b[31m\";\n\nconst TIME = `⏱️`;\nconst DEBUG = `🐛`;\nconst OK = `✔️`;\nconst WARN = `⚠️`;\nconst ERROR = `❌`;\n\nconst PREFIX_TIME = `${TIME} `;\nconst PREFIX_DEBUG = `${BLUE}${DEBUG}${RESET} `;\nconst PREFIX_OK = `${GREEN}${OK}${RESET} `;\nconst PREFIX_WARN = `${YELLOW}${WARN}${RESET} `;\nconst PREFIX_ERROR = `${RED}${ERROR}${RESET} `;\n\nexport const getLogger = (groupLabel?: string) => {\n\tconst PREFIX = groupLabel ? `[${groupLabel}] ` : \"\";\n\treturn {\n\t\tgetLogger(subGroupLabel: string) {\n\t\t\treturn getLogger([groupLabel, subGroupLabel].filter(Boolean).join(\" > \"));\n\t\t},\n\t\ttime(label: string) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.time([PREFIX_TIME, PREFIX, label].filter(Boolean).join(\" \"));\n\t\t},\n\t\ttimeEnd(label: string) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.timeEnd([PREFIX_TIME, PREFIX, label].filter(Boolean).join(\" \"));\n\t\t},\n\t\tdebug(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.DEBUG) return;\n\t\t\tconsole.log(...[PREFIX_DEBUG, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\tlog(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.LOG) return;\n\t\t\tconsole.log(...[PREFIX_OK, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\tdir(item?: unknown, options?: InspectOptions) {\n\t\t\tif (valueLogLevel > LogLevel.LOG) return;\n\t\t\tconsole.dir(item, options);\n\t\t},\n\t\twarn(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.WARN) return;\n\t\t\tconsole.warn(...[PREFIX_WARN, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t\terror(...args: LogParms) {\n\t\t\tif (valueLogLevel > LogLevel.ERROR) return;\n\t\t\tconsole.error(...[PREFIX_ERROR, PREFIX, ...args].filter(Boolean));\n\t\t},\n\t};\n};\n\nexport const logger = getLogger();\n","import type {\n\tAPICartCreateBody,\n\tAPICartCreateResult,\n\tAPICartGetResult,\n\tAPICategoriesBrowseQueryParams,\n\tAPICategoriesBrowseResult,\n\tAPICategoryGetByIdParams,\n\tAPICategoryGetByIdResult,\n\tAPICollectionGetByIdParams,\n\tAPICollectionGetByIdResult,\n\tAPICollectionsBrowseQueryParams,\n\tAPICollectionsBrowseResult,\n\tAPIMeGetResult,\n\tAPIOrderGetByIdParams,\n\tAPIOrderGetByIdResult,\n\tAPIOrdersBrowseQueryParams,\n\tAPIOrdersBrowseResult,\n\tAPIProductGetByIdParams,\n\tAPIProductGetByIdResult,\n\tAPIProductsBrowseQueryParams,\n\tAPIProductsBrowseResult,\n} from \"../api-types\";\nimport { env } from \"../env\";\nimport { getLogger } from \"../logger\";\nimport type { CommerceConfig } from \"../types\";\n\nexport class YNSProvider {\n\t#config: CommerceConfig;\n\t#logger = getLogger(\"YNSProvider\");\n\n\tconstructor(config: CommerceConfig = {}) {\n\t\tconst token = config.token ?? env.YNS_API_KEY;\n\t\tconst isStaging = env.YNS_API_KEY?.startsWith(\"sk-s-\");\n\n\t\tif (!token) {\n\t\t\tthrow new Error(\n\t\t\t\t\"YNS API key is required. Set YNS_API_KEY environment variable or pass token in config.\",\n\t\t\t);\n\t\t}\n\t\tconst endpoint = config.endpoint ?? (isStaging ? \"https://yns.cx\" : \"https://yns.store\");\n\n\t\tthis.#config = { version: \"v1\", ...config, token, endpoint };\n\n\t\tthis.#logger.debug(\"YNSProvider initialized\", {\n\t\t\tendpoint,\n\t\t\ttoken: config.token ? `from config` : \"from env\",\n\t\t});\n\t}\n\n\tasync #restRequest<T>(\n\t\tpathname: `/${string}`,\n\t\tmethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" = \"GET\",\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst logger = this.#logger.getLogger(\"#restRequest\");\n\n\t\tconst endpoint = `${this.#config.endpoint}/api/${this.#config.version}${pathname}`;\n\t\tlogger.debug(`Making ${method} request to YNS API: ${endpoint}`);\n\t\tconst response = await fetch(endpoint, {\n\t\t\tmethod,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tAuthorization: `Bearer ${this.#config.token}`,\n\t\t\t},\n\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\t// Handle different error types\n\t\t\tconst contentType = response.headers.get(\"content-type\");\n\t\t\tlet errorMessage = `YNS REST request failed: ${method} ${endpoint} ${response.status} ${response.statusText}`;\n\n\t\t\tif (contentType?.includes(\"application/json\")) {\n\t\t\t\ttry {\n\t\t\t\t\tconst errorData = await response.json();\n\t\t\t\t\terrorMessage = errorData.error || errorData.message || errorMessage;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\"Failed to parse YNS error response as JSON\", error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst errorText = await response.text();\n\t\t\t\tlogger.error(\n\t\t\t\t\t`YNS API request failed: ${response.status} ${response.statusText}`,\n\t\t\t\t\terrorMessage,\n\t\t\t\t\terrorText,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\n\t\t// Check if response is JSON before parsing\n\t\tconst contentType = response.headers.get(\"content-type\");\n\t\tif (!contentType?.includes(\"application/json\")) {\n\t\t\tthrow new Error(`YNS API returned ${contentType} instead of JSON for ${pathname}`);\n\t\t}\n\n\t\treturn response.json();\n\t}\n\n\tasync meGet(): Promise<APIMeGetResult> {\n\t\tconst logger = this.#logger.getLogger(\"meGet\");\n\t\tlogger.debug(\"Fetching my information\");\n\n\t\tconst pathname = `/me` as const;\n\t\tconst result = await this.#restRequest<APIMeGetResult>(pathname);\n\t\tlogger.debug(\"Received my information:\", result);\n\t\treturn result;\n\t}\n\n\tasync productBrowse(params: APIProductsBrowseQueryParams): Promise<APIProductsBrowseResult> {\n\t\tconst logger = this.#logger.getLogger(\"productBrowse\");\n\t\tlogger.debug(\"Browsing products with params:\", params);\n\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.category) queryParams.append(\"category\", params.category);\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\t\tif (params.orderBy) queryParams.append(\"orderBy\", params.orderBy);\n\t\tif (params.orderDirection) queryParams.append(\"orderDirection\", params.orderDirection);\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/products${searchParams}` as const;\n\t\tlogger.debug(\"Constructed pathname:\", pathname);\n\t\tconst result = await this.#restRequest<APIProductsBrowseResult>(pathname);\n\t\tlogger.debug(\"Received product browse result:\", { meta: result.meta });\n\t\treturn result;\n\t}\n\n\tasync productGet(params: APIProductGetByIdParams): Promise<APIProductGetByIdResult | null> {\n\t\tconst pathname = `/products/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APIProductGetByIdResult>(pathname);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync orderBrowse(params: APIOrdersBrowseQueryParams): Promise<APIOrdersBrowseResult> {\n\t\tconst logger = this.#logger.getLogger(\"orderBrowse\");\n\t\tlogger.debug(\"Browsing orders with params:\", params);\n\n\t\tconst queryParams = new URLSearchParams();\n\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/orders${searchParams}` as const;\n\t\tlogger.debug(\"Constructed pathname:\", pathname);\n\t\tconst result = await this.#restRequest<APIOrdersBrowseResult>(pathname);\n\t\tlogger.debug(\"Received orders browse result:\", { meta: result.meta });\n\t\treturn result;\n\t}\n\n\tasync orderGet(params: APIOrderGetByIdParams): Promise<APIOrderGetByIdResult | null> {\n\t\tconst pathname = `/orders/${params.id}` as const;\n\n\t\tconst result = await this.#restRequest<APIOrderGetByIdResult>(pathname);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// @todo\n\t// async cartAdd(params: APICartAddBody): Promise<APICartAddResult> {\n\t// \tconst body = {\n\t// \t\tvariantId: params.variantId,\n\t// \t\tcartId: params.cartId,\n\t// \t\tquantity: params.quantity,\n\t// \t\tsubscriptionId: params.subscriptionId,\n\t// \t};\n\n\t// \tconst result = await this.#restRequest<APICartCreateResult>(\"/carts\", \"PUT\", body);\n\t// \treturn result;\n\t// }\n\n\tasync cartUpsert(body: APICartCreateBody): Promise<APICartCreateResult> {\n\t\tconst result = await this.#restRequest<APICartCreateResult>(\"/carts\", \"POST\", body);\n\t\treturn result;\n\t}\n\n\tasync cartRemoveItem(params: { cartId: string; variantId: string }): Promise<null> {\n\t\tconst pathname = `/carts/${params.cartId}/line-items/${params.variantId}` as const;\n\t\tconst result = await this.#restRequest<unknown>(pathname, \"DELETE\");\n\t\t// return result;\n\t\treturn null;\n\t}\n\n\tasync cartGet(params: { cartId: string }): Promise<APICartGetResult | null> {\n\t\tconst pathname = `/carts/${params.cartId}` as const;\n\t\tconst result = await this.#restRequest<APICartGetResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync collectionGet(params: APICollectionGetByIdParams): Promise<APICollectionGetByIdResult | null> {\n\t\tconst pathname = `/collections/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APICollectionGetByIdResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync collectionBrowse(params: APICollectionsBrowseQueryParams): Promise<APICollectionsBrowseResult> {\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/collections${searchParams}` as const;\n\n\t\tconst result = await this.#restRequest<APICollectionsBrowseResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync categoryGet(params: APICategoryGetByIdParams): Promise<APICategoryGetByIdResult | null> {\n\t\tconst pathname = `/categories/${params.idOrSlug}` as const;\n\n\t\tconst result = await this.#restRequest<APICategoryGetByIdResult>(pathname);\n\t\treturn result;\n\t}\n\n\tasync categoriesBrowse(params: APICategoriesBrowseQueryParams): Promise<APICategoriesBrowseResult> {\n\t\tconst queryParams = new URLSearchParams();\n\t\tif (params.limit) queryParams.append(\"limit\", params.limit.toString());\n\t\tif (params.offset) queryParams.append(\"offset\", params.offset.toString());\n\t\tif (params.query) queryParams.append(\"query\", params.query);\n\t\tif (params.active !== undefined) queryParams.append(\"active\", params.active.toString());\n\n\t\tconst searchParams = queryParams.size ? `?${queryParams}` : \"\";\n\t\tconst pathname = `/categories${searchParams}` as const;\n\n\t\tconst result = await this.#restRequest<APICategoriesBrowseResult>(pathname);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Make a raw API request to any endpoint.\n\t * Use this for new API features not yet supported by typed methods.\n\t *\n\t * @example\n\t * // GET request (default method)\n\t * const webhooks = await provider.request<Webhook[]>('/webhooks');\n\t *\n\t * // POST with typed body\n\t * const webhook = await provider.request<Webhook, CreateWebhookBody>('/webhooks', {\n\t * method: 'POST',\n\t * body: { url: 'https://...' }\n\t * });\n\t *\n\t * // GET with query parameters\n\t * const products = await provider.request<Product[]>('/products', {\n\t * query: { limit: 10, category: 'shoes' }\n\t * });\n\t *\n\t * // Path parameters via template literals\n\t * const product = await provider.request<Product>(`/products/${id}`);\n\t */\n\tasync request<TResponse = unknown, TBody = unknown>(\n\t\tpathname: `/${string}`,\n\t\toptions?: {\n\t\t\tmethod?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n\t\t\tbody?: TBody;\n\t\t\tquery?: Record<string, string | number | boolean>;\n\t\t},\n\t) {\n\t\tconst queryString = options?.query\n\t\t\t? `?${new URLSearchParams(Object.entries(options.query).map(([k, v]) => [k, String(v)]))}`\n\t\t\t: \"\";\n\n\t\treturn this.#restRequest<TResponse>(`${pathname}${queryString}`, options?.method ?? \"GET\", options?.body);\n\t}\n}\n","import { YNSProvider } from \"./providers/yns\";\nimport type { CommerceConfig } from \"./types\";\n\nexport function Commerce(config: CommerceConfig = {}): YNSProvider {\n\treturn new YNSProvider(config);\n}\n"],"mappings":"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","names":["YNS_API_KEY","env","LogLevel","strLogLevel","valueLogLevel","RESET","BLUE","GREEN","YELLOW","RED","TIME","DEBUG","OK","WARN","ERROR","PREFIX_TIME","PREFIX_DEBUG","PREFIX_OK","PREFIX_WARN","PREFIX_ERROR","getLogger","groupLabel","PREFIX","subGroupLabel","label","args","item","options","logger","YNSProvider","#config","#logger","getLogger","config","token","env","isStaging","endpoint","#restRequest","pathname","method","body","logger","response","contentType","errorMessage","errorData","error","errorText","result","params","queryParams","options","queryString","k","v","Commerce","config","YNSProvider"]}
|