nxus-qbd 0.7.2 → 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 (231) hide show
  1. package/README.md +269 -91
  2. package/dist/client.d.ts +81 -77
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +77 -71
  5. package/dist/client.js.map +1 -1
  6. package/dist/contracts.d.ts +1 -1
  7. package/dist/contracts.d.ts.map +1 -1
  8. package/dist/generated/count-capabilities.d.ts +64 -0
  9. package/dist/generated/count-capabilities.d.ts.map +1 -0
  10. package/dist/generated/count-capabilities.js +64 -0
  11. package/dist/generated/count-capabilities.js.map +1 -0
  12. package/dist/generated/index.d.ts +1 -1
  13. package/dist/generated/index.d.ts.map +1 -1
  14. package/dist/generated/index.js +1 -1
  15. package/dist/generated/index.js.map +1 -1
  16. package/dist/generated/resource-capabilities.d.ts +506 -0
  17. package/dist/generated/resource-capabilities.d.ts.map +1 -0
  18. package/dist/generated/resource-capabilities.js +506 -0
  19. package/dist/generated/resource-capabilities.js.map +1 -0
  20. package/dist/generated/types.gen.d.ts +29531 -20897
  21. package/dist/generated/types.gen.d.ts.map +1 -1
  22. package/dist/generated/types.gen.js +80 -0
  23. package/dist/generated/types.gen.js.map +1 -1
  24. package/dist/helpers/enums.d.ts +29 -0
  25. package/dist/helpers/enums.d.ts.map +1 -0
  26. package/dist/helpers/enums.js +38 -0
  27. package/dist/helpers/enums.js.map +1 -0
  28. package/dist/helpers/errors.d.ts +14 -3
  29. package/dist/helpers/errors.d.ts.map +1 -1
  30. package/dist/helpers/errors.js +274 -23
  31. package/dist/helpers/errors.js.map +1 -1
  32. package/dist/helpers/index.d.ts +4 -2
  33. package/dist/helpers/index.d.ts.map +1 -1
  34. package/dist/helpers/index.js +4 -2
  35. package/dist/helpers/index.js.map +1 -1
  36. package/dist/helpers/pagination.d.ts +11 -1
  37. package/dist/helpers/pagination.d.ts.map +1 -1
  38. package/dist/helpers/pagination.js.map +1 -1
  39. package/dist/helpers/response.d.ts +93 -0
  40. package/dist/helpers/response.d.ts.map +1 -0
  41. package/dist/helpers/response.js +84 -0
  42. package/dist/helpers/response.js.map +1 -0
  43. package/dist/index.d.ts +10 -10
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +17 -8
  46. package/dist/index.js.map +1 -1
  47. package/dist/models/core/auth_session.d.ts +1 -1
  48. package/dist/models/core/auth_session.d.ts.map +1 -1
  49. package/dist/models/core/connections.d.ts +1 -1
  50. package/dist/models/core/connections.d.ts.map +1 -1
  51. package/dist/models/core/index.d.ts +3 -3
  52. package/dist/models/core/index.d.ts.map +1 -1
  53. package/dist/models/core/index.js +3 -3
  54. package/dist/models/core/index.js.map +1 -1
  55. package/dist/models/core/qwc_auth_setup.d.ts +1 -1
  56. package/dist/models/core/qwc_auth_setup.d.ts.map +1 -1
  57. package/dist/models/index.d.ts +6 -6
  58. package/dist/models/index.d.ts.map +1 -1
  59. package/dist/models/index.js +5 -5
  60. package/dist/models/index.js.map +1 -1
  61. package/dist/models/qbd/account.d.ts +2 -2
  62. package/dist/models/qbd/account.d.ts.map +1 -1
  63. package/dist/models/qbd/account.js +1 -1
  64. package/dist/models/qbd/account.js.map +1 -1
  65. package/dist/models/qbd/account_tax_line_info.d.ts +1 -1
  66. package/dist/models/qbd/account_tax_line_info.d.ts.map +1 -1
  67. package/dist/models/qbd/ar_refund_credit_card.d.ts +1 -1
  68. package/dist/models/qbd/ar_refund_credit_card.d.ts.map +1 -1
  69. package/dist/models/qbd/bar_code.d.ts +1 -1
  70. package/dist/models/qbd/bar_code.d.ts.map +1 -1
  71. package/dist/models/qbd/bill.d.ts +1 -1
  72. package/dist/models/qbd/bill.d.ts.map +1 -1
  73. package/dist/models/qbd/bill_payment_or_credit.d.ts +1 -1
  74. package/dist/models/qbd/bill_payment_or_credit.d.ts.map +1 -1
  75. package/dist/models/qbd/billing_rate.d.ts +1 -1
  76. package/dist/models/qbd/billing_rate.d.ts.map +1 -1
  77. package/dist/models/qbd/build_assembly.d.ts +1 -1
  78. package/dist/models/qbd/build_assembly.d.ts.map +1 -1
  79. package/dist/models/qbd/charge.d.ts +1 -1
  80. package/dist/models/qbd/charge.d.ts.map +1 -1
  81. package/dist/models/qbd/check.d.ts +1 -1
  82. package/dist/models/qbd/check.d.ts.map +1 -1
  83. package/dist/models/qbd/check_bill_payment.d.ts +1 -1
  84. package/dist/models/qbd/check_bill_payment.d.ts.map +1 -1
  85. package/dist/models/qbd/class_.d.ts +1 -1
  86. package/dist/models/qbd/class_.d.ts.map +1 -1
  87. package/dist/models/qbd/credit_card_bill_payment.d.ts +1 -1
  88. package/dist/models/qbd/credit_card_bill_payment.d.ts.map +1 -1
  89. package/dist/models/qbd/credit_card_charge.d.ts +1 -1
  90. package/dist/models/qbd/credit_card_charge.d.ts.map +1 -1
  91. package/dist/models/qbd/credit_card_credit.d.ts +1 -1
  92. package/dist/models/qbd/credit_card_credit.d.ts.map +1 -1
  93. package/dist/models/qbd/credit_memo.d.ts +1 -1
  94. package/dist/models/qbd/credit_memo.d.ts.map +1 -1
  95. package/dist/models/qbd/currency.d.ts +2 -1
  96. package/dist/models/qbd/currency.d.ts.map +1 -1
  97. package/dist/models/qbd/currency.js +2 -1
  98. package/dist/models/qbd/currency.js.map +1 -1
  99. package/dist/models/qbd/custom_field_definitions.d.ts +1 -1
  100. package/dist/models/qbd/custom_field_definitions.d.ts.map +1 -1
  101. package/dist/models/qbd/custom_fields.d.ts +2 -2
  102. package/dist/models/qbd/custom_fields.d.ts.map +1 -1
  103. package/dist/models/qbd/custom_fields.js +1 -1
  104. package/dist/models/qbd/custom_fields.js.map +1 -1
  105. package/dist/models/qbd/customer.d.ts +2 -2
  106. package/dist/models/qbd/customer.d.ts.map +1 -1
  107. package/dist/models/qbd/customer.js +1 -1
  108. package/dist/models/qbd/customer.js.map +1 -1
  109. package/dist/models/qbd/customer_type.d.ts +1 -1
  110. package/dist/models/qbd/customer_type.d.ts.map +1 -1
  111. package/dist/models/qbd/date_driven_term.d.ts +1 -1
  112. package/dist/models/qbd/date_driven_term.d.ts.map +1 -1
  113. package/dist/models/qbd/deposit.d.ts +1 -1
  114. package/dist/models/qbd/deposit.d.ts.map +1 -1
  115. package/dist/models/qbd/employee.d.ts +2 -2
  116. package/dist/models/qbd/employee.d.ts.map +1 -1
  117. package/dist/models/qbd/employee.js +1 -1
  118. package/dist/models/qbd/employee.js.map +1 -1
  119. package/dist/models/qbd/estimate.d.ts +1 -1
  120. package/dist/models/qbd/estimate.d.ts.map +1 -1
  121. package/dist/models/qbd/index.d.ts +66 -66
  122. package/dist/models/qbd/index.d.ts.map +1 -1
  123. package/dist/models/qbd/index.js +66 -66
  124. package/dist/models/qbd/index.js.map +1 -1
  125. package/dist/models/qbd/inventory_adjustment.d.ts +1 -1
  126. package/dist/models/qbd/inventory_adjustment.d.ts.map +1 -1
  127. package/dist/models/qbd/inventory_site.d.ts +1 -1
  128. package/dist/models/qbd/inventory_site.d.ts.map +1 -1
  129. package/dist/models/qbd/invoice.d.ts +2 -1
  130. package/dist/models/qbd/invoice.d.ts.map +1 -1
  131. package/dist/models/qbd/invoice.js +2 -1
  132. package/dist/models/qbd/invoice.js.map +1 -1
  133. package/dist/models/qbd/item.d.ts +2 -2
  134. package/dist/models/qbd/item.d.ts.map +1 -1
  135. package/dist/models/qbd/item.js +1 -1
  136. package/dist/models/qbd/item.js.map +1 -1
  137. package/dist/models/qbd/item_discount.d.ts +1 -1
  138. package/dist/models/qbd/item_discount.d.ts.map +1 -1
  139. package/dist/models/qbd/item_fixed_asset.d.ts +1 -1
  140. package/dist/models/qbd/item_fixed_asset.d.ts.map +1 -1
  141. package/dist/models/qbd/item_group.d.ts +1 -1
  142. package/dist/models/qbd/item_group.d.ts.map +1 -1
  143. package/dist/models/qbd/item_inventory.d.ts +1 -1
  144. package/dist/models/qbd/item_inventory.d.ts.map +1 -1
  145. package/dist/models/qbd/item_inventory_assembly.d.ts +1 -1
  146. package/dist/models/qbd/item_inventory_assembly.d.ts.map +1 -1
  147. package/dist/models/qbd/item_non_inventory.d.ts +1 -1
  148. package/dist/models/qbd/item_non_inventory.d.ts.map +1 -1
  149. package/dist/models/qbd/item_other_charge.d.ts +1 -1
  150. package/dist/models/qbd/item_other_charge.d.ts.map +1 -1
  151. package/dist/models/qbd/item_payment.d.ts +1 -1
  152. package/dist/models/qbd/item_payment.d.ts.map +1 -1
  153. package/dist/models/qbd/item_receipt.d.ts +1 -1
  154. package/dist/models/qbd/item_receipt.d.ts.map +1 -1
  155. package/dist/models/qbd/item_sales_tax.d.ts +1 -1
  156. package/dist/models/qbd/item_sales_tax.d.ts.map +1 -1
  157. package/dist/models/qbd/item_sales_tax_group.d.ts +1 -1
  158. package/dist/models/qbd/item_sales_tax_group.d.ts.map +1 -1
  159. package/dist/models/qbd/item_service.d.ts +1 -1
  160. package/dist/models/qbd/item_service.d.ts.map +1 -1
  161. package/dist/models/qbd/item_subtotal.d.ts +1 -1
  162. package/dist/models/qbd/item_subtotal.d.ts.map +1 -1
  163. package/dist/models/qbd/journal_entry.d.ts +1 -1
  164. package/dist/models/qbd/journal_entry.d.ts.map +1 -1
  165. package/dist/models/qbd/other_name.d.ts +1 -1
  166. package/dist/models/qbd/other_name.d.ts.map +1 -1
  167. package/dist/models/qbd/payment_method.d.ts +1 -1
  168. package/dist/models/qbd/payment_method.d.ts.map +1 -1
  169. package/dist/models/qbd/payroll_item_non_wage.d.ts +1 -1
  170. package/dist/models/qbd/payroll_item_non_wage.d.ts.map +1 -1
  171. package/dist/models/qbd/payroll_item_wage.d.ts +1 -1
  172. package/dist/models/qbd/payroll_item_wage.d.ts.map +1 -1
  173. package/dist/models/qbd/price_level.d.ts +1 -1
  174. package/dist/models/qbd/price_level.d.ts.map +1 -1
  175. package/dist/models/qbd/purchase_order.d.ts +1 -1
  176. package/dist/models/qbd/purchase_order.d.ts.map +1 -1
  177. package/dist/models/qbd/receive_payment.d.ts +1 -1
  178. package/dist/models/qbd/receive_payment.d.ts.map +1 -1
  179. package/dist/models/qbd/report.d.ts +1 -1
  180. package/dist/models/qbd/report.d.ts.map +1 -1
  181. package/dist/models/qbd/sales_order.d.ts +1 -1
  182. package/dist/models/qbd/sales_order.d.ts.map +1 -1
  183. package/dist/models/qbd/sales_receipt.d.ts +1 -1
  184. package/dist/models/qbd/sales_receipt.d.ts.map +1 -1
  185. package/dist/models/qbd/sales_tax_code.d.ts +1 -1
  186. package/dist/models/qbd/sales_tax_code.d.ts.map +1 -1
  187. package/dist/models/qbd/sales_tax_payment_check.d.ts +1 -1
  188. package/dist/models/qbd/sales_tax_payment_check.d.ts.map +1 -1
  189. package/dist/models/qbd/ship_method.d.ts +1 -1
  190. package/dist/models/qbd/ship_method.d.ts.map +1 -1
  191. package/dist/models/qbd/special_item.d.ts +1 -1
  192. package/dist/models/qbd/special_item.d.ts.map +1 -1
  193. package/dist/models/qbd/tenant_me.d.ts +1 -1
  194. package/dist/models/qbd/tenant_me.d.ts.map +1 -1
  195. package/dist/models/qbd/term.d.ts +1 -1
  196. package/dist/models/qbd/term.d.ts.map +1 -1
  197. package/dist/models/qbd/time_tracking_activity.d.ts +1 -1
  198. package/dist/models/qbd/time_tracking_activity.d.ts.map +1 -1
  199. package/dist/models/qbd/transaction.d.ts +1 -1
  200. package/dist/models/qbd/transaction.d.ts.map +1 -1
  201. package/dist/models/qbd/unit_of_measure_set.d.ts +1 -1
  202. package/dist/models/qbd/unit_of_measure_set.d.ts.map +1 -1
  203. package/dist/models/qbd/vendor.d.ts +1 -1
  204. package/dist/models/qbd/vendor.d.ts.map +1 -1
  205. package/dist/models/qbd/vendor_credit.d.ts +1 -1
  206. package/dist/models/qbd/vendor_credit.d.ts.map +1 -1
  207. package/dist/models/qbd/vendor_type.d.ts +1 -1
  208. package/dist/models/qbd/vendor_type.d.ts.map +1 -1
  209. package/dist/models/qbd/workers_comp_code.d.ts +1 -1
  210. package/dist/models/qbd/workers_comp_code.d.ts.map +1 -1
  211. package/dist/resources/base.d.ts +159 -29
  212. package/dist/resources/base.d.ts.map +1 -1
  213. package/dist/resources/base.js +417 -151
  214. package/dist/resources/base.js.map +1 -1
  215. package/dist/resources/connections.d.ts +17 -4
  216. package/dist/resources/connections.d.ts.map +1 -1
  217. package/dist/resources/connections.js +39 -13
  218. package/dist/resources/connections.js.map +1 -1
  219. package/dist/resources/custom-fields.d.ts +35 -32
  220. package/dist/resources/custom-fields.d.ts.map +1 -1
  221. package/dist/resources/custom-fields.js +121 -119
  222. package/dist/resources/custom-fields.js.map +1 -1
  223. package/dist/resources/reports.d.ts +23 -10
  224. package/dist/resources/reports.d.ts.map +1 -1
  225. package/dist/resources/reports.js +40 -29
  226. package/dist/resources/reports.js.map +1 -1
  227. package/dist/transport.d.ts +61 -10
  228. package/dist/transport.d.ts.map +1 -1
  229. package/dist/transport.js +522 -113
  230. package/dist/transport.js.map +1 -1
  231. package/package.json +8 -4
@@ -11,6 +11,81 @@ function readBoolean(source, key) {
11
11
  const value = source?.[key];
12
12
  return typeof value === 'boolean' ? value : undefined;
13
13
  }
14
+ function coerceRetryAfter(value) {
15
+ if (typeof value === 'number') {
16
+ return Number.isFinite(value) && value >= 0 ? value : undefined;
17
+ }
18
+ if (typeof value === 'string' && value.trim()) {
19
+ const seconds = Number(value);
20
+ return Number.isFinite(seconds) && seconds >= 0 ? seconds : undefined;
21
+ }
22
+ return undefined;
23
+ }
24
+ /**
25
+ * Normalize a per-field error map into `{ field: [message, ...] }`.
26
+ *
27
+ * The API emits `{ "PayeeId": ["Entity is required"] }`, but a bare string or
28
+ * scalar per field is tolerated rather than dropping the detail. Returns
29
+ * `undefined` for anything that is not a non-empty object, so an empty
30
+ * `errors: {}` is not misread as a validation failure.
31
+ */
32
+ function coerceValidationErrors(value) {
33
+ const source = asRecord(value);
34
+ if (!source || Array.isArray(value))
35
+ return undefined;
36
+ const coerced = {};
37
+ for (const [field, messages] of Object.entries(source)) {
38
+ if (typeof messages === 'string') {
39
+ coerced[field] = [messages];
40
+ }
41
+ else if (Array.isArray(messages)) {
42
+ coerced[field] = messages
43
+ .filter((m) => m != null)
44
+ .map((m) => String(m));
45
+ }
46
+ else if (messages == null) {
47
+ coerced[field] = [];
48
+ }
49
+ else {
50
+ coerced[field] = [String(messages)];
51
+ }
52
+ }
53
+ return Object.keys(coerced).length > 0 ? coerced : undefined;
54
+ }
55
+ /** Render a field map as `"PayeeId: Entity is required; Amount: ..."`. */
56
+ function describeValidationErrors(errors) {
57
+ return Object.entries(errors)
58
+ .map(([field, messages]) => {
59
+ const joined = messages
60
+ .map((m) => String(m).trim())
61
+ .filter(Boolean)
62
+ .join(' ');
63
+ return joined ? `${field}: ${joined}` : field;
64
+ })
65
+ .join('; ');
66
+ }
67
+ /**
68
+ * Append the offending fields to a primary error message.
69
+ *
70
+ * Without this, `err.message` — the string every logger, traceback and error
71
+ * monitor renders by default — reads only `Validation failed`, while the field
72
+ * names sit unread on `userMessage`/`validationErrors`. The structured
73
+ * properties stay authoritative for programmatic handling; this just makes the
74
+ * human-facing string say *where* the request was rejected.
75
+ *
76
+ * Kept identical to Python's `_with_validation_detail` and .NET's
77
+ * `WithValidationDetail` — the message text is public API in all three.
78
+ */
79
+ function withValidationDetail(message, errors) {
80
+ if (!errors) {
81
+ return message;
82
+ }
83
+ const detail = describeValidationErrors(errors);
84
+ if (!detail || message.includes(detail)) {
85
+ return message;
86
+ }
87
+ return message ? `${message}: ${detail}` : detail;
88
+ }
14
89
  // ---------------------------------------------------------------------------
15
90
  // NxusApiError — the single error type consumers should work with
16
91
  // ---------------------------------------------------------------------------
@@ -44,7 +119,9 @@ export class NxusApiError extends Error {
44
119
  requestId;
45
120
  /** QB Desktop integration-specific error code (HRESULT or QBXML status). */
46
121
  integrationCode;
47
- /** Per-field validation errors (only present for 422 responses). */
122
+ /** Retry delay requested by the API, in seconds. */
123
+ retryAfter;
124
+ /** Per-field validation errors, when the API supplied them. */
48
125
  validationErrors;
49
126
  /** Connection lifecycle state when the API includes restriction context. */
50
127
  lifecycleState;
@@ -67,6 +144,7 @@ export class NxusApiError extends Error {
67
144
  this.userMessage = opts.userMessage;
68
145
  this.requestId = opts.requestId;
69
146
  this.integrationCode = opts.integrationCode;
147
+ this.retryAfter = opts.retryAfter;
70
148
  this.validationErrors = opts.validationErrors;
71
149
  this.lifecycleState = opts.lifecycleState;
72
150
  this.restrictionReason = opts.restrictionReason;
@@ -83,12 +161,12 @@ export class NxusApiError extends Error {
83
161
  get isAuthError() {
84
162
  return (this.status === 401 ||
85
163
  this.status === 403 ||
86
- this.type === 'AUTHENTICATION_ERROR_TYPE');
164
+ this.type === 'AUTHENTICATION_ERROR_TYPE' ||
165
+ this.type === 'AUTHORIZATION_ERROR_TYPE');
87
166
  }
88
- /** Whether this is a validation error (422, or explicit validation code/type). */
167
+ /** Whether the API explicitly identified this as a validation error. */
89
168
  get isValidationError() {
90
- return (this.status === 422 ||
91
- this.code === 'VALIDATION_ERROR' ||
169
+ return (this.code === 'VALIDATION_ERROR' ||
92
170
  this.type === 'VALIDATION_ERROR_TYPE' ||
93
171
  this.validationErrors != null);
94
172
  }
@@ -110,11 +188,20 @@ export class NxusApiError extends Error {
110
188
  this.requiresPayment === true ||
111
189
  this.restrictionReason != null ||
112
190
  this.restrictionCode != null ||
113
- this.type === 'BILLING_ERROR_TYPE');
191
+ this.type === 'RESTRICTION_ERROR_TYPE' ||
192
+ this.type === 'BILLING_ERROR_TYPE' ||
193
+ this.type === 'PAYMENT_REQUIRED_ERROR_TYPE');
194
+ }
195
+ /** Whether the QuickBooks Web Connector is not polling this connection. */
196
+ get isConnectorOffline() {
197
+ return (this.code === 'QWC_NOT_CONNECTED' ||
198
+ this.code === 'QWC_NEVER_CONNECTED' ||
199
+ this.type === 'INTEGRATION_CONNECTION_OFFLINE_TYPE');
114
200
  }
115
201
  /** Whether the connection appears to be archived. */
116
202
  get isArchivedConnection() {
117
- return this.lifecycleState === 'archived';
203
+ return (this.lifecycleState === 'archived' ||
204
+ this.code === 'CONNECTION_ARCHIVED');
118
205
  }
119
206
  /**
120
207
  * Create a `NxusApiError` from any SDK error value.
@@ -122,6 +209,7 @@ export class NxusApiError extends Error {
122
209
  * Handles:
123
210
  * - `StandardErrorResponse` (`{ error: ErrorDetail }`)
124
211
  * - `ProblemDetails` (`{ title, detail, status, errors }`)
212
+ * - nXus validation envelope (`{ success: false, message, errors }`)
125
213
  * - Plain strings
126
214
  * - Unknown shapes (wrapped with generic message)
127
215
  */
@@ -145,33 +233,74 @@ export class NxusApiError extends Error {
145
233
  });
146
234
  }
147
235
  const obj = error;
236
+ const embeddedError = asRecord(obj.error);
148
237
  const restriction = asRecord(obj.restriction);
149
238
  const billing = asRecord(obj.billing);
150
239
  const lifecycleState = readString(obj, 'lifecycleState') ??
151
- readString(restriction, 'lifecycleState');
240
+ readString(restriction, 'lifecycleState') ??
241
+ readString(embeddedError, 'lifecycleState');
152
242
  const restrictionReason = readString(obj, 'restrictionReason') ??
153
243
  readString(restriction, 'reason') ??
154
- readString(restriction, 'restrictionReason');
244
+ readString(restriction, 'restrictionReason') ??
245
+ readString(embeddedError, 'restrictionReason');
155
246
  const restrictionCode = readString(obj, 'restrictionCode') ??
156
247
  readString(restriction, 'code') ??
157
- readString(restriction, 'restrictionCode');
248
+ readString(restriction, 'restrictionCode') ??
249
+ readString(embeddedError, 'restrictionCode');
158
250
  const requiresPayment = readBoolean(obj, 'requiresPayment') ??
159
251
  readBoolean(restriction, 'requiresPayment') ??
160
- readBoolean(billing, 'requiresPayment');
252
+ readBoolean(billing, 'requiresPayment') ??
253
+ readBoolean(embeddedError, 'requiresPayment');
161
254
  const checkoutUrl = readString(obj, 'checkoutUrl') ??
162
255
  readString(restriction, 'checkoutUrl') ??
163
- readString(billing, 'checkoutUrl');
256
+ readString(billing, 'checkoutUrl') ??
257
+ readString(embeddedError, 'checkoutUrl');
258
+ const retryAfter = coerceRetryAfter(embeddedError?.retryAfter) ??
259
+ coerceRetryAfter(obj.retryAfter);
260
+ // Failed QBD operation result returned with HTTP 200.
261
+ if (String(obj.status).toLowerCase() === 'failed') {
262
+ const detailMessage = readString(obj, 'errorMessage') ??
263
+ readString(obj, 'message') ??
264
+ 'QuickBooks operation failed.';
265
+ return new NxusApiError({
266
+ message: detailMessage,
267
+ userMessage: detailMessage,
268
+ status: typeof obj.httpStatusCode === 'number'
269
+ ? obj.httpStatusCode
270
+ : 0,
271
+ code: 'QBD_INTEGRATION_ERROR',
272
+ type: 'INTEGRATION_ERROR_TYPE',
273
+ requestId: readString(obj, 'requestId'),
274
+ integrationCode: obj.errorCode == null ? undefined : String(obj.errorCode),
275
+ retryAfter,
276
+ lifecycleState,
277
+ restrictionReason,
278
+ restrictionCode,
279
+ requiresPayment,
280
+ checkoutUrl,
281
+ raw: error,
282
+ });
283
+ }
164
284
  // StandardErrorResponse shape: { error: ErrorDetail }
165
- if (obj.error && typeof obj.error === 'object' && 'message' in obj.error) {
285
+ if (obj.error &&
286
+ typeof obj.error === 'object' &&
287
+ 'message' in obj.error) {
166
288
  const detail = obj.error;
289
+ const validationErrors = coerceValidationErrors(embeddedError?.errors);
290
+ const detailMessage = detail.message ?? 'Request failed.';
291
+ const userMessage = detail.userFacingMessage ?? detailMessage;
167
292
  return new NxusApiError({
168
- message: detail.message,
169
- userMessage: detail.userFacingMessage || detail.message,
293
+ message: withValidationDetail(detailMessage, validationErrors),
294
+ userMessage: validationErrors && !detail.userFacingMessage
295
+ ? withValidationDetail(userMessage, validationErrors)
296
+ : userMessage,
170
297
  status: detail.httpStatusCode ?? obj.status ?? 0,
171
298
  code: detail.code,
172
299
  type: detail.type,
173
- requestId: detail.requestId,
300
+ requestId: detail.requestId ?? undefined,
174
301
  integrationCode: detail.integrationCode ?? undefined,
302
+ retryAfter,
303
+ validationErrors,
175
304
  lifecycleState,
176
305
  restrictionReason,
177
306
  restrictionCode,
@@ -180,15 +309,132 @@ export class NxusApiError extends Error {
180
309
  raw: error,
181
310
  });
182
311
  }
183
- // ProblemDetails shape: { title, detail, status, errors? }
312
+ // Legacy QbdErrorResponse: { statusCode, errorCode, message, detail,
313
+ // severity, suggestedAction, metadata }. Some transports add `status`,
314
+ // which previously let a 503 with `detail` masquerade as ProblemDetails.
315
+ // Preserve the legacy body during migration without inventing validation.
316
+ const legacyMetadata = asRecord(obj.metadata);
317
+ const legacyStandardCode = readString(legacyMetadata, 'standardCode');
318
+ const legacyErrorCode = readString(obj, 'errorCode');
319
+ if (typeof obj.message === 'string' &&
320
+ [
321
+ 'statusCode',
322
+ 'errorCode',
323
+ 'severity',
324
+ 'suggestedAction',
325
+ 'traceId',
326
+ 'metadata',
327
+ ].some((key) => key in obj)) {
328
+ return new NxusApiError({
329
+ message: readString(obj, 'detail') ?? obj.message,
330
+ userMessage: obj.message,
331
+ status: typeof obj.status === 'number'
332
+ ? obj.status
333
+ : typeof obj.statusCode === 'number'
334
+ ? obj.statusCode
335
+ : 0,
336
+ code: legacyStandardCode ?? legacyErrorCode,
337
+ type: readString(legacyMetadata, 'type'),
338
+ requestId: readString(obj, 'requestId'),
339
+ integrationCode: legacyStandardCode
340
+ ? legacyErrorCode
341
+ : undefined,
342
+ retryAfter,
343
+ lifecycleState,
344
+ restrictionReason,
345
+ restrictionCode,
346
+ requiresPayment,
347
+ checkoutUrl,
348
+ raw: error,
349
+ });
350
+ }
351
+ // RETIRED SHAPE — ProblemDetails is retained only for older deployments.
352
+ // Current API errors use StandardErrorResponse or the validation envelope.
184
353
  if ('status' in obj && ('title' in obj || 'detail' in obj)) {
354
+ const problemErrors = coerceValidationErrors(obj.errors);
355
+ const isValidationProblem = problemErrors != null;
185
356
  return new NxusApiError({
186
- message: obj.detail || obj.title || 'Validation failed.',
187
- userMessage: obj.detail || obj.title || 'Please check your input and try again.',
188
- status: obj.status ?? 422,
189
- type: 'VALIDATION_ERROR_TYPE',
357
+ message: withValidationDetail(obj.detail || obj.title || 'Validation failed.', problemErrors),
358
+ userMessage: obj.detail ||
359
+ obj.title ||
360
+ 'Please check your input and try again.',
361
+ status: typeof obj.status === 'number' ? obj.status : 0,
362
+ type: isValidationProblem ? 'VALIDATION_ERROR_TYPE' : undefined,
363
+ code: isValidationProblem ? 'VALIDATION_ERROR' : undefined,
364
+ validationErrors: problemErrors,
365
+ requestId: readString(obj, 'requestId'),
366
+ retryAfter,
367
+ lifecycleState,
368
+ restrictionReason,
369
+ restrictionCode,
370
+ requiresPayment,
371
+ checkoutUrl,
372
+ raw: error,
373
+ });
374
+ }
375
+ // nXus validation envelope:
376
+ // { success: false, message, errors: { field: [msg] }, timestamp }
377
+ // It has no `error` wrapper and no `title`/`detail`, so it reaches
378
+ // neither branch above and would otherwise lose its per-field detail.
379
+ //
380
+ // Placed after ProblemDetails deliberately — a genuine ProblemDetails
381
+ // also carries `errors`, and going first would hijack it. It fires only
382
+ // on a non-empty `errors` map: `success: false` alone is not treated as
383
+ // validation, because labelling a 503 a VALIDATION_ERROR would be worse
384
+ // than losing the detail.
385
+ const envelopeErrors = coerceValidationErrors(obj.errors);
386
+ if (envelopeErrors) {
387
+ const envelopeMessage = readString(obj, 'message') ?? 'Validation failed.';
388
+ const detail = describeValidationErrors(envelopeErrors);
389
+ return new NxusApiError({
390
+ message: withValidationDetail(envelopeMessage, envelopeErrors),
391
+ userMessage: detail
392
+ ? `${envelopeMessage}: ${detail}`
393
+ : envelopeMessage,
394
+ status: obj.status ?? obj.statusCode ?? 0,
190
395
  code: 'VALIDATION_ERROR',
191
- validationErrors: obj.errors,
396
+ type: 'VALIDATION_ERROR_TYPE',
397
+ requestId: readString(obj, 'requestId'),
398
+ validationErrors: envelopeErrors,
399
+ retryAfter,
400
+ lifecycleState,
401
+ restrictionReason,
402
+ restrictionCode,
403
+ requiresPayment,
404
+ checkoutUrl,
405
+ raw: error,
406
+ });
407
+ }
408
+ // Flat rich-error shape used by logical nxusApiError/qbdApiError
409
+ // envelopes after transport normalization.
410
+ if (typeof obj.message === 'string' &&
411
+ [
412
+ 'code',
413
+ 'type',
414
+ 'requestId',
415
+ 'httpStatusCode',
416
+ 'integrationCode',
417
+ 'retryAfter',
418
+ 'userFacingMessage',
419
+ ].some((key) => key in obj)) {
420
+ const validationErrors = coerceValidationErrors(obj.errors);
421
+ const userMessage = readString(obj, 'userFacingMessage') ?? obj.message;
422
+ return new NxusApiError({
423
+ message: withValidationDetail(obj.message, validationErrors),
424
+ userMessage: validationErrors && !readString(obj, 'userFacingMessage')
425
+ ? withValidationDetail(userMessage, validationErrors)
426
+ : userMessage,
427
+ status: typeof obj.status === 'number'
428
+ ? obj.status
429
+ : typeof obj.httpStatusCode === 'number'
430
+ ? obj.httpStatusCode
431
+ : 0,
432
+ code: readString(obj, 'code'),
433
+ type: readString(obj, 'type'),
434
+ requestId: readString(obj, 'requestId'),
435
+ integrationCode: readString(obj, 'integrationCode'),
436
+ retryAfter,
437
+ validationErrors,
192
438
  lifecycleState,
193
439
  restrictionReason,
194
440
  restrictionCode,
@@ -198,11 +444,16 @@ export class NxusApiError extends Error {
198
444
  });
199
445
  }
200
446
  // Fallback: plain object with .message
201
- const message = obj.message || obj.detail || obj.title || 'An unexpected error occurred.';
447
+ const message = obj.message ||
448
+ obj.detail ||
449
+ obj.title ||
450
+ 'An unexpected error occurred.';
202
451
  return new NxusApiError({
203
452
  message,
204
453
  userMessage: message,
205
454
  status: obj.status ?? obj.statusCode ?? 0,
455
+ requestId: readString(obj, 'requestId'),
456
+ retryAfter,
206
457
  lifecycleState,
207
458
  restrictionReason,
208
459
  restrictionCode,
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/helpers/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/helpers/errors.ts"],"names":[],"mappings":"AAIA,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAC9C,CAAC,CAAE,KAAqB;QACxB,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CACf,MAA+B,EAC/B,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAChB,MAA+B,EAC/B,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC3B,KAAc;IAEd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtD,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;iBACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,0EAA0E;AAC1E,SAAS,wBAAwB,CAAC,MAAgC;IAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,QAAQ;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,oBAAoB,CACzB,OAAe,EACf,MAA4C;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAcD,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnC,yFAAyF;IAChF,IAAI,CAA4B;IAEzC,iEAAiE;IACxD,IAAI,CAA4B;IAEzC,wBAAwB;IACf,MAAM,CAAS;IAExB,mEAAmE;IAC1D,WAAW,CAAS;IAE7B,gEAAgE;IACvD,SAAS,CAAqB;IAEvC,4EAA4E;IACnE,eAAe,CAAqB;IAE7C,oDAAoD;IAC3C,UAAU,CAAqB;IAExC,+DAA+D;IACtD,gBAAgB,CAAuC;IAEhE,4EAA4E;IACnE,cAAc,CAAqB;IAE5C,kEAAkE;IACzD,iBAAiB,CAAqB;IAE/C,6DAA6D;IACpD,eAAe,CAAqB;IAE7C,oFAAoF;IAC3E,eAAe,CAAsB;IAE9C,6DAA6D;IACpD,WAAW,CAAqB;IAEzC,sDAAsD;IAC7C,GAAG,CAAU;IAEtB,YAAY,IAgBX;QACG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACxB,CAAC;IAED,gDAAgD;IAChD,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,CAAC;IACtE,CAAC;IAED,0EAA0E;IAC1E,IAAI,WAAW;QACX,OAAO,CACH,IAAI,CAAC,MAAM,KAAK,GAAG;YACnB,IAAI,CAAC,MAAM,KAAK,GAAG;YACnB,IAAI,CAAC,IAAI,KAAK,2BAA2B;YACzC,IAAI,CAAC,IAAI,KAAK,0BAA0B,CAC3C,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,IAAI,iBAAiB;QACjB,OAAO,CACH,IAAI,CAAC,IAAI,KAAK,kBAAkB;YAChC,IAAI,CAAC,IAAI,KAAK,uBAAuB;YACrC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAChC,CAAC;IACN,CAAC;IAED,+CAA+C;IAC/C,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAAC;IACvE,CAAC;IAED,uFAAuF;IACvF,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,0EAA0E;IAC1E,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,yBAAyB,CAAC;IAC1E,CAAC;IAED,yFAAyF;IACzF,IAAI,kBAAkB;QAClB,OAAO,CACH,IAAI,CAAC,MAAM,KAAK,GAAG;YACnB,IAAI,CAAC,eAAe,KAAK,IAAI;YAC7B,IAAI,CAAC,iBAAiB,IAAI,IAAI;YAC9B,IAAI,CAAC,eAAe,IAAI,IAAI;YAC5B,IAAI,CAAC,IAAI,KAAK,wBAAwB;YACtC,IAAI,CAAC,IAAI,KAAK,oBAAoB;YAClC,IAAI,CAAC,IAAI,KAAK,6BAA6B,CAC9C,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,IAAI,kBAAkB;QAClB,OAAO,CACH,IAAI,CAAC,IAAI,KAAK,mBAAmB;YACjC,IAAI,CAAC,IAAI,KAAK,qBAAqB;YACnC,IAAI,CAAC,IAAI,KAAK,qCAAqC,CACtD,CAAC;IACN,CAAC;IAED,qDAAqD;IACrD,IAAI,oBAAoB;QACpB,OAAO,CACH,IAAI,CAAC,cAAc,KAAK,UAAU;YAClC,IAAI,CAAC,IAAI,KAAK,qBAAqB,CACtC,CAAC;IACN,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CAAC,KAAc;QACtB,IAAI,KAAK,YAAY,YAAY;YAAE,OAAO,KAAK,CAAC;QAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,+BAA+B;gBACxC,WAAW,EAAE,+BAA+B;gBAC5C,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,MAAM,GAAG,GAAG,KAA4B,CAAC;QACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtC,MAAM,cAAc,GAChB,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC;YACjC,UAAU,CAAC,WAAW,EAAE,gBAAgB,CAAC;YACzC,UAAU,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAChD,MAAM,iBAAiB,GACnB,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC;YACpC,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC;YACjC,UAAU,CAAC,WAAW,EAAE,mBAAmB,CAAC;YAC5C,UAAU,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACnD,MAAM,eAAe,GACjB,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAClC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC;YAC/B,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;YAC1C,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACjD,MAAM,eAAe,GACjB,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC;YACnC,WAAW,CAAC,WAAW,EAAE,iBAAiB,CAAC;YAC3C,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC;YACvC,WAAW,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAClD,MAAM,WAAW,GACb,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC;YAC9B,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC;YACtC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC;YAClC,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC7C,MAAM,UAAU,GACZ,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC;YAC3C,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAErC,sDAAsD;QACtD,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,aAAa,GACf,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;gBAC/B,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;gBAC1B,8BAA8B,CAAC;YACnC,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,aAAa;gBACtB,WAAW,EAAE,aAAa;gBAC1B,MAAM,EACF,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;oBAClC,CAAC,CAAC,GAAG,CAAC,cAAc;oBACpB,CAAC,CAAC,CAAC;gBACX,IAAI,EAAE,uBAAuB;gBAC7B,IAAI,EAAE,wBAAwB;gBAC9B,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvC,eAAe,EACX,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC7D,UAAU;gBACV,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,sDAAsD;QACtD,IACI,GAAG,CAAC,KAAK;YACT,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAC7B,SAAS,IAAI,GAAG,CAAC,KAAK,EACxB,CAAC;YACC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAoB,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAC3C,aAAa,EAAE,MAAM,CACxB,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC;YAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,IAAI,aAAa,CAAC;YAC9D,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,CAAC;gBAC9D,WAAW,EACP,gBAAgB,IAAI,CAAC,MAAM,CAAC,iBAAiB;oBACzC,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,CAAC;oBACrD,CAAC,CAAC,WAAW;gBACrB,MAAM,EAAE,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBAChD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;gBACxC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS;gBACpD,UAAU;gBACV,gBAAgB;gBAChB,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,kBAAkB,GAAG,UAAU,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACrD,IACI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC/B;gBACI,YAAY;gBACZ,WAAW;gBACX,UAAU;gBACV,iBAAiB;gBACjB,SAAS;gBACT,UAAU;aACb,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAC7B,CAAC;YACC,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO;gBACjD,WAAW,EAAE,GAAG,CAAC,OAAO;gBACxB,MAAM,EACF,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;oBAC1B,CAAC,CAAC,GAAG,CAAC,MAAM;oBACZ,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;wBAClC,CAAC,CAAC,GAAG,CAAC,UAAU;wBAChB,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,kBAAkB,IAAI,eAAe;gBAC3C,IAAI,EAAE,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC;gBACxC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvC,eAAe,EAAE,kBAAkB;oBAC/B,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,SAAS;gBACf,UAAU;gBACV,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,yEAAyE;QACzE,2EAA2E;QAC3E,IAAI,QAAQ,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,mBAAmB,GAAG,aAAa,IAAI,IAAI,CAAC;YAClD,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,oBAAoB,CACzB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,oBAAoB,EAC/C,aAAa,CAChB;gBACD,WAAW,EACP,GAAG,CAAC,MAAM;oBACV,GAAG,CAAC,KAAK;oBACT,wCAAwC;gBAC5C,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS;gBAC/D,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;gBAC1D,gBAAgB,EAAE,aAAa;gBAC/B,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvC,UAAU;gBACV,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,4BAA4B;QAC5B,qEAAqE;QACrE,mEAAmE;QACnE,sEAAsE;QACtE,EAAE;QACF,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,0BAA0B;QAC1B,MAAM,cAAc,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,eAAe,GACjB,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,oBAAoB,CAAC;YACvD,MAAM,MAAM,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;YACxD,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,oBAAoB,CAAC,eAAe,EAAE,cAAc,CAAC;gBAC9D,WAAW,EAAE,MAAM;oBACf,CAAC,CAAC,GAAG,eAAe,KAAK,MAAM,EAAE;oBACjC,CAAC,CAAC,eAAe;gBACrB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC;gBACzC,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,uBAAuB;gBAC7B,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvC,gBAAgB,EAAE,cAAc;gBAChC,UAAU;gBACV,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,iEAAiE;QACjE,2CAA2C;QAC3C,IACI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAC/B;gBACI,MAAM;gBACN,MAAM;gBACN,WAAW;gBACX,gBAAgB;gBAChB,iBAAiB;gBACjB,YAAY;gBACZ,mBAAmB;aACtB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAC7B,CAAC;YACC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,WAAW,GACb,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;YACxD,OAAO,IAAI,YAAY,CAAC;gBACpB,OAAO,EAAE,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAC5D,WAAW,EACP,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC;oBACrD,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,CAAC;oBACrD,CAAC,CAAC,WAAW;gBACrB,MAAM,EACF,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;oBAC1B,CAAC,CAAC,GAAG,CAAC,MAAM;oBACZ,CAAC,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;wBACtC,CAAC,CAAC,GAAG,CAAC,cAAc;wBACpB,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC7B,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;gBAC7B,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvC,eAAe,EAAE,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;gBACnD,UAAU;gBACV,gBAAgB;gBAChB,cAAc;gBACd,iBAAiB;gBACjB,eAAe;gBACf,eAAe;gBACf,WAAW;gBACX,GAAG,EAAE,KAAK;aACb,CAAC,CAAC;QACP,CAAC;QAED,uCAAuC;QACvC,MAAM,OAAO,GACT,GAAG,CAAC,OAAO;YACX,GAAG,CAAC,MAAM;YACV,GAAG,CAAC,KAAK;YACT,+BAA+B,CAAC;QACpC,OAAO,IAAI,YAAY,CAAC;YACpB,OAAO;YACP,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC;YACzC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC;YACvC,UAAU;YACV,cAAc;YACd,iBAAiB;YACjB,eAAe;YACf,eAAe;YACf,WAAW;YACX,GAAG,EAAE,KAAK;SACb,CAAC,CAAC;IACP,CAAC;CACJ;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,YAAY,CAAC;AACzC,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACvC,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;AAChD,CAAC"}
@@ -1,3 +1,5 @@
1
- export { PaginationError, type AutoPaginationPromise, type CursorPage, type PaginatedPage, } from './pagination';
2
- export { NxusApiError, isNxusApiError, throwIfError, extractErrorMessage, type NxusErrorCode, type NxusErrorType, } from './errors';
1
+ export { PaginationError, type AutoPaginationPromise, type CursorPage, type PaginatedPage, } from './pagination.js';
2
+ export { NxusApiError, isNxusApiError, throwIfError, extractErrorMessage, type NxusErrorCode, type NxusErrorType, } from './errors.js';
3
+ export { NxusResponse, isNxusResponse } from './response.js';
4
+ export { toActiveStatus, isActiveStatus } from './enums.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -1,3 +1,5 @@
1
- export { PaginationError, } from './pagination';
2
- export { NxusApiError, isNxusApiError, throwIfError, extractErrorMessage, } from './errors';
1
+ export { PaginationError, } from './pagination.js';
2
+ export { NxusApiError, isNxusApiError, throwIfError, extractErrorMessage, } from './errors.js';
3
+ export { NxusResponse, isNxusResponse } from './response.js';
4
+ export { toActiveStatus, isActiveStatus } from './enums.js';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,GAGpB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,GAGpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -5,13 +5,23 @@
5
5
  * using the transport layer. This file exports the shared type definitions
6
6
  * and the PaginationError class.
7
7
  */
8
+ /**
9
+ * A single page of a cursor-paginated list response.
10
+ *
11
+ * `count`, `limit` and `totalCount` are always present on the wire.
12
+ * `nextCursor`, `hasMore` and `remainingCount` are sent only while more
13
+ * records remain; the SDK normalizes their absence to `hasMore: false` /
14
+ * `nextCursor: null` so iteration stops on the final page.
15
+ *
16
+ * There is no page-number pagination — the envelope carries no `page` or
17
+ * `pageCount`, and nothing should be written against them.
18
+ */
8
19
  export type CursorPage<TItem = unknown> = {
9
20
  count?: number;
10
21
  data: TItem[];
11
22
  hasMore: boolean;
12
23
  limit?: number;
13
24
  nextCursor: string | null;
14
- page?: number;
15
25
  remainingCount?: number;
16
26
  totalCount?: number;
17
27
  [key: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/helpers/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,MAAM,UAAU,CAAC,KAAK,GAAG,OAAO,IAAI;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,KAAK,CAAC;IACvE,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB,CAAC,KAAK,GAAG,OAAO,CACpD,SAAQ,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EACvC,aAAa,CAAC,KAAK,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GACxE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;IAC3C,OAAO,CACL,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAC9B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAClC;AAMD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAGvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAOrD"}
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/helpers/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,UAAU,CAAC,KAAK,GAAG,OAAO,IAAI;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,UAAU,CAAC,KAAK,CAAC;IACvE,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB,CAAC,KAAK,GAAG,OAAO,CACpD,SAAQ,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EACvC,aAAa,CAAC,KAAK,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GACxE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;IAC3C,OAAO,CACL,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAC9B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAClC;AAMD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAGvB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAOrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/helpers/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkCH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,SAAS,CAAW;IACpB,MAAM,CAAU;IAEzB,YACE,OAAe,EACf,OAAkD;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/helpers/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4CH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,SAAS,CAAW;IACpB,MAAM,CAAU;IAEzB,YACE,OAAe,EACf,OAAkD;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Response metadata wrappers.
3
+ *
4
+ * Two types live here and the split is deliberate:
5
+ *
6
+ * - `TransportResponse<TWire>` — SDK-internal snapshot taken from the HTTP
7
+ * response before it is released. Never returned to consumers.
8
+ * - `NxusResponse<T>` — the immutable public wrapper handed back by
9
+ * `resource.withResponse.*`.
10
+ *
11
+ * Neither carries a `fetch` `Response`. That is the point: exposing the
12
+ * underlying object would put the runtime's body-stream semantics into the
13
+ * SDK's public contract, and a `Response` body can only be read once — any
14
+ * consumer holding one past the request would find it already consumed.
15
+ * Everything useful is copied out eagerly instead, so a wrapper is safe to
16
+ * keep, log, or pass around indefinitely.
17
+ */
18
+ /**
19
+ * SDK-internal snapshot of a single HTTP response.
20
+ *
21
+ * Built inside the transport while the response is still readable, so the body
22
+ * is already materialized by the time this is returned.
23
+ *
24
+ * @internal
25
+ */
26
+ export interface TransportResponse<TWire> {
27
+ /** Parsed body, or `undefined` for 204 / empty responses. */
28
+ readonly body: TWire;
29
+ /** HTTP status code. */
30
+ readonly status: number;
31
+ /** Response headers, with lower-cased names. */
32
+ readonly headers: Readonly<Record<string, string>>;
33
+ /** Server-assigned request id, from the body or the `x-request-id` header. */
34
+ readonly requestId: string | undefined;
35
+ /** Undecoded response text — retained only when explicitly requested. */
36
+ readonly rawBody: string | undefined;
37
+ }
38
+ /**
39
+ * A parsed result plus the response metadata that came with it.
40
+ *
41
+ * Returned by `resource.withResponse.<method>(...)`. The `data` property is
42
+ * exactly what the plain call would have returned, so the two forms never
43
+ * diverge in parsing, validation, or error behavior.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const check = await nxus.checks.create({ payeeId });
48
+ * // -> Check
49
+ *
50
+ * const wrapped = await nxus.checks.withResponse.create({ payeeId });
51
+ * // -> NxusResponse<Check>
52
+ *
53
+ * wrapped.data; // the same Check
54
+ * wrapped.statusCode; // 200
55
+ * wrapped.requestId; // 'req_abc123'
56
+ * ```
57
+ *
58
+ * Instances are frozen — assigning to a property is a no-op in sloppy mode and
59
+ * throws in strict mode (which ES modules always are).
60
+ */
61
+ export declare class NxusResponse<T> {
62
+ /** The parsed model, exactly as the unwrapped call would return it. */
63
+ readonly data: T;
64
+ /** HTTP status code of the response that produced `data`. */
65
+ readonly statusCode: number;
66
+ /** Read-only response headers, with lower-cased names. */
67
+ readonly headers: Readonly<Record<string, string>>;
68
+ /** Server-assigned request id, for support inquiries. */
69
+ readonly requestId: string | undefined;
70
+ /**
71
+ * Undecoded response body — only present when the call opted in with
72
+ * `includeRawBody: true`. Retaining it for every request would keep a full
73
+ * second copy of every payload alive for the lifetime of the wrapper, which
74
+ * is wasteful for the common case of reading a status code or a request id.
75
+ */
76
+ readonly rawBody: string | undefined;
77
+ constructor(opts: {
78
+ data: T;
79
+ statusCode: number;
80
+ headers?: Record<string, string>;
81
+ requestId?: string;
82
+ rawBody?: string;
83
+ });
84
+ /**
85
+ * Build a public wrapper from an internal snapshot.
86
+ *
87
+ * @internal
88
+ */
89
+ static fromTransport<T>(data: T, transportResponse: TransportResponse<unknown>): NxusResponse<T>;
90
+ }
91
+ /** Type guard for `NxusResponse`. */
92
+ export declare function isNxusResponse<T = unknown>(value: unknown): value is NxusResponse<T>;
93
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/helpers/response.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjB,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnD,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEzB,IAAI,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IASD;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,EACpB,IAAI,EAAE,CAAC,EACP,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAC5C,YAAY,CAAC,CAAC,CAAC;CASnB;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAE1B"}