@offerkit/sdk 0.2.3 → 0.2.4

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/index.mjs CHANGED
@@ -38,8 +38,9 @@ const apiKeys = {
38
38
  revoke: oc.route({
39
39
  method: "DELETE",
40
40
  path: "/api-keys/{id}",
41
- summary: "Disable an API key (cannot be re-enabled)"
42
- }).input(z.object({ id: z.string() })).output(z.object({ ok: z.literal(true) }))
41
+ summary: "Disable an API key (cannot be re-enabled)",
42
+ inputStructure: "detailed"
43
+ }).input(z.object({ params: z.object({ id: z.string() }) })).output(z.object({ ok: z.literal(true) }))
43
44
  };
44
45
  //#endregion
45
46
  //#region ../contract/src/mcp.ts
@@ -140,8 +141,9 @@ const campaigns = {
140
141
  })).route({
141
142
  method: "GET",
142
143
  path: "/campaigns/{id}",
143
- summary: "Get campaign"
144
- }).input(z.object({ id: z.string().uuid() })).output(campaignOutput),
144
+ summary: "Get campaign",
145
+ inputStructure: "detailed"
146
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(campaignOutput),
145
147
  create: oc.route({
146
148
  method: "POST",
147
149
  path: "/campaigns",
@@ -150,16 +152,18 @@ const campaigns = {
150
152
  update: oc.route({
151
153
  method: "PATCH",
152
154
  path: "/campaigns/{id}",
153
- summary: "Update campaign"
155
+ summary: "Update campaign",
156
+ inputStructure: "detailed"
154
157
  }).input(z.object({
155
- id: z.string().uuid(),
156
- patch: campaignUpdateInput
158
+ params: z.object({ id: z.string().uuid() }),
159
+ body: z.object({ patch: campaignUpdateInput })
157
160
  })).output(campaignOutput),
158
161
  delete: oc.route({
159
162
  method: "DELETE",
160
163
  path: "/campaigns/{id}",
161
- summary: "Soft-delete campaign"
162
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
164
+ summary: "Soft-delete campaign",
165
+ inputStructure: "detailed"
166
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
163
167
  };
164
168
  //#endregion
165
169
  //#region ../contract/src/schemas/customer.ts
@@ -226,16 +230,18 @@ const customers = {
226
230
  })).route({
227
231
  method: "GET",
228
232
  path: "/customers/{id}",
229
- summary: "Get customer"
230
- }).input(z.object({ id: z.string().uuid() })).output(customerOutput),
233
+ summary: "Get customer",
234
+ inputStructure: "detailed"
235
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(customerOutput),
231
236
  getByExternalId: oc.meta(mcpMeta({
232
237
  expose: true,
233
238
  riskLevel: "safe"
234
239
  })).route({
235
240
  method: "GET",
236
241
  path: "/customers/by-external-id/{externalId}",
237
- summary: "Get a customer by integrator-supplied externalId"
238
- }).input(z.object({ externalId: z.string().min(1).max(256) })).output(customerOutput),
242
+ summary: "Get a customer by integrator-supplied externalId",
243
+ inputStructure: "detailed"
244
+ }).input(z.object({ params: z.object({ externalId: z.string().min(1).max(256) }) })).output(customerOutput),
239
245
  create: oc.route({
240
246
  method: "POST",
241
247
  path: "/customers",
@@ -249,16 +255,18 @@ const customers = {
249
255
  update: oc.route({
250
256
  method: "PATCH",
251
257
  path: "/customers/{id}",
252
- summary: "Update customer"
258
+ summary: "Update customer",
259
+ inputStructure: "detailed"
253
260
  }).input(z.object({
254
- id: z.string().uuid(),
255
- patch: customerUpdateInput
261
+ params: z.object({ id: z.string().uuid() }),
262
+ body: z.object({ patch: customerUpdateInput })
256
263
  })).output(customerOutput),
257
264
  delete: oc.route({
258
265
  method: "DELETE",
259
266
  path: "/customers/{id}",
260
- summary: "Soft-delete customer"
261
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
267
+ summary: "Soft-delete customer",
268
+ inputStructure: "detailed"
269
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
262
270
  };
263
271
  //#endregion
264
272
  //#region ../contract/src/schemas/loyalty.ts
@@ -416,8 +424,9 @@ const loyalty = {
416
424
  get: oc.route({
417
425
  method: "GET",
418
426
  path: "/loyalty/programs/{id}",
419
- summary: "Get loyalty program"
420
- }).input(z.object({ id: z.string().uuid() })).output(loyaltyProgramOutput),
427
+ summary: "Get loyalty program",
428
+ inputStructure: "detailed"
429
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(loyaltyProgramOutput),
421
430
  create: oc.route({
422
431
  method: "POST",
423
432
  path: "/loyalty/programs",
@@ -426,23 +435,26 @@ const loyalty = {
426
435
  update: oc.route({
427
436
  method: "PATCH",
428
437
  path: "/loyalty/programs/{id}",
429
- summary: "Update loyalty program"
438
+ summary: "Update loyalty program",
439
+ inputStructure: "detailed"
430
440
  }).input(z.object({
431
- id: z.string().uuid(),
432
- patch: loyaltyProgramUpdateInput
441
+ params: z.object({ id: z.string().uuid() }),
442
+ body: z.object({ patch: loyaltyProgramUpdateInput })
433
443
  })).output(loyaltyProgramOutput),
434
444
  delete: oc.route({
435
445
  method: "DELETE",
436
446
  path: "/loyalty/programs/{id}",
437
- summary: "Soft-delete program"
438
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
447
+ summary: "Soft-delete program",
448
+ inputStructure: "detailed"
449
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
439
450
  },
440
451
  tiers: {
441
452
  list: oc.route({
442
453
  method: "GET",
443
454
  path: "/loyalty/programs/{programId}/tiers",
444
- summary: "List tiers"
445
- }).input(z.object({ programId: z.string().uuid() })).output(z.object({ data: z.array(loyaltyTierOutput) })),
455
+ summary: "List tiers",
456
+ inputStructure: "detailed"
457
+ }).input(z.object({ params: z.object({ programId: z.string().uuid() }) })).output(z.object({ data: z.array(loyaltyTierOutput) })),
446
458
  create: oc.route({
447
459
  method: "POST",
448
460
  path: "/loyalty/tiers",
@@ -451,23 +463,26 @@ const loyalty = {
451
463
  update: oc.route({
452
464
  method: "PATCH",
453
465
  path: "/loyalty/tiers/{id}",
454
- summary: "Update tier"
466
+ summary: "Update tier",
467
+ inputStructure: "detailed"
455
468
  }).input(z.object({
456
- id: z.string().uuid(),
457
- patch: loyaltyTierUpdateInput
469
+ params: z.object({ id: z.string().uuid() }),
470
+ body: z.object({ patch: loyaltyTierUpdateInput })
458
471
  })).output(loyaltyTierOutput),
459
472
  delete: oc.route({
460
473
  method: "DELETE",
461
474
  path: "/loyalty/tiers/{id}",
462
- summary: "Delete tier"
463
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
475
+ summary: "Delete tier",
476
+ inputStructure: "detailed"
477
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
464
478
  },
465
479
  earningRules: {
466
480
  list: oc.route({
467
481
  method: "GET",
468
482
  path: "/loyalty/programs/{programId}/earning-rules",
469
- summary: "List earning rules"
470
- }).input(z.object({ programId: z.string().uuid() })).output(z.object({ data: z.array(loyaltyEarningRuleOutput) })),
483
+ summary: "List earning rules",
484
+ inputStructure: "detailed"
485
+ }).input(z.object({ params: z.object({ programId: z.string().uuid() }) })).output(z.object({ data: z.array(loyaltyEarningRuleOutput) })),
471
486
  create: oc.route({
472
487
  method: "POST",
473
488
  path: "/loyalty/earning-rules",
@@ -476,23 +491,26 @@ const loyalty = {
476
491
  update: oc.route({
477
492
  method: "PATCH",
478
493
  path: "/loyalty/earning-rules/{id}",
479
- summary: "Update earning rule"
494
+ summary: "Update earning rule",
495
+ inputStructure: "detailed"
480
496
  }).input(z.object({
481
- id: z.string().uuid(),
482
- patch: loyaltyEarningRuleUpdateInput
497
+ params: z.object({ id: z.string().uuid() }),
498
+ body: z.object({ patch: loyaltyEarningRuleUpdateInput })
483
499
  })).output(loyaltyEarningRuleOutput),
484
500
  delete: oc.route({
485
501
  method: "DELETE",
486
502
  path: "/loyalty/earning-rules/{id}",
487
- summary: "Delete earning rule"
488
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
503
+ summary: "Delete earning rule",
504
+ inputStructure: "detailed"
505
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
489
506
  },
490
507
  rewards: {
491
508
  list: oc.route({
492
509
  method: "GET",
493
510
  path: "/loyalty/programs/{programId}/rewards",
494
- summary: "List rewards"
495
- }).input(z.object({ programId: z.string().uuid() })).output(z.object({ data: z.array(loyaltyRewardOutput) })),
511
+ summary: "List rewards",
512
+ inputStructure: "detailed"
513
+ }).input(z.object({ params: z.object({ programId: z.string().uuid() }) })).output(z.object({ data: z.array(loyaltyRewardOutput) })),
496
514
  create: oc.route({
497
515
  method: "POST",
498
516
  path: "/loyalty/rewards",
@@ -501,28 +519,35 @@ const loyalty = {
501
519
  update: oc.route({
502
520
  method: "PATCH",
503
521
  path: "/loyalty/rewards/{id}",
504
- summary: "Update reward"
522
+ summary: "Update reward",
523
+ inputStructure: "detailed"
505
524
  }).input(z.object({
506
- id: z.string().uuid(),
507
- patch: loyaltyRewardUpdateInput
525
+ params: z.object({ id: z.string().uuid() }),
526
+ body: z.object({ patch: loyaltyRewardUpdateInput })
508
527
  })).output(loyaltyRewardOutput),
509
528
  delete: oc.route({
510
529
  method: "DELETE",
511
530
  path: "/loyalty/rewards/{id}",
512
- summary: "Soft-delete reward"
513
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
531
+ summary: "Soft-delete reward",
532
+ inputStructure: "detailed"
533
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
514
534
  },
515
535
  members: {
516
536
  list: oc.route({
517
537
  method: "GET",
518
538
  path: "/loyalty/programs/{programId}/members",
519
- summary: "List members of a program"
520
- }).input(paginationInput.extend({ programId: z.string().uuid() })).output(paginatedOutput(loyaltyMemberOutput)),
539
+ summary: "List members of a program",
540
+ inputStructure: "detailed"
541
+ }).input(z.object({
542
+ params: z.object({ programId: z.string().uuid() }),
543
+ query: paginationInput
544
+ })).output(paginatedOutput(loyaltyMemberOutput)),
521
545
  get: oc.route({
522
546
  method: "GET",
523
547
  path: "/loyalty/members/{id}",
524
- summary: "Get member"
525
- }).input(z.object({ id: z.string().uuid() })).output(loyaltyMemberOutput),
548
+ summary: "Get member",
549
+ inputStructure: "detailed"
550
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(loyaltyMemberOutput),
526
551
  enroll: oc.route({
527
552
  method: "POST",
528
553
  path: "/loyalty/members",
@@ -574,8 +599,9 @@ const loyalty = {
574
599
  })).route({
575
600
  method: "GET",
576
601
  path: "/loyalty/members/{id}/transactions",
577
- summary: "Member transaction ledger"
578
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ data: z.array(loyaltyTransactionOutput) }))
602
+ summary: "Member transaction ledger",
603
+ inputStructure: "detailed"
604
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ data: z.array(loyaltyTransactionOutput) }))
579
605
  }
580
606
  };
581
607
  //#endregion
@@ -690,8 +716,9 @@ const referrals = {
690
716
  get: oc.route({
691
717
  method: "GET",
692
718
  path: "/referral-programs/{id}",
693
- summary: "Get referral program"
694
- }).input(z.object({ id: z.string().uuid() })).output(referralProgramOutput),
719
+ summary: "Get referral program",
720
+ inputStructure: "detailed"
721
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(referralProgramOutput),
695
722
  create: oc.route({
696
723
  method: "POST",
697
724
  path: "/referral-programs",
@@ -700,32 +727,43 @@ const referrals = {
700
727
  update: oc.route({
701
728
  method: "PATCH",
702
729
  path: "/referral-programs/{id}",
703
- summary: "Update referral program"
730
+ summary: "Update referral program",
731
+ inputStructure: "detailed"
704
732
  }).input(z.object({
705
- id: z.string().uuid(),
706
- patch: referralProgramUpdateInput
733
+ params: z.object({ id: z.string().uuid() }),
734
+ body: z.object({ patch: referralProgramUpdateInput })
707
735
  })).output(referralProgramOutput),
708
736
  delete: oc.route({
709
737
  method: "DELETE",
710
738
  path: "/referral-programs/{id}",
711
- summary: "Soft-delete referral program"
712
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
739
+ summary: "Soft-delete referral program",
740
+ inputStructure: "detailed"
741
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
713
742
  },
714
743
  listCodes: oc.route({
715
744
  method: "GET",
716
745
  path: "/referral-programs/{programId}/codes",
717
- summary: "List referral codes in a program"
718
- }).input(paginationInput.extend({ programId: z.string().uuid() })).output(paginatedOutput(referralCodeOutput)),
746
+ summary: "List referral codes in a program",
747
+ inputStructure: "detailed"
748
+ }).input(z.object({
749
+ params: z.object({ programId: z.string().uuid() }),
750
+ query: paginationInput
751
+ })).output(paginatedOutput(referralCodeOutput)),
719
752
  listConversions: oc.route({
720
753
  method: "GET",
721
754
  path: "/referral-codes/{codeId}/conversions",
722
- summary: "List conversions for a referral code"
723
- }).input(paginationInput.extend({ codeId: z.string().uuid() })).output(paginatedOutput(referralConversionOutput)),
755
+ summary: "List conversions for a referral code",
756
+ inputStructure: "detailed"
757
+ }).input(z.object({
758
+ params: z.object({ codeId: z.string().uuid() }),
759
+ query: paginationInput
760
+ })).output(paginatedOutput(referralConversionOutput)),
724
761
  getByCode: oc.route({
725
762
  method: "GET",
726
763
  path: "/referrals/{code}",
727
- summary: "Look up a referral code"
728
- }).input(z.object({ code: z.string() })).output(referralCodeOutput),
764
+ summary: "Look up a referral code",
765
+ inputStructure: "detailed"
766
+ }).input(z.object({ params: z.object({ code: z.string() }) })).output(referralCodeOutput),
729
767
  issue: oc.route({
730
768
  method: "POST",
731
769
  path: "/referrals/issue",
@@ -1042,16 +1080,18 @@ const promotions = {
1042
1080
  update: oc.route({
1043
1081
  method: "PATCH",
1044
1082
  path: "/promotions/tiers/{id}",
1045
- summary: "Update promotion tier"
1083
+ summary: "Update promotion tier",
1084
+ inputStructure: "detailed"
1046
1085
  }).input(z.object({
1047
- id: z.string().uuid(),
1048
- patch: promotionTierUpdateInput
1086
+ params: z.object({ id: z.string().uuid() }),
1087
+ body: z.object({ patch: promotionTierUpdateInput })
1049
1088
  })).output(promotionTierOutput),
1050
1089
  delete: oc.route({
1051
1090
  method: "DELETE",
1052
1091
  path: "/promotions/tiers/{id}",
1053
- summary: "Soft-delete promotion tier"
1054
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
1092
+ summary: "Soft-delete promotion tier",
1093
+ inputStructure: "detailed"
1094
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
1055
1095
  },
1056
1096
  qualify: oc.meta(mcpMeta({
1057
1097
  expose: true,
@@ -1091,8 +1131,9 @@ const rewardTypes = {
1091
1131
  get: oc.route({
1092
1132
  method: "GET",
1093
1133
  path: "/reward-types/{id}",
1094
- summary: "Get reward type"
1095
- }).input(z.object({ id: z.string().uuid() })).output(rewardTypeOutput),
1134
+ summary: "Get reward type",
1135
+ inputStructure: "detailed"
1136
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(rewardTypeOutput),
1096
1137
  create: oc.route({
1097
1138
  method: "POST",
1098
1139
  path: "/reward-types",
@@ -1101,16 +1142,18 @@ const rewardTypes = {
1101
1142
  update: oc.route({
1102
1143
  method: "PATCH",
1103
1144
  path: "/reward-types/{id}",
1104
- summary: "Update reward type"
1145
+ summary: "Update reward type",
1146
+ inputStructure: "detailed"
1105
1147
  }).input(z.object({
1106
- id: z.string().uuid(),
1107
- patch: rewardTypeUpdateInput
1148
+ params: z.object({ id: z.string().uuid() }),
1149
+ body: z.object({ patch: rewardTypeUpdateInput })
1108
1150
  })).output(rewardTypeOutput),
1109
1151
  delete: oc.route({
1110
1152
  method: "DELETE",
1111
1153
  path: "/reward-types/{id}",
1112
- summary: "Soft-delete reward type"
1113
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
1154
+ summary: "Soft-delete reward type",
1155
+ inputStructure: "detailed"
1156
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
1114
1157
  };
1115
1158
  //#endregion
1116
1159
  //#region ../contract/src/schemas/segment.ts
@@ -1140,8 +1183,9 @@ const segments = {
1140
1183
  get: oc.route({
1141
1184
  method: "GET",
1142
1185
  path: "/segments/{id}",
1143
- summary: "Get segment"
1144
- }).input(z.object({ id: z.string().uuid() })).output(segmentOutput),
1186
+ summary: "Get segment",
1187
+ inputStructure: "detailed"
1188
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(segmentOutput),
1145
1189
  create: oc.route({
1146
1190
  method: "POST",
1147
1191
  path: "/segments",
@@ -1150,16 +1194,18 @@ const segments = {
1150
1194
  update: oc.route({
1151
1195
  method: "PATCH",
1152
1196
  path: "/segments/{id}",
1153
- summary: "Update segment"
1197
+ summary: "Update segment",
1198
+ inputStructure: "detailed"
1154
1199
  }).input(z.object({
1155
- id: z.string().uuid(),
1156
- patch: segmentUpdateInput
1200
+ params: z.object({ id: z.string().uuid() }),
1201
+ body: z.object({ patch: segmentUpdateInput })
1157
1202
  })).output(segmentOutput),
1158
1203
  delete: oc.route({
1159
1204
  method: "DELETE",
1160
1205
  path: "/segments/{id}",
1161
- summary: "Soft-delete segment"
1162
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) })),
1206
+ summary: "Soft-delete segment",
1207
+ inputStructure: "detailed"
1208
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) })),
1163
1209
  preview: oc.meta(mcpMeta({
1164
1210
  expose: true,
1165
1211
  riskLevel: "safe",
@@ -1211,8 +1257,9 @@ const validationRules = {
1211
1257
  get: oc.route({
1212
1258
  method: "GET",
1213
1259
  path: "/validation-rules/{id}",
1214
- summary: "Get validation rule"
1215
- }).input(z.object({ id: z.string().uuid() })).output(validationRuleOutput),
1260
+ summary: "Get validation rule",
1261
+ inputStructure: "detailed"
1262
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(validationRuleOutput),
1216
1263
  create: oc.route({
1217
1264
  method: "POST",
1218
1265
  path: "/validation-rules",
@@ -1221,16 +1268,18 @@ const validationRules = {
1221
1268
  update: oc.route({
1222
1269
  method: "PATCH",
1223
1270
  path: "/validation-rules/{id}",
1224
- summary: "Update validation rule"
1271
+ summary: "Update validation rule",
1272
+ inputStructure: "detailed"
1225
1273
  }).input(z.object({
1226
- id: z.string().uuid(),
1227
- patch: validationRuleUpdateInput
1274
+ params: z.object({ id: z.string().uuid() }),
1275
+ body: z.object({ patch: validationRuleUpdateInput })
1228
1276
  })).output(validationRuleOutput),
1229
1277
  delete: oc.route({
1230
1278
  method: "DELETE",
1231
1279
  path: "/validation-rules/{id}",
1232
- summary: "Soft-delete validation rule"
1233
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
1280
+ summary: "Soft-delete validation rule",
1281
+ inputStructure: "detailed"
1282
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
1234
1283
  };
1235
1284
  //#endregion
1236
1285
  //#region ../contract/src/routes/vouchers.ts
@@ -1254,8 +1303,9 @@ const vouchers = {
1254
1303
  })).route({
1255
1304
  method: "GET",
1256
1305
  path: "/vouchers/{code}",
1257
- summary: "Get voucher by code"
1258
- }).input(z.object({ code: z.string() })).output(voucherOutput),
1306
+ summary: "Get voucher by code",
1307
+ inputStructure: "detailed"
1308
+ }).input(z.object({ params: z.object({ code: z.string() }) })).output(voucherOutput),
1259
1309
  create: oc.route({
1260
1310
  method: "POST",
1261
1311
  path: "/vouchers",
@@ -1264,16 +1314,18 @@ const vouchers = {
1264
1314
  update: oc.route({
1265
1315
  method: "PATCH",
1266
1316
  path: "/vouchers/{code}",
1267
- summary: "Update voucher"
1317
+ summary: "Update voucher",
1318
+ inputStructure: "detailed"
1268
1319
  }).input(z.object({
1269
- code: z.string(),
1270
- patch: voucherUpdateInput
1320
+ params: z.object({ code: z.string() }),
1321
+ body: z.object({ patch: voucherUpdateInput })
1271
1322
  })).output(voucherOutput),
1272
1323
  delete: oc.route({
1273
1324
  method: "DELETE",
1274
1325
  path: "/vouchers/{code}",
1275
- summary: "Soft-delete voucher"
1276
- }).input(z.object({ code: z.string() })).output(z.object({ ok: z.literal(true) })),
1326
+ summary: "Soft-delete voucher",
1327
+ inputStructure: "detailed"
1328
+ }).input(z.object({ params: z.object({ code: z.string() }) })).output(z.object({ ok: z.literal(true) })),
1277
1329
  bulk: oc.route({
1278
1330
  method: "POST",
1279
1331
  path: "/vouchers/bulk",
@@ -1289,8 +1341,12 @@ const vouchers = {
1289
1341
  })).route({
1290
1342
  method: "POST",
1291
1343
  path: "/vouchers/{code}/validate",
1292
- summary: "Validate a voucher against an optional order context"
1293
- }).input(validateInput).output(validateOutput),
1344
+ summary: "Validate a voucher against an optional order context",
1345
+ inputStructure: "detailed"
1346
+ }).input(z.object({
1347
+ params: z.object({ code: z.string().min(1) }),
1348
+ body: validateInput.omit({ code: true }).optional()
1349
+ })).output(validateOutput),
1294
1350
  qualify: oc.meta(mcpMeta({
1295
1351
  expose: true,
1296
1352
  riskLevel: "safe"
@@ -1306,8 +1362,12 @@ const vouchers = {
1306
1362
  })).route({
1307
1363
  method: "POST",
1308
1364
  path: "/vouchers/{code}/redemption",
1309
- summary: "Redeem a voucher"
1310
- }).input(redeemInput).output(redeemOutput),
1365
+ summary: "Redeem a voucher",
1366
+ inputStructure: "detailed"
1367
+ }).input(z.object({
1368
+ params: z.object({ code: z.string().min(1) }),
1369
+ body: redeemInput.omit({ code: true }).optional()
1370
+ })).output(redeemOutput),
1311
1371
  stackRedeem: oc.meta(mcpMeta({
1312
1372
  expose: true,
1313
1373
  riskLevel: "mutating",
@@ -1320,8 +1380,9 @@ const vouchers = {
1320
1380
  transactions: oc.route({
1321
1381
  method: "GET",
1322
1382
  path: "/vouchers/{code}/transactions",
1323
- summary: "Gift card balance ledger"
1324
- }).input(z.object({ code: z.string() })).output(z.object({ data: z.array(z.object({
1383
+ summary: "Gift card balance ledger",
1384
+ inputStructure: "detailed"
1385
+ }).input(z.object({ params: z.object({ code: z.string() }) })).output(z.object({ data: z.array(z.object({
1325
1386
  id: z.string().uuid(),
1326
1387
  redemptionId: z.string().uuid().nullable(),
1327
1388
  delta: z.number().int(),
@@ -1399,8 +1460,9 @@ const webhooks$1 = {
1399
1460
  get: oc.route({
1400
1461
  method: "GET",
1401
1462
  path: "/webhooks/{id}",
1402
- summary: "Get webhook"
1403
- }).input(z.object({ id: z.string().uuid() })).output(webhookOutput),
1463
+ summary: "Get webhook",
1464
+ inputStructure: "detailed"
1465
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(webhookOutput),
1404
1466
  create: oc.route({
1405
1467
  method: "POST",
1406
1468
  path: "/webhooks",
@@ -1409,29 +1471,33 @@ const webhooks$1 = {
1409
1471
  update: oc.route({
1410
1472
  method: "PATCH",
1411
1473
  path: "/webhooks/{id}",
1412
- summary: "Update webhook"
1474
+ summary: "Update webhook",
1475
+ inputStructure: "detailed"
1413
1476
  }).input(z.object({
1414
- id: z.string().uuid(),
1415
- patch: webhookUpdateInput
1477
+ params: z.object({ id: z.string().uuid() }),
1478
+ body: z.object({ patch: webhookUpdateInput })
1416
1479
  })).output(webhookOutput),
1417
1480
  delete: oc.route({
1418
1481
  method: "DELETE",
1419
1482
  path: "/webhooks/{id}",
1420
- summary: "Soft-delete webhook"
1421
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) })),
1483
+ summary: "Soft-delete webhook",
1484
+ inputStructure: "detailed"
1485
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) })),
1422
1486
  deliveries: oc.route({
1423
1487
  method: "GET",
1424
1488
  path: "/webhooks/{id}/deliveries",
1425
- summary: "Recent deliveries for a webhook"
1489
+ summary: "Recent deliveries for a webhook",
1490
+ inputStructure: "detailed"
1426
1491
  }).input(z.object({
1427
- id: z.string().uuid(),
1428
- limit: z.number().int().min(1).max(100).default(50)
1492
+ params: z.object({ id: z.string().uuid() }),
1493
+ query: z.object({ limit: z.number().int().min(1).max(100).default(50) })
1429
1494
  })).output(z.object({ data: z.array(webhookDeliveryOutput) })),
1430
1495
  replay: oc.route({
1431
1496
  method: "POST",
1432
1497
  path: "/webhooks/deliveries/{id}/replay",
1433
- summary: "Re-enqueue a delivery (succeeded or otherwise)"
1434
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) }))
1498
+ summary: "Re-enqueue a delivery (succeeded or otherwise)",
1499
+ inputStructure: "detailed"
1500
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) }))
1435
1501
  };
1436
1502
  const events = {
1437
1503
  list: oc.route({
@@ -1442,8 +1508,9 @@ const events = {
1442
1508
  get: oc.route({
1443
1509
  method: "GET",
1444
1510
  path: "/events/{id}",
1445
- summary: "Get event"
1446
- }).input(z.object({ id: z.string().uuid() })).output(eventOutput)
1511
+ summary: "Get event",
1512
+ inputStructure: "detailed"
1513
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(eventOutput)
1447
1514
  };
1448
1515
  //#endregion
1449
1516
  //#region ../contract/src/routes/insights.ts
@@ -1522,26 +1589,30 @@ const users = {
1522
1589
  resetPassword: oc.route({
1523
1590
  method: "POST",
1524
1591
  path: "/users/{id}/reset-password",
1525
- summary: "Reset a staff user's password (admin)"
1526
- }).input(z.object({ id: z.string() })).output(userCreateOutput),
1592
+ summary: "Reset a staff user's password (admin)",
1593
+ inputStructure: "detailed"
1594
+ }).input(z.object({ params: z.object({ id: z.string() }) })).output(userCreateOutput),
1527
1595
  setRole: oc.route({
1528
1596
  method: "PATCH",
1529
1597
  path: "/users/{id}/role",
1530
- summary: "Change a staff user's role (admin)"
1598
+ summary: "Change a staff user's role (admin)",
1599
+ inputStructure: "detailed"
1531
1600
  }).input(z.object({
1532
- id: z.string(),
1533
- role: userRole
1601
+ params: z.object({ id: z.string() }),
1602
+ body: z.object({ role: userRole })
1534
1603
  })).output(userOutput),
1535
1604
  disable: oc.route({
1536
1605
  method: "POST",
1537
1606
  path: "/users/{id}/disable",
1538
- summary: "Disable a staff user (admin)"
1539
- }).input(z.object({ id: z.string() })).output(userOutput),
1607
+ summary: "Disable a staff user (admin)",
1608
+ inputStructure: "detailed"
1609
+ }).input(z.object({ params: z.object({ id: z.string() }) })).output(userOutput),
1540
1610
  enable: oc.route({
1541
1611
  method: "POST",
1542
1612
  path: "/users/{id}/enable",
1543
- summary: "Re-enable a staff user (admin)"
1544
- }).input(z.object({ id: z.string() })).output(userOutput)
1613
+ summary: "Re-enable a staff user (admin)",
1614
+ inputStructure: "detailed"
1615
+ }).input(z.object({ params: z.object({ id: z.string() }) })).output(userOutput)
1545
1616
  };
1546
1617
  //#endregion
1547
1618
  //#region ../contract/src/schemas/order.ts
@@ -1607,8 +1678,9 @@ const orders = {
1607
1678
  get: oc.route({
1608
1679
  method: "GET",
1609
1680
  path: "/orders/{id}",
1610
- summary: "Fetch one order"
1611
- }).input(z.object({ id: z.string().uuid() })).output(orderOutput),
1681
+ summary: "Fetch one order",
1682
+ inputStructure: "detailed"
1683
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(orderOutput),
1612
1684
  create: oc.route({
1613
1685
  method: "POST",
1614
1686
  path: "/orders",
@@ -1617,28 +1689,36 @@ const orders = {
1617
1689
  update: oc.route({
1618
1690
  method: "PATCH",
1619
1691
  path: "/orders/{id}",
1620
- summary: "Update an order"
1621
- }).input(orderUpdateInput).output(orderOutput),
1692
+ summary: "Update an order",
1693
+ inputStructure: "detailed"
1694
+ }).input(z.object({
1695
+ params: z.object({ id: z.string().uuid() }),
1696
+ body: orderUpdateInput.omit({ id: true })
1697
+ })).output(orderOutput),
1622
1698
  cancel: oc.route({
1623
1699
  method: "POST",
1624
1700
  path: "/orders/{id}/cancel",
1625
- summary: "Cancel an order"
1626
- }).input(z.object({ id: z.string().uuid() })).output(orderOutput),
1701
+ summary: "Cancel an order",
1702
+ inputStructure: "detailed"
1703
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(orderOutput),
1627
1704
  fulfill: oc.route({
1628
1705
  method: "POST",
1629
1706
  path: "/orders/{id}/fulfill",
1630
- summary: "Mark order fulfilled"
1631
- }).input(z.object({ id: z.string().uuid() })).output(orderOutput),
1707
+ summary: "Mark order fulfilled",
1708
+ inputStructure: "detailed"
1709
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(orderOutput),
1632
1710
  delete: oc.route({
1633
1711
  method: "DELETE",
1634
1712
  path: "/orders/{id}",
1635
- summary: "Soft-delete an order"
1636
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ ok: z.literal(true) })),
1713
+ summary: "Soft-delete an order",
1714
+ inputStructure: "detailed"
1715
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ ok: z.literal(true) })),
1637
1716
  redemptions: oc.route({
1638
1717
  method: "GET",
1639
1718
  path: "/orders/{id}/redemptions",
1640
- summary: "List redemptions attached to an order"
1641
- }).input(z.object({ id: z.string().uuid() })).output(z.object({ data: z.array(z.object({
1719
+ summary: "List redemptions attached to an order",
1720
+ inputStructure: "detailed"
1721
+ }).input(z.object({ params: z.object({ id: z.string().uuid() }) })).output(z.object({ data: z.array(z.object({
1642
1722
  id: z.string().uuid(),
1643
1723
  voucherCode: z.string(),
1644
1724
  voucherId: z.string().uuid(),