@viu/emporix-sdk 2.21.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 +146 -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 +215 -9
- package/dist/cart.cjs.map +1 -1
- package/dist/cart.d.cts +281 -3
- package/dist/cart.d.ts +281 -3
- package/dist/cart.js +1 -1
- package/dist/category.cjs +220 -2
- package/dist/category.cjs.map +1 -1
- package/dist/category.d.cts +408 -1
- package/dist/category.d.ts +408 -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-PYLWZZC4.js → chunk-6PJFOX3A.js} +126 -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-HBEQEIT6.js → chunk-PRN3T6TY.js} +63 -3
- package/dist/chunk-PRN3T6TY.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-YVZ6GOLE.js +399 -0
- 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/customer.cjs +61 -1
- package/dist/customer.cjs.map +1 -1
- package/dist/customer.d.cts +48 -1
- package/dist/customer.d.ts +48 -1
- package/dist/customer.js +1 -1
- package/dist/index.cjs +2566 -554
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +455 -12
- package/dist/index.d.ts +455 -12
- package/dist/index.js +687 -342
- 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 +124 -0
- package/dist/payment.cjs.map +1 -1
- package/dist/payment.d.cts +335 -1
- package/dist/payment.d.ts +335 -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-A3LYJUD4.js +0 -108
- package/dist/chunk-A3LYJUD4.js.map +0 -1
- package/dist/chunk-FZMP5NQZ.js +0 -173
- package/dist/chunk-FZMP5NQZ.js.map +0 -1
- package/dist/chunk-HBEQEIT6.js.map +0 -1
- package/dist/chunk-HD5RBCM6.js.map +0 -1
- package/dist/chunk-HUEMYP2L.js +0 -193
- package/dist/chunk-HUEMYP2L.js.map +0 -1
- package/dist/chunk-IVCCGJN5.js +0 -63
- package/dist/chunk-IVCCGJN5.js.map +0 -1
- package/dist/chunk-NE7MIZPR.js +0 -144
- package/dist/chunk-NE7MIZPR.js.map +0 -1
- package/dist/chunk-PYLWZZC4.js.map +0 -1
- package/dist/chunk-ZNLHLFQM.js +0 -160
- package/dist/chunk-ZNLHLFQM.js.map +0 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { EmporixNotFoundError } from './chunk-UWGGF4MC.js';
|
|
2
|
+
|
|
3
|
+
// src/services/availability.ts
|
|
4
|
+
var ANON = { kind: "anonymous" };
|
|
5
|
+
var SERVICE = { kind: "service" };
|
|
6
|
+
var AvailabilityService = class {
|
|
7
|
+
constructor(ctx) {
|
|
8
|
+
this.ctx = ctx;
|
|
9
|
+
}
|
|
10
|
+
ctx;
|
|
11
|
+
static channel = "availability";
|
|
12
|
+
/**
|
|
13
|
+
* Single product. Resolves the availability record, or — when
|
|
14
|
+
* `opts.defaultAvailableOnNotFound` is set — a default available record on 404.
|
|
15
|
+
*/
|
|
16
|
+
async get(productId, siteCode, auth = ANON, opts = {}) {
|
|
17
|
+
try {
|
|
18
|
+
return await this.ctx.http.request({
|
|
19
|
+
method: "GET",
|
|
20
|
+
path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(
|
|
21
|
+
productId
|
|
22
|
+
)}/${encodeURIComponent(siteCode)}`,
|
|
23
|
+
auth
|
|
24
|
+
});
|
|
25
|
+
} catch (err) {
|
|
26
|
+
if (err instanceof EmporixNotFoundError && opts.defaultAvailableOnNotFound) {
|
|
27
|
+
return { productId, site: siteCode, available: true };
|
|
28
|
+
}
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Batch read via `POST .../availability/search` (one request). Products with
|
|
34
|
+
* no availability record are absent from the response; each is synthesized as
|
|
35
|
+
* `{ available: false }` (or `{ available: true }` when
|
|
36
|
+
* `opts.defaultAvailableOnNotFound` is set). The result preserves input order
|
|
37
|
+
* and length. An empty `productIds` resolves to `[]` without a request.
|
|
38
|
+
*/
|
|
39
|
+
async getMany(productIds, siteCode, auth = ANON, opts = {}) {
|
|
40
|
+
if (productIds.length === 0) return [];
|
|
41
|
+
const found = await this.ctx.http.request({
|
|
42
|
+
method: "POST",
|
|
43
|
+
path: `/availability/${this.ctx.tenant}/availability/search`,
|
|
44
|
+
auth,
|
|
45
|
+
query: { site: siteCode, pageSize: productIds.length },
|
|
46
|
+
body: productIds,
|
|
47
|
+
idempotent: true
|
|
48
|
+
// pure read over POST — safe to replay on 5xx/429
|
|
49
|
+
});
|
|
50
|
+
const byId = /* @__PURE__ */ new Map();
|
|
51
|
+
for (const a of found) if (a.productId) byId.set(a.productId, a);
|
|
52
|
+
return productIds.map(
|
|
53
|
+
(id) => byId.get(id) ?? {
|
|
54
|
+
productId: id,
|
|
55
|
+
site: siteCode,
|
|
56
|
+
available: Boolean(opts.defaultAvailableOnNotFound)
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Lists every availability record for a site (`GET /availability/site/{site}`),
|
|
62
|
+
* wrapped into `PaginatedItems`. Default auth: anonymous.
|
|
63
|
+
*/
|
|
64
|
+
async listForSite(siteCode, params = {}, auth = ANON) {
|
|
65
|
+
const pageNumber = params.pageNumber ?? 1;
|
|
66
|
+
const pageSize = params.pageSize ?? 50;
|
|
67
|
+
const items = await this.ctx.http.request({
|
|
68
|
+
method: "GET",
|
|
69
|
+
path: `/availability/${this.ctx.tenant}/availability/site/${encodeURIComponent(siteCode)}`,
|
|
70
|
+
query: {
|
|
71
|
+
pageNumber,
|
|
72
|
+
pageSize,
|
|
73
|
+
...params.q === void 0 ? {} : { q: params.q },
|
|
74
|
+
...params.sort === void 0 ? {} : { sort: params.sort }
|
|
75
|
+
},
|
|
76
|
+
auth
|
|
77
|
+
});
|
|
78
|
+
return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };
|
|
79
|
+
}
|
|
80
|
+
// --- Admin writes. Default auth: service. ---
|
|
81
|
+
/**
|
|
82
|
+
* Creates an availability record for a product on a site
|
|
83
|
+
* (`POST /availability/{productId}/{site}`). Responds 409 when the record
|
|
84
|
+
* already exists — use {@link update} to upsert. Default auth: service.
|
|
85
|
+
*/
|
|
86
|
+
async create(productId, siteCode, input, auth = SERVICE) {
|
|
87
|
+
return this.ctx.http.request({
|
|
88
|
+
method: "POST",
|
|
89
|
+
path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(
|
|
90
|
+
productId
|
|
91
|
+
)}/${encodeURIComponent(siteCode)}`,
|
|
92
|
+
body: input,
|
|
93
|
+
auth
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Upserts a product's availability on a site
|
|
98
|
+
* (`PUT /availability/{productId}/{site}`). Returns the created record's id
|
|
99
|
+
* on 201 and nothing on 204. This endpoint has no PATCH counterpart.
|
|
100
|
+
* Default auth: service.
|
|
101
|
+
*/
|
|
102
|
+
async update(productId, siteCode, input, auth = SERVICE) {
|
|
103
|
+
return this.ctx.http.request({
|
|
104
|
+
method: "PUT",
|
|
105
|
+
path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(
|
|
106
|
+
productId
|
|
107
|
+
)}/${encodeURIComponent(siteCode)}`,
|
|
108
|
+
body: input,
|
|
109
|
+
auth
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Deletes a product's availability on a site
|
|
114
|
+
* (`DELETE /availability/{productId}/{site}`). Default auth: service.
|
|
115
|
+
*/
|
|
116
|
+
async delete(productId, siteCode, auth = SERVICE) {
|
|
117
|
+
await this.ctx.http.request({
|
|
118
|
+
method: "DELETE",
|
|
119
|
+
path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(
|
|
120
|
+
productId
|
|
121
|
+
)}/${encodeURIComponent(siteCode)}`,
|
|
122
|
+
auth
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Bulk-creates availability records (`POST /availability/bulk`). Responds 207
|
|
127
|
+
* Multi-Status: partial failures do **not** throw — inspect each entry.
|
|
128
|
+
*
|
|
129
|
+
* `options.vendorId` limits the operation to a vendor's products. It is sent
|
|
130
|
+
* as the `vendor-id` header. **Note:** the OpenAPI schema spells this header
|
|
131
|
+
* `venodr-id`, which is an evident upstream typo (the body field is
|
|
132
|
+
* `vendorId`); the SDK sends the corrected name. Unverified against the live
|
|
133
|
+
* API — if the service really expects the misspelling, the filter silently
|
|
134
|
+
* has no effect.
|
|
135
|
+
*
|
|
136
|
+
* Default auth: service.
|
|
137
|
+
*/
|
|
138
|
+
async bulkCreate(input, options = {}, auth = SERVICE) {
|
|
139
|
+
return this.ctx.http.request({
|
|
140
|
+
method: "POST",
|
|
141
|
+
path: `/availability/${this.ctx.tenant}/availability/bulk`,
|
|
142
|
+
...options.vendorId === void 0 ? {} : { headers: { "vendor-id": options.vendorId } },
|
|
143
|
+
body: input,
|
|
144
|
+
auth
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Bulk-updates availability records (`PUT /availability/bulk`). Responds 207
|
|
149
|
+
* Multi-Status: partial failures do **not** throw — inspect each entry. See
|
|
150
|
+
* {@link bulkCreate} for the `vendorId` header caveat. Default auth: service.
|
|
151
|
+
*/
|
|
152
|
+
async bulkUpdate(input, options = {}, auth = SERVICE) {
|
|
153
|
+
return this.ctx.http.request({
|
|
154
|
+
method: "PUT",
|
|
155
|
+
path: `/availability/${this.ctx.tenant}/availability/bulk`,
|
|
156
|
+
...options.vendorId === void 0 ? {} : { headers: { "vendor-id": options.vendorId } },
|
|
157
|
+
body: input,
|
|
158
|
+
auth
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Bulk-deletes availability records (`DELETE /availability/bulk`). Unusually
|
|
163
|
+
* for a DELETE, this endpoint takes a body listing the records to remove.
|
|
164
|
+
* Responds 207 Multi-Status: partial failures do **not** throw — inspect each
|
|
165
|
+
* entry. See {@link bulkCreate} for the `vendorId` header caveat. Default
|
|
166
|
+
* auth: service.
|
|
167
|
+
*/
|
|
168
|
+
async bulkDelete(input, options = {}, auth = SERVICE) {
|
|
169
|
+
return this.ctx.http.request({
|
|
170
|
+
method: "DELETE",
|
|
171
|
+
path: `/availability/${this.ctx.tenant}/availability/bulk`,
|
|
172
|
+
...options.vendorId === void 0 ? {} : { headers: { "vendor-id": options.vendorId } },
|
|
173
|
+
body: input,
|
|
174
|
+
auth
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export { AvailabilityService };
|
|
180
|
+
//# sourceMappingURL=chunk-V3275BA7.js.map
|
|
181
|
+
//# sourceMappingURL=chunk-V3275BA7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/availability.ts"],"names":[],"mappings":"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","file":"chunk-V3275BA7.js","sourcesContent":["import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\nimport type {\n Availability,\n AvailabilityInput,\n AvailabilityCreated,\n AvailabilityBulkInput,\n AvailabilityBulkDeleteInput,\n AvailabilityBulkResult,\n} from \"./availability-types\";\n\nexport type {\n Availability,\n AvailabilityInput,\n AvailabilityCreated,\n AvailabilityBulkInput,\n AvailabilityBulkDeleteInput,\n AvailabilityBulkResult,\n} from \"./availability-types\";\n\n/** Shared options for {@link AvailabilityService} reads. */\nexport interface AvailabilityOptions {\n /**\n * When `true`, a product with no availability record resolves to a default\n * `{ available: true }` instead of throwing (single `get`) / being marked\n * unavailable (`getMany`). Off by default — opt in for tenants that sell\n * without stock management.\n */\n defaultAvailableOnNotFound?: boolean;\n}\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Reads product availability per site. Default auth is anonymous (like\n * `PriceService.matchByContext`); pass a customer/raw/service context to use a\n * different token. Requires the `availability.availability_view` scope on\n * whichever token is used.\n */\nexport class AvailabilityService {\n static readonly channel = \"availability\" as const;\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Single product. Resolves the availability record, or — when\n * `opts.defaultAvailableOnNotFound` is set — a default available record on 404.\n */\n async get(\n productId: string,\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability> {\n try {\n return await this.ctx.http.request<Availability>({\n method: \"GET\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n auth,\n });\n } catch (err) {\n if (err instanceof EmporixNotFoundError && opts.defaultAvailableOnNotFound) {\n return { productId, site: siteCode, available: true };\n }\n throw err;\n }\n }\n\n /**\n * Batch read via `POST .../availability/search` (one request). Products with\n * no availability record are absent from the response; each is synthesized as\n * `{ available: false }` (or `{ available: true }` when\n * `opts.defaultAvailableOnNotFound` is set). The result preserves input order\n * and length. An empty `productIds` resolves to `[]` without a request.\n */\n async getMany(\n productIds: string[],\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability[]> {\n if (productIds.length === 0) return [];\n const found = await this.ctx.http.request<Availability[]>({\n method: \"POST\",\n path: `/availability/${this.ctx.tenant}/availability/search`,\n auth,\n query: { site: siteCode, pageSize: productIds.length },\n body: productIds,\n idempotent: true, // pure read over POST — safe to replay on 5xx/429\n });\n const byId = new Map<string, Availability>();\n for (const a of found) if (a.productId) byId.set(a.productId, a);\n return productIds.map(\n (id) =>\n byId.get(id) ?? {\n productId: id,\n site: siteCode,\n available: Boolean(opts.defaultAvailableOnNotFound),\n },\n );\n }\n\n /**\n * Lists every availability record for a site (`GET /availability/site/{site}`),\n * wrapped into `PaginatedItems`. Default auth: anonymous.\n */\n async listForSite(\n siteCode: string,\n params: { pageNumber?: number; pageSize?: number; q?: string; sort?: string } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Availability>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Availability[]>({\n method: \"GET\",\n path: `/availability/${this.ctx.tenant}/availability/site/${encodeURIComponent(siteCode)}`,\n query: {\n pageNumber,\n pageSize,\n ...(params.q === undefined ? {} : { q: params.q }),\n ...(params.sort === undefined ? {} : { sort: params.sort }),\n },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n // --- Admin writes. Default auth: service. ---\n\n /**\n * Creates an availability record for a product on a site\n * (`POST /availability/{productId}/{site}`). Responds 409 when the record\n * already exists — use {@link update} to upsert. Default auth: service.\n */\n async create(\n productId: string,\n siteCode: string,\n input: AvailabilityInput,\n auth: AuthContext = SERVICE,\n ): Promise<AvailabilityCreated> {\n return this.ctx.http.request<AvailabilityCreated>({\n method: \"POST\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n body: input,\n auth,\n });\n }\n\n /**\n * Upserts a product's availability on a site\n * (`PUT /availability/{productId}/{site}`). Returns the created record's id\n * on 201 and nothing on 204. This endpoint has no PATCH counterpart.\n * Default auth: service.\n */\n async update(\n productId: string,\n siteCode: string,\n input: AvailabilityInput,\n auth: AuthContext = SERVICE,\n ): Promise<AvailabilityCreated | void> {\n return this.ctx.http.request<AvailabilityCreated | void>({\n method: \"PUT\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n body: input,\n auth,\n });\n }\n\n /**\n * Deletes a product's availability on a site\n * (`DELETE /availability/{productId}/{site}`). Default auth: service.\n */\n async delete(productId: string, siteCode: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n auth,\n });\n }\n\n /**\n * Bulk-creates availability records (`POST /availability/bulk`). Responds 207\n * Multi-Status: partial failures do **not** throw — inspect each entry.\n *\n * `options.vendorId` limits the operation to a vendor's products. It is sent\n * as the `vendor-id` header. **Note:** the OpenAPI schema spells this header\n * `venodr-id`, which is an evident upstream typo (the body field is\n * `vendorId`); the SDK sends the corrected name. Unverified against the live\n * API — if the service really expects the misspelling, the filter silently\n * has no effect.\n *\n * Default auth: service.\n */\n async bulkCreate(\n input: AvailabilityBulkInput[],\n options: { vendorId?: string } = {},\n auth: AuthContext = SERVICE,\n ): Promise<AvailabilityBulkResult[]> {\n return this.ctx.http.request<AvailabilityBulkResult[]>({\n method: \"POST\",\n path: `/availability/${this.ctx.tenant}/availability/bulk`,\n ...(options.vendorId === undefined ? {} : { headers: { \"vendor-id\": options.vendorId } }),\n body: input,\n auth,\n });\n }\n\n /**\n * Bulk-updates availability records (`PUT /availability/bulk`). Responds 207\n * Multi-Status: partial failures do **not** throw — inspect each entry. See\n * {@link bulkCreate} for the `vendorId` header caveat. Default auth: service.\n */\n async bulkUpdate(\n input: AvailabilityBulkInput[],\n options: { vendorId?: string } = {},\n auth: AuthContext = SERVICE,\n ): Promise<AvailabilityBulkResult[]> {\n return this.ctx.http.request<AvailabilityBulkResult[]>({\n method: \"PUT\",\n path: `/availability/${this.ctx.tenant}/availability/bulk`,\n ...(options.vendorId === undefined ? {} : { headers: { \"vendor-id\": options.vendorId } }),\n body: input,\n auth,\n });\n }\n\n /**\n * Bulk-deletes availability records (`DELETE /availability/bulk`). Unusually\n * for a DELETE, this endpoint takes a body listing the records to remove.\n * Responds 207 Multi-Status: partial failures do **not** throw — inspect each\n * entry. See {@link bulkCreate} for the `vendorId` header caveat. Default\n * auth: service.\n */\n async bulkDelete(\n input: AvailabilityBulkDeleteInput[],\n options: { vendorId?: string } = {},\n auth: AuthContext = SERVICE,\n ): Promise<AvailabilityBulkResult[]> {\n return this.ctx.http.request<AvailabilityBulkResult[]>({\n method: \"DELETE\",\n path: `/availability/${this.ctx.tenant}/availability/bulk`,\n ...(options.vendorId === undefined ? {} : { headers: { \"vendor-id\": options.vendorId } }),\n body: input,\n auth,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { requireCustomer } from './chunk-3BDDYX3V.js';
|
|
2
|
+
|
|
3
|
+
// src/services/segment.ts
|
|
4
|
+
function setIfDefined(q, key, value) {
|
|
5
|
+
if (value !== void 0 && value !== "") {
|
|
6
|
+
q[key] = value;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
var SERVICE = { kind: "service" };
|
|
10
|
+
var SegmentService = class {
|
|
11
|
+
constructor(ctx, deps) {
|
|
12
|
+
this.ctx = ctx;
|
|
13
|
+
this.deps = deps;
|
|
14
|
+
}
|
|
15
|
+
ctx;
|
|
16
|
+
deps;
|
|
17
|
+
static channel = "segment";
|
|
18
|
+
static deps = ["products", "categories"];
|
|
19
|
+
base() {
|
|
20
|
+
return `/customer-segment/${this.ctx.tenant}/segments`;
|
|
21
|
+
}
|
|
22
|
+
/** Lists segments the caller belongs to (with `segment_read_own`). */
|
|
23
|
+
async list(query = {}, auth) {
|
|
24
|
+
const q = {};
|
|
25
|
+
setIfDefined(q, "q", query.q);
|
|
26
|
+
setIfDefined(q, "pageNumber", query.pageNumber);
|
|
27
|
+
setIfDefined(q, "pageSize", query.pageSize);
|
|
28
|
+
return this.ctx.http.request({
|
|
29
|
+
method: "GET",
|
|
30
|
+
path: this.base(),
|
|
31
|
+
auth: requireCustomer(auth),
|
|
32
|
+
...Object.keys(q).length ? { query: q } : {}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** Fetches a single segment by id. */
|
|
36
|
+
async get(segmentId, auth) {
|
|
37
|
+
return this.ctx.http.request({
|
|
38
|
+
method: "GET",
|
|
39
|
+
path: `${this.base()}/${segmentId}`,
|
|
40
|
+
auth: requireCustomer(auth)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/** Item assignments (PRODUCT + CATEGORY) across all the caller's active segments. */
|
|
44
|
+
async listItems(query = {}, auth) {
|
|
45
|
+
const q = {};
|
|
46
|
+
setIfDefined(q, "q", query.q);
|
|
47
|
+
setIfDefined(q, "siteCode", query.siteCode);
|
|
48
|
+
setIfDefined(q, "legalEntityId", query.legalEntityId);
|
|
49
|
+
setIfDefined(q, "pageNumber", query.pageNumber);
|
|
50
|
+
setIfDefined(q, "pageSize", query.pageSize);
|
|
51
|
+
if (query.onlyActive !== void 0) q.onlyActive = String(query.onlyActive);
|
|
52
|
+
return this.ctx.http.request({
|
|
53
|
+
method: "GET",
|
|
54
|
+
path: `${this.base()}/items`,
|
|
55
|
+
auth: requireCustomer(auth),
|
|
56
|
+
...Object.keys(q).length ? { query: q } : {}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** Item assignments of one specific segment. */
|
|
60
|
+
async listSegmentItems(segmentId, query = {}, auth) {
|
|
61
|
+
const q = {};
|
|
62
|
+
setIfDefined(q, "q", query.q);
|
|
63
|
+
setIfDefined(q, "legalEntityId", query.legalEntityId);
|
|
64
|
+
setIfDefined(q, "pageNumber", query.pageNumber);
|
|
65
|
+
setIfDefined(q, "pageSize", query.pageSize);
|
|
66
|
+
return this.ctx.http.request({
|
|
67
|
+
method: "GET",
|
|
68
|
+
path: `${this.base()}/${segmentId}/items`,
|
|
69
|
+
auth: requireCustomer(auth),
|
|
70
|
+
...Object.keys(q).length ? { query: q } : {}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/** Category tree built only from the caller's active segments. */
|
|
74
|
+
async getCategoryTree(query = {}, auth) {
|
|
75
|
+
const q = {};
|
|
76
|
+
setIfDefined(q, "siteCode", query.siteCode);
|
|
77
|
+
setIfDefined(q, "legalEntityId", query.legalEntityId);
|
|
78
|
+
return this.ctx.http.request({
|
|
79
|
+
method: "GET",
|
|
80
|
+
path: `${this.base()}/items/category-trees`,
|
|
81
|
+
auth: requireCustomer(auth),
|
|
82
|
+
...Object.keys(q).length ? { query: q } : {}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async pickItemIds(kind, query, auth) {
|
|
86
|
+
const rows = await this.listItems(query, auth);
|
|
87
|
+
const ids = [];
|
|
88
|
+
for (const r of rows) {
|
|
89
|
+
const id = r.item?.id;
|
|
90
|
+
if (r.type === kind && typeof id === "string") ids.push(id);
|
|
91
|
+
}
|
|
92
|
+
return ids;
|
|
93
|
+
}
|
|
94
|
+
/** Product ids assigned to the caller's active segments. */
|
|
95
|
+
async listMyProductIds(query, auth) {
|
|
96
|
+
return this.pickItemIds("PRODUCT", query ?? {}, auth);
|
|
97
|
+
}
|
|
98
|
+
/** Category ids assigned to the caller's active segments. */
|
|
99
|
+
async listMyCategoryIds(query, auth) {
|
|
100
|
+
return this.pickItemIds("CATEGORY", query ?? {}, auth);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Hydrates `listMyProductIds` via `ProductService.get` in parallel.
|
|
104
|
+
* Resolves in the same order as the id list. Any single failure rejects
|
|
105
|
+
* the whole batch (`Promise.all`); use the id-list method + your own
|
|
106
|
+
* tolerance strategy if partial success matters.
|
|
107
|
+
*/
|
|
108
|
+
async listMyProducts(query, auth) {
|
|
109
|
+
const pageNumber = query?.pageNumber ?? 1;
|
|
110
|
+
const pageSize = query?.pageSize ?? 20;
|
|
111
|
+
const sourceItems = await this.listItems(
|
|
112
|
+
{ ...query ?? {}, pageNumber, pageSize },
|
|
113
|
+
auth
|
|
114
|
+
);
|
|
115
|
+
const ids = [];
|
|
116
|
+
for (const r of sourceItems) {
|
|
117
|
+
if (r.type === "PRODUCT" && typeof r.item?.id === "string") ids.push(r.item.id);
|
|
118
|
+
}
|
|
119
|
+
const items = await this.deps.products.searchByIds(ids, void 0, auth);
|
|
120
|
+
return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Hydrates a page of the caller's segment CATEGORY assignments into
|
|
124
|
+
* real categories via one bulk `categories.searchByIds` call. Same
|
|
125
|
+
* `hasNextPage` semantic as `listMyProducts`.
|
|
126
|
+
*/
|
|
127
|
+
async listMyCategories(query, auth) {
|
|
128
|
+
const pageNumber = query?.pageNumber ?? 1;
|
|
129
|
+
const pageSize = query?.pageSize ?? 20;
|
|
130
|
+
const sourceItems = await this.listItems(
|
|
131
|
+
{ ...query ?? {}, pageNumber, pageSize },
|
|
132
|
+
auth
|
|
133
|
+
);
|
|
134
|
+
const ids = [];
|
|
135
|
+
for (const r of sourceItems) {
|
|
136
|
+
if (r.type === "CATEGORY" && typeof r.item?.id === "string") ids.push(r.item.id);
|
|
137
|
+
}
|
|
138
|
+
const items = await this.deps.categories.searchByIds(ids, void 0, auth);
|
|
139
|
+
return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };
|
|
140
|
+
}
|
|
141
|
+
// --- Admin CRUD (segment_manage). Default auth: service. ---
|
|
142
|
+
/** Creates a segment. Default auth: service. */
|
|
143
|
+
async create(input, authCtx = SERVICE) {
|
|
144
|
+
return this.ctx.http.request({ method: "POST", path: this.base(), auth: authCtx, body: input });
|
|
145
|
+
}
|
|
146
|
+
/** Searches segments (POST body). Default auth: service. */
|
|
147
|
+
async search(query, authCtx = SERVICE) {
|
|
148
|
+
return this.ctx.http.request({
|
|
149
|
+
method: "POST",
|
|
150
|
+
path: `${this.base()}/search`,
|
|
151
|
+
auth: authCtx,
|
|
152
|
+
body: query
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/** Full-replaces a segment (PUT). Default auth: service. */
|
|
156
|
+
async update(segmentId, input, authCtx = SERVICE) {
|
|
157
|
+
return this.ctx.http.request({
|
|
158
|
+
method: "PUT",
|
|
159
|
+
path: `${this.base()}/${segmentId}`,
|
|
160
|
+
auth: authCtx,
|
|
161
|
+
body: input
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/** Partially updates a segment (PATCH). Default auth: service. */
|
|
165
|
+
async patch(segmentId, input, authCtx = SERVICE) {
|
|
166
|
+
return this.ctx.http.request({
|
|
167
|
+
method: "PATCH",
|
|
168
|
+
path: `${this.base()}/${segmentId}`,
|
|
169
|
+
auth: authCtx,
|
|
170
|
+
body: input
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** Deletes a segment. Default auth: service. */
|
|
174
|
+
async delete(segmentId, authCtx = SERVICE) {
|
|
175
|
+
await this.ctx.http.request({
|
|
176
|
+
method: "DELETE",
|
|
177
|
+
path: `${this.base()}/${segmentId}`,
|
|
178
|
+
auth: authCtx
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/** Checks which segments the given items/customers match. Default auth: service. */
|
|
182
|
+
async match(input, authCtx = SERVICE) {
|
|
183
|
+
return this.ctx.http.request({
|
|
184
|
+
method: "POST",
|
|
185
|
+
path: `${this.base()}/match`,
|
|
186
|
+
auth: authCtx,
|
|
187
|
+
body: input
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/** Creates multiple segments. Default auth: service. */
|
|
191
|
+
async bulkCreate(inputs, authCtx = SERVICE) {
|
|
192
|
+
return this.ctx.http.request({
|
|
193
|
+
method: "POST",
|
|
194
|
+
path: `${this.base()}/bulk`,
|
|
195
|
+
auth: authCtx,
|
|
196
|
+
body: inputs
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/** Upserts multiple segments (PUT). Default auth: service. */
|
|
200
|
+
async bulkUpdate(inputs, authCtx = SERVICE) {
|
|
201
|
+
return this.ctx.http.request({
|
|
202
|
+
method: "PUT",
|
|
203
|
+
path: `${this.base()}/bulk`,
|
|
204
|
+
auth: authCtx,
|
|
205
|
+
body: inputs
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/** Deletes multiple segments (DELETE with a body of ids). Default auth: service. */
|
|
209
|
+
async bulkDelete(body, authCtx = SERVICE) {
|
|
210
|
+
return this.ctx.http.request({
|
|
211
|
+
method: "DELETE",
|
|
212
|
+
path: `${this.base()}/bulk`,
|
|
213
|
+
auth: authCtx,
|
|
214
|
+
body
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/** Customer→segment assignments (`segment_manage`). Default auth: service. */
|
|
218
|
+
customers = {
|
|
219
|
+
list: async (segmentId, query, authCtx = SERVICE) => this.ctx.http.request({
|
|
220
|
+
method: "GET",
|
|
221
|
+
path: `${this.base()}/${segmentId}/customers`,
|
|
222
|
+
auth: authCtx,
|
|
223
|
+
...query ? { query } : {}
|
|
224
|
+
}),
|
|
225
|
+
search: async (segmentId, query, authCtx = SERVICE) => this.ctx.http.request({
|
|
226
|
+
method: "POST",
|
|
227
|
+
path: `${this.base()}/${segmentId}/customers/search`,
|
|
228
|
+
auth: authCtx,
|
|
229
|
+
body: query
|
|
230
|
+
}),
|
|
231
|
+
get: async (segmentId, customerId, authCtx = SERVICE) => this.ctx.http.request({
|
|
232
|
+
method: "GET",
|
|
233
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}`,
|
|
234
|
+
auth: authCtx
|
|
235
|
+
}),
|
|
236
|
+
assign: async (segmentId, customerId, input, authCtx = SERVICE) => this.ctx.http.request({
|
|
237
|
+
method: "PUT",
|
|
238
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}`,
|
|
239
|
+
auth: authCtx,
|
|
240
|
+
body: input
|
|
241
|
+
}),
|
|
242
|
+
remove: async (segmentId, customerId, authCtx = SERVICE) => {
|
|
243
|
+
await this.ctx.http.request({
|
|
244
|
+
method: "DELETE",
|
|
245
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}`,
|
|
246
|
+
auth: authCtx
|
|
247
|
+
});
|
|
248
|
+
},
|
|
249
|
+
getForEntity: async (segmentId, customerId, legalEntityId, authCtx = SERVICE) => this.ctx.http.request({
|
|
250
|
+
method: "GET",
|
|
251
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,
|
|
252
|
+
auth: authCtx
|
|
253
|
+
}),
|
|
254
|
+
assignForEntity: async (segmentId, customerId, legalEntityId, input, authCtx = SERVICE) => this.ctx.http.request({
|
|
255
|
+
method: "PUT",
|
|
256
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,
|
|
257
|
+
auth: authCtx,
|
|
258
|
+
body: input
|
|
259
|
+
}),
|
|
260
|
+
removeForEntity: async (segmentId, customerId, legalEntityId, authCtx = SERVICE) => {
|
|
261
|
+
await this.ctx.http.request({
|
|
262
|
+
method: "DELETE",
|
|
263
|
+
path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,
|
|
264
|
+
auth: authCtx
|
|
265
|
+
});
|
|
266
|
+
},
|
|
267
|
+
bulkAssign: async (segmentId, inputs, authCtx = SERVICE) => this.ctx.http.request({
|
|
268
|
+
method: "PUT",
|
|
269
|
+
path: `${this.base()}/${segmentId}/customers/bulk`,
|
|
270
|
+
auth: authCtx,
|
|
271
|
+
body: inputs
|
|
272
|
+
}),
|
|
273
|
+
bulkRemove: async (segmentId, body, authCtx = SERVICE) => this.ctx.http.request({
|
|
274
|
+
method: "DELETE",
|
|
275
|
+
path: `${this.base()}/${segmentId}/customers/bulk`,
|
|
276
|
+
auth: authCtx,
|
|
277
|
+
body
|
|
278
|
+
})
|
|
279
|
+
};
|
|
280
|
+
/** Item→segment assignments (`type` = PRODUCT | CATEGORY). Default auth: service. */
|
|
281
|
+
items = {
|
|
282
|
+
search: async (segmentId, query, authCtx = SERVICE) => this.ctx.http.request({
|
|
283
|
+
method: "POST",
|
|
284
|
+
path: `${this.base()}/${segmentId}/items/search`,
|
|
285
|
+
auth: authCtx,
|
|
286
|
+
body: query
|
|
287
|
+
}),
|
|
288
|
+
get: async (segmentId, type, itemId, authCtx = SERVICE) => this.ctx.http.request({
|
|
289
|
+
method: "GET",
|
|
290
|
+
path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,
|
|
291
|
+
auth: authCtx
|
|
292
|
+
}),
|
|
293
|
+
assign: async (segmentId, type, itemId, input, authCtx = SERVICE) => this.ctx.http.request({
|
|
294
|
+
method: "PUT",
|
|
295
|
+
path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,
|
|
296
|
+
auth: authCtx,
|
|
297
|
+
body: input
|
|
298
|
+
}),
|
|
299
|
+
remove: async (segmentId, type, itemId, authCtx = SERVICE) => {
|
|
300
|
+
await this.ctx.http.request({
|
|
301
|
+
method: "DELETE",
|
|
302
|
+
path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,
|
|
303
|
+
auth: authCtx
|
|
304
|
+
});
|
|
305
|
+
},
|
|
306
|
+
bulkAssign: async (segmentId, type, inputs, authCtx = SERVICE) => this.ctx.http.request({
|
|
307
|
+
method: "PUT",
|
|
308
|
+
path: `${this.base()}/${segmentId}/items/${type}/bulk`,
|
|
309
|
+
auth: authCtx,
|
|
310
|
+
body: inputs
|
|
311
|
+
}),
|
|
312
|
+
bulkRemove: async (segmentId, type, body, authCtx = SERVICE) => this.ctx.http.request({
|
|
313
|
+
method: "DELETE",
|
|
314
|
+
path: `${this.base()}/${segmentId}/items/${type}/bulk`,
|
|
315
|
+
auth: authCtx,
|
|
316
|
+
body
|
|
317
|
+
})
|
|
318
|
+
};
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
export { SegmentService };
|
|
322
|
+
//# sourceMappingURL=chunk-W2KBVWJ2.js.map
|
|
323
|
+
//# sourceMappingURL=chunk-W2KBVWJ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/segment.ts"],"names":[],"mappings":"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","file":"chunk-W2KBVWJ2.js","sourcesContent":["import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type { ProductService } from \"./product\";\nimport type { CategoryService } from \"./category\";\nimport type {\n SegmentResponse,\n ItemAssignmentResponse,\n CategoryTreeResponse,\n SegmentCreation,\n SegmentUpdate,\n SegmentsSearch,\n SegmentUpdateBulk,\n Match,\n CustomerAssignmentUpsert,\n CustomerAssignmentUpsertBulk,\n CustomerAssignmentResponse,\n ItemAssignmentUpsert,\n ItemAssignmentUpsertBulk,\n BulkResponse,\n BulkAssignmentResponse,\n} from \"../generated/customer-segment\";\n\n/** Generated segment types (read shapes — storefront `segment_read_own`). */\nexport type Segment = SegmentResponse;\nexport type SegmentItem = ItemAssignmentResponse;\nexport type SegmentCategoryTree = CategoryTreeResponse;\nexport type SegmentCategoryTreeNode = CategoryTreeResponse[number];\n\n/** Create body for a segment (generated). */\nexport type SegmentInput = SegmentCreation;\n/** Full-replace (PUT) body for a segment (generated). */\nexport type SegmentUpdateInput = SegmentUpdate;\n/** Partial (PATCH) body for a segment. */\nexport type SegmentPatchInput = Partial<SegmentUpdate>;\n/** Search body for segments (generated). */\nexport type SegmentSearchQuery = SegmentsSearch;\n/** Body for a segment match check (generated). */\nexport type SegmentMatchInput = Match;\n/** One entry of a segment bulk request (generated). */\nexport type SegmentBulkItem = SegmentUpdateBulk;\n/** Per-entry result of a segment bulk operation (generated). */\nexport type SegmentBulkResult = BulkResponse;\n/** Customer→segment assignment body (generated). */\nexport type SegmentCustomerInput = CustomerAssignmentUpsert;\n/** One entry of a customer-assignment bulk request (generated). */\nexport type SegmentCustomerBulkInput = CustomerAssignmentUpsertBulk;\n/** A customer→segment assignment (read). */\nexport type SegmentCustomer = CustomerAssignmentResponse;\n/** Item→segment assignment body (generated). */\nexport type SegmentItemInput = ItemAssignmentUpsert;\n/** One entry of an item-assignment bulk request (generated). */\nexport type SegmentItemBulkInput = ItemAssignmentUpsertBulk;\n/** Per-entry result of an assignment bulk operation (generated). */\nexport type SegmentAssignmentBulkResult = BulkAssignmentResponse;\n\n/** Cross-service hydrate dependencies, injected from `EmporixClient`. */\nexport interface SegmentServiceDeps {\n products: ProductService;\n categories: CategoryService;\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/** Admin default: segment-manage operations use a service token. */\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Customer-segment reads. Every method requires a customer/raw\n * `AuthContext` — the `segment_read_own` scope is on the customer token.\n * The standard product/category endpoints do **not** auto-filter by\n * segment; the storefront uses these reads to discover what to fetch.\n */\nexport class SegmentService {\n static readonly channel = \"segment\" as const;\n static readonly deps = [\"products\", \"categories\"] as const;\n constructor(\n private readonly ctx: ClientContext,\n private readonly deps: SegmentServiceDeps,\n ) {}\n\n private base(): string {\n return `/customer-segment/${this.ctx.tenant}/segments`;\n }\n\n /** Lists segments the caller belongs to (with `segment_read_own`). */\n async list(\n query: { q?: string; pageNumber?: number; pageSize?: number } = {},\n auth?: AuthContext,\n ): Promise<Segment[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<Segment[]>({\n method: \"GET\",\n path: this.base(),\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Fetches a single segment by id. */\n async get(segmentId: string, auth?: AuthContext): Promise<Segment> {\n return this.ctx.http.request<Segment>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Item assignments (PRODUCT + CATEGORY) across all the caller's active segments. */\n async listItems(\n query: {\n q?: string;\n siteCode?: string;\n legalEntityId?: string;\n onlyActive?: boolean;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n if (query.onlyActive !== undefined) q.onlyActive = String(query.onlyActive);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Item assignments of one specific segment. */\n async listSegmentItems(\n segmentId: string,\n query: {\n q?: string;\n legalEntityId?: string;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Category tree built only from the caller's active segments. */\n async getCategoryTree(\n query: { siteCode?: string; legalEntityId?: string } = {},\n auth?: AuthContext,\n ): Promise<SegmentCategoryTree> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n return this.ctx.http.request<SegmentCategoryTree>({\n method: \"GET\",\n path: `${this.base()}/items/category-trees`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n private async pickItemIds(\n kind: \"PRODUCT\" | \"CATEGORY\",\n query: Parameters<SegmentService[\"listItems\"]>[0],\n auth: AuthContext | undefined,\n ): Promise<string[]> {\n const rows = await this.listItems(query, auth);\n const ids: string[] = [];\n for (const r of rows) {\n const id = r.item?.id;\n if (r.type === kind && typeof id === \"string\") ids.push(id);\n }\n return ids;\n }\n\n /** Product ids assigned to the caller's active segments. */\n async listMyProductIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"PRODUCT\", query ?? {}, auth);\n }\n\n /** Category ids assigned to the caller's active segments. */\n async listMyCategoryIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"CATEGORY\", query ?? {}, auth);\n }\n\n /**\n * Hydrates `listMyProductIds` via `ProductService.get` in parallel.\n * Resolves in the same order as the id list. Any single failure rejects\n * the whole batch (`Promise.all`); use the id-list method + your own\n * tolerance strategy if partial success matters.\n */\n async listMyProducts(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<ProductService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"PRODUCT\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.products.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n\n /**\n * Hydrates a page of the caller's segment CATEGORY assignments into\n * real categories via one bulk `categories.searchByIds` call. Same\n * `hasNextPage` semantic as `listMyProducts`.\n */\n async listMyCategories(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<CategoryService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"CATEGORY\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.categories.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n\n // --- Admin CRUD (segment_manage). Default auth: service. ---\n\n /** Creates a segment. Default auth: service. */\n async create(input: SegmentInput, authCtx: AuthContext = SERVICE): Promise<Segment> {\n return this.ctx.http.request<Segment>({ method: \"POST\", path: this.base(), auth: authCtx, body: input });\n }\n\n /** Searches segments (POST body). Default auth: service. */\n async search(query: SegmentSearchQuery, authCtx: AuthContext = SERVICE): Promise<Segment[]> {\n return this.ctx.http.request<Segment[]>({\n method: \"POST\",\n path: `${this.base()}/search`,\n auth: authCtx,\n body: query,\n });\n }\n\n /** Full-replaces a segment (PUT). Default auth: service. */\n async update(segmentId: string, input: SegmentUpdateInput, authCtx: AuthContext = SERVICE): Promise<Segment> {\n return this.ctx.http.request<Segment>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}`,\n auth: authCtx,\n body: input,\n });\n }\n\n /** Partially updates a segment (PATCH). Default auth: service. */\n async patch(segmentId: string, input: SegmentPatchInput, authCtx: AuthContext = SERVICE): Promise<Segment> {\n return this.ctx.http.request<Segment>({\n method: \"PATCH\",\n path: `${this.base()}/${segmentId}`,\n auth: authCtx,\n body: input,\n });\n }\n\n /** Deletes a segment. Default auth: service. */\n async delete(segmentId: string, authCtx: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}`,\n auth: authCtx,\n });\n }\n\n /** Checks which segments the given items/customers match. Default auth: service. */\n async match(input: SegmentMatchInput, authCtx: AuthContext = SERVICE): Promise<Segment[]> {\n return this.ctx.http.request<Segment[]>({\n method: \"POST\",\n path: `${this.base()}/match`,\n auth: authCtx,\n body: input,\n });\n }\n\n /** Creates multiple segments. Default auth: service. */\n async bulkCreate(inputs: SegmentBulkItem[], authCtx: AuthContext = SERVICE): Promise<SegmentBulkResult[]> {\n return this.ctx.http.request<SegmentBulkResult[]>({\n method: \"POST\",\n path: `${this.base()}/bulk`,\n auth: authCtx,\n body: inputs,\n });\n }\n\n /** Upserts multiple segments (PUT). Default auth: service. */\n async bulkUpdate(inputs: SegmentBulkItem[], authCtx: AuthContext = SERVICE): Promise<SegmentBulkResult[]> {\n return this.ctx.http.request<SegmentBulkResult[]>({\n method: \"PUT\",\n path: `${this.base()}/bulk`,\n auth: authCtx,\n body: inputs,\n });\n }\n\n /** Deletes multiple segments (DELETE with a body of ids). Default auth: service. */\n async bulkDelete(body: Record<string, unknown>, authCtx: AuthContext = SERVICE): Promise<SegmentBulkResult[]> {\n return this.ctx.http.request<SegmentBulkResult[]>({\n method: \"DELETE\",\n path: `${this.base()}/bulk`,\n auth: authCtx,\n body,\n });\n }\n\n /** Customer→segment assignments (`segment_manage`). Default auth: service. */\n readonly customers = {\n list: async (segmentId: string, query?: Record<string, string | number>, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer[]> =>\n this.ctx.http.request<SegmentCustomer[]>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/customers`,\n auth: authCtx,\n ...(query ? { query } : {}),\n }),\n search: async (segmentId: string, query: Record<string, unknown>, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer[]> =>\n this.ctx.http.request<SegmentCustomer[]>({\n method: \"POST\",\n path: `${this.base()}/${segmentId}/customers/search`,\n auth: authCtx,\n body: query,\n }),\n get: async (segmentId: string, customerId: string, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer> =>\n this.ctx.http.request<SegmentCustomer>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/customers/${customerId}`,\n auth: authCtx,\n }),\n assign: async (segmentId: string, customerId: string, input: SegmentCustomerInput, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer> =>\n this.ctx.http.request<SegmentCustomer>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}/customers/${customerId}`,\n auth: authCtx,\n body: input,\n }),\n remove: async (segmentId: string, customerId: string, authCtx: AuthContext = SERVICE): Promise<void> => {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}/customers/${customerId}`,\n auth: authCtx,\n });\n },\n getForEntity: async (segmentId: string, customerId: string, legalEntityId: string, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer> =>\n this.ctx.http.request<SegmentCustomer>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,\n auth: authCtx,\n }),\n assignForEntity: async (segmentId: string, customerId: string, legalEntityId: string, input: SegmentCustomerInput, authCtx: AuthContext = SERVICE): Promise<SegmentCustomer> =>\n this.ctx.http.request<SegmentCustomer>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,\n auth: authCtx,\n body: input,\n }),\n removeForEntity: async (segmentId: string, customerId: string, legalEntityId: string, authCtx: AuthContext = SERVICE): Promise<void> => {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}/customers/${customerId}/${legalEntityId}`,\n auth: authCtx,\n });\n },\n bulkAssign: async (segmentId: string, inputs: SegmentCustomerBulkInput[], authCtx: AuthContext = SERVICE): Promise<SegmentAssignmentBulkResult[]> =>\n this.ctx.http.request<SegmentAssignmentBulkResult[]>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}/customers/bulk`,\n auth: authCtx,\n body: inputs,\n }),\n bulkRemove: async (segmentId: string, body: Record<string, unknown>, authCtx: AuthContext = SERVICE): Promise<SegmentAssignmentBulkResult[]> =>\n this.ctx.http.request<SegmentAssignmentBulkResult[]>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}/customers/bulk`,\n auth: authCtx,\n body,\n }),\n };\n\n /** Item→segment assignments (`type` = PRODUCT | CATEGORY). Default auth: service. */\n readonly items = {\n search: async (segmentId: string, query: Record<string, unknown>, authCtx: AuthContext = SERVICE): Promise<SegmentItem[]> =>\n this.ctx.http.request<SegmentItem[]>({\n method: \"POST\",\n path: `${this.base()}/${segmentId}/items/search`,\n auth: authCtx,\n body: query,\n }),\n get: async (segmentId: string, type: string, itemId: string, authCtx: AuthContext = SERVICE): Promise<SegmentItem> =>\n this.ctx.http.request<SegmentItem>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,\n auth: authCtx,\n }),\n assign: async (segmentId: string, type: string, itemId: string, input: SegmentItemInput, authCtx: AuthContext = SERVICE): Promise<SegmentItem> =>\n this.ctx.http.request<SegmentItem>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,\n auth: authCtx,\n body: input,\n }),\n remove: async (segmentId: string, type: string, itemId: string, authCtx: AuthContext = SERVICE): Promise<void> => {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}/items/${type}/${itemId}`,\n auth: authCtx,\n });\n },\n bulkAssign: async (segmentId: string, type: string, inputs: SegmentItemBulkInput[], authCtx: AuthContext = SERVICE): Promise<SegmentAssignmentBulkResult[]> =>\n this.ctx.http.request<SegmentAssignmentBulkResult[]>({\n method: \"PUT\",\n path: `${this.base()}/${segmentId}/items/${type}/bulk`,\n auth: authCtx,\n body: inputs,\n }),\n bulkRemove: async (segmentId: string, type: string, body: Record<string, unknown>, authCtx: AuthContext = SERVICE): Promise<SegmentAssignmentBulkResult[]> =>\n this.ctx.http.request<SegmentAssignmentBulkResult[]>({\n method: \"DELETE\",\n path: `${this.base()}/${segmentId}/items/${type}/bulk`,\n auth: authCtx,\n body,\n }),\n };\n}\n"]}
|