@rotateprotocol/sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +453 -0
  2. package/dist/catalog.d.ts +112 -0
  3. package/dist/catalog.d.ts.map +1 -0
  4. package/dist/catalog.js +210 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/components/CheckoutForm.d.ts +86 -0
  7. package/dist/components/CheckoutForm.d.ts.map +1 -0
  8. package/dist/components/CheckoutForm.js +332 -0
  9. package/dist/components/CheckoutForm.js.map +1 -0
  10. package/dist/components/HostedCheckout.d.ts +57 -0
  11. package/dist/components/HostedCheckout.d.ts.map +1 -0
  12. package/dist/components/HostedCheckout.js +414 -0
  13. package/dist/components/HostedCheckout.js.map +1 -0
  14. package/dist/components/PaymentButton.d.ts +80 -0
  15. package/dist/components/PaymentButton.d.ts.map +1 -0
  16. package/dist/components/PaymentButton.js +210 -0
  17. package/dist/components/PaymentButton.js.map +1 -0
  18. package/dist/components/RotateProvider.d.ts +115 -0
  19. package/dist/components/RotateProvider.d.ts.map +1 -0
  20. package/dist/components/RotateProvider.js +264 -0
  21. package/dist/components/RotateProvider.js.map +1 -0
  22. package/dist/components/index.d.ts +17 -0
  23. package/dist/components/index.d.ts.map +1 -0
  24. package/dist/components/index.js +27 -0
  25. package/dist/components/index.js.map +1 -0
  26. package/dist/embed.d.ts +85 -0
  27. package/dist/embed.d.ts.map +1 -0
  28. package/dist/embed.js +313 -0
  29. package/dist/embed.js.map +1 -0
  30. package/dist/hooks.d.ts +156 -0
  31. package/dist/hooks.d.ts.map +1 -0
  32. package/dist/hooks.js +280 -0
  33. package/dist/hooks.js.map +1 -0
  34. package/dist/idl/rotate_connect.json +2572 -0
  35. package/dist/index.d.ts +505 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1197 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/marketplace.d.ts +257 -0
  40. package/dist/marketplace.d.ts.map +1 -0
  41. package/dist/marketplace.js +433 -0
  42. package/dist/marketplace.js.map +1 -0
  43. package/dist/platform.d.ts +234 -0
  44. package/dist/platform.d.ts.map +1 -0
  45. package/dist/platform.js +268 -0
  46. package/dist/platform.js.map +1 -0
  47. package/dist/react.d.ts +140 -0
  48. package/dist/react.d.ts.map +1 -0
  49. package/dist/react.js +429 -0
  50. package/dist/react.js.map +1 -0
  51. package/dist/store.d.ts +213 -0
  52. package/dist/store.d.ts.map +1 -0
  53. package/dist/store.js +404 -0
  54. package/dist/store.js.map +1 -0
  55. package/dist/webhooks.d.ts +149 -0
  56. package/dist/webhooks.d.ts.map +1 -0
  57. package/dist/webhooks.js +371 -0
  58. package/dist/webhooks.js.map +1 -0
  59. package/package.json +114 -0
  60. package/src/catalog.ts +299 -0
  61. package/src/components/CheckoutForm.tsx +608 -0
  62. package/src/components/HostedCheckout.tsx +675 -0
  63. package/src/components/PaymentButton.tsx +348 -0
  64. package/src/components/RotateProvider.tsx +370 -0
  65. package/src/components/index.ts +26 -0
  66. package/src/embed.ts +408 -0
  67. package/src/hooks.ts +518 -0
  68. package/src/idl/rotate_connect.json +2572 -0
  69. package/src/index.ts +1538 -0
  70. package/src/marketplace.ts +642 -0
  71. package/src/platform.ts +403 -0
  72. package/src/react.ts +459 -0
  73. package/src/store.ts +577 -0
  74. package/src/webhooks.ts +506 -0
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ /**
3
+ * Rotate Marketplace — Multi-Vendor Cart & Split Payments
4
+ *
5
+ * Multi-vendor split payments for decentralized commerce.
6
+ * Manages vendors (merchants), routes payments, and splits multi-vendor carts
7
+ * into separate on-chain transactions per merchant.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const marketplace = new RotateMarketplace(sdk, {
12
+ * platformId: 1000000,
13
+ * platformFeeBps: 200, // 2% marketplace fee
14
+ * });
15
+ *
16
+ * // Register vendors
17
+ * marketplace.addVendor({ id: 'vendor-a', merchantId: 1000001, name: 'Shirt Co.' });
18
+ * marketplace.addVendor({ id: 'vendor-b', merchantId: 1000002, name: 'Hat Store' });
19
+ *
20
+ * // Add products from different vendors
21
+ * marketplace.addProduct({ id: 'shirt-1', vendorId: 'vendor-a', name: 'Logo Tee', price: 29.99 });
22
+ * marketplace.addProduct({ id: 'hat-1', vendorId: 'vendor-b', name: 'Snapback', price: 24.99 });
23
+ *
24
+ * // Customer shops from multiple vendors
25
+ * const cart = marketplace.createCart();
26
+ * cart.addItem('shirt-1', 2);
27
+ * cart.addItem('hat-1', 1);
28
+ *
29
+ * const result = await cart.checkout();
30
+ * // Creates separate payment links per vendor:
31
+ * // vendor-a: $59.98 (2x shirts)
32
+ * // vendor-b: $24.99 (1x hat)
33
+ * ```
34
+ *
35
+ * @packageDocumentation
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.MarketplaceCart = exports.RotateMarketplace = void 0;
39
+ const index_1 = require("./index");
40
+ const catalog_1 = require("./catalog");
41
+ // ==================== ROTATE MARKETPLACE ====================
42
+ class RotateMarketplace {
43
+ constructor(sdk, config) {
44
+ this.vendors = new Map();
45
+ this.sdk = sdk;
46
+ this.config = {
47
+ platformId: config.platformId,
48
+ platformFeeBps: config.platformFeeBps ?? 0,
49
+ currency: config.currency || 'USD',
50
+ allowTips: config.allowTips ?? false,
51
+ defaultExpiresIn: config.defaultExpiresIn ?? 300,
52
+ };
53
+ this.catalog = new catalog_1.Catalog((input) => {
54
+ // Validate vendor exists at creation time
55
+ const vendor = this.vendors.get(input.vendorId);
56
+ if (!vendor)
57
+ throw new Error(`Vendor '${input.vendorId}' not found. Register the vendor first.`);
58
+ const now = Date.now();
59
+ return { ...input, active: input.active ?? true, createdAt: now, updatedAt: now };
60
+ });
61
+ }
62
+ // ==================== VENDOR MANAGEMENT ====================
63
+ /** Register a vendor */
64
+ addVendor(input) {
65
+ const vendor = {
66
+ ...input,
67
+ active: input.active ?? true,
68
+ };
69
+ this.vendors.set(vendor.id, vendor);
70
+ return vendor;
71
+ }
72
+ /** Bulk register vendors */
73
+ addVendors(inputs) {
74
+ return inputs.map((v) => this.addVendor(v));
75
+ }
76
+ /** Update a vendor */
77
+ updateVendor(id, updates) {
78
+ const existing = this.vendors.get(id);
79
+ if (!existing)
80
+ throw new Error(`Vendor '${id}' not found`);
81
+ const updated = { ...existing, ...updates, id: existing.id };
82
+ this.vendors.set(id, updated);
83
+ return updated;
84
+ }
85
+ /** Get a vendor */
86
+ getVendor(id) {
87
+ return this.vendors.get(id);
88
+ }
89
+ /** List all vendors */
90
+ getVendors(filter) {
91
+ let results = Array.from(this.vendors.values());
92
+ if (filter?.active !== undefined) {
93
+ results = results.filter((v) => v.active === filter.active);
94
+ }
95
+ if (filter?.search) {
96
+ const q = filter.search.toLowerCase();
97
+ results = results.filter((v) => v.name.toLowerCase().includes(q) || v.description?.toLowerCase().includes(q));
98
+ }
99
+ return results;
100
+ }
101
+ /** Remove a vendor and all their products */
102
+ removeVendor(id) {
103
+ // Remove all products from this vendor
104
+ this.catalog.removeProductsWhere((p) => p.vendorId === id);
105
+ return this.vendors.delete(id);
106
+ }
107
+ get vendorCount() {
108
+ return this.vendors.size;
109
+ }
110
+ // ==================== PRODUCT CATALOG (delegated to Catalog) ====================
111
+ addProduct(input) { return this.catalog.addProduct(input); }
112
+ addProducts(inputs) { return this.catalog.addProducts(inputs); }
113
+ updateProduct(id, updates) {
114
+ // Ensure vendorId remains immutable
115
+ const existing = this.catalog.getProduct(id);
116
+ if (!existing)
117
+ throw new Error(`Product '${id}' not found`);
118
+ const { vendorId: _ignored, ...safeUpdates } = updates;
119
+ return this.catalog.updateProduct(id, { ...safeUpdates, vendorId: existing.vendorId });
120
+ }
121
+ removeProduct(id) { return this.catalog.removeProduct(id); }
122
+ getProduct(id) { return this.catalog.getProduct(id); }
123
+ /** List products with filters (includes vendorId filter on top of base catalog) */
124
+ getProducts(filter) {
125
+ if (filter?.vendorId) {
126
+ // When filtering by vendor, strip limit/offset from the catalog query
127
+ // so pagination applies AFTER the vendor filter. Without this, the
128
+ // catalog returns `limit` products of *any* vendor, and the subsequent
129
+ // vendorId filter would silently shrink the result set.
130
+ const { vendorId, limit, offset, ...catalogFilter } = filter;
131
+ let results = this.catalog.getProducts(catalogFilter);
132
+ results = results.filter((p) => p.vendorId === vendorId);
133
+ if (offset)
134
+ results = results.slice(offset);
135
+ if (limit)
136
+ results = results.slice(0, limit);
137
+ return results;
138
+ }
139
+ return this.catalog.getProducts(filter);
140
+ }
141
+ getVendorProducts(vendorId) {
142
+ return this.getProducts({ vendorId, active: true });
143
+ }
144
+ getCategories() { return this.catalog.getCategories(); }
145
+ get productCount() { return this.catalog.productCount; }
146
+ // ==================== INVENTORY (delegated) ====================
147
+ isInStock(productId, quantity = 1) { return this.catalog.isInStock(productId, quantity); }
148
+ reserveInventory(productId, quantity) { this.catalog.reserveInventory(productId, quantity); }
149
+ releaseInventory(productId, quantity) { this.catalog.releaseInventory(productId, quantity); }
150
+ // ==================== MARKETPLACE CART ====================
151
+ /** Create a multi-vendor cart */
152
+ createCart() {
153
+ return new MarketplaceCart(this, this.sdk, this.config);
154
+ }
155
+ // ==================== SERIALIZATION ====================
156
+ exportCatalog() {
157
+ return {
158
+ vendors: Array.from(this.vendors.values()),
159
+ products: this.catalog.exportProducts(),
160
+ };
161
+ }
162
+ importCatalog(data) {
163
+ this.vendors.clear();
164
+ for (const v of data.vendors)
165
+ this.vendors.set(v.id, v);
166
+ this.catalog.importProducts(data.products);
167
+ }
168
+ }
169
+ exports.RotateMarketplace = RotateMarketplace;
170
+ // ==================== MARKETPLACE CART ====================
171
+ class MarketplaceCart {
172
+ /** @internal */
173
+ constructor(marketplace, sdk, config) {
174
+ this.items = new Map();
175
+ this._metadata = {};
176
+ this.marketplace = marketplace;
177
+ this.sdk = sdk;
178
+ this.config = config;
179
+ }
180
+ // ==================== LINE ITEMS ====================
181
+ addItem(productId, quantity = 1) {
182
+ if (quantity <= 0)
183
+ throw new Error('Quantity must be positive');
184
+ const product = this.marketplace.getProduct(productId);
185
+ if (!product)
186
+ throw new Error(`Product '${productId}' not found`);
187
+ if (!product.active)
188
+ throw new Error(`Product '${productId}' is not active`);
189
+ const existing = this.items.get(productId);
190
+ const newQty = (existing?.quantity || 0) + quantity;
191
+ if (!this.marketplace.isInStock(productId, newQty)) {
192
+ throw new Error(`Insufficient stock for '${productId}'`);
193
+ }
194
+ this.items.set(productId, { product, quantity: newQty });
195
+ }
196
+ setItemQuantity(productId, quantity) {
197
+ if (quantity <= 0) {
198
+ this.items.delete(productId);
199
+ return;
200
+ }
201
+ const product = this.marketplace.getProduct(productId);
202
+ if (!product)
203
+ throw new Error(`Product '${productId}' not found`);
204
+ if (!this.marketplace.isInStock(productId, quantity)) {
205
+ throw new Error(`Insufficient stock for '${productId}'`);
206
+ }
207
+ this.items.set(productId, { product, quantity });
208
+ }
209
+ removeItem(productId) {
210
+ return this.items.delete(productId);
211
+ }
212
+ clear() {
213
+ this.items.clear();
214
+ this._metadata = {};
215
+ }
216
+ getItems() {
217
+ const result = [];
218
+ for (const { product, quantity } of this.items.values()) {
219
+ const vendor = this.marketplace.getVendor(product.vendorId);
220
+ result.push({
221
+ product,
222
+ quantity,
223
+ unitPrice: product.price,
224
+ vendorId: product.vendorId,
225
+ vendorName: vendor?.name || product.vendorId,
226
+ });
227
+ }
228
+ return result;
229
+ }
230
+ get isEmpty() {
231
+ return this.items.size === 0;
232
+ }
233
+ setMetadata(key, value) {
234
+ this._metadata[key] = value;
235
+ }
236
+ // ==================== TOTALS ====================
237
+ /** Group items by vendor and calculate per-vendor + combined totals */
238
+ getTotals() {
239
+ // Group by vendor
240
+ const vendorGroups = new Map();
241
+ for (const { product, quantity } of this.items.values()) {
242
+ const vendor = this.marketplace.getVendor(product.vendorId);
243
+ if (!vendor)
244
+ continue;
245
+ let group = vendorGroups.get(product.vendorId);
246
+ if (!group) {
247
+ group = { vendor, items: [] };
248
+ vendorGroups.set(product.vendorId, group);
249
+ }
250
+ group.items.push({ product, quantity });
251
+ }
252
+ const vendorSubtotals = [];
253
+ let grandSubtotal = 0;
254
+ let grandFees = 0;
255
+ let grandTotal = 0;
256
+ let totalItems = 0;
257
+ let totalQuantity = 0;
258
+ for (const [vendorId, group] of vendorGroups.entries()) {
259
+ const items = [];
260
+ let vendorSubtotal = 0;
261
+ for (const { product, quantity } of group.items) {
262
+ const lineTotal = Math.round(product.price * quantity * 100) / 100;
263
+ vendorSubtotal += lineTotal;
264
+ totalQuantity += quantity;
265
+ items.push({
266
+ productId: product.id,
267
+ name: product.name,
268
+ quantity,
269
+ unitPrice: product.price,
270
+ lineTotal,
271
+ });
272
+ }
273
+ vendorSubtotal = Math.round(vendorSubtotal * 100) / 100;
274
+ // Calculate fees
275
+ const amountMicro = Math.floor(vendorSubtotal * 1000000);
276
+ const feesResult = (0, index_1.calculateFees)(amountMicro, this.config.platformFeeBps);
277
+ const fees = Math.round(feesResult.buyerFeeShare / 1000000 * 100) / 100;
278
+ const vendorTotal = Math.round((vendorSubtotal + fees) * 100) / 100;
279
+ const merchantReceives = Math.round(feesResult.merchantReceives / 1000000 * 100) / 100;
280
+ totalItems += items.length;
281
+ vendorSubtotals.push({
282
+ vendorId,
283
+ vendorName: group.vendor.name,
284
+ merchantId: group.vendor.merchantId,
285
+ items,
286
+ subtotal: vendorSubtotal,
287
+ fees,
288
+ total: vendorTotal,
289
+ merchantReceives,
290
+ });
291
+ grandSubtotal += vendorSubtotal;
292
+ grandFees += fees;
293
+ grandTotal += vendorTotal;
294
+ }
295
+ return {
296
+ itemCount: totalItems,
297
+ totalQuantity,
298
+ subtotal: Math.round(grandSubtotal * 100) / 100,
299
+ fees: Math.round(grandFees * 100) / 100,
300
+ total: Math.round(grandTotal * 100) / 100,
301
+ vendorCount: vendorGroups.size,
302
+ vendors: vendorSubtotals,
303
+ };
304
+ }
305
+ // ==================== CHECKOUT ====================
306
+ /**
307
+ * Checkout the marketplace cart.
308
+ * Creates one on-chain payment link **per vendor** so each merchant
309
+ * receives funds directly into their own wallet — true decentralized
310
+ * marketplace payments with no intermediary holding funds.
311
+ */
312
+ async checkout(options) {
313
+ if (this.isEmpty)
314
+ throw new Error('Cart is empty');
315
+ const totals = this.getTotals();
316
+ const masterOrderRef = options?.orderRef || `mkt_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`;
317
+ const currency = options?.currency || this.config.currency;
318
+ const expiresAt = (options?.expiresIn ?? this.config.defaultExpiresIn) > 0
319
+ ? Math.floor(Date.now() / 1000) + (options?.expiresIn ?? this.config.defaultExpiresIn)
320
+ : 0;
321
+ const allowTips = options?.allowTips ?? this.config.allowTips;
322
+ // Validate stock
323
+ for (const { product, quantity } of this.items.values()) {
324
+ if (!this.marketplace.isInStock(product.id, quantity)) {
325
+ throw new Error(`'${product.name}' is out of stock`);
326
+ }
327
+ }
328
+ // Create one payment link per vendor
329
+ const vendorPayments = [];
330
+ for (const vendorTotals of totals.vendors) {
331
+ const vendorOrderRef = `${masterOrderRef}_v${vendorTotals.vendorId}`;
332
+ const amountMicro = BigInt(Math.floor(vendorTotals.subtotal * 1000000));
333
+ // Auto-generate description from vendor items
334
+ const description = vendorTotals.items.map(i => `${i.quantity}x ${i.name}`).join(', ');
335
+ let result;
336
+ if (currency === 'SOL') {
337
+ const solPrice = await this.sdk.getSolPrice();
338
+ const lamports = BigInt(Math.floor((vendorTotals.subtotal / solPrice) * 1000000000));
339
+ result = await this.sdk.createLinkSol({
340
+ merchantId: vendorTotals.merchantId,
341
+ platformId: this.config.platformId,
342
+ amount: lamports,
343
+ expiresAt,
344
+ allowTips,
345
+ allowPartial: false,
346
+ orderRef: vendorOrderRef,
347
+ description,
348
+ });
349
+ }
350
+ else if (currency === 'USDC' || currency === 'USDT') {
351
+ result = await this.sdk.createLinkToken({
352
+ merchantId: vendorTotals.merchantId,
353
+ platformId: this.config.platformId,
354
+ amount: amountMicro,
355
+ expiresAt,
356
+ allowTips,
357
+ allowPartial: false,
358
+ orderRef: vendorOrderRef,
359
+ currency,
360
+ description,
361
+ });
362
+ }
363
+ else {
364
+ result = await this.sdk.createLinkUsd({
365
+ merchantId: vendorTotals.merchantId,
366
+ platformId: this.config.platformId,
367
+ amount: amountMicro,
368
+ expiresAt,
369
+ allowTips,
370
+ allowPartial: false,
371
+ orderRef: vendorOrderRef,
372
+ description,
373
+ });
374
+ }
375
+ vendorPayments.push({
376
+ vendorId: vendorTotals.vendorId,
377
+ vendorName: vendorTotals.vendorName,
378
+ merchantId: vendorTotals.merchantId,
379
+ linkId: result.linkId,
380
+ tx: result.tx,
381
+ paymentUrl: this.sdk.getPaymentUrl(result.linkId),
382
+ qrCodeUrl: this.sdk.getQRCodeUrl(result.linkId),
383
+ subtotal: vendorTotals.subtotal,
384
+ fees: vendorTotals.fees,
385
+ total: vendorTotals.total,
386
+ });
387
+ }
388
+ // Reserve inventory
389
+ for (const { product, quantity } of this.items.values()) {
390
+ this.marketplace.reserveInventory(product.id, quantity);
391
+ }
392
+ return {
393
+ vendorPayments,
394
+ totals,
395
+ orderRef: masterOrderRef,
396
+ createdAt: Date.now(),
397
+ };
398
+ }
399
+ /**
400
+ * Wait for ALL vendor payments to complete.
401
+ * Returns once every link is paid or the timeout is reached.
402
+ */
403
+ async waitForAllPayments(vendorPayments, timeoutMs = 600000) {
404
+ const startTime = Date.now();
405
+ const results = vendorPayments.map((vp) => ({
406
+ vendorId: vp.vendorId,
407
+ linkId: vp.linkId,
408
+ paid: false,
409
+ }));
410
+ while (Date.now() - startTime < timeoutMs) {
411
+ let allPaid = true;
412
+ for (const r of results) {
413
+ if (r.paid)
414
+ continue;
415
+ const paid = await this.sdk.isLinkPaid(r.linkId);
416
+ if (paid) {
417
+ r.paid = true;
418
+ }
419
+ else {
420
+ allPaid = false;
421
+ }
422
+ }
423
+ if (allPaid)
424
+ return { allPaid: true, results };
425
+ await new Promise((resolve) => setTimeout(resolve, 3000));
426
+ }
427
+ return { allPaid: false, results };
428
+ }
429
+ }
430
+ exports.MarketplaceCart = MarketplaceCart;
431
+ // ==================== EXPORTS ====================
432
+ exports.default = RotateMarketplace;
433
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../src/marketplace.ts"],"names":[],"mappings":"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"}