@unifiedcommerce/plugin-marketplace 0.0.1

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 (122) hide show
  1. package/README.md +479 -0
  2. package/dist/analytics-models.d.ts +13 -0
  3. package/dist/analytics-models.d.ts.map +1 -0
  4. package/dist/analytics-models.js +69 -0
  5. package/dist/hooks.d.ts +4 -0
  6. package/dist/hooks.d.ts.map +1 -0
  7. package/dist/hooks.js +187 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +105 -0
  11. package/dist/mcp-tools.d.ts +21 -0
  12. package/dist/mcp-tools.d.ts.map +1 -0
  13. package/dist/mcp-tools.js +183 -0
  14. package/dist/routes/b2b.d.ts +9 -0
  15. package/dist/routes/b2b.d.ts.map +1 -0
  16. package/dist/routes/b2b.js +156 -0
  17. package/dist/routes/commission.d.ts +6 -0
  18. package/dist/routes/commission.d.ts.map +1 -0
  19. package/dist/routes/commission.js +85 -0
  20. package/dist/routes/disputes-returns-reviews.d.ts +10 -0
  21. package/dist/routes/disputes-returns-reviews.d.ts.map +1 -0
  22. package/dist/routes/disputes-returns-reviews.js +179 -0
  23. package/dist/routes/payouts.d.ts +6 -0
  24. package/dist/routes/payouts.d.ts.map +1 -0
  25. package/dist/routes/payouts.js +40 -0
  26. package/dist/routes/sub-orders.d.ts +6 -0
  27. package/dist/routes/sub-orders.d.ts.map +1 -0
  28. package/dist/routes/sub-orders.js +44 -0
  29. package/dist/routes/util.d.ts +23 -0
  30. package/dist/routes/util.d.ts.map +1 -0
  31. package/dist/routes/util.js +41 -0
  32. package/dist/routes/vendor-portal.d.ts +14 -0
  33. package/dist/routes/vendor-portal.d.ts.map +1 -0
  34. package/dist/routes/vendor-portal.js +255 -0
  35. package/dist/routes/vendors.d.ts +11 -0
  36. package/dist/routes/vendors.d.ts.map +1 -0
  37. package/dist/routes/vendors.js +185 -0
  38. package/dist/schema.d.ts +3255 -0
  39. package/dist/schema.d.ts.map +1 -0
  40. package/dist/schema.js +225 -0
  41. package/dist/schemas/b2b.d.ts +1009 -0
  42. package/dist/schemas/b2b.d.ts.map +1 -0
  43. package/dist/schemas/b2b.js +208 -0
  44. package/dist/schemas/commission.d.ts +532 -0
  45. package/dist/schemas/commission.d.ts.map +1 -0
  46. package/dist/schemas/commission.js +113 -0
  47. package/dist/schemas/disputes-returns-reviews.d.ts +1405 -0
  48. package/dist/schemas/disputes-returns-reviews.d.ts.map +1 -0
  49. package/dist/schemas/disputes-returns-reviews.js +270 -0
  50. package/dist/schemas/payouts.d.ts +375 -0
  51. package/dist/schemas/payouts.d.ts.map +1 -0
  52. package/dist/schemas/payouts.js +78 -0
  53. package/dist/schemas/sub-orders.d.ts +303 -0
  54. package/dist/schemas/sub-orders.d.ts.map +1 -0
  55. package/dist/schemas/sub-orders.js +67 -0
  56. package/dist/schemas/vendor-portal.d.ts +1785 -0
  57. package/dist/schemas/vendor-portal.d.ts.map +1 -0
  58. package/dist/schemas/vendor-portal.js +294 -0
  59. package/dist/schemas/vendors.d.ts +1348 -0
  60. package/dist/schemas/vendors.d.ts.map +1 -0
  61. package/dist/schemas/vendors.js +245 -0
  62. package/dist/services/commission.d.ts +81 -0
  63. package/dist/services/commission.d.ts.map +1 -0
  64. package/dist/services/commission.js +98 -0
  65. package/dist/services/contract-price.d.ts +64 -0
  66. package/dist/services/contract-price.d.ts.map +1 -0
  67. package/dist/services/contract-price.js +57 -0
  68. package/dist/services/dispute.d.ts +156 -0
  69. package/dist/services/dispute.d.ts.map +1 -0
  70. package/dist/services/dispute.js +77 -0
  71. package/dist/services/payout.d.ts +126 -0
  72. package/dist/services/payout.d.ts.map +1 -0
  73. package/dist/services/payout.js +130 -0
  74. package/dist/services/return.d.ts +181 -0
  75. package/dist/services/return.d.ts.map +1 -0
  76. package/dist/services/return.js +80 -0
  77. package/dist/services/review.d.ts +70 -0
  78. package/dist/services/review.d.ts.map +1 -0
  79. package/dist/services/review.js +60 -0
  80. package/dist/services/rfq.d.ts +122 -0
  81. package/dist/services/rfq.d.ts.map +1 -0
  82. package/dist/services/rfq.js +60 -0
  83. package/dist/services/sub-order.d.ts +336 -0
  84. package/dist/services/sub-order.d.ts.map +1 -0
  85. package/dist/services/sub-order.js +121 -0
  86. package/dist/services/vendor.d.ts +528 -0
  87. package/dist/services/vendor.d.ts.map +1 -0
  88. package/dist/services/vendor.js +119 -0
  89. package/dist/types.d.ts +67 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +13 -0
  92. package/package.json +43 -0
  93. package/src/analytics-models.ts +75 -0
  94. package/src/hooks.ts +215 -0
  95. package/src/index.ts +124 -0
  96. package/src/mcp-tools.ts +210 -0
  97. package/src/routes/b2b.ts +179 -0
  98. package/src/routes/commission.ts +95 -0
  99. package/src/routes/disputes-returns-reviews.ts +209 -0
  100. package/src/routes/payouts.ts +49 -0
  101. package/src/routes/sub-orders.ts +54 -0
  102. package/src/routes/util.ts +42 -0
  103. package/src/routes/vendor-portal.ts +277 -0
  104. package/src/routes/vendors.ts +201 -0
  105. package/src/schema.ts +260 -0
  106. package/src/schemas/b2b.ts +238 -0
  107. package/src/schemas/commission.ts +129 -0
  108. package/src/schemas/disputes-returns-reviews.ts +311 -0
  109. package/src/schemas/payouts.ts +90 -0
  110. package/src/schemas/sub-orders.ts +77 -0
  111. package/src/schemas/vendor-portal.ts +344 -0
  112. package/src/schemas/vendors.ts +281 -0
  113. package/src/services/commission.ts +120 -0
  114. package/src/services/contract-price.ts +80 -0
  115. package/src/services/dispute.ts +92 -0
  116. package/src/services/payout.ts +154 -0
  117. package/src/services/return.ts +92 -0
  118. package/src/services/review.ts +76 -0
  119. package/src/services/rfq.ts +82 -0
  120. package/src/services/sub-order.ts +136 -0
  121. package/src/services/vendor.ts +151 -0
  122. package/src/types.ts +164 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b2b.d.ts","sourceRoot":"","sources":["../../src/schemas/b2b.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAyBnD,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAUF,CAAC;AAE/B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYzB,CAAC;AAIH,eAAO,MAAM,oBAAoB;;;;;;iBAMF,CAAC;AAEhC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa1B,CAAC;AAIH,eAAO,MAAM,kBAAkB;;iBAEF,CAAC;AAE9B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaxB,CAAC;AAQH,eAAO,MAAM,6BAA6B;;;;;;;;;;iBAUF,CAAC;AAEzC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYnC,CAAC;AAIH,eAAO,MAAM,6BAA6B;;;;;iBAKF,CAAC;AAEzC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAanC,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAexB,CAAC;AAIH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYtB,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYxB,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAelC,CAAC;AAIH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYnC,CAAC"}
@@ -0,0 +1,208 @@
1
+ import { z, createRoute } from "@hono/zod-openapi";
2
+ const ErrorSchema = z.object({
3
+ error: z.object({
4
+ code: z.string(),
5
+ message: z.string(),
6
+ }),
7
+ });
8
+ const errorResponses = {
9
+ 401: { content: { "application/json": { schema: ErrorSchema } }, description: "Authentication required." },
10
+ 403: { content: { "application/json": { schema: ErrorSchema } }, description: "Insufficient permissions." },
11
+ 404: { content: { "application/json": { schema: ErrorSchema } }, description: "Not found." },
12
+ 422: { content: { "application/json": { schema: ErrorSchema } }, description: "Validation error." },
13
+ 500: { content: { "application/json": { schema: ErrorSchema } }, description: "Server error." },
14
+ };
15
+ const DataResponseSchema = z.object({ data: z.any() });
16
+ // ═══════════════════════════════════════════════════════════════════════════════
17
+ // RFQ (Request for Quote)
18
+ // ═══════════════════════════════════════════════════════════════════════════════
19
+ // ─── Create RFQ ─────────────────────────────────────────────────────────────
20
+ export const CreateRFQBodySchema = z.object({
21
+ title: z.string().min(1).openapi({ example: "Bulk order: 500 widgets" }),
22
+ buyerId: z.string().optional(),
23
+ description: z.string().optional(),
24
+ categorySlug: z.string().optional(),
25
+ quantity: z.number().int().optional().openapi({ example: 500 }),
26
+ budgetCents: z.number().int().optional().openapi({ example: 500000 }),
27
+ currency: z.string().optional().openapi({ example: "USD" }),
28
+ deadlineAt: z.string().optional().openapi({ example: "2026-04-01T00:00:00Z", description: "ISO 8601 date string" }),
29
+ metadata: z.record(z.string(), z.unknown()).optional(),
30
+ }).openapi("CreateRFQRequest");
31
+ export const createRFQRoute = createRoute({
32
+ method: "post",
33
+ path: "/api/marketplace/rfq",
34
+ tags: ["Marketplace - B2B"],
35
+ summary: "Create a Request for Quote",
36
+ request: {
37
+ body: { content: { "application/json": { schema: CreateRFQBodySchema } }, required: true },
38
+ },
39
+ responses: {
40
+ 201: { content: { "application/json": { schema: DataResponseSchema } }, description: "RFQ created." },
41
+ ...errorResponses,
42
+ },
43
+ });
44
+ // ─── Respond to RFQ ─────────────────────────────────────────────────────────
45
+ export const RespondRFQBodySchema = z.object({
46
+ vendorId: z.string().min(1).openapi({ example: "vendor_abc" }),
47
+ unitPriceCents: z.number().int().openapi({ example: 800 }),
48
+ totalPriceCents: z.number().int().openapi({ example: 400000 }),
49
+ leadTimeDays: z.number().int().optional().openapi({ example: 14 }),
50
+ notes: z.string().optional(),
51
+ }).openapi("RespondRFQRequest");
52
+ export const respondRFQRoute = createRoute({
53
+ method: "post",
54
+ path: "/api/marketplace/rfq/{id}/respond",
55
+ tags: ["Marketplace - B2B"],
56
+ summary: "Submit a vendor response to an RFQ",
57
+ request: {
58
+ params: z.object({ id: z.string() }),
59
+ body: { content: { "application/json": { schema: RespondRFQBodySchema } }, required: true },
60
+ },
61
+ responses: {
62
+ 201: { content: { "application/json": { schema: DataResponseSchema } }, description: "RFQ response submitted." },
63
+ ...errorResponses,
64
+ },
65
+ });
66
+ // ─── Award RFQ ──────────────────────────────────────────────────────────────
67
+ export const AwardRFQBodySchema = z.object({
68
+ vendorId: z.string().min(1).openapi({ example: "vendor_abc" }),
69
+ }).openapi("AwardRFQRequest");
70
+ export const awardRFQRoute = createRoute({
71
+ method: "post",
72
+ path: "/api/marketplace/rfq/{id}/award",
73
+ tags: ["Marketplace - B2B"],
74
+ summary: "Award an RFQ to a vendor",
75
+ request: {
76
+ params: z.object({ id: z.string() }),
77
+ body: { content: { "application/json": { schema: AwardRFQBodySchema } }, required: true },
78
+ },
79
+ responses: {
80
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "RFQ awarded." },
81
+ ...errorResponses,
82
+ },
83
+ });
84
+ // ═══════════════════════════════════════════════════════════════════════════════
85
+ // CONTRACT PRICES
86
+ // ═══════════════════════════════════════════════════════════════════════════════
87
+ // ─── Create Contract Price ──────────────────────────────────────────────────
88
+ export const CreateContractPriceBodySchema = z.object({
89
+ vendorId: z.string().min(1).openapi({ example: "vendor_abc" }),
90
+ buyerId: z.string().min(1).openapi({ example: "buyer_xyz" }),
91
+ entityId: z.string().min(1).openapi({ example: "product_001" }),
92
+ variantId: z.string().optional(),
93
+ priceCents: z.number().int().openapi({ example: 7500 }),
94
+ minQuantity: z.number().int().optional().openapi({ example: 100 }),
95
+ currency: z.string().optional().openapi({ example: "USD" }),
96
+ validFrom: z.string().optional().openapi({ example: "2026-01-01T00:00:00Z", description: "ISO 8601 date string" }),
97
+ validUntil: z.string().optional().openapi({ example: "2026-12-31T23:59:59Z", description: "ISO 8601 date string" }),
98
+ }).openapi("CreateContractPriceRequest");
99
+ export const createContractPriceRoute = createRoute({
100
+ method: "post",
101
+ path: "/api/marketplace/contract-prices",
102
+ tags: ["Marketplace - B2B"],
103
+ summary: "Create a contract price",
104
+ request: {
105
+ body: { content: { "application/json": { schema: CreateContractPriceBodySchema } }, required: true },
106
+ },
107
+ responses: {
108
+ 201: { content: { "application/json": { schema: DataResponseSchema } }, description: "Contract price created." },
109
+ ...errorResponses,
110
+ },
111
+ });
112
+ // ─── Update Contract Price ──────────────────────────────────────────────────
113
+ export const UpdateContractPriceBodySchema = z.object({
114
+ priceCents: z.number().int().optional().openapi({ example: 7000 }),
115
+ minQuantity: z.number().int().optional(),
116
+ validFrom: z.string().nullable().optional().openapi({ description: "ISO 8601 date string or null to clear" }),
117
+ validUntil: z.string().nullable().optional().openapi({ description: "ISO 8601 date string or null to clear" }),
118
+ }).openapi("UpdateContractPriceRequest");
119
+ export const updateContractPriceRoute = createRoute({
120
+ method: "patch",
121
+ path: "/api/marketplace/contract-prices/{id}",
122
+ tags: ["Marketplace - B2B"],
123
+ summary: "Update a contract price",
124
+ request: {
125
+ params: z.object({ id: z.string() }),
126
+ body: { content: { "application/json": { schema: UpdateContractPriceBodySchema } }, required: true },
127
+ },
128
+ responses: {
129
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "Contract price updated." },
130
+ ...errorResponses,
131
+ },
132
+ });
133
+ // ─── List RFQs ──────────────────────────────────────────────────────────────
134
+ export const listRFQsRoute = createRoute({
135
+ method: "get",
136
+ path: "/api/marketplace/rfq",
137
+ tags: ["Marketplace - B2B"],
138
+ summary: "List Requests for Quote",
139
+ request: {
140
+ query: z.object({
141
+ status: z.string().optional(),
142
+ categorySlug: z.string().optional(),
143
+ }),
144
+ },
145
+ responses: {
146
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "Success" },
147
+ ...errorResponses,
148
+ },
149
+ });
150
+ // ─── Get RFQ ────────────────────────────────────────────────────────────────
151
+ export const getRFQRoute = createRoute({
152
+ method: "get",
153
+ path: "/api/marketplace/rfq/{id}",
154
+ tags: ["Marketplace - B2B"],
155
+ summary: "Get RFQ detail",
156
+ request: {
157
+ params: z.object({ id: z.string() }),
158
+ },
159
+ responses: {
160
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "Success" },
161
+ ...errorResponses,
162
+ },
163
+ });
164
+ // ─── Close RFQ ──────────────────────────────────────────────────────────────
165
+ export const closeRFQRoute = createRoute({
166
+ method: "post",
167
+ path: "/api/marketplace/rfq/{id}/close",
168
+ tags: ["Marketplace - B2B"],
169
+ summary: "Close an RFQ",
170
+ request: {
171
+ params: z.object({ id: z.string() }),
172
+ },
173
+ responses: {
174
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "RFQ closed." },
175
+ ...errorResponses,
176
+ },
177
+ });
178
+ // ─── List Contract Prices ───────────────────────────────────────────────────
179
+ export const listContractPricesRoute = createRoute({
180
+ method: "get",
181
+ path: "/api/marketplace/contract-prices",
182
+ tags: ["Marketplace - B2B"],
183
+ summary: "List contract prices",
184
+ request: {
185
+ query: z.object({
186
+ vendorId: z.string().optional(),
187
+ buyerId: z.string().optional(),
188
+ }),
189
+ },
190
+ responses: {
191
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "Success" },
192
+ ...errorResponses,
193
+ },
194
+ });
195
+ // ─── Delete Contract Price ──────────────────────────────────────────────────
196
+ export const deleteContractPriceRoute = createRoute({
197
+ method: "delete",
198
+ path: "/api/marketplace/contract-prices/{id}",
199
+ tags: ["Marketplace - B2B"],
200
+ summary: "Delete a contract price",
201
+ request: {
202
+ params: z.object({ id: z.string() }),
203
+ },
204
+ responses: {
205
+ 200: { content: { "application/json": { schema: DataResponseSchema } }, description: "Contract price deleted." },
206
+ ...errorResponses,
207
+ },
208
+ });