@nymbalhq/types 1.5.0 → 1.7.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/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/index.d.ts +611 -71
- package/dist/index.js +75 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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,
|