@nymbalhq/types 1.5.0 → 1.6.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/index.js CHANGED
@@ -19,7 +19,7 @@ var ConfigError = class extends NymbalError {
19
19
  };
20
20
  var ValidationError = class extends NymbalError {
21
21
  constructor(message, options = {}) {
22
- super("validation.failed", message, options);
22
+ super(options.code ?? "validation.failed", message, options);
23
23
  }
24
24
  };
25
25
  var NotFoundError = class extends NymbalError {
@@ -63,6 +63,26 @@ var CheckoutError = class extends NymbalError {
63
63
  super(`checkout.${code}`, message, options);
64
64
  }
65
65
  };
66
+ var CartLimitError = class extends NymbalError {
67
+ constructor(variantId, max, onCart) {
68
+ super("cart.qty_limit", `a cart line holds at most ${max}`, {
69
+ context: { variantId, max, onCart }
70
+ });
71
+ }
72
+ };
73
+ var REVIEW_REFUSAL_MESSAGES = {
74
+ submit_unsupported: "This store does not take reviews on its site.",
75
+ already_reviewed: "You have already reviewed this product.",
76
+ not_a_buyer: "Only a customer who bought this product can review it.",
77
+ rejected: "The review was not accepted."
78
+ };
79
+ var ReviewRefusedError = class extends NymbalError {
80
+ refusal;
81
+ constructor(refusal, message = REVIEW_REFUSAL_MESSAGES[refusal], options = {}) {
82
+ super(`reviews.${refusal}`, message, options);
83
+ this.refusal = refusal;
84
+ }
85
+ };
66
86
  var StatusTransitionError = class extends NymbalError {
67
87
  constructor(entity, fromStatus, toStatus, options = {}) {
68
88
  super(
@@ -150,6 +170,9 @@ var PRODUCT_SORT_LABELS = {
150
170
  "name-desc": "Name: Z to A"
151
171
  };
152
172
 
173
+ // src/domain/cart.ts
174
+ var CART_LINE_MAX_QTY = 99;
175
+
153
176
  // src/domain/order.ts
154
177
  var ORDER_STATUS_TRANSITIONS = {
155
178
  pending: ["confirmed", "cancelled"],
@@ -169,8 +192,12 @@ function assertOrderTransition(from, to) {
169
192
  throw new StatusTransitionError("order", from, to);
170
193
  }
171
194
  }
195
+ function agentSource(name) {
196
+ return `agent:${name}`;
197
+ }
172
198
  var ORDER_KEY_HEADER = "x-nymbal-order-key";
173
199
  var ORDER_EMAIL_HEADER = "x-nymbal-order-email";
200
+ var SHOPPER_ATTESTATION_HEADER = "x-nymbal-shopper";
174
201
  function paymentState(order) {
175
202
  if (order.capturedMinor <= 0) return "unpaid";
176
203
  if (order.refundedMinor <= 0) return "paid";
@@ -214,6 +241,7 @@ var EVT_ORDER_REFUNDED = "order.refunded.v1";
214
241
  var EVT_ORDER_PARTIALLY_REFUNDED = "order.partially_refunded.v1";
215
242
  var EVT_ORDER_STATUS_CHANGED = "order.status_changed.v1";
216
243
  var EVT_ORDER_CONFIRMATION_RESEND_REQUESTED = "order.confirmation_resend_requested.v1";
244
+ var EVT_ORDER_DELETED = "order.deleted.v1";
217
245
  var EVT_INVENTORY_CHANGED = "inventory.changed.v1";
218
246
  var EVT_INVENTORY_RESERVED = "inventory.reserved.v1";
219
247
  var EVT_INVENTORY_RELEASED = "inventory.released.v1";
@@ -239,6 +267,13 @@ var EVT_ALERT_REPEATED = "alert.repeated.v1";
239
267
  var EVT_ALERT_CONFIRMED = "alert.confirmed.v1";
240
268
  var EVT_ALERT_UNSUBSCRIBED = "alert.unsubscribed.v1";
241
269
  var EVT_ALERT_SENT = "alert.sent.v1";
270
+ var EVT_ALERT_CONFIRMATION_SENT = "alert.confirmation_sent.v1";
271
+ var EVT_REVIEW_SUBMITTED = "review.submitted.v1";
272
+ var EVT_PROPOSAL_CREATED = "proposal.created.v1";
273
+ var EVT_PROPOSAL_APPROVED = "proposal.approved.v1";
274
+ var EVT_PROPOSAL_REJECTED = "proposal.rejected.v1";
275
+ var EVT_PROPOSAL_APPLIED = "proposal.applied.v1";
276
+ var EVT_PROPOSAL_FAILED = "proposal.failed.v1";
242
277
  var EVT_ADAPTER_ERROR = "adapter.error.v1";
243
278
  var EVT_SETTINGS_CHANGED = "settings.changed.v1";
244
279
  var STANDARD_EVENT_TYPES = [
@@ -263,6 +298,7 @@ var STANDARD_EVENT_TYPES = [
263
298
  EVT_ORDER_PARTIALLY_REFUNDED,
264
299
  EVT_ORDER_STATUS_CHANGED,
265
300
  EVT_ORDER_CONFIRMATION_RESEND_REQUESTED,
301
+ EVT_ORDER_DELETED,
266
302
  EVT_INVENTORY_CHANGED,
267
303
  EVT_INVENTORY_RESERVED,
268
304
  EVT_INVENTORY_RELEASED,
@@ -287,6 +323,13 @@ var STANDARD_EVENT_TYPES = [
287
323
  EVT_ALERT_CONFIRMED,
288
324
  EVT_ALERT_UNSUBSCRIBED,
289
325
  EVT_ALERT_SENT,
326
+ EVT_ALERT_CONFIRMATION_SENT,
327
+ EVT_REVIEW_SUBMITTED,
328
+ EVT_PROPOSAL_CREATED,
329
+ EVT_PROPOSAL_APPROVED,
330
+ EVT_PROPOSAL_REJECTED,
331
+ EVT_PROPOSAL_APPLIED,
332
+ EVT_PROPOSAL_FAILED,
290
333
  EVT_ADAPTER_ERROR,
291
334
  EVT_SETTINGS_CHANGED
292
335
  ];
@@ -516,6 +559,9 @@ function buildSecurityHeaders(security) {
516
559
  return headers;
517
560
  }
518
561
 
562
+ // src/adapters/commerce.ts
563
+ var SHIPPING_CAPABILITIES = ["rates", "labels", "tracking"];
564
+
519
565
  // src/adapters/webhook-delivery.ts
520
566
  var VERSIONED_EVENT = /^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*\.v[1-9][0-9]*$/;
521
567
  function isPlainObject(value) {
@@ -652,10 +698,14 @@ We'll let you know when it ships.{{orderLink}}`
652
698
  },
653
699
  "order-shipped": {
654
700
  subject: "Order {{orderNumber}} is on its way",
701
+ // `trackingLink` and `orderLink` are whole paragraphs, absent for an unknown carrier or a store with no URL.
655
702
  body: `Hi {{customerName}},
656
703
 
657
704
  Your order {{orderNumber}} has shipped via {{carrier}}.
658
- Tracking: {{trackingNumber}}`
705
+ Tracking: {{trackingNumber}}{{trackingLink}}
706
+
707
+ In this parcel:
708
+ {{itemsList}}{{orderLink}}`
659
709
  },
660
710
  welcome: {
661
711
  subject: "Welcome to {{storeName}}",
@@ -750,15 +800,26 @@ var IDEMPOTENT_REPLAYED_HEADER = "idempotent-replayed";
750
800
  function isValidIdempotencyKey(value) {
751
801
  return /^[A-Za-z0-9._:-]{1,128}$/.test(value);
752
802
  }
803
+
804
+ // src/proposals.ts
805
+ var PREVIEWED_COMMANDS = [
806
+ "product.update",
807
+ "inventory.adjust",
808
+ "order.refund",
809
+ "order.cancel"
810
+ ];
753
811
  export {
754
812
  AdapterError,
755
813
  AuthError,
814
+ CART_LINE_MAX_QTY,
756
815
  CORRELATION_ID_HEADER,
816
+ CartLimitError,
757
817
  CheckoutError,
758
818
  ConfigError,
759
819
  DEFAULT_PRODUCT_SORT,
760
820
  DEFAULT_QUERY_LIMIT,
761
821
  EVT_ADAPTER_ERROR,
822
+ EVT_ALERT_CONFIRMATION_SENT,
762
823
  EVT_ALERT_CONFIRMED,
763
824
  EVT_ALERT_REPEATED,
764
825
  EVT_ALERT_REQUESTED,
@@ -784,6 +845,7 @@ export {
784
845
  EVT_INVENTORY_RESERVED,
785
846
  EVT_ORDER_CANCELLED,
786
847
  EVT_ORDER_CONFIRMATION_RESEND_REQUESTED,
848
+ EVT_ORDER_DELETED,
787
849
  EVT_ORDER_DELIVERED,
788
850
  EVT_ORDER_FULFILLED,
789
851
  EVT_ORDER_PAID,
@@ -804,6 +866,12 @@ export {
804
866
  EVT_PRODUCT_UPDATED,
805
867
  EVT_PRODUCT_VARIANT_PRICE_CHANGED,
806
868
  EVT_PRODUCT_VIEWED,
869
+ EVT_PROPOSAL_APPLIED,
870
+ EVT_PROPOSAL_APPROVED,
871
+ EVT_PROPOSAL_CREATED,
872
+ EVT_PROPOSAL_FAILED,
873
+ EVT_PROPOSAL_REJECTED,
874
+ EVT_REVIEW_SUBMITTED,
807
875
  EVT_SETTINGS_CHANGED,
808
876
  EVT_VISITOR_MERGED,
809
877
  HEALTH_CHECK_TIMEOUT_MS,
@@ -817,16 +885,21 @@ export {
817
885
  ORDER_STATUS_TRANSITIONS,
818
886
  ORDER_TIMELINE_KINDS,
819
887
  OrderConflictError,
888
+ PREVIEWED_COMMANDS,
820
889
  PRODUCT_SORT_KEYS,
821
890
  PRODUCT_SORT_LABELS,
822
891
  PaymentError,
892
+ ReviewRefusedError,
823
893
  SECRET_MIN_LENGTH,
894
+ SHIPPING_CAPABILITIES,
824
895
  SHIPPING_TRACKING_STATUSES,
896
+ SHOPPER_ATTESTATION_HEADER,
825
897
  STANDARD_EVENT_TYPES,
826
898
  STOCK_LABELS,
827
899
  StatusTransitionError,
828
900
  ValidationError,
829
901
  add,
902
+ agentSource,
830
903
  allocate,
831
904
  assertMinorUnits,
832
905
  assertOrderTransition,