@viu/emporix-sdk 2.22.0 → 2.23.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/CHANGELOG.md +122 -0
- package/dist/availability.cjs +118 -0
- package/dist/availability.cjs.map +1 -1
- package/dist/availability.d.cts +178 -2
- package/dist/availability.d.ts +178 -2
- package/dist/availability.js +1 -1
- package/dist/cart.cjs +156 -11
- package/dist/cart.cjs.map +1 -1
- package/dist/cart.d.cts +176 -3
- package/dist/cart.d.ts +176 -3
- package/dist/cart.js +1 -1
- package/dist/category.cjs +192 -2
- package/dist/category.cjs.map +1 -1
- package/dist/category.d.cts +398 -1
- package/dist/category.d.ts +398 -1
- package/dist/category.js +1 -1
- package/dist/{chunk-HD5RBCM6.js → chunk-27NLS646.js} +10 -2
- package/dist/chunk-27NLS646.js.map +1 -0
- package/dist/{chunk-MMX5FGMI.js → chunk-6PJFOX3A.js} +109 -2
- package/dist/chunk-6PJFOX3A.js.map +1 -0
- package/dist/chunk-HWVFF6B2.js +378 -0
- package/dist/chunk-HWVFF6B2.js.map +1 -0
- package/dist/chunk-LQFRJSVT.js +224 -0
- package/dist/chunk-LQFRJSVT.js.map +1 -0
- package/dist/chunk-P7G4LOOV.js +264 -0
- package/dist/chunk-P7G4LOOV.js.map +1 -0
- package/dist/{chunk-44F52KRE.js → chunk-QQMLN76U.js} +27 -2
- package/dist/chunk-QQMLN76U.js.map +1 -0
- package/dist/chunk-UNW6SFSB.js +363 -0
- package/dist/chunk-UNW6SFSB.js.map +1 -0
- package/dist/chunk-V3275BA7.js +181 -0
- package/dist/chunk-V3275BA7.js.map +1 -0
- package/dist/chunk-W2KBVWJ2.js +323 -0
- package/dist/chunk-W2KBVWJ2.js.map +1 -0
- package/dist/{chunk-5DWCYDQD.js → chunk-YVZ6GOLE.js} +158 -13
- package/dist/chunk-YVZ6GOLE.js.map +1 -0
- package/dist/chunk-ZOFGDNSX.js +305 -0
- package/dist/chunk-ZOFGDNSX.js.map +1 -0
- package/dist/companies.cjs +25 -0
- package/dist/companies.cjs.map +1 -1
- package/dist/companies.d.cts +14 -0
- package/dist/companies.d.ts +14 -0
- package/dist/companies.js +1 -1
- package/dist/contacts.cjs +8 -0
- package/dist/contacts.cjs.map +1 -1
- package/dist/contacts.d.cts +2 -0
- package/dist/contacts.d.ts +2 -0
- package/dist/contacts.js +1 -1
- package/dist/customer-groups-BxSNFHq1.d.cts +706 -0
- package/dist/customer-groups-GlzWhDsi.d.ts +706 -0
- package/dist/customer-groups.cjs +200 -17
- package/dist/customer-groups.cjs.map +1 -1
- package/dist/customer-groups.d.cts +2 -110
- package/dist/customer-groups.d.ts +2 -110
- package/dist/customer-groups.js +1 -1
- package/dist/index.cjs +2220 -391
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +433 -11
- package/dist/index.d.ts +433 -11
- package/dist/index.js +668 -340
- package/dist/index.js.map +1 -1
- package/dist/orders.cjs +160 -2
- package/dist/orders.cjs.map +1 -1
- package/dist/orders.d.cts +221 -1
- package/dist/orders.d.ts +221 -1
- package/dist/orders.js +1 -1
- package/dist/payment.cjs +107 -0
- package/dist/payment.cjs.map +1 -1
- package/dist/payment.d.cts +299 -1
- package/dist/payment.d.ts +299 -1
- package/dist/payment.js +1 -1
- package/dist/price.cjs +197 -0
- package/dist/price.cjs.map +1 -1
- package/dist/price.d.cts +577 -1
- package/dist/price.d.ts +577 -1
- package/dist/price.js +1 -1
- package/dist/product.cjs +190 -0
- package/dist/product.cjs.map +1 -1
- package/dist/product.d.cts +503 -1
- package/dist/product.d.ts +503 -1
- package/dist/product.js +1 -1
- package/dist/segment.cjs +179 -0
- package/dist/segment.cjs.map +1 -1
- package/dist/segment.d.cts +181 -1
- package/dist/segment.d.ts +181 -1
- package/dist/segment.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-36T4YPQJ.js +0 -106
- package/dist/chunk-36T4YPQJ.js.map +0 -1
- package/dist/chunk-3BTPX7IJ.js +0 -41
- package/dist/chunk-3BTPX7IJ.js.map +0 -1
- package/dist/chunk-44F52KRE.js.map +0 -1
- package/dist/chunk-5DWCYDQD.js.map +0 -1
- package/dist/chunk-A3LYJUD4.js +0 -108
- package/dist/chunk-A3LYJUD4.js.map +0 -1
- package/dist/chunk-DXOLWAOY.js +0 -188
- package/dist/chunk-DXOLWAOY.js.map +0 -1
- package/dist/chunk-FZMP5NQZ.js +0 -173
- package/dist/chunk-FZMP5NQZ.js.map +0 -1
- package/dist/chunk-HD5RBCM6.js.map +0 -1
- package/dist/chunk-IVCCGJN5.js +0 -63
- package/dist/chunk-IVCCGJN5.js.map +0 -1
- package/dist/chunk-MMX5FGMI.js.map +0 -1
- package/dist/chunk-NE7MIZPR.js +0 -144
- package/dist/chunk-NE7MIZPR.js.map +0 -1
package/dist/orders.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// src/core/query.ts
|
|
4
4
|
function resolveQuery(q, cap) {
|
|
5
5
|
if (typeof q === "string") return q;
|
|
6
|
-
if (q.usesCompound === true &&
|
|
6
|
+
if (q.usesCompound === true && !cap.compoundLogicalQuery) {
|
|
7
7
|
throw new Error(
|
|
8
8
|
"This filter uses or()/compoundLogicalQuery, which the target service does not support. Combine conditions with and() (space-separated AND) instead."
|
|
9
9
|
);
|
|
@@ -41,7 +41,7 @@ var OrdersService = class {
|
|
|
41
41
|
setIfDefined(query, "legalEntityId", opts.legalEntityId);
|
|
42
42
|
setIfDefined(query, "siteCode", opts.siteCode);
|
|
43
43
|
if (opts.q !== void 0) {
|
|
44
|
-
setIfDefined(query, "q", resolveQuery(opts.q));
|
|
44
|
+
setIfDefined(query, "q", resolveQuery(opts.q, { compoundLogicalQuery: false }));
|
|
45
45
|
}
|
|
46
46
|
const headers = this.saasHeader(opts.saasToken);
|
|
47
47
|
const items = await this.ctx.http.request({
|
|
@@ -80,6 +80,42 @@ var OrdersService = class {
|
|
|
80
80
|
async cancel(orderId, auth, opts = {}) {
|
|
81
81
|
await this.transition(orderId, "DECLINED", auth, opts);
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Lists a legal entity's orders (`GET /legal-entity-orders/{legalEntityId}`),
|
|
85
|
+
* wrapped into `PaginatedItems`. B2B storefront view — requires a customer
|
|
86
|
+
* token with access to the legal entity.
|
|
87
|
+
*/
|
|
88
|
+
async listForLegalEntity(legalEntityId, auth, opts = {}) {
|
|
89
|
+
const pageNumber = opts.pageNumber ?? 1;
|
|
90
|
+
const pageSize = opts.pageSize ?? 50;
|
|
91
|
+
const query = { pageNumber, pageSize };
|
|
92
|
+
setIfDefined(query, "sort", opts.sort);
|
|
93
|
+
if (opts.q !== void 0) {
|
|
94
|
+
setIfDefined(query, "q", resolveQuery(opts.q, { compoundLogicalQuery: false }));
|
|
95
|
+
}
|
|
96
|
+
const headers = this.saasHeader(opts.saasToken);
|
|
97
|
+
const items = await this.ctx.http.request({
|
|
98
|
+
method: "GET",
|
|
99
|
+
path: `/order-v2/${this.ctx.tenant}/legal-entity-orders/${legalEntityId}`,
|
|
100
|
+
query,
|
|
101
|
+
auth,
|
|
102
|
+
...headers ? { headers } : {}
|
|
103
|
+
});
|
|
104
|
+
return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Fetches one order within a legal entity
|
|
108
|
+
* (`GET /legal-entity-orders/{legalEntityId}/{orderId}`).
|
|
109
|
+
*/
|
|
110
|
+
async getForLegalEntity(legalEntityId, orderId, auth, opts = {}) {
|
|
111
|
+
const headers = this.saasHeader(opts.saasToken);
|
|
112
|
+
return this.ctx.http.request({
|
|
113
|
+
method: "GET",
|
|
114
|
+
path: `/order-v2/${this.ctx.tenant}/legal-entity-orders/${legalEntityId}/${orderId}`,
|
|
115
|
+
auth,
|
|
116
|
+
...headers ? { headers } : {}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
83
119
|
};
|
|
84
120
|
var SalesOrdersService = class {
|
|
85
121
|
constructor(ctx) {
|
|
@@ -110,6 +146,128 @@ var SalesOrdersService = class {
|
|
|
110
146
|
body: patch
|
|
111
147
|
});
|
|
112
148
|
}
|
|
149
|
+
/** Lists tenant sales-orders (`GET /salesorders`), wrapped into `PaginatedItems`. */
|
|
150
|
+
async list(auth, opts = {}) {
|
|
151
|
+
const pageNumber = opts.pageNumber ?? 1;
|
|
152
|
+
const pageSize = opts.pageSize ?? 50;
|
|
153
|
+
const query = { pageNumber, pageSize };
|
|
154
|
+
setIfDefined(query, "sort", opts.sort);
|
|
155
|
+
setIfDefined(query, "fields", opts.fields);
|
|
156
|
+
if (opts.q !== void 0) {
|
|
157
|
+
setIfDefined(query, "q", resolveQuery(opts.q, { compoundLogicalQuery: false }));
|
|
158
|
+
}
|
|
159
|
+
const items = await this.ctx.http.request({
|
|
160
|
+
method: "GET",
|
|
161
|
+
path: this.base(),
|
|
162
|
+
query,
|
|
163
|
+
auth
|
|
164
|
+
});
|
|
165
|
+
return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };
|
|
166
|
+
}
|
|
167
|
+
/** Searches tenant sales-orders (`POST /salesorders/search`, body carries the `q` filter). */
|
|
168
|
+
async search(query, auth, opts = {}) {
|
|
169
|
+
const q = {};
|
|
170
|
+
setIfDefined(q, "pageNumber", opts.pageNumber);
|
|
171
|
+
setIfDefined(q, "pageSize", opts.pageSize);
|
|
172
|
+
setIfDefined(q, "sort", opts.sort);
|
|
173
|
+
setIfDefined(q, "fields", opts.fields);
|
|
174
|
+
return this.ctx.http.request({
|
|
175
|
+
method: "POST",
|
|
176
|
+
path: `${this.base()}/search`,
|
|
177
|
+
...Object.keys(q).length > 0 ? { query: q } : {},
|
|
178
|
+
body: query,
|
|
179
|
+
idempotent: true,
|
|
180
|
+
// pure read over POST — safe to replay on 5xx/429
|
|
181
|
+
auth
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/** Creates a sales-order as an employee (`POST /salesorders`). Returns the created resource location. */
|
|
185
|
+
async create(input, auth) {
|
|
186
|
+
return this.ctx.http.request({
|
|
187
|
+
method: "POST",
|
|
188
|
+
path: this.base(),
|
|
189
|
+
auth,
|
|
190
|
+
body: input
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Full-replaces a sales-order (`PUT /salesorders/{orderId}`, body `OrderUpdateDto`).
|
|
195
|
+
* The endpoint returns 204, so the order is re-fetched (direct GET) and returned.
|
|
196
|
+
* Note: `update` on this class is the PATCH (partial); `replace` is the PUT (full).
|
|
197
|
+
*/
|
|
198
|
+
async replace(orderId, input, auth) {
|
|
199
|
+
await this.ctx.http.request({
|
|
200
|
+
method: "PUT",
|
|
201
|
+
path: `${this.base()}/${orderId}`,
|
|
202
|
+
auth,
|
|
203
|
+
body: input
|
|
204
|
+
});
|
|
205
|
+
return this.ctx.http.request({
|
|
206
|
+
method: "GET",
|
|
207
|
+
path: `${this.base()}/${orderId}`,
|
|
208
|
+
auth
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/** Deletes a sales-order (`DELETE /salesorders/{orderId}`). */
|
|
212
|
+
async delete(orderId, auth) {
|
|
213
|
+
await this.ctx.http.request({
|
|
214
|
+
method: "DELETE",
|
|
215
|
+
path: `${this.base()}/${orderId}`,
|
|
216
|
+
auth
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/** Lists the available transitions for a sales-order (`GET /salesorders/{orderId}/transitions`). */
|
|
220
|
+
async listTransitions(orderId, auth) {
|
|
221
|
+
return this.ctx.http.request({
|
|
222
|
+
method: "GET",
|
|
223
|
+
path: `${this.base()}/${orderId}/transitions`,
|
|
224
|
+
auth
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/** Transitions a sales-order to a new status (`POST /salesorders/{orderId}/transitions`). */
|
|
228
|
+
async transition(orderId, input, auth) {
|
|
229
|
+
await this.ctx.http.request({
|
|
230
|
+
method: "POST",
|
|
231
|
+
path: `${this.base()}/${orderId}/transitions`,
|
|
232
|
+
auth,
|
|
233
|
+
body: input
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/** Lists the historical transitions of a sales-order (`GET /salesorders/{orderId}/historical-transitions`). */
|
|
237
|
+
async listHistoricalTransitions(orderId, auth) {
|
|
238
|
+
return this.ctx.http.request({
|
|
239
|
+
method: "GET",
|
|
240
|
+
path: `${this.base()}/${orderId}/historical-transitions`,
|
|
241
|
+
auth
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/** Calculates order-entry totals for a sales-order (`POST /salesorders/{orderId}/calculations`). */
|
|
245
|
+
async calculate(orderId, input, auth) {
|
|
246
|
+
return this.ctx.http.request({
|
|
247
|
+
method: "POST",
|
|
248
|
+
path: `${this.base()}/${orderId}/calculations`,
|
|
249
|
+
auth,
|
|
250
|
+
body: input
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
/** Updates a sales-order's entries (`POST /salesorders/{orderId}/entries`). Returns the updated order. */
|
|
254
|
+
async updateEntries(orderId, input, auth) {
|
|
255
|
+
return this.ctx.http.request({
|
|
256
|
+
method: "POST",
|
|
257
|
+
path: `${this.base()}/${orderId}/entries`,
|
|
258
|
+
auth,
|
|
259
|
+
body: input
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/** Splits a sales-order (`POST /salesorders/{orderId}/split`). */
|
|
263
|
+
async split(orderId, input, auth) {
|
|
264
|
+
return this.ctx.http.request({
|
|
265
|
+
method: "POST",
|
|
266
|
+
path: `${this.base()}/${orderId}/split`,
|
|
267
|
+
auth,
|
|
268
|
+
body: input
|
|
269
|
+
});
|
|
270
|
+
}
|
|
113
271
|
};
|
|
114
272
|
|
|
115
273
|
exports.OrdersService = OrdersService;
|
package/dist/orders.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/query.ts","../src/services/orders.ts"],"names":[],"mappings":"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","file":"orders.cjs","sourcesContent":["/**\n * A built query filter — structurally matched, NOT imported, so the SDK stays\n * decoupled from `@viu/emporix-mixins` (which lists the SDK as an optional\n * peer; a real import would be circular). `@viu/emporix-mixins`' `MixinFilter<E>`\n * satisfies this shape.\n */\nexport interface BuiltQuery<E extends string = string> {\n toString(): string;\n readonly usesCompound?: boolean;\n /** Phantom entity tag — gates which service a filter may be passed to. */\n readonly __entity?: E;\n}\n\n/** A `q` value a service method accepts: a raw DSL string or a built filter for entity `E`. */\nexport type QueryFor<E extends string = string> = string | BuiltQuery<E>;\n\n/** Per-service capability flags consulted by {@link resolveQuery}. */\nexport interface QueryCapability {\n /** Whether the target service supports the `compoundLogicalQuery` (OR) operator. */\n compoundLogicalQuery: boolean;\n}\n\n/**\n * Normalizes a `string | BuiltQuery` into a `q` string and enforces the\n * `compoundLogicalQuery` capability gate: an `or()`-built filter passed to a\n * service that does not support it throws rather than silently producing a\n * query the backend cannot execute.\n */\nexport function resolveQuery(q: QueryFor, cap: QueryCapability): string {\n if (typeof q === \"string\") return q;\n if (q.usesCompound === true && !cap.compoundLogicalQuery) {\n throw new Error(\n \"This filter uses or()/compoundLogicalQuery, which the target service does not support. \" +\n \"Combine conditions with and() (space-separated AND) instead.\",\n );\n }\n return q.toString();\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { resolveQuery, type QueryFor } from \"../core/query\";\nimport type { Order, OrderStatus, OrderUpdateDto } from \"../generated/order-v2\";\n\n/**\n * Salesorder PATCH body. The generated `orderUpdateDto` models a full order\n * (it requires `entries`/`customer`), but `PATCH /salesorders/{id}` accepts a\n * subset — so the SDK exposes a partial of it.\n */\nexport type SalesOrderPatch = Partial<OrderUpdateDto>;\n\n/** Optional fields supported by the order-v2 list endpoint. */\nexport interface ListMyOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n status?: OrderStatus;\n legalEntityId?: string;\n siteCode?: string;\n saasToken?: string;\n /** A `q` filter — raw DSL string or a built filter (e.g. mixinQuery for entity \"ORDER\"). */\n q?: QueryFor<\"ORDER\">;\n}\n\n/** Options for single-order reads (saas-token only). */\nexport interface GetOrderOptions {\n saasToken?: string;\n}\n\n/** Options for status transitions. */\nexport interface OrderTransitionOptions {\n saasToken?: string;\n comment?: string;\n}\n\n/** Options for `salesOrders.update`. */\nexport interface UpdateSalesOrderOptions {\n /** Forwarded as `?recalculate=`. Omit to use the server default (true). */\n recalculate?: boolean;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Storefront-customer access to Order-v2's customer endpoints.\n *\n * `listMine`/`get` require `order.order_read_own`; transitions require\n * `order.order_manage_own`. All methods accept an optional `saasToken` that\n * is passed as the `saas-token` header (mirrors `checkout.placeOrder`).\n */\nexport class OrdersService {\n static readonly channel = \"orders\" as const;\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/orders`;\n }\n\n private saasHeader(saasToken: string | undefined): Record<string, string> | undefined {\n return saasToken ? { \"saas-token\": saasToken } : undefined;\n }\n\n /** Lists the calling customer's orders. */\n async listMine(\n auth: AuthContext,\n opts: ListMyOrdersOptions = {},\n ): Promise<PaginatedItems<Order>> {\n const pageNumber = opts.pageNumber ?? 1;\n const pageSize = opts.pageSize ?? 50;\n const query: Record<string, string | number | undefined> = {\n pageNumber,\n pageSize,\n };\n setIfDefined(query, \"status\", opts.status);\n setIfDefined(query, \"legalEntityId\", opts.legalEntityId);\n setIfDefined(query, \"siteCode\", opts.siteCode);\n if (opts.q !== undefined) {\n setIfDefined(query, \"q\", resolveQuery(opts.q, { compoundLogicalQuery: false }));\n }\n const headers = this.saasHeader(opts.saasToken);\n // order-v2 returns a bare JSON array (the total count lives in the\n // X-Total-Count header), not a {items,...} envelope — so wrap it into the\n // shared PaginatedItems shape like every other paginated service.\n // hasNextPage is inferred from the page being full.\n const items = await this.ctx.http.request<Order[]>({\n method: \"GET\",\n path: this.base(),\n query,\n auth,\n ...(headers ? { headers } : {}),\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Fetches one of the calling customer's orders by id. */\n async get(\n orderId: string,\n auth: AuthContext,\n opts: GetOrderOptions = {},\n ): Promise<Order> {\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Transitions an order to a new status. Server enforces legal transitions. */\n async transition(\n orderId: string,\n status: OrderStatus,\n auth: AuthContext,\n opts: OrderTransitionOptions = {},\n ): Promise<void> {\n const body: { status: OrderStatus; comment?: string } = { status };\n if (opts.comment !== undefined) body.comment = opts.comment;\n const headers = this.saasHeader(opts.saasToken);\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n body,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Convenience: transitions to `DECLINED` (customer cancel). */\n async cancel(\n orderId: string,\n auth: AuthContext,\n opts: { saasToken?: string } = {},\n ): Promise<void> {\n await this.transition(orderId, \"DECLINED\", auth, opts);\n }\n}\n\n/**\n * Backend / service-account access to the merchant-facing\n * `/salesorders/{id}` resource. Requires `order.order_read` (read) /\n * `order.order_manage` (update) scopes on a service token.\n *\n * The full admin list + filter surface is deferred to a follow-up\n * sub-spec. This service ships only single-resource read + patch — the\n * common backend use case (e.g. mixin updates after fulfilment).\n */\nexport class SalesOrdersService {\n static readonly channel = \"sales-orders\" as const;\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/salesorders`;\n }\n\n /** Fetches a single sales-order by id. */\n async get(orderId: string, auth: AuthContext): Promise<Order> {\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Patches an existing order (status, mixins, customAttributes, metadata). */\n async update(\n orderId: string,\n patch: SalesOrderPatch,\n auth: AuthContext,\n opts: UpdateSalesOrderOptions = {},\n ): Promise<Order> {\n const query: Record<string, string> = {};\n if (opts.recalculate === false) query.recalculate = \"false\";\n return this.ctx.http.request<Order>({\n method: \"PATCH\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(Object.keys(query).length > 0 ? { query } : {}),\n body: patch,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/query.ts","../src/services/orders.ts"],"names":[],"mappings":";;;AA4BO,SAAS,YAAA,CAAa,GAAa,GAAA,EAA8B;AACtE,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,EAAA,IAAI,CAAA,CAAE,YAAA,KAAiB,IAAA,IAAQ,CAAC,IAAI,oBAAA,EAAsB;AACxD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,QAAA,EAAS;AACpB;;;ACiEA,SAAS,YAAA,CACP,CAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI;AACvC,IAAA,CAAA,CAAE,GAAG,CAAA,GAAI,KAAA;AAAA,EACX;AACF;AASO,IAAM,gBAAN,MAAoB;AAAA,EAEzB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAD7B,OAAgB,OAAA,GAAU,QAAA;AAAA,EAGlB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,EACrC;AAAA,EAEQ,WAAW,SAAA,EAAmE;AACpF,IAAA,OAAO,SAAA,GAAY,EAAE,YAAA,EAAc,SAAA,EAAU,GAAI,MAAA;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,QAAA,CACJ,IAAA,EACA,IAAA,GAA4B,EAAC,EACG;AAChC,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,EAAA;AAClC,IAAA,MAAM,KAAA,GAAqD;AAAA,MACzD,UAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACzC,IAAA,YAAA,CAAa,KAAA,EAAO,eAAA,EAAiB,IAAA,CAAK,aAAa,CAAA;AACvD,IAAA,YAAA,CAAa,KAAA,EAAO,UAAA,EAAY,IAAA,CAAK,QAAQ,CAAA;AAC7C,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,MAAA,YAAA,CAAa,KAAA,EAAO,KAAK,YAAA,CAAa,IAAA,CAAK,GAAG,EAAE,oBAAA,EAAsB,KAAA,EAAO,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAK9C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAiB;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,GAAA,CACJ,OAAA,EACA,IAAA,EACA,IAAA,GAAwB,EAAC,EACT;AAChB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,OAAA,EACA,QACA,IAAA,EACA,IAAA,GAA+B,EAAC,EACjB;AACf,IAAA,MAAM,IAAA,GAAkD,EAAE,MAAA,EAAO;AACjE,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,MAAA,EAAW,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,YAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,OAAA,EACA,IAAA,EACA,IAAA,GAA+B,EAAC,EACjB;AACf,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,UAAA,EAAY,MAAM,IAAI,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAA,CACJ,aAAA,EACA,IAAA,EACA,IAAA,GAAqC,EAAC,EACD;AACrC,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,EAAA;AAClC,IAAA,MAAM,KAAA,GAAqD,EAAE,UAAA,EAAY,QAAA,EAAS;AAClF,IAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,MAAA,YAAA,CAAa,KAAA,EAAO,KAAK,YAAA,CAAa,IAAA,CAAK,GAAG,EAAE,oBAAA,EAAsB,KAAA,EAAO,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAsB;AAAA,MACtD,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,wBAAwB,aAAa,CAAA,CAAA;AAAA,MACvE,KAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAA,CACJ,aAAA,EACA,SACA,IAAA,EACA,IAAA,GAA+B,EAAC,EACX;AACrB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,aAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,qBAAA,EAAwB,aAAa,IAAI,OAAO,CAAA,CAAA;AAAA,MAClF,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AAAA,EACH;AACF;AAWO,IAAM,qBAAN,MAAyB;AAAA,EAE9B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAD7B,OAAgB,OAAA,GAAU,cAAA;AAAA,EAGlB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,YAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,OAAA,EAAiB,IAAA,EAAmC;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,OAAA,EACA,OACA,IAAA,EACA,IAAA,GAAgC,EAAC,EACjB;AAChB,IAAA,MAAM,QAAgC,EAAC;AACvC,IAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,KAAA,EAAO,KAAA,CAAM,WAAA,GAAc,OAAA;AACpD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,GAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,GAAI,EAAE,KAAA,EAAM,GAAI,EAAC;AAAA,MACjD,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,IAAA,CAAK,IAAA,EAAmB,IAAA,GAA+B,EAAC,EAAwC;AACpG,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,EAAA;AAClC,IAAA,MAAM,KAAA,GAAqD,EAAE,UAAA,EAAY,QAAA,EAAS;AAClF,IAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AACrC,IAAA,YAAA,CAAa,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACzC,IAAA,IAAI,IAAA,CAAK,MAAM,MAAA,EAAW;AACxB,MAAA,YAAA,CAAa,KAAA,EAAO,KAAK,YAAA,CAAa,IAAA,CAAK,GAAG,EAAE,oBAAA,EAAsB,KAAA,EAAO,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAsB;AAAA,MACtD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,KAAA,EACA,IAAA,EACA,IAAA,GAAmF,EAAC,EAC7D;AACvB,IAAA,MAAM,IAAiD,EAAC;AACxD,IAAA,YAAA,CAAa,CAAA,EAAG,YAAA,EAAc,IAAA,CAAK,UAAU,CAAA;AAC7C,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,YAAA,CAAa,CAAA,EAAG,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AACjC,IAAA,YAAA,CAAa,CAAA,EAAG,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACpB,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI,EAAC;AAAA,MAChD,IAAA,EAAM,KAAA;AAAA,MACN,UAAA,EAAY,IAAA;AAAA;AAAA,MACZ;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAA8B,IAAA,EAA+C;AACxF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAA,CAAQ,OAAA,EAAiB,KAAA,EAA+B,IAAA,EAAwC;AACpG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,OAAA,EAAiB,IAAA,EAAkC;AAC9D,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,OAAA,EAAiB,IAAA,EAA0C;AAC/E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,YAAA,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,OAAA,EAAiB,KAAA,EAAmB,IAAA,EAAkC;AACrF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,YAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,yBAAA,CAA0B,OAAA,EAAiB,IAAA,EAA6D;AAC5G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyC;AAAA,MAC5D,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,uBAAA,CAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,OAAA,EAAiB,KAAA,EAAmC,IAAA,EAAqC;AACvG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,aAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,OAAA,EAAiB,KAAA,EAA+B,IAAA,EAAwC;AAC1G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,QAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,KAAA,CAAM,OAAA,EAAiB,KAAA,EAA6B,IAAA,EAAmD;AAC3G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+B;AAAA,MAClD,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,MAAA,CAAA;AAAA,MAC/B,IAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF","file":"orders.cjs","sourcesContent":["/**\n * A built query filter — structurally matched, NOT imported, so the SDK stays\n * decoupled from `@viu/emporix-mixins` (which lists the SDK as an optional\n * peer; a real import would be circular). `@viu/emporix-mixins`' `MixinFilter<E>`\n * satisfies this shape.\n */\nexport interface BuiltQuery<E extends string = string> {\n toString(): string;\n readonly usesCompound?: boolean;\n /** Phantom entity tag — gates which service a filter may be passed to. */\n readonly __entity?: E;\n}\n\n/** A `q` value a service method accepts: a raw DSL string or a built filter for entity `E`. */\nexport type QueryFor<E extends string = string> = string | BuiltQuery<E>;\n\n/** Per-service capability flags consulted by {@link resolveQuery}. */\nexport interface QueryCapability {\n /** Whether the target service supports the `compoundLogicalQuery` (OR) operator. */\n compoundLogicalQuery: boolean;\n}\n\n/**\n * Normalizes a `string | BuiltQuery` into a `q` string and enforces the\n * `compoundLogicalQuery` capability gate: an `or()`-built filter passed to a\n * service that does not support it throws rather than silently producing a\n * query the backend cannot execute.\n */\nexport function resolveQuery(q: QueryFor, cap: QueryCapability): string {\n if (typeof q === \"string\") return q;\n if (q.usesCompound === true && !cap.compoundLogicalQuery) {\n throw new Error(\n \"This filter uses or()/compoundLogicalQuery, which the target service does not support. \" +\n \"Combine conditions with and() (space-separated AND) instead.\",\n );\n }\n return q.toString();\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { resolveQuery, type QueryFor } from \"../core/query\";\nimport type {\n Order,\n OrderStatus,\n OrderUpdateDto,\n SalesOrder,\n Transition,\n SalesOrderCreationDto,\n ResourceLocation,\n SearchRequest,\n HistoricalTransitionsResponse,\n OrderCalculationDto,\n OrderEntriesDto,\n OrderSplitRequest,\n OrderSplitResponse,\n} from \"../generated/order-v2\";\n\n/**\n * Salesorder PATCH body. The generated `orderUpdateDto` models a full order\n * (it requires `entries`/`customer`), but `PATCH /salesorders/{id}` accepts a\n * subset — so the SDK exposes a partial of it.\n */\nexport type SalesOrderPatch = Partial<OrderUpdateDto>;\n\n/** Body for creating a sales-order as an employee (`POST /salesorders`). */\nexport type SalesOrderCreateInput = SalesOrderCreationDto;\n\n/** Id/location envelope returned when a sales-order is created. */\nexport type SalesOrderCreated = ResourceLocation;\n\n/** Body for a full sales-order replace (`PUT /salesorders/{id}`). */\nexport type SalesOrderReplaceInput = OrderUpdateDto;\n\n/** Body for `salesOrders.search` (`POST /salesorders/search`). */\nexport type SalesOrderSearchInput = SearchRequest;\n\n/** Response of `salesOrders.listHistoricalTransitions`. */\nexport type SalesOrderHistoricalTransitions = HistoricalTransitionsResponse;\n\n/** Body for `salesOrders.calculate` (`POST /salesorders/{id}/calculations`). */\nexport type SalesOrderCalculationInput = OrderCalculationDto;\n\n/** Body for `salesOrders.updateEntries` (`POST /salesorders/{id}/entries`). */\nexport type SalesOrderEntriesInput = OrderEntriesDto;\n\n/** Body for `salesOrders.split` (`POST /salesorders/{id}/split`). */\nexport type SalesOrderSplitInput = OrderSplitRequest;\n\n/** Response of `salesOrders.split`. */\nexport type SalesOrderSplitResult = OrderSplitResponse;\n\n/** Options for `salesOrders.list`. */\nexport interface ListSalesOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n sort?: string;\n fields?: string;\n /** A `q` filter — raw DSL string or a built filter for entity \"ORDER\". */\n q?: QueryFor<\"ORDER\">;\n}\n\n/** Options for `orders.listForLegalEntity`. */\nexport interface ListLegalEntityOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n sort?: string;\n saasToken?: string;\n /** A `q` filter — raw DSL string or a built filter for entity \"ORDER\". */\n q?: QueryFor<\"ORDER\">;\n}\n\n/** Optional fields supported by the order-v2 list endpoint. */\nexport interface ListMyOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n status?: OrderStatus;\n legalEntityId?: string;\n siteCode?: string;\n saasToken?: string;\n /** A `q` filter — raw DSL string or a built filter (e.g. mixinQuery for entity \"ORDER\"). */\n q?: QueryFor<\"ORDER\">;\n}\n\n/** Options for single-order reads (saas-token only). */\nexport interface GetOrderOptions {\n saasToken?: string;\n}\n\n/** Options for status transitions. */\nexport interface OrderTransitionOptions {\n saasToken?: string;\n comment?: string;\n}\n\n/** Options for `salesOrders.update`. */\nexport interface UpdateSalesOrderOptions {\n /** Forwarded as `?recalculate=`. Omit to use the server default (true). */\n recalculate?: boolean;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Storefront-customer access to Order-v2's customer endpoints.\n *\n * `listMine`/`get` require `order.order_read_own`; transitions require\n * `order.order_manage_own`. All methods accept an optional `saasToken` that\n * is passed as the `saas-token` header (mirrors `checkout.placeOrder`).\n */\nexport class OrdersService {\n static readonly channel = \"orders\" as const;\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/orders`;\n }\n\n private saasHeader(saasToken: string | undefined): Record<string, string> | undefined {\n return saasToken ? { \"saas-token\": saasToken } : undefined;\n }\n\n /** Lists the calling customer's orders. */\n async listMine(\n auth: AuthContext,\n opts: ListMyOrdersOptions = {},\n ): Promise<PaginatedItems<Order>> {\n const pageNumber = opts.pageNumber ?? 1;\n const pageSize = opts.pageSize ?? 50;\n const query: Record<string, string | number | undefined> = {\n pageNumber,\n pageSize,\n };\n setIfDefined(query, \"status\", opts.status);\n setIfDefined(query, \"legalEntityId\", opts.legalEntityId);\n setIfDefined(query, \"siteCode\", opts.siteCode);\n if (opts.q !== undefined) {\n setIfDefined(query, \"q\", resolveQuery(opts.q, { compoundLogicalQuery: false }));\n }\n const headers = this.saasHeader(opts.saasToken);\n // order-v2 returns a bare JSON array (the total count lives in the\n // X-Total-Count header), not a {items,...} envelope — so wrap it into the\n // shared PaginatedItems shape like every other paginated service.\n // hasNextPage is inferred from the page being full.\n const items = await this.ctx.http.request<Order[]>({\n method: \"GET\",\n path: this.base(),\n query,\n auth,\n ...(headers ? { headers } : {}),\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Fetches one of the calling customer's orders by id. */\n async get(\n orderId: string,\n auth: AuthContext,\n opts: GetOrderOptions = {},\n ): Promise<Order> {\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Transitions an order to a new status. Server enforces legal transitions. */\n async transition(\n orderId: string,\n status: OrderStatus,\n auth: AuthContext,\n opts: OrderTransitionOptions = {},\n ): Promise<void> {\n const body: { status: OrderStatus; comment?: string } = { status };\n if (opts.comment !== undefined) body.comment = opts.comment;\n const headers = this.saasHeader(opts.saasToken);\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n body,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Convenience: transitions to `DECLINED` (customer cancel). */\n async cancel(\n orderId: string,\n auth: AuthContext,\n opts: { saasToken?: string } = {},\n ): Promise<void> {\n await this.transition(orderId, \"DECLINED\", auth, opts);\n }\n\n /**\n * Lists a legal entity's orders (`GET /legal-entity-orders/{legalEntityId}`),\n * wrapped into `PaginatedItems`. B2B storefront view — requires a customer\n * token with access to the legal entity.\n */\n async listForLegalEntity(\n legalEntityId: string,\n auth: AuthContext,\n opts: ListLegalEntityOrdersOptions = {},\n ): Promise<PaginatedItems<SalesOrder>> {\n const pageNumber = opts.pageNumber ?? 1;\n const pageSize = opts.pageSize ?? 50;\n const query: Record<string, string | number | undefined> = { pageNumber, pageSize };\n setIfDefined(query, \"sort\", opts.sort);\n if (opts.q !== undefined) {\n setIfDefined(query, \"q\", resolveQuery(opts.q, { compoundLogicalQuery: false }));\n }\n const headers = this.saasHeader(opts.saasToken);\n const items = await this.ctx.http.request<SalesOrder[]>({\n method: \"GET\",\n path: `/order-v2/${this.ctx.tenant}/legal-entity-orders/${legalEntityId}`,\n query,\n auth,\n ...(headers ? { headers } : {}),\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /**\n * Fetches one order within a legal entity\n * (`GET /legal-entity-orders/{legalEntityId}/{orderId}`).\n */\n async getForLegalEntity(\n legalEntityId: string,\n orderId: string,\n auth: AuthContext,\n opts: { saasToken?: string } = {},\n ): Promise<SalesOrder> {\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<SalesOrder>({\n method: \"GET\",\n path: `/order-v2/${this.ctx.tenant}/legal-entity-orders/${legalEntityId}/${orderId}`,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n}\n\n/**\n * Backend / service-account access to the merchant-facing\n * `/salesorders/{id}` resource. Requires `order.order_read` (read) /\n * `order.order_manage` (update) scopes on a service token.\n *\n * The full admin list + filter surface is deferred to a follow-up\n * sub-spec. This service ships only single-resource read + patch — the\n * common backend use case (e.g. mixin updates after fulfilment).\n */\nexport class SalesOrdersService {\n static readonly channel = \"sales-orders\" as const;\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/salesorders`;\n }\n\n /** Fetches a single sales-order by id. */\n async get(orderId: string, auth: AuthContext): Promise<Order> {\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Patches an existing order (status, mixins, customAttributes, metadata). */\n async update(\n orderId: string,\n patch: SalesOrderPatch,\n auth: AuthContext,\n opts: UpdateSalesOrderOptions = {},\n ): Promise<Order> {\n const query: Record<string, string> = {};\n if (opts.recalculate === false) query.recalculate = \"false\";\n return this.ctx.http.request<Order>({\n method: \"PATCH\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(Object.keys(query).length > 0 ? { query } : {}),\n body: patch,\n });\n }\n\n /** Lists tenant sales-orders (`GET /salesorders`), wrapped into `PaginatedItems`. */\n async list(auth: AuthContext, opts: ListSalesOrdersOptions = {}): Promise<PaginatedItems<SalesOrder>> {\n const pageNumber = opts.pageNumber ?? 1;\n const pageSize = opts.pageSize ?? 50;\n const query: Record<string, string | number | undefined> = { pageNumber, pageSize };\n setIfDefined(query, \"sort\", opts.sort);\n setIfDefined(query, \"fields\", opts.fields);\n if (opts.q !== undefined) {\n setIfDefined(query, \"q\", resolveQuery(opts.q, { compoundLogicalQuery: false }));\n }\n const items = await this.ctx.http.request<SalesOrder[]>({\n method: \"GET\",\n path: this.base(),\n query,\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Searches tenant sales-orders (`POST /salesorders/search`, body carries the `q` filter). */\n async search(\n query: SalesOrderSearchInput,\n auth: AuthContext,\n opts: { pageNumber?: number; pageSize?: number; sort?: string; fields?: string } = {},\n ): Promise<SalesOrder[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"pageNumber\", opts.pageNumber);\n setIfDefined(q, \"pageSize\", opts.pageSize);\n setIfDefined(q, \"sort\", opts.sort);\n setIfDefined(q, \"fields\", opts.fields);\n return this.ctx.http.request<SalesOrder[]>({\n method: \"POST\",\n path: `${this.base()}/search`,\n ...(Object.keys(q).length > 0 ? { query: q } : {}),\n body: query,\n idempotent: true, // pure read over POST — safe to replay on 5xx/429\n auth,\n });\n }\n\n /** Creates a sales-order as an employee (`POST /salesorders`). Returns the created resource location. */\n async create(input: SalesOrderCreateInput, auth: AuthContext): Promise<SalesOrderCreated> {\n return this.ctx.http.request<SalesOrderCreated>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Full-replaces a sales-order (`PUT /salesorders/{orderId}`, body `OrderUpdateDto`).\n * The endpoint returns 204, so the order is re-fetched (direct GET) and returned.\n * Note: `update` on this class is the PATCH (partial); `replace` is the PUT (full).\n */\n async replace(orderId: string, input: SalesOrderReplaceInput, auth: AuthContext): Promise<SalesOrder> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/${orderId}`,\n auth,\n body: input,\n });\n return this.ctx.http.request<SalesOrder>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Deletes a sales-order (`DELETE /salesorders/{orderId}`). */\n async delete(orderId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Lists the available transitions for a sales-order (`GET /salesorders/{orderId}/transitions`). */\n async listTransitions(orderId: string, auth: AuthContext): Promise<Transition[]> {\n return this.ctx.http.request<Transition[]>({\n method: \"GET\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n });\n }\n\n /** Transitions a sales-order to a new status (`POST /salesorders/{orderId}/transitions`). */\n async transition(orderId: string, input: Transition, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n body: input,\n });\n }\n\n /** Lists the historical transitions of a sales-order (`GET /salesorders/{orderId}/historical-transitions`). */\n async listHistoricalTransitions(orderId: string, auth: AuthContext): Promise<SalesOrderHistoricalTransitions> {\n return this.ctx.http.request<SalesOrderHistoricalTransitions>({\n method: \"GET\",\n path: `${this.base()}/${orderId}/historical-transitions`,\n auth,\n });\n }\n\n /** Calculates order-entry totals for a sales-order (`POST /salesorders/{orderId}/calculations`). */\n async calculate(orderId: string, input: SalesOrderCalculationInput, auth: AuthContext): Promise<unknown> {\n return this.ctx.http.request<unknown>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/calculations`,\n auth,\n body: input,\n });\n }\n\n /** Updates a sales-order's entries (`POST /salesorders/{orderId}/entries`). Returns the updated order. */\n async updateEntries(orderId: string, input: SalesOrderEntriesInput, auth: AuthContext): Promise<SalesOrder> {\n return this.ctx.http.request<SalesOrder>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/entries`,\n auth,\n body: input,\n });\n }\n\n /** Splits a sales-order (`POST /salesorders/{orderId}/split`). */\n async split(orderId: string, input: SalesOrderSplitInput, auth: AuthContext): Promise<SalesOrderSplitResult> {\n return this.ctx.http.request<SalesOrderSplitResult>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/split`,\n auth,\n body: input,\n });\n }\n}\n"]}
|
package/dist/orders.d.cts
CHANGED
|
@@ -61,6 +61,49 @@ type AggregateFee = {
|
|
|
61
61
|
}>;
|
|
62
62
|
}>;
|
|
63
63
|
};
|
|
64
|
+
type OrderEntriesDto = {
|
|
65
|
+
entries: Array<{
|
|
66
|
+
/**
|
|
67
|
+
* Order entry id. Required if `productId` is not provided. Use for entry modification. Cannot be provided along with `productId`.
|
|
68
|
+
*/
|
|
69
|
+
entryId?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Id of the product added to the order. Required if `entryId` is not provided. Cannot be provided along with `entryId`.
|
|
72
|
+
*/
|
|
73
|
+
productId?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Quantity of the products added to the order. When set to `0` then such entries are removed from the order.
|
|
76
|
+
*/
|
|
77
|
+
quantity: number;
|
|
78
|
+
}>;
|
|
79
|
+
};
|
|
80
|
+
type OrderCalculationDto = {
|
|
81
|
+
/**
|
|
82
|
+
* Order recalculation DTO contains a list of entries, where each entry contains entry ID and delivered amount of items.
|
|
83
|
+
*/
|
|
84
|
+
entries?: Array<OrderCalculationEntryDto>;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Order Calculation DTO contains information to recalculate a single entry. Required information is ID of entry and (new) delivered amount of items.
|
|
88
|
+
*/
|
|
89
|
+
type OrderCalculationEntryDto = {
|
|
90
|
+
/**
|
|
91
|
+
* Unique identifier of an entry.
|
|
92
|
+
*/
|
|
93
|
+
entryId: string;
|
|
94
|
+
/**
|
|
95
|
+
* Delivered amount is the new amount of items for recalculation.
|
|
96
|
+
*/
|
|
97
|
+
deliveredAmount: number;
|
|
98
|
+
/**
|
|
99
|
+
* Delivered amount in pieces
|
|
100
|
+
*/
|
|
101
|
+
deliveredAmountInPc?: number;
|
|
102
|
+
/**
|
|
103
|
+
* The measurement unit used to present the price.
|
|
104
|
+
*/
|
|
105
|
+
unit?: string;
|
|
106
|
+
};
|
|
64
107
|
type Channel = {
|
|
65
108
|
name?: string;
|
|
66
109
|
source?: string;
|
|
@@ -757,6 +800,16 @@ type MeasurementUnit = {
|
|
|
757
800
|
*/
|
|
758
801
|
value: number;
|
|
759
802
|
};
|
|
803
|
+
/**
|
|
804
|
+
* Resource location is a response object which contains ID and link to created resource.
|
|
805
|
+
*/
|
|
806
|
+
type ResourceLocation = {
|
|
807
|
+
/**
|
|
808
|
+
* Unique identifier of the created resource.
|
|
809
|
+
*/
|
|
810
|
+
id?: string;
|
|
811
|
+
yrn?: Yrn;
|
|
812
|
+
};
|
|
760
813
|
type Vendor = {
|
|
761
814
|
/**
|
|
762
815
|
* An identifier of a vendor
|
|
@@ -911,6 +964,32 @@ type SalesOrder = {
|
|
|
911
964
|
*/
|
|
912
965
|
checkout?: boolean;
|
|
913
966
|
} & OrderUpdateDto;
|
|
967
|
+
type SalesOrderCreationDto = {
|
|
968
|
+
/**
|
|
969
|
+
* Identifier of the quote from which the order has been created
|
|
970
|
+
*/
|
|
971
|
+
quoteId?: string;
|
|
972
|
+
/**
|
|
973
|
+
* Indicates whether this order was created through checkout. Can only be provided when creating an order.
|
|
974
|
+
*
|
|
975
|
+
* When set to `true`, only one order can be created per cart ID — enforcing that a checkout cart results in a single order.
|
|
976
|
+
* Orders created through the checkout flow have this flag set to `true` by default.
|
|
977
|
+
*
|
|
978
|
+
*/
|
|
979
|
+
checkout?: boolean;
|
|
980
|
+
} & OrderCreationDto;
|
|
981
|
+
type SearchRequest = {
|
|
982
|
+
/**
|
|
983
|
+
* A standard query parameter is used to search for specific values.
|
|
984
|
+
*
|
|
985
|
+
* See: [Standard practises - Query parameter](https://developer.emporix.io/api-references/standard-practices/q-param)
|
|
986
|
+
*
|
|
987
|
+
*/
|
|
988
|
+
q?: string;
|
|
989
|
+
};
|
|
990
|
+
type OrderCreationDto = {
|
|
991
|
+
channel?: Channel;
|
|
992
|
+
} & OrderCommonDto;
|
|
914
993
|
type OrderUpdateDto = {
|
|
915
994
|
channel?: Channel;
|
|
916
995
|
/**
|
|
@@ -952,6 +1031,30 @@ type SplitInfo = {
|
|
|
952
1031
|
*/
|
|
953
1032
|
uniqueValue?: string;
|
|
954
1033
|
};
|
|
1034
|
+
/**
|
|
1035
|
+
* Information about how the order was split from the master order.
|
|
1036
|
+
*/
|
|
1037
|
+
type SplitItemResponse = {
|
|
1038
|
+
/**
|
|
1039
|
+
* An ID of a suborder.
|
|
1040
|
+
*/
|
|
1041
|
+
id?: string;
|
|
1042
|
+
/**
|
|
1043
|
+
* A unique value used to split the entries of a master order into separate suborders.
|
|
1044
|
+
*/
|
|
1045
|
+
uniqueValue?: string;
|
|
1046
|
+
};
|
|
1047
|
+
type OrderSplitRequest = {
|
|
1048
|
+
splitBy?: SplitBy;
|
|
1049
|
+
};
|
|
1050
|
+
type OrderSplitResponse = {
|
|
1051
|
+
/**
|
|
1052
|
+
* ID of the order that was split. The same as in the path.
|
|
1053
|
+
*/
|
|
1054
|
+
masterOrder?: string;
|
|
1055
|
+
splitBy?: SplitBy;
|
|
1056
|
+
subOrders?: Array<SplitItemResponse>;
|
|
1057
|
+
};
|
|
955
1058
|
/**
|
|
956
1059
|
* Status of the payment.
|
|
957
1060
|
*/
|
|
@@ -962,6 +1065,43 @@ type PaymentStatus = 'PENDING' | 'AUTHORIZATION_SUCCESS' | 'AUTHORIZATION_FAILUR
|
|
|
962
1065
|
type Transition = {
|
|
963
1066
|
status?: OrderStatus;
|
|
964
1067
|
};
|
|
1068
|
+
/**
|
|
1069
|
+
* A historical order status transition entry.
|
|
1070
|
+
*/
|
|
1071
|
+
type HistoricalTransition = {
|
|
1072
|
+
status: OrderStatus;
|
|
1073
|
+
/**
|
|
1074
|
+
* Timestamp when the status transition happened.
|
|
1075
|
+
*/
|
|
1076
|
+
timestamp: string;
|
|
1077
|
+
};
|
|
1078
|
+
/**
|
|
1079
|
+
* Metadata related to historical order status transitions.
|
|
1080
|
+
*/
|
|
1081
|
+
type HistoricalTransitionsMetadata = {
|
|
1082
|
+
/**
|
|
1083
|
+
* Version of the transition history record.
|
|
1084
|
+
*/
|
|
1085
|
+
version: number;
|
|
1086
|
+
/**
|
|
1087
|
+
* Timestamp when the transition history record was created.
|
|
1088
|
+
*/
|
|
1089
|
+
createdAt: string;
|
|
1090
|
+
/**
|
|
1091
|
+
* Timestamp when the transition history record was last modified.
|
|
1092
|
+
*/
|
|
1093
|
+
modifiedAt: string;
|
|
1094
|
+
};
|
|
1095
|
+
/**
|
|
1096
|
+
* Historical order status transitions with metadata.
|
|
1097
|
+
*/
|
|
1098
|
+
type HistoricalTransitionsResponse = {
|
|
1099
|
+
/**
|
|
1100
|
+
* Ordered list of historical status transitions.
|
|
1101
|
+
*/
|
|
1102
|
+
transitions: Array<HistoricalTransition>;
|
|
1103
|
+
metadata: HistoricalTransitionsMetadata;
|
|
1104
|
+
};
|
|
965
1105
|
type MetadataMixins = {
|
|
966
1106
|
mixins?: {
|
|
967
1107
|
[key: string]: unknown;
|
|
@@ -1729,6 +1869,42 @@ type PriceMatchDetails = {
|
|
|
1729
1869
|
* subset — so the SDK exposes a partial of it.
|
|
1730
1870
|
*/
|
|
1731
1871
|
type SalesOrderPatch = Partial<OrderUpdateDto>;
|
|
1872
|
+
/** Body for creating a sales-order as an employee (`POST /salesorders`). */
|
|
1873
|
+
type SalesOrderCreateInput = SalesOrderCreationDto;
|
|
1874
|
+
/** Id/location envelope returned when a sales-order is created. */
|
|
1875
|
+
type SalesOrderCreated = ResourceLocation;
|
|
1876
|
+
/** Body for a full sales-order replace (`PUT /salesorders/{id}`). */
|
|
1877
|
+
type SalesOrderReplaceInput = OrderUpdateDto;
|
|
1878
|
+
/** Body for `salesOrders.search` (`POST /salesorders/search`). */
|
|
1879
|
+
type SalesOrderSearchInput = SearchRequest;
|
|
1880
|
+
/** Response of `salesOrders.listHistoricalTransitions`. */
|
|
1881
|
+
type SalesOrderHistoricalTransitions = HistoricalTransitionsResponse;
|
|
1882
|
+
/** Body for `salesOrders.calculate` (`POST /salesorders/{id}/calculations`). */
|
|
1883
|
+
type SalesOrderCalculationInput = OrderCalculationDto;
|
|
1884
|
+
/** Body for `salesOrders.updateEntries` (`POST /salesorders/{id}/entries`). */
|
|
1885
|
+
type SalesOrderEntriesInput = OrderEntriesDto;
|
|
1886
|
+
/** Body for `salesOrders.split` (`POST /salesorders/{id}/split`). */
|
|
1887
|
+
type SalesOrderSplitInput = OrderSplitRequest;
|
|
1888
|
+
/** Response of `salesOrders.split`. */
|
|
1889
|
+
type SalesOrderSplitResult = OrderSplitResponse;
|
|
1890
|
+
/** Options for `salesOrders.list`. */
|
|
1891
|
+
interface ListSalesOrdersOptions {
|
|
1892
|
+
pageNumber?: number;
|
|
1893
|
+
pageSize?: number;
|
|
1894
|
+
sort?: string;
|
|
1895
|
+
fields?: string;
|
|
1896
|
+
/** A `q` filter — raw DSL string or a built filter for entity "ORDER". */
|
|
1897
|
+
q?: QueryFor<"ORDER">;
|
|
1898
|
+
}
|
|
1899
|
+
/** Options for `orders.listForLegalEntity`. */
|
|
1900
|
+
interface ListLegalEntityOrdersOptions {
|
|
1901
|
+
pageNumber?: number;
|
|
1902
|
+
pageSize?: number;
|
|
1903
|
+
sort?: string;
|
|
1904
|
+
saasToken?: string;
|
|
1905
|
+
/** A `q` filter — raw DSL string or a built filter for entity "ORDER". */
|
|
1906
|
+
q?: QueryFor<"ORDER">;
|
|
1907
|
+
}
|
|
1732
1908
|
/** Optional fields supported by the order-v2 list endpoint. */
|
|
1733
1909
|
interface ListMyOrdersOptions {
|
|
1734
1910
|
pageNumber?: number;
|
|
@@ -1777,6 +1953,19 @@ declare class OrdersService {
|
|
|
1777
1953
|
cancel(orderId: string, auth: AuthContext, opts?: {
|
|
1778
1954
|
saasToken?: string;
|
|
1779
1955
|
}): Promise<void>;
|
|
1956
|
+
/**
|
|
1957
|
+
* Lists a legal entity's orders (`GET /legal-entity-orders/{legalEntityId}`),
|
|
1958
|
+
* wrapped into `PaginatedItems`. B2B storefront view — requires a customer
|
|
1959
|
+
* token with access to the legal entity.
|
|
1960
|
+
*/
|
|
1961
|
+
listForLegalEntity(legalEntityId: string, auth: AuthContext, opts?: ListLegalEntityOrdersOptions): Promise<PaginatedItems<SalesOrder>>;
|
|
1962
|
+
/**
|
|
1963
|
+
* Fetches one order within a legal entity
|
|
1964
|
+
* (`GET /legal-entity-orders/{legalEntityId}/{orderId}`).
|
|
1965
|
+
*/
|
|
1966
|
+
getForLegalEntity(legalEntityId: string, orderId: string, auth: AuthContext, opts?: {
|
|
1967
|
+
saasToken?: string;
|
|
1968
|
+
}): Promise<SalesOrder>;
|
|
1780
1969
|
}
|
|
1781
1970
|
/**
|
|
1782
1971
|
* Backend / service-account access to the merchant-facing
|
|
@@ -1796,6 +1985,37 @@ declare class SalesOrdersService {
|
|
|
1796
1985
|
get(orderId: string, auth: AuthContext): Promise<Order>;
|
|
1797
1986
|
/** Patches an existing order (status, mixins, customAttributes, metadata). */
|
|
1798
1987
|
update(orderId: string, patch: SalesOrderPatch, auth: AuthContext, opts?: UpdateSalesOrderOptions): Promise<Order>;
|
|
1988
|
+
/** Lists tenant sales-orders (`GET /salesorders`), wrapped into `PaginatedItems`. */
|
|
1989
|
+
list(auth: AuthContext, opts?: ListSalesOrdersOptions): Promise<PaginatedItems<SalesOrder>>;
|
|
1990
|
+
/** Searches tenant sales-orders (`POST /salesorders/search`, body carries the `q` filter). */
|
|
1991
|
+
search(query: SalesOrderSearchInput, auth: AuthContext, opts?: {
|
|
1992
|
+
pageNumber?: number;
|
|
1993
|
+
pageSize?: number;
|
|
1994
|
+
sort?: string;
|
|
1995
|
+
fields?: string;
|
|
1996
|
+
}): Promise<SalesOrder[]>;
|
|
1997
|
+
/** Creates a sales-order as an employee (`POST /salesorders`). Returns the created resource location. */
|
|
1998
|
+
create(input: SalesOrderCreateInput, auth: AuthContext): Promise<SalesOrderCreated>;
|
|
1999
|
+
/**
|
|
2000
|
+
* Full-replaces a sales-order (`PUT /salesorders/{orderId}`, body `OrderUpdateDto`).
|
|
2001
|
+
* The endpoint returns 204, so the order is re-fetched (direct GET) and returned.
|
|
2002
|
+
* Note: `update` on this class is the PATCH (partial); `replace` is the PUT (full).
|
|
2003
|
+
*/
|
|
2004
|
+
replace(orderId: string, input: SalesOrderReplaceInput, auth: AuthContext): Promise<SalesOrder>;
|
|
2005
|
+
/** Deletes a sales-order (`DELETE /salesorders/{orderId}`). */
|
|
2006
|
+
delete(orderId: string, auth: AuthContext): Promise<void>;
|
|
2007
|
+
/** Lists the available transitions for a sales-order (`GET /salesorders/{orderId}/transitions`). */
|
|
2008
|
+
listTransitions(orderId: string, auth: AuthContext): Promise<Transition[]>;
|
|
2009
|
+
/** Transitions a sales-order to a new status (`POST /salesorders/{orderId}/transitions`). */
|
|
2010
|
+
transition(orderId: string, input: Transition, auth: AuthContext): Promise<void>;
|
|
2011
|
+
/** Lists the historical transitions of a sales-order (`GET /salesorders/{orderId}/historical-transitions`). */
|
|
2012
|
+
listHistoricalTransitions(orderId: string, auth: AuthContext): Promise<SalesOrderHistoricalTransitions>;
|
|
2013
|
+
/** Calculates order-entry totals for a sales-order (`POST /salesorders/{orderId}/calculations`). */
|
|
2014
|
+
calculate(orderId: string, input: SalesOrderCalculationInput, auth: AuthContext): Promise<unknown>;
|
|
2015
|
+
/** Updates a sales-order's entries (`POST /salesorders/{orderId}/entries`). Returns the updated order. */
|
|
2016
|
+
updateEntries(orderId: string, input: SalesOrderEntriesInput, auth: AuthContext): Promise<SalesOrder>;
|
|
2017
|
+
/** Splits a sales-order (`POST /salesorders/{orderId}/split`). */
|
|
2018
|
+
split(orderId: string, input: SalesOrderSplitInput, auth: AuthContext): Promise<SalesOrderSplitResult>;
|
|
1799
2019
|
}
|
|
1800
2020
|
|
|
1801
|
-
export { type GetOrderOptions, type ListMyOrdersOptions, type Order, type OrderEntry, type OrderStatus, type OrderTransitionOptions, OrdersService, type SalesOrder, type SalesOrderPatch, SalesOrdersService, type Transition, type UpdateSalesOrderOptions };
|
|
2021
|
+
export { type GetOrderOptions, type ListLegalEntityOrdersOptions, type ListMyOrdersOptions, type ListSalesOrdersOptions, type Order, type OrderEntry, type OrderStatus, type OrderTransitionOptions, OrdersService, type SalesOrder, type SalesOrderCalculationInput, type SalesOrderCreateInput, type SalesOrderCreated, type SalesOrderEntriesInput, type SalesOrderHistoricalTransitions, type SalesOrderPatch, type SalesOrderReplaceInput, type SalesOrderSearchInput, type SalesOrderSplitInput, type SalesOrderSplitResult, SalesOrdersService, type Transition, type UpdateSalesOrderOptions };
|