@edgebound/bigcommerce 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-PAXNZ36X.mjs → chunk-V2WZ3SDN.mjs} +10 -3
- package/dist/chunk-V2WZ3SDN.mjs.map +1 -0
- package/dist/companies.d.mts +115 -1
- package/dist/companies.d.ts +115 -1
- package/dist/companies.js +125 -13
- package/dist/companies.js.map +1 -1
- package/dist/companies.mjs +111 -12
- package/dist/companies.mjs.map +1 -1
- package/dist/customers.d.mts +79 -1
- package/dist/customers.d.ts +79 -1
- package/dist/customers.js +143 -45
- package/dist/customers.js.map +1 -1
- package/dist/customers.mjs +131 -44
- package/dist/customers.mjs.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/orders.js +9 -2
- package/dist/orders.js.map +1 -1
- package/dist/orders.mjs +1 -1
- package/dist/payments.js +9 -2
- package/dist/payments.js.map +1 -1
- package/dist/payments.mjs +1 -1
- package/dist/priceLists.js +9 -2
- package/dist/priceLists.js.map +1 -1
- package/dist/priceLists.mjs +1 -1
- package/dist/products.js +9 -2
- package/dist/products.js.map +1 -1
- package/dist/products.mjs +1 -1
- package/dist/salesStaff.js +9 -2
- package/dist/salesStaff.js.map +1 -1
- package/dist/salesStaff.mjs +1 -1
- package/dist/webhooks.d.mts +6 -4
- package/dist/webhooks.d.ts +6 -4
- package/dist/webhooks.js +5 -3
- package/dist/webhooks.js.map +1 -1
- package/dist/webhooks.mjs +5 -3
- package/dist/webhooks.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-PAXNZ36X.mjs.map +0 -1
package/dist/customers.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
BigCommerceFetcher,
|
|
6
6
|
DEFAULTS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-V2WZ3SDN.mjs";
|
|
8
8
|
|
|
9
9
|
// src/bigcommerce-entities/customers/create-customer-group.ts
|
|
10
10
|
import { Effect } from "effect";
|
|
@@ -64,53 +64,136 @@ var createCustomerGroup = (data) => Effect.gen(function* () {
|
|
|
64
64
|
);
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
-
// src/bigcommerce-entities/customers/find-
|
|
67
|
+
// src/bigcommerce-entities/customers/find-customer-addresses.ts
|
|
68
68
|
import { Effect as Effect2 } from "effect";
|
|
69
69
|
import { stringify } from "querystring";
|
|
70
70
|
|
|
71
|
-
// src/bigcommerce-entities/customers/schemas/
|
|
71
|
+
// src/bigcommerce-entities/customers/schemas/find-addresses.schema.ts
|
|
72
72
|
import * as z2 from "zod";
|
|
73
|
-
var
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
phone: z2.string(),
|
|
79
|
-
customer_group_id: z2.int(),
|
|
80
|
-
id: z2.int(),
|
|
81
|
-
channel_ids: z2.array(z2.int())
|
|
73
|
+
var FindCustomerAddressesCriteriaSchema = z2.object({
|
|
74
|
+
"id:in": z2.int().array().transform((ids) => ids.join(",")).optional(),
|
|
75
|
+
page: z2.int().optional(),
|
|
76
|
+
limit: z2.int().optional(),
|
|
77
|
+
"customer_id:in": z2.int().array().transform((ids) => ids.join(",")).optional()
|
|
82
78
|
});
|
|
83
|
-
var
|
|
84
|
-
data: z2.
|
|
79
|
+
var FindCustomerAddressesResponseSchema = z2.object({
|
|
80
|
+
data: z2.object({
|
|
81
|
+
address1: z2.string(),
|
|
82
|
+
address2: z2.string(),
|
|
83
|
+
address_type: z2.string(),
|
|
84
|
+
city: z2.string(),
|
|
85
|
+
company: z2.string(),
|
|
86
|
+
country: z2.string(),
|
|
87
|
+
country_code: z2.string(),
|
|
88
|
+
customer_id: z2.number(),
|
|
89
|
+
first_name: z2.string(),
|
|
90
|
+
id: z2.int(),
|
|
91
|
+
last_name: z2.string(),
|
|
92
|
+
phone: z2.string(),
|
|
93
|
+
postal_code: z2.string(),
|
|
94
|
+
state_or_province: z2.string()
|
|
95
|
+
}).array(),
|
|
85
96
|
meta: z2.object({
|
|
86
97
|
pagination: z2.object({
|
|
87
98
|
total: z2.int(),
|
|
88
99
|
count: z2.int(),
|
|
89
100
|
per_page: z2.int(),
|
|
90
101
|
current_page: z2.int(),
|
|
91
|
-
total_pages: z2.int()
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
total_pages: z2.int()
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// src/bigcommerce-entities/customers/find-customer-addresses.ts
|
|
108
|
+
var findCustomerAddresses = (criteria) => {
|
|
109
|
+
return Effect2.gen(function* () {
|
|
110
|
+
const fetcher = yield* BigCommerceFetcher;
|
|
111
|
+
const validatedQuery = yield* validateInput(
|
|
112
|
+
FindCustomerAddressesCriteriaSchema,
|
|
113
|
+
criteria ?? {}
|
|
114
|
+
);
|
|
115
|
+
return yield* Effect2.retry(
|
|
116
|
+
fetcher.fetch({
|
|
117
|
+
method: "GET",
|
|
118
|
+
path: `customers/addresses`,
|
|
119
|
+
isB2B: false,
|
|
120
|
+
version: "v3",
|
|
121
|
+
resultSchema: FindCustomerAddressesResponseSchema,
|
|
122
|
+
query: stringify(validatedQuery)
|
|
123
|
+
}),
|
|
124
|
+
DEFAULTS.retry.policy
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
var getAllCustomerAddressesBy = (criteria) => {
|
|
129
|
+
return Effect2.gen(function* () {
|
|
130
|
+
const all = [];
|
|
131
|
+
let page = 1;
|
|
132
|
+
let hasMore = true;
|
|
133
|
+
while (hasMore) {
|
|
134
|
+
const data = yield* findCustomerAddresses({
|
|
135
|
+
...criteria,
|
|
136
|
+
page,
|
|
137
|
+
limit: DEFAULTS.customers.getBatchSize
|
|
138
|
+
});
|
|
139
|
+
if (data.meta.pagination.total_pages > page) {
|
|
140
|
+
all.push(...data.data);
|
|
141
|
+
page++;
|
|
142
|
+
} else {
|
|
143
|
+
hasMore = false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return all;
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// src/bigcommerce-entities/customers/find-customers.ts
|
|
151
|
+
import { Effect as Effect3 } from "effect";
|
|
152
|
+
import { stringify as stringify2 } from "querystring";
|
|
153
|
+
|
|
154
|
+
// src/bigcommerce-entities/customers/schemas/customer.schema.ts
|
|
155
|
+
import * as z3 from "zod";
|
|
156
|
+
var CustomerSchema = z3.object({
|
|
157
|
+
email: z3.email(),
|
|
158
|
+
first_name: z3.string(),
|
|
159
|
+
last_name: z3.string(),
|
|
160
|
+
company: z3.string().optional(),
|
|
161
|
+
phone: z3.string(),
|
|
162
|
+
customer_group_id: z3.int(),
|
|
163
|
+
id: z3.int(),
|
|
164
|
+
channel_ids: z3.array(z3.int())
|
|
165
|
+
});
|
|
166
|
+
var FindCustomerResponse = z3.object({
|
|
167
|
+
data: z3.array(CustomerSchema),
|
|
168
|
+
meta: z3.object({
|
|
169
|
+
pagination: z3.object({
|
|
170
|
+
total: z3.int(),
|
|
171
|
+
count: z3.int(),
|
|
172
|
+
per_page: z3.int(),
|
|
173
|
+
current_page: z3.int(),
|
|
174
|
+
total_pages: z3.int(),
|
|
175
|
+
links: z3.object({
|
|
176
|
+
previous: z3.string().optional().nullable(),
|
|
177
|
+
current: z3.string(),
|
|
178
|
+
next: z3.string().optional().nullable()
|
|
96
179
|
})
|
|
97
180
|
})
|
|
98
181
|
})
|
|
99
182
|
});
|
|
100
183
|
|
|
101
184
|
// src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts
|
|
102
|
-
import * as
|
|
103
|
-
var FindCustomersCriteriaSchema =
|
|
104
|
-
"id:in":
|
|
105
|
-
page:
|
|
106
|
-
limit:
|
|
107
|
-
"company:in":
|
|
108
|
-
"customer_group_id:in":
|
|
185
|
+
import * as z4 from "zod";
|
|
186
|
+
var FindCustomersCriteriaSchema = z4.object({
|
|
187
|
+
"id:in": z4.array(z4.int()).transform((ids) => ids.join(",")).optional(),
|
|
188
|
+
page: z4.int().optional(),
|
|
189
|
+
limit: z4.int().optional(),
|
|
190
|
+
"company:in": z4.array(z4.string()).transform((companies) => companies.join(",")).optional(),
|
|
191
|
+
"customer_group_id:in": z4.array(z4.int()).transform((ids) => ids.join(",")).optional()
|
|
109
192
|
});
|
|
110
193
|
|
|
111
194
|
// src/bigcommerce-entities/customers/find-customers.ts
|
|
112
195
|
var findCustomers = (criteria) => {
|
|
113
|
-
return
|
|
196
|
+
return Effect3.gen(function* () {
|
|
114
197
|
const fetcher = yield* BigCommerceFetcher;
|
|
115
198
|
const validatedQuery = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});
|
|
116
199
|
return yield* fetcher.fetch({
|
|
@@ -119,12 +202,12 @@ var findCustomers = (criteria) => {
|
|
|
119
202
|
isB2B: false,
|
|
120
203
|
version: "v3",
|
|
121
204
|
resultSchema: FindCustomerResponse,
|
|
122
|
-
query:
|
|
205
|
+
query: stringify2(validatedQuery)
|
|
123
206
|
});
|
|
124
207
|
});
|
|
125
208
|
};
|
|
126
209
|
var getAllCustomersBy = (criteria) => {
|
|
127
|
-
return
|
|
210
|
+
return Effect3.gen(function* () {
|
|
128
211
|
const allCustomers = [];
|
|
129
212
|
let page = 1;
|
|
130
213
|
let hasMoreCustomers = true;
|
|
@@ -146,15 +229,15 @@ var getAllCustomersBy = (criteria) => {
|
|
|
146
229
|
};
|
|
147
230
|
|
|
148
231
|
// src/bigcommerce-entities/customers/get-all-customer-groups.ts
|
|
149
|
-
import { Effect as
|
|
150
|
-
import { stringify as
|
|
151
|
-
import * as
|
|
152
|
-
var FindCustomerResponse2 =
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
232
|
+
import { Effect as Effect4 } from "effect";
|
|
233
|
+
import { stringify as stringify3 } from "querystring";
|
|
234
|
+
import * as z5 from "zod";
|
|
235
|
+
var FindCustomerResponse2 = z5.union([
|
|
236
|
+
z5.array(CustomerGroupSchema),
|
|
237
|
+
z5.literal(""),
|
|
238
|
+
z5.literal(null)
|
|
156
239
|
]);
|
|
157
|
-
var findCustomersGroups = (criteria) =>
|
|
240
|
+
var findCustomersGroups = (criteria) => Effect4.gen(function* () {
|
|
158
241
|
const fetcher = yield* BigCommerceFetcher;
|
|
159
242
|
const validatedQuery = yield* validateInput(FindCustomerGroupsCriteriaSchema, criteria ?? {});
|
|
160
243
|
const response = yield* fetcher.fetch({
|
|
@@ -163,11 +246,11 @@ var findCustomersGroups = (criteria) => Effect3.gen(function* () {
|
|
|
163
246
|
isB2B: false,
|
|
164
247
|
version: "v3",
|
|
165
248
|
resultSchema: FindCustomerResponse2,
|
|
166
|
-
query:
|
|
249
|
+
query: stringify3(validatedQuery)
|
|
167
250
|
});
|
|
168
251
|
return response || [];
|
|
169
252
|
});
|
|
170
|
-
var getAllCustomerGroupsBy = (criteria) =>
|
|
253
|
+
var getAllCustomerGroupsBy = (criteria) => Effect4.gen(function* () {
|
|
171
254
|
const all = [];
|
|
172
255
|
let page = 1;
|
|
173
256
|
let hasMore = true;
|
|
@@ -188,19 +271,19 @@ var getAllCustomerGroupsBy = (criteria) => Effect3.gen(function* () {
|
|
|
188
271
|
});
|
|
189
272
|
|
|
190
273
|
// src/bigcommerce-entities/customers/get-customer.ts
|
|
191
|
-
import { Effect as
|
|
274
|
+
import { Effect as Effect5 } from "effect";
|
|
192
275
|
var getCustomer = (customerId) => {
|
|
193
276
|
return findCustomers({
|
|
194
277
|
"id:in": [customerId]
|
|
195
|
-
}).pipe(
|
|
278
|
+
}).pipe(Effect5.map((response) => response.data[0]));
|
|
196
279
|
};
|
|
197
280
|
|
|
198
281
|
// src/bigcommerce-entities/customers/set-customer-group-price-list.ts
|
|
199
|
-
import { Effect as
|
|
200
|
-
var setCustomerGroupPriceList = (input) =>
|
|
282
|
+
import { Effect as Effect6 } from "effect";
|
|
283
|
+
var setCustomerGroupPriceList = (input) => Effect6.gen(function* () {
|
|
201
284
|
const { customerGroupId, data } = yield* validateInput(SetCustomerGroupPriceListSchema, input);
|
|
202
285
|
const fetcher = yield* BigCommerceFetcher;
|
|
203
|
-
return yield*
|
|
286
|
+
return yield* Effect6.retry(
|
|
204
287
|
fetcher.fetch({
|
|
205
288
|
body: data,
|
|
206
289
|
isB2B: false,
|
|
@@ -217,14 +300,18 @@ export {
|
|
|
217
300
|
CreateCustomerGroupSchema,
|
|
218
301
|
CustomerGroupSchema,
|
|
219
302
|
CustomerSchema,
|
|
303
|
+
FindCustomerAddressesCriteriaSchema,
|
|
304
|
+
FindCustomerAddressesResponseSchema,
|
|
220
305
|
FindCustomerGroupsCriteriaSchema,
|
|
221
306
|
FindCustomerResponse,
|
|
222
307
|
FindCustomersCriteriaSchema,
|
|
223
308
|
SetCustomerGroupPriceListResponseSchema,
|
|
224
309
|
SetCustomerGroupPriceListSchema,
|
|
225
310
|
createCustomerGroup,
|
|
311
|
+
findCustomerAddresses,
|
|
226
312
|
findCustomers,
|
|
227
313
|
findCustomersGroups,
|
|
314
|
+
getAllCustomerAddressesBy,
|
|
228
315
|
getAllCustomerGroupsBy,
|
|
229
316
|
getAllCustomersBy,
|
|
230
317
|
getCustomer,
|
package/dist/customers.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bigcommerce-entities/customers/create-customer-group.ts","../src/bigcommerce-entities/customers/schemas/customer-group.schema.ts","../src/bigcommerce-entities/customers/find-customers.ts","../src/bigcommerce-entities/customers/schemas/customer.schema.ts","../src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts","../src/bigcommerce-entities/customers/get-all-customer-groups.ts","../src/bigcommerce-entities/customers/get-customer.ts","../src/bigcommerce-entities/customers/set-customer-group-price-list.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n CreateCustomerGroupResponseSchema,\n CreateCustomerGroupSchema,\n} from './schemas/customer-group.schema';\nexport const createCustomerGroup = (data: z.input<typeof CreateCustomerGroupSchema>) =>\n Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedBody = yield* validateInput(CreateCustomerGroupSchema, data);\n return yield* Effect.retry(\n fetcher.fetch({\n body: validatedBody,\n isB2B: false,\n method: 'POST',\n path: 'customer_groups',\n resultSchema: CreateCustomerGroupResponseSchema,\n version: 'v2',\n }),\n DEFAULTS.retry.policy,\n );\n });\n","import * as z from 'zod';\nimport { DEFAULTS } from '../../../constants';\nexport const CreateCustomerGroupSchema = z.object({\n name: z.string(),\n discount_rules: z.array(\n z.object({\n type: z.literal('price_list'),\n price_list_id: z.int(),\n }),\n ),\n});\n\nexport const CreateCustomerGroupResponseSchema = z.object({\n id: z.int(),\n});\n\nexport const CustomerGroupSchema = z.object({\n id: z.int(),\n name: z.string(),\n is_default: z.boolean(),\n is_group_for_guests: z.boolean(),\n});\n\nexport const FindCustomerGroupsCriteriaSchema = z.object({\n limit: z.int().max(DEFAULTS.customers.getBatchSize).optional(),\n page: z.int().positive().optional(),\n});\n\nexport const SetCustomerGroupPriceListSchema = z.object({\n data: z.object({\n discount_rules: z\n .object({\n type: z.literal('price_list'),\n price_list_id: z.int(),\n })\n .array(),\n }),\n customerGroupId: z.int(),\n});\n\nexport const SetCustomerGroupPriceListResponseSchema = z.object({\n id: z.int(),\n name: z.string(),\n});\n","import { Effect } from 'effect';\nimport { stringify } from 'node:querystring';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport { FindCustomerResponse, type CustomerSchema } from './schemas/customer.schema';\nimport { FindCustomersCriteriaSchema } from './schemas/find-customer.criteria';\nexport const findCustomers = (criteria?: z.input<typeof FindCustomersCriteriaSchema>) => {\n return Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedQuery = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});\n return yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query: stringify(validatedQuery),\n });\n });\n};\n\nexport const getAllCustomersBy = (\n criteria: Omit<z.input<typeof FindCustomersCriteriaSchema>, 'page' | 'limit'>,\n) => {\n return Effect.gen(function* () {\n const allCustomers: z.infer<typeof CustomerSchema>[] = [];\n let page = 1;\n let hasMoreCustomers = true;\n\n while (hasMoreCustomers) {\n const customers = yield* findCustomers({\n ...criteria,\n page,\n limit: DEFAULTS.customers.getBatchSize,\n });\n\n if (customers.meta.pagination.links.next) {\n allCustomers.push(...customers.data);\n page++;\n } else {\n hasMoreCustomers = false;\n }\n }\n\n return allCustomers;\n });\n};\n","import * as z from 'zod';\n\nexport const CustomerSchema = z.object({\n email: z.email(),\n first_name: z.string(),\n last_name: z.string(),\n company: z.string().optional(),\n phone: z.string(),\n customer_group_id: z.int(),\n id: z.int(),\n channel_ids: z.array(z.int()),\n});\n\nexport const FindCustomerResponse = z.object({\n data: z.array(CustomerSchema),\n meta: z.object({\n pagination: z.object({\n total: z.int(),\n count: z.int(),\n per_page: z.int(),\n current_page: z.int(),\n total_pages: z.int(),\n links: z.object({\n previous: z.string().optional().nullable(),\n current: z.string(),\n next: z.string().optional().nullable(),\n }),\n }),\n }),\n});\n","import * as z from 'zod';\nexport const FindCustomersCriteriaSchema = z.object({\n 'id:in': z\n .array(z.int())\n .transform((ids) => ids.join(','))\n .optional(),\n page: z.int().optional(),\n limit: z.int().optional(),\n 'company:in': z\n .array(z.string())\n .transform((companies) => companies.join(','))\n .optional(),\n 'customer_group_id:in': z\n .array(z.int())\n .transform((ids) => ids.join(','))\n .optional(),\n});\n","import { Effect } from 'effect';\nimport { stringify } from 'node:querystring';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n CustomerGroupSchema,\n FindCustomerGroupsCriteriaSchema,\n} from './schemas/customer-group.schema';\nconst FindCustomerResponse = z.union([\n z.array(CustomerGroupSchema),\n z.literal(''),\n z.literal(null),\n]);\nexport const findCustomersGroups = (criteria?: z.input<typeof FindCustomerGroupsCriteriaSchema>) =>\n Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedQuery = yield* validateInput(FindCustomerGroupsCriteriaSchema, criteria ?? {});\n const response = yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query: stringify(validatedQuery),\n });\n return response || [];\n });\n\nexport const getAllCustomerGroupsBy = (\n criteria?: Omit<z.input<typeof FindCustomerGroupsCriteriaSchema>, 'page' | 'limit'>,\n) =>\n Effect.gen(function* () {\n const all: z.infer<typeof CustomerGroupSchema>[] = [];\n let page = 1;\n let hasMore = true;\n\n while (hasMore) {\n const groups = yield* findCustomersGroups({\n ...criteria,\n page,\n limit: DEFAULTS.customers.getBatchSize,\n });\n\n if (groups.length) {\n all.push(...groups);\n page++;\n } else {\n hasMore = false;\n }\n }\n\n return all;\n });\n","import { Effect } from 'effect';\nimport { findCustomers } from './find-customers';\n\nexport const getCustomer = (customerId: number) => {\n return findCustomers({\n 'id:in': [customerId],\n }).pipe(Effect.map((response) => response.data[0]));\n};\n","import { Effect } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n SetCustomerGroupPriceListResponseSchema,\n SetCustomerGroupPriceListSchema,\n} from './schemas/customer-group.schema';\nexport const setCustomerGroupPriceList = (input: z.input<typeof SetCustomerGroupPriceListSchema>) =>\n Effect.gen(function* () {\n const { customerGroupId, data } = yield* validateInput(SetCustomerGroupPriceListSchema, input);\n const fetcher = yield* BigCommerceFetcher;\n\n return yield* Effect.retry(\n fetcher.fetch({\n body: data,\n isB2B: false,\n method: 'PUT',\n path: `customer_groups/${customerGroupId}`,\n resultSchema: SetCustomerGroupPriceListResponseSchema,\n version: 'v2',\n }),\n DEFAULTS.retry.policy,\n );\n });\n"],"mappings":"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","names":["Effect","z","z","Effect","Effect","stringify","z","FindCustomerResponse","Effect","stringify","Effect","Effect","Effect","Effect"]}
|
|
1
|
+
{"version":3,"sources":["../src/bigcommerce-entities/customers/create-customer-group.ts","../src/bigcommerce-entities/customers/schemas/customer-group.schema.ts","../src/bigcommerce-entities/customers/find-customer-addresses.ts","../src/bigcommerce-entities/customers/schemas/find-addresses.schema.ts","../src/bigcommerce-entities/customers/find-customers.ts","../src/bigcommerce-entities/customers/schemas/customer.schema.ts","../src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts","../src/bigcommerce-entities/customers/get-all-customer-groups.ts","../src/bigcommerce-entities/customers/get-customer.ts","../src/bigcommerce-entities/customers/set-customer-group-price-list.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n CreateCustomerGroupResponseSchema,\n CreateCustomerGroupSchema,\n} from './schemas/customer-group.schema';\nexport const createCustomerGroup = (data: z.input<typeof CreateCustomerGroupSchema>) =>\n Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedBody = yield* validateInput(CreateCustomerGroupSchema, data);\n return yield* Effect.retry(\n fetcher.fetch({\n body: validatedBody,\n isB2B: false,\n method: 'POST',\n path: 'customer_groups',\n resultSchema: CreateCustomerGroupResponseSchema,\n version: 'v2',\n }),\n DEFAULTS.retry.policy,\n );\n });\n","import * as z from 'zod';\nimport { DEFAULTS } from '../../../constants';\nexport const CreateCustomerGroupSchema = z.object({\n name: z.string(),\n discount_rules: z.array(\n z.object({\n type: z.literal('price_list'),\n price_list_id: z.int(),\n }),\n ),\n});\n\nexport const CreateCustomerGroupResponseSchema = z.object({\n id: z.int(),\n});\n\nexport const CustomerGroupSchema = z.object({\n id: z.int(),\n name: z.string(),\n is_default: z.boolean(),\n is_group_for_guests: z.boolean(),\n});\n\nexport const FindCustomerGroupsCriteriaSchema = z.object({\n limit: z.int().max(DEFAULTS.customers.getBatchSize).optional(),\n page: z.int().positive().optional(),\n});\n\nexport const SetCustomerGroupPriceListSchema = z.object({\n data: z.object({\n discount_rules: z\n .object({\n type: z.literal('price_list'),\n price_list_id: z.int(),\n })\n .array(),\n }),\n customerGroupId: z.int(),\n});\n\nexport const SetCustomerGroupPriceListResponseSchema = z.object({\n id: z.int(),\n name: z.string(),\n});\n","import { Effect } from 'effect';\nimport { stringify } from 'node:querystring';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n FindCustomerAddressesCriteriaSchema,\n FindCustomerAddressesResponseSchema,\n} from './schemas/find-addresses.schema';\n\nexport const findCustomerAddresses = (\n criteria?: z.input<typeof FindCustomerAddressesCriteriaSchema>,\n) => {\n return Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedQuery = yield* validateInput(\n FindCustomerAddressesCriteriaSchema,\n criteria ?? {},\n );\n return yield* Effect.retry(\n fetcher.fetch({\n method: 'GET',\n path: `customers/addresses`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerAddressesResponseSchema,\n query: stringify(validatedQuery),\n }),\n DEFAULTS.retry.policy,\n );\n });\n};\n\nexport const getAllCustomerAddressesBy = (\n criteria: Omit<z.input<typeof FindCustomerAddressesCriteriaSchema>, 'page' | 'limit'>,\n) => {\n return Effect.gen(function* () {\n const all: z.infer<typeof FindCustomerAddressesResponseSchema>['data'] = [];\n let page = 1;\n let hasMore = true;\n\n while (hasMore) {\n const data = yield* findCustomerAddresses({\n ...criteria,\n page,\n limit: DEFAULTS.customers.getBatchSize,\n });\n\n if (data.meta.pagination.total_pages > page) {\n all.push(...data.data);\n page++;\n } else {\n hasMore = false;\n }\n }\n\n return all;\n });\n};\n","import * as z from 'zod';\nexport const FindCustomerAddressesCriteriaSchema = z.object({\n 'id:in': z\n .int()\n .array()\n .transform((ids) => ids.join(','))\n .optional(),\n page: z.int().optional(),\n limit: z.int().optional(),\n 'customer_id:in': z\n .int()\n .array()\n .transform((ids) => ids.join(','))\n .optional(),\n});\n\nexport const FindCustomerAddressesResponseSchema = z.object({\n data: z\n .object({\n address1: z.string(),\n address2: z.string(),\n address_type: z.string(),\n city: z.string(),\n company: z.string(),\n country: z.string(),\n country_code: z.string(),\n customer_id: z.number(),\n first_name: z.string(),\n id: z.int(),\n last_name: z.string(),\n phone: z.string(),\n postal_code: z.string(),\n state_or_province: z.string(),\n })\n .array(),\n meta: z.object({\n pagination: z.object({\n total: z.int(),\n count: z.int(),\n per_page: z.int(),\n current_page: z.int(),\n total_pages: z.int(),\n }),\n }),\n});\n","import { Effect } from 'effect';\nimport { stringify } from 'node:querystring';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport { FindCustomerResponse, type CustomerSchema } from './schemas/customer.schema';\nimport { FindCustomersCriteriaSchema } from './schemas/find-customer.criteria';\nexport const findCustomers = (criteria?: z.input<typeof FindCustomersCriteriaSchema>) => {\n return Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedQuery = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});\n return yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query: stringify(validatedQuery),\n });\n });\n};\n\nexport const getAllCustomersBy = (\n criteria: Omit<z.input<typeof FindCustomersCriteriaSchema>, 'page' | 'limit'>,\n) => {\n return Effect.gen(function* () {\n const allCustomers: z.infer<typeof CustomerSchema>[] = [];\n let page = 1;\n let hasMoreCustomers = true;\n\n while (hasMoreCustomers) {\n const customers = yield* findCustomers({\n ...criteria,\n page,\n limit: DEFAULTS.customers.getBatchSize,\n });\n\n if (customers.meta.pagination.links.next) {\n allCustomers.push(...customers.data);\n page++;\n } else {\n hasMoreCustomers = false;\n }\n }\n\n return allCustomers;\n });\n};\n","import * as z from 'zod';\n\nexport const CustomerSchema = z.object({\n email: z.email(),\n first_name: z.string(),\n last_name: z.string(),\n company: z.string().optional(),\n phone: z.string(),\n customer_group_id: z.int(),\n id: z.int(),\n channel_ids: z.array(z.int()),\n});\n\nexport const FindCustomerResponse = z.object({\n data: z.array(CustomerSchema),\n meta: z.object({\n pagination: z.object({\n total: z.int(),\n count: z.int(),\n per_page: z.int(),\n current_page: z.int(),\n total_pages: z.int(),\n links: z.object({\n previous: z.string().optional().nullable(),\n current: z.string(),\n next: z.string().optional().nullable(),\n }),\n }),\n }),\n});\n","import * as z from 'zod';\nexport const FindCustomersCriteriaSchema = z.object({\n 'id:in': z\n .array(z.int())\n .transform((ids) => ids.join(','))\n .optional(),\n page: z.int().optional(),\n limit: z.int().optional(),\n 'company:in': z\n .array(z.string())\n .transform((companies) => companies.join(','))\n .optional(),\n 'customer_group_id:in': z\n .array(z.int())\n .transform((ids) => ids.join(','))\n .optional(),\n});\n","import { Effect } from 'effect';\nimport { stringify } from 'node:querystring';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n CustomerGroupSchema,\n FindCustomerGroupsCriteriaSchema,\n} from './schemas/customer-group.schema';\nconst FindCustomerResponse = z.union([\n z.array(CustomerGroupSchema),\n z.literal(''),\n z.literal(null),\n]);\nexport const findCustomersGroups = (criteria?: z.input<typeof FindCustomerGroupsCriteriaSchema>) =>\n Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedQuery = yield* validateInput(FindCustomerGroupsCriteriaSchema, criteria ?? {});\n const response = yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query: stringify(validatedQuery),\n });\n return response || [];\n });\n\nexport const getAllCustomerGroupsBy = (\n criteria?: Omit<z.input<typeof FindCustomerGroupsCriteriaSchema>, 'page' | 'limit'>,\n) =>\n Effect.gen(function* () {\n const all: z.infer<typeof CustomerGroupSchema>[] = [];\n let page = 1;\n let hasMore = true;\n\n while (hasMore) {\n const groups = yield* findCustomersGroups({\n ...criteria,\n page,\n limit: DEFAULTS.customers.getBatchSize,\n });\n\n if (groups.length) {\n all.push(...groups);\n page++;\n } else {\n hasMore = false;\n }\n }\n\n return all;\n });\n","import { Effect } from 'effect';\nimport { findCustomers } from './find-customers';\n\nexport const getCustomer = (customerId: number) => {\n return findCustomers({\n 'id:in': [customerId],\n }).pipe(Effect.map((response) => response.data[0]));\n};\n","import { Effect } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport {\n SetCustomerGroupPriceListResponseSchema,\n SetCustomerGroupPriceListSchema,\n} from './schemas/customer-group.schema';\nexport const setCustomerGroupPriceList = (input: z.input<typeof SetCustomerGroupPriceListSchema>) =>\n Effect.gen(function* () {\n const { customerGroupId, data } = yield* validateInput(SetCustomerGroupPriceListSchema, input);\n const fetcher = yield* BigCommerceFetcher;\n\n return yield* Effect.retry(\n fetcher.fetch({\n body: data,\n isB2B: false,\n method: 'PUT',\n path: `customer_groups/${customerGroupId}`,\n resultSchema: SetCustomerGroupPriceListResponseSchema,\n version: 'v2',\n }),\n DEFAULTS.retry.policy,\n );\n });\n"],"mappings":"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","names":["Effect","z","Effect","Effect","stringify","z","z","Effect","stringify","Effect","stringify","z","FindCustomerResponse","Effect","stringify","Effect","Effect","Effect","Effect"]}
|
package/dist/index.js
CHANGED
|
@@ -286,9 +286,16 @@ var getBase = ({
|
|
|
286
286
|
}
|
|
287
287
|
return `${DEFAULTS.bigcommerceUrls.regular}/[storeHash]/${version}/${path}`;
|
|
288
288
|
};
|
|
289
|
+
async function safeJson(response) {
|
|
290
|
+
const text = await response.text();
|
|
291
|
+
if (!text || text.trim() === "") {
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
return JSON.parse(text);
|
|
295
|
+
}
|
|
289
296
|
function processSuccessResponse(response, schema) {
|
|
290
297
|
return import_effect5.Effect.tryPromise({
|
|
291
|
-
try: () => response
|
|
298
|
+
try: () => safeJson(response),
|
|
292
299
|
catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
|
|
293
300
|
}).pipe(
|
|
294
301
|
import_effect5.Effect.tapError(
|
|
@@ -303,7 +310,7 @@ function processSuccessResponse(response, schema) {
|
|
|
303
310
|
var processErrorResponse = (response) => {
|
|
304
311
|
const code = response.status;
|
|
305
312
|
return import_effect5.Effect.tryPromise({
|
|
306
|
-
try: () => response
|
|
313
|
+
try: () => safeJson(response),
|
|
307
314
|
catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
|
|
308
315
|
}).pipe(
|
|
309
316
|
import_effect5.Effect.tapError((error) => import_effect5.Effect.logError("Error parsing error response", error.cause)),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts","../src/core/bigcommerce.error.ts","../src/core/bigcommerce.fetcher.ts","../src/core/bigcommerce.fetcher.live.ts","../src/constants.ts","../src/core/config.ts"],"sourcesContent":["export * from './bigcommerce.error';\nexport * from './bigcommerce.fetcher';\nexport * from './bigcommerce.fetcher.live';\nexport * from './config';\n","import { Data } from 'effect';\nimport * as z from 'zod';\nexport class BigCommerceUnprocessableEntityError extends Data.TaggedError(\n 'BigCommerceUnprocessableEntityError',\n)<{\n readonly errorDetails: unknown;\n}> {}\n\nexport class BigCommerceUnauthorizedError extends Data.TaggedError(\n 'BigCommerceUnauthorizedError',\n) {}\n\nexport class BigCommerceForbiddenError extends Data.TaggedError('BigCommerceForbiddenError') {}\n\nexport class BigCommerceNotFoundError extends Data.TaggedError('BigCommerceNotFoundError') {}\n\nexport class BigCommerceConflictError extends Data.TaggedError('BigCommerceConflictError')<{\n readonly details: unknown;\n}> {}\n\nexport class BigCommerceConnectionError extends Data.TaggedError('BigCommerceConnectionError')<{\n readonly message: string;\n readonly type: 'timeout' | 'internalError' | 'unknown';\n}> {}\n\nexport class BigCommerceUnknownError extends Data.TaggedError('BigCommerceUnknownError')<{\n cause: unknown;\n}> {}\n\nexport class BigCommerceInvalidResponseError extends Data.TaggedError(\n 'BigCommerceInvalidResponseError',\n)<{\n cause: unknown;\n}> {}\n\nexport class BigCommerceInvalidRequestError extends Data.TaggedError(\n 'BigCommerceInvalidRequestError',\n)<{\n readonly errorDetails: unknown;\n}> {}\n\nexport class BigCommerceParseResponseError extends Data.TaggedError(\n 'BigCommerceParseResponseError',\n)<{\n readonly error: z.ZodError;\n}> {}\n\nexport type SomeBigCommerceError =\n | BigCommerceUnprocessableEntityError\n | BigCommerceUnauthorizedError\n | BigCommerceForbiddenError\n | BigCommerceNotFoundError\n | BigCommerceConflictError\n | BigCommerceConnectionError\n | BigCommerceUnknownError\n | BigCommerceInvalidResponseError\n | BigCommerceInvalidRequestError\n | BigCommerceParseResponseError;\n","import { Context, Effect } from 'effect';\nimport * as z from 'zod';\nimport { type SomeBigCommerceError } from './bigcommerce.error';\nexport type BigCommerceFetchMethods = 'GET' | 'POST' | 'PUT' | 'DELETE';\nexport interface BigCommerceFetchParams<\n // Always send json for now, maybe later send a Blob\n Body extends Record<string, unknown> | Array<Record<string, unknown>>,\n Query extends Record<string, string> | string,\n Result extends z.ZodType,\n> {\n readonly body?: Body;\n readonly query?: Query;\n readonly method: BigCommerceFetchMethods;\n readonly path: string;\n readonly headers?: Record<string, string>;\n readonly isB2B: boolean;\n readonly version: 'v3' | 'v2';\n readonly resultSchema: Result;\n}\n\nexport class BigCommerceFetcher extends Context.Tag('BigCommerceFetcher')<\n BigCommerceFetcher,\n {\n readonly fetch: <\n Body extends Record<string, unknown> | Array<Record<string, unknown>>,\n Query extends Record<string, string> | string,\n Result extends z.ZodType,\n >(\n params: BigCommerceFetchParams<Body, Query, Result>,\n ) => Effect.Effect<z.output<Result>, SomeBigCommerceError>;\n }\n>() {}\n","import { Effect, Layer, Match } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../constants';\nimport {\n BigCommerceConflictError,\n BigCommerceConnectionError,\n BigCommerceForbiddenError,\n BigCommerceInvalidRequestError,\n BigCommerceInvalidResponseError,\n BigCommerceNotFoundError,\n BigCommerceParseResponseError,\n BigCommerceUnauthorizedError,\n BigCommerceUnknownError,\n BigCommerceUnprocessableEntityError,\n type SomeBigCommerceError,\n} from './bigcommerce.error';\nimport { BigCommerceFetcher } from './bigcommerce.fetcher';\nimport { BigCommerceConfig, type NoBigCommerceConfigError } from './config';\nconst BigCommerceStatusCodes = {\n UNAUTHORIZED: 401,\n CONFLICT: 409,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n INVALID_REQUEST: 400,\n} as const;\n\nexport const BigCommerceFetcherLive: Layer.Layer<\n BigCommerceFetcher,\n NoBigCommerceConfigError,\n BigCommerceConfig\n> = Layer.effect(\n BigCommerceFetcher,\n Effect.gen(function* () {\n const config = yield* BigCommerceConfig;\n const storeHash = yield* config.getStoreHash;\n const accessToken = yield* config.getAccessToken;\n const timeout = yield* config.getTimeout;\n\n return {\n fetch: (params) => {\n const base = getBase(params);\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'x-auth-token': accessToken,\n };\n\n if (params.isB2B) {\n headers['x-store-hash'] = storeHash;\n }\n const url = applyParams(base.replace('[storeHash]', storeHash), params.query);\n\n return Effect.tryPromise({\n try: () =>\n fetch(url, {\n headers,\n signal: AbortSignal.timeout(timeout),\n method: params.method,\n ...(params.body && { body: JSON.stringify(params.body) }),\n }),\n catch: (error) => {\n if (error instanceof Error && error.name === 'TimeoutError') {\n return new BigCommerceConnectionError({\n message: `Request timeout after ${timeout}ms`,\n type: 'timeout',\n });\n }\n if (error instanceof Error && error.name === 'AbortError') {\n return new BigCommerceConnectionError({\n message: `Request timeout after ${timeout}ms`,\n type: 'timeout',\n });\n }\n return new BigCommerceUnknownError({ cause: error });\n },\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError('Failed to fetch from BigCommerce API', error.cause),\n ),\n Effect.flatMap((response) => transformResponse(response, params.resultSchema)),\n );\n },\n };\n }),\n);\nconst applyParams = (url: string, params?: Record<string, string | number> | string): URL => {\n const base = new URL(url);\n if (!params) {\n return base;\n }\n if (typeof params === 'string') {\n base.search = params;\n } else {\n for (const [key, value] of Object.entries(params)) {\n base.searchParams.append(key, `${value}`);\n }\n }\n return base;\n};\n\nconst getBase = ({\n isB2B,\n path,\n version,\n}: {\n isB2B: boolean;\n path: string;\n version: 'v3' | 'v2';\n}): string => {\n if (isB2B) {\n return `${DEFAULTS.bigcommerceUrls.b2b}/${version}/io/${path}`;\n }\n return `${DEFAULTS.bigcommerceUrls.regular}/[storeHash]/${version}/${path}`;\n};\nfunction processSuccessResponse<Schema extends z.ZodTypeAny>(response: Response, schema: Schema) {\n return Effect.tryPromise({\n try: () => response.json(),\n catch: (error) => new BigCommerceInvalidResponseError({ cause: error }),\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError('Error parsing response from BigCommerce API', error.cause),\n ),\n Effect.tryMap({\n try: (json) => schema.parse(json),\n catch: (error) => new BigCommerceParseResponseError({ error: error as z.ZodError }),\n }),\n );\n}\nconst processErrorResponse = (response: Response) => {\n const code = response.status;\n return Effect.tryPromise({\n try: () => response.json(),\n catch: (error) => new BigCommerceInvalidResponseError({ cause: error }),\n }).pipe(\n Effect.tapError((error) => Effect.logError('Error parsing error response', error.cause)),\n Effect.flatMap((errorDetails) =>\n Effect.fail(\n Match.value(code).pipe(\n Match.when(\n BigCommerceStatusCodes.INVALID_REQUEST,\n () => new BigCommerceInvalidRequestError({ errorDetails }),\n ),\n Match.when(BigCommerceStatusCodes.UNAUTHORIZED, () => new BigCommerceUnauthorizedError()),\n Match.when(BigCommerceStatusCodes.FORBIDDEN, () => new BigCommerceForbiddenError()),\n Match.when(BigCommerceStatusCodes.NOT_FOUND, () => new BigCommerceNotFoundError()),\n Match.when(\n BigCommerceStatusCodes.CONFLICT,\n () => new BigCommerceConflictError({ details: errorDetails }),\n ),\n Match.when(\n BigCommerceStatusCodes.UNPROCESSABLE_ENTITY,\n () => new BigCommerceUnprocessableEntityError({ errorDetails }),\n ),\n Match.when(\n (code) => code >= 500,\n () =>\n new BigCommerceConnectionError({\n message: `Server error: ${code}`,\n type:\n code === BigCommerceStatusCodes.INTERNAL_SERVER_ERROR\n ? 'internalError'\n : code === BigCommerceStatusCodes.BAD_GATEWAY ||\n code === BigCommerceStatusCodes.GATEWAY_TIMEOUT\n ? 'timeout'\n : 'internalError',\n }),\n ),\n Match.orElse(() => new BigCommerceUnknownError({ cause: errorDetails })),\n ),\n ),\n ),\n );\n};\n\nconst transformResponse = <Schema extends z.ZodType>(\n response: Response,\n schema: Schema,\n): Effect.Effect<z.output<Schema>, SomeBigCommerceError> => {\n if (response.ok) {\n return processSuccessResponse(response, schema);\n }\n return processErrorResponse(response);\n};\n\n// type PendingErrors = Exclude<\n// SomeBigCommerceError,\n// Effect.Effect.Error<ReturnType<typeof processErrorResponse>> | BigCommerceParseResponseError\n// >;\n","import { Duration, Schedule } from 'effect';\n\nexport const DEFAULTS = {\n retry: {\n policy: Schedule.exponential(Duration.millis(200), 2).pipe(\n Schedule.intersect(Schedule.recurs(3)),\n ),\n },\n timeout: {\n ms: 30000,\n },\n bigcommerceUrls: {\n b2b: 'https://api-b2b.bigcommerce.com/api',\n regular: 'https://api.bigcommerce.com/stores',\n },\n customers: {\n getBatchSize: 250,\n },\n salesStaff: {\n getBatchSize: 250,\n },\n companies: {\n salesStaffAssignments: {\n assignBatchSize: 10,\n concurrency: 2,\n },\n extraFields: {\n getBatchSize: 250,\n },\n roles: {\n getBatchSize: 250,\n },\n },\n products: {\n updateBatchSize: 5,\n updateConcurrency: 2,\n inventory: {\n updateBatchSize: 2000,\n updateConcurrency: 2,\n },\n },\n orders: {\n getAllBatchSize: 250,\n shippingAddresses: {\n getAllBatchSize: 250,\n },\n products: {\n getAllBatchSize: 250,\n },\n },\n priceLists: {\n getAllBatchSize: 250,\n },\n} as const;\n","import { Config, Context, Data, Effect, Layer } from 'effect';\nimport { DEFAULTS } from '../constants';\n\n// Define a custom error type using Data.TaggedError\nexport class NoBigCommerceConfigError extends Data.TaggedError('NoBigCommerceConfigError')<{\n readonly key: string;\n}> {}\n\nexport class BigCommerceConfig extends Context.Tag('BigCommerceConfig')<\n BigCommerceConfig,\n {\n readonly getStoreHash: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getClientId: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getClientSecret: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getAccessToken: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getTimeout: Effect.Effect<number, NoBigCommerceConfigError>;\n }\n>() {}\n\nconst getBigCommerceConfig = (key: string) => {\n return Config.nested(Config.string(key), 'BIGCOMMERCE').pipe(\n Effect.mapError(() => new NoBigCommerceConfigError({ key })),\n );\n};\n\nconst getBigCommerceTimeout = () => {\n return Config.nested(Config.number('TIMEOUT'), 'BIGCOMMERCE').pipe(\n Effect.mapError(() => new NoBigCommerceConfigError({ key: 'TIMEOUT' })),\n // Default to 30 seconds if not configured\n Effect.orElse(() => Effect.succeed(DEFAULTS.timeout.ms)),\n );\n};\n\nexport const BigCommerceConfigLive = Layer.effect(\n BigCommerceConfig,\n Effect.gen(function* () {\n const [storeHash, clientId, clientSecret, accessToken, timeout] = yield* Effect.all([\n getBigCommerceConfig('STORE_HASH'),\n getBigCommerceConfig('CLIENT_ID'),\n getBigCommerceConfig('CLIENT_SECRET'),\n getBigCommerceConfig('ACCESS_TOKEN'),\n getBigCommerceTimeout(),\n ]);\n\n return {\n getStoreHash: Effect.succeed(storeHash),\n getClientId: Effect.succeed(clientId),\n getClientSecret: Effect.succeed(clientSecret),\n getAccessToken: Effect.succeed(accessToken),\n getTimeout: Effect.succeed(timeout),\n };\n }),\n);\n\nexport const BigCommerceConfigTest = Layer.succeed(BigCommerceConfig, {\n getAccessToken: Effect.succeed('test'),\n getClientId: Effect.succeed('test'),\n getClientSecret: Effect.succeed('test'),\n getStoreHash: Effect.succeed('test'),\n getTimeout: Effect.succeed(DEFAULTS.timeout.ms),\n});\n\nexport const validateBigCommerceConfig = () =>\n Effect.gen(function* () {\n const config = yield* BigCommerceConfig;\n const [storeHash, clientId, clientSecret, accessToken, timeout] = yield* Effect.all([\n config.getStoreHash,\n config.getClientId,\n config.getClientSecret,\n config.getAccessToken,\n config.getTimeout,\n ]);\n\n return {\n storeHash,\n clientId,\n clientSecret,\n accessToken,\n timeout,\n };\n });\n"],"mappings":"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","names":["import_effect","import_effect","import_effect","import_effect","code"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts","../src/core/bigcommerce.error.ts","../src/core/bigcommerce.fetcher.ts","../src/core/bigcommerce.fetcher.live.ts","../src/constants.ts","../src/core/config.ts"],"sourcesContent":["export * from './bigcommerce.error';\nexport * from './bigcommerce.fetcher';\nexport * from './bigcommerce.fetcher.live';\nexport * from './config';\n","import { Data } from 'effect';\nimport * as z from 'zod';\nexport class BigCommerceUnprocessableEntityError extends Data.TaggedError(\n 'BigCommerceUnprocessableEntityError',\n)<{\n readonly errorDetails: unknown;\n}> {}\n\nexport class BigCommerceUnauthorizedError extends Data.TaggedError(\n 'BigCommerceUnauthorizedError',\n) {}\n\nexport class BigCommerceForbiddenError extends Data.TaggedError('BigCommerceForbiddenError') {}\n\nexport class BigCommerceNotFoundError extends Data.TaggedError('BigCommerceNotFoundError') {}\n\nexport class BigCommerceConflictError extends Data.TaggedError('BigCommerceConflictError')<{\n readonly details: unknown;\n}> {}\n\nexport class BigCommerceConnectionError extends Data.TaggedError('BigCommerceConnectionError')<{\n readonly message: string;\n readonly type: 'timeout' | 'internalError' | 'unknown';\n}> {}\n\nexport class BigCommerceUnknownError extends Data.TaggedError('BigCommerceUnknownError')<{\n cause: unknown;\n}> {}\n\nexport class BigCommerceInvalidResponseError extends Data.TaggedError(\n 'BigCommerceInvalidResponseError',\n)<{\n cause: unknown;\n}> {}\n\nexport class BigCommerceInvalidRequestError extends Data.TaggedError(\n 'BigCommerceInvalidRequestError',\n)<{\n readonly errorDetails: unknown;\n}> {}\n\nexport class BigCommerceParseResponseError extends Data.TaggedError(\n 'BigCommerceParseResponseError',\n)<{\n readonly error: z.ZodError;\n}> {}\n\nexport type SomeBigCommerceError =\n | BigCommerceUnprocessableEntityError\n | BigCommerceUnauthorizedError\n | BigCommerceForbiddenError\n | BigCommerceNotFoundError\n | BigCommerceConflictError\n | BigCommerceConnectionError\n | BigCommerceUnknownError\n | BigCommerceInvalidResponseError\n | BigCommerceInvalidRequestError\n | BigCommerceParseResponseError;\n","import { Context, Effect } from 'effect';\nimport * as z from 'zod';\nimport { type SomeBigCommerceError } from './bigcommerce.error';\nexport type BigCommerceFetchMethods = 'GET' | 'POST' | 'PUT' | 'DELETE';\nexport interface BigCommerceFetchParams<\n // Always send json for now, maybe later send a Blob\n Body extends Record<string, unknown> | Array<Record<string, unknown>>,\n Query extends Record<string, string> | string,\n Result extends z.ZodType,\n> {\n readonly body?: Body;\n readonly query?: Query;\n readonly method: BigCommerceFetchMethods;\n readonly path: string;\n readonly headers?: Record<string, string>;\n readonly isB2B: boolean;\n readonly version: 'v3' | 'v2';\n readonly resultSchema: Result;\n}\n\nexport class BigCommerceFetcher extends Context.Tag('BigCommerceFetcher')<\n BigCommerceFetcher,\n {\n readonly fetch: <\n Body extends Record<string, unknown> | Array<Record<string, unknown>>,\n Query extends Record<string, string> | string,\n Result extends z.ZodType,\n >(\n params: BigCommerceFetchParams<Body, Query, Result>,\n ) => Effect.Effect<z.output<Result>, SomeBigCommerceError>;\n }\n>() {}\n","import { Effect, Layer, Match } from 'effect';\nimport * as z from 'zod';\nimport { DEFAULTS } from '../constants';\nimport {\n BigCommerceConflictError,\n BigCommerceConnectionError,\n BigCommerceForbiddenError,\n BigCommerceInvalidRequestError,\n BigCommerceInvalidResponseError,\n BigCommerceNotFoundError,\n BigCommerceParseResponseError,\n BigCommerceUnauthorizedError,\n BigCommerceUnknownError,\n BigCommerceUnprocessableEntityError,\n type SomeBigCommerceError,\n} from './bigcommerce.error';\nimport { BigCommerceFetcher } from './bigcommerce.fetcher';\nimport { BigCommerceConfig, type NoBigCommerceConfigError } from './config';\nconst BigCommerceStatusCodes = {\n UNAUTHORIZED: 401,\n CONFLICT: 409,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n INVALID_REQUEST: 400,\n} as const;\n\nexport const BigCommerceFetcherLive: Layer.Layer<\n BigCommerceFetcher,\n NoBigCommerceConfigError,\n BigCommerceConfig\n> = Layer.effect(\n BigCommerceFetcher,\n Effect.gen(function* () {\n const config = yield* BigCommerceConfig;\n const storeHash = yield* config.getStoreHash;\n const accessToken = yield* config.getAccessToken;\n const timeout = yield* config.getTimeout;\n\n return {\n fetch: (params) => {\n const base = getBase(params);\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'x-auth-token': accessToken,\n };\n\n if (params.isB2B) {\n headers['x-store-hash'] = storeHash;\n }\n const url = applyParams(base.replace('[storeHash]', storeHash), params.query);\n\n return Effect.tryPromise({\n try: () =>\n fetch(url, {\n headers,\n signal: AbortSignal.timeout(timeout),\n method: params.method,\n ...(params.body && { body: JSON.stringify(params.body) }),\n }),\n catch: (error) => {\n if (error instanceof Error && error.name === 'TimeoutError') {\n return new BigCommerceConnectionError({\n message: `Request timeout after ${timeout}ms`,\n type: 'timeout',\n });\n }\n if (error instanceof Error && error.name === 'AbortError') {\n return new BigCommerceConnectionError({\n message: `Request timeout after ${timeout}ms`,\n type: 'timeout',\n });\n }\n return new BigCommerceUnknownError({ cause: error });\n },\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError('Failed to fetch from BigCommerce API', error.cause),\n ),\n Effect.flatMap((response) => transformResponse(response, params.resultSchema)),\n );\n },\n };\n }),\n);\nconst applyParams = (url: string, params?: Record<string, string | number> | string): URL => {\n const base = new URL(url);\n if (!params) {\n return base;\n }\n if (typeof params === 'string') {\n base.search = params;\n } else {\n for (const [key, value] of Object.entries(params)) {\n base.searchParams.append(key, `${value}`);\n }\n }\n return base;\n};\n\nconst getBase = ({\n isB2B,\n path,\n version,\n}: {\n isB2B: boolean;\n path: string;\n version: 'v3' | 'v2';\n}): string => {\n if (isB2B) {\n return `${DEFAULTS.bigcommerceUrls.b2b}/${version}/io/${path}`;\n }\n return `${DEFAULTS.bigcommerceUrls.regular}/[storeHash]/${version}/${path}`;\n};\n\nasync function safeJson<T>(response: Response): Promise<T | null> {\n const text = await response.text();\n\n if (!text || text.trim() === '') {\n return null;\n }\n\n return JSON.parse(text) as T;\n}\n\nfunction processSuccessResponse<Schema extends z.ZodTypeAny>(response: Response, schema: Schema) {\n return Effect.tryPromise({\n try: () => safeJson(response),\n catch: (error) => new BigCommerceInvalidResponseError({ cause: error }),\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError('Error parsing response from BigCommerce API', error.cause),\n ),\n Effect.tryMap({\n try: (json) => schema.parse(json),\n catch: (error) => new BigCommerceParseResponseError({ error: error as z.ZodError }),\n }),\n );\n}\nconst processErrorResponse = (response: Response) => {\n const code = response.status;\n return Effect.tryPromise({\n try: () => safeJson(response),\n catch: (error) => new BigCommerceInvalidResponseError({ cause: error }),\n }).pipe(\n Effect.tapError((error) => Effect.logError('Error parsing error response', error.cause)),\n Effect.flatMap((errorDetails) =>\n Effect.fail(\n Match.value(code).pipe(\n Match.when(\n BigCommerceStatusCodes.INVALID_REQUEST,\n () => new BigCommerceInvalidRequestError({ errorDetails }),\n ),\n Match.when(BigCommerceStatusCodes.UNAUTHORIZED, () => new BigCommerceUnauthorizedError()),\n Match.when(BigCommerceStatusCodes.FORBIDDEN, () => new BigCommerceForbiddenError()),\n Match.when(BigCommerceStatusCodes.NOT_FOUND, () => new BigCommerceNotFoundError()),\n Match.when(\n BigCommerceStatusCodes.CONFLICT,\n () => new BigCommerceConflictError({ details: errorDetails }),\n ),\n Match.when(\n BigCommerceStatusCodes.UNPROCESSABLE_ENTITY,\n () => new BigCommerceUnprocessableEntityError({ errorDetails }),\n ),\n Match.when(\n (code) => code >= 500,\n () =>\n new BigCommerceConnectionError({\n message: `Server error: ${code}`,\n type:\n code === BigCommerceStatusCodes.INTERNAL_SERVER_ERROR\n ? 'internalError'\n : code === BigCommerceStatusCodes.BAD_GATEWAY ||\n code === BigCommerceStatusCodes.GATEWAY_TIMEOUT\n ? 'timeout'\n : 'internalError',\n }),\n ),\n Match.orElse(() => new BigCommerceUnknownError({ cause: errorDetails })),\n ),\n ),\n ),\n );\n};\n\nconst transformResponse = <Schema extends z.ZodType>(\n response: Response,\n schema: Schema,\n): Effect.Effect<z.output<Schema>, SomeBigCommerceError> => {\n if (response.ok) {\n return processSuccessResponse(response, schema);\n }\n return processErrorResponse(response);\n};\n\n// type PendingErrors = Exclude<\n// SomeBigCommerceError,\n// Effect.Effect.Error<ReturnType<typeof processErrorResponse>> | BigCommerceParseResponseError\n// >;\n","import { Duration, Schedule } from 'effect';\n\nexport const DEFAULTS = {\n retry: {\n policy: Schedule.exponential(Duration.millis(200), 2).pipe(\n Schedule.intersect(Schedule.recurs(3)),\n ),\n },\n timeout: {\n ms: 30000,\n },\n bigcommerceUrls: {\n b2b: 'https://api-b2b.bigcommerce.com/api',\n regular: 'https://api.bigcommerce.com/stores',\n },\n customers: {\n getBatchSize: 250,\n },\n salesStaff: {\n getBatchSize: 250,\n },\n companies: {\n salesStaffAssignments: {\n assignBatchSize: 10,\n concurrency: 2,\n },\n extraFields: {\n getBatchSize: 250,\n },\n roles: {\n getBatchSize: 250,\n },\n },\n products: {\n updateBatchSize: 5,\n updateConcurrency: 2,\n inventory: {\n updateBatchSize: 2000,\n updateConcurrency: 2,\n },\n },\n orders: {\n getAllBatchSize: 250,\n shippingAddresses: {\n getAllBatchSize: 250,\n },\n products: {\n getAllBatchSize: 250,\n },\n },\n priceLists: {\n getAllBatchSize: 250,\n },\n} as const;\n","import { Config, Context, Data, Effect, Layer } from 'effect';\nimport { DEFAULTS } from '../constants';\n\n// Define a custom error type using Data.TaggedError\nexport class NoBigCommerceConfigError extends Data.TaggedError('NoBigCommerceConfigError')<{\n readonly key: string;\n}> {}\n\nexport class BigCommerceConfig extends Context.Tag('BigCommerceConfig')<\n BigCommerceConfig,\n {\n readonly getStoreHash: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getClientId: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getClientSecret: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getAccessToken: Effect.Effect<string, NoBigCommerceConfigError>;\n readonly getTimeout: Effect.Effect<number, NoBigCommerceConfigError>;\n }\n>() {}\n\nconst getBigCommerceConfig = (key: string) => {\n return Config.nested(Config.string(key), 'BIGCOMMERCE').pipe(\n Effect.mapError(() => new NoBigCommerceConfigError({ key })),\n );\n};\n\nconst getBigCommerceTimeout = () => {\n return Config.nested(Config.number('TIMEOUT'), 'BIGCOMMERCE').pipe(\n Effect.mapError(() => new NoBigCommerceConfigError({ key: 'TIMEOUT' })),\n // Default to 30 seconds if not configured\n Effect.orElse(() => Effect.succeed(DEFAULTS.timeout.ms)),\n );\n};\n\nexport const BigCommerceConfigLive = Layer.effect(\n BigCommerceConfig,\n Effect.gen(function* () {\n const [storeHash, clientId, clientSecret, accessToken, timeout] = yield* Effect.all([\n getBigCommerceConfig('STORE_HASH'),\n getBigCommerceConfig('CLIENT_ID'),\n getBigCommerceConfig('CLIENT_SECRET'),\n getBigCommerceConfig('ACCESS_TOKEN'),\n getBigCommerceTimeout(),\n ]);\n\n return {\n getStoreHash: Effect.succeed(storeHash),\n getClientId: Effect.succeed(clientId),\n getClientSecret: Effect.succeed(clientSecret),\n getAccessToken: Effect.succeed(accessToken),\n getTimeout: Effect.succeed(timeout),\n };\n }),\n);\n\nexport const BigCommerceConfigTest = Layer.succeed(BigCommerceConfig, {\n getAccessToken: Effect.succeed('test'),\n getClientId: Effect.succeed('test'),\n getClientSecret: Effect.succeed('test'),\n getStoreHash: Effect.succeed('test'),\n getTimeout: Effect.succeed(DEFAULTS.timeout.ms),\n});\n\nexport const validateBigCommerceConfig = () =>\n Effect.gen(function* () {\n const config = yield* BigCommerceConfig;\n const [storeHash, clientId, clientSecret, accessToken, timeout] = yield* Effect.all([\n config.getStoreHash,\n config.getClientId,\n config.getClientSecret,\n config.getAccessToken,\n config.getTimeout,\n ]);\n\n return {\n storeHash,\n clientId,\n clientSecret,\n accessToken,\n timeout,\n };\n });\n"],"mappings":"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","names":["import_effect","import_effect","import_effect","import_effect","code"]}
|
package/dist/index.mjs
CHANGED
package/dist/orders.js
CHANGED
|
@@ -279,9 +279,16 @@ var getBase = ({
|
|
|
279
279
|
}
|
|
280
280
|
return `${DEFAULTS.bigcommerceUrls.regular}/[storeHash]/${version}/${path}`;
|
|
281
281
|
};
|
|
282
|
+
async function safeJson(response) {
|
|
283
|
+
const text = await response.text();
|
|
284
|
+
if (!text || text.trim() === "") {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
return JSON.parse(text);
|
|
288
|
+
}
|
|
282
289
|
function processSuccessResponse(response, schema) {
|
|
283
290
|
return import_effect5.Effect.tryPromise({
|
|
284
|
-
try: () => response
|
|
291
|
+
try: () => safeJson(response),
|
|
285
292
|
catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
|
|
286
293
|
}).pipe(
|
|
287
294
|
import_effect5.Effect.tapError(
|
|
@@ -296,7 +303,7 @@ function processSuccessResponse(response, schema) {
|
|
|
296
303
|
var processErrorResponse = (response) => {
|
|
297
304
|
const code = response.status;
|
|
298
305
|
return import_effect5.Effect.tryPromise({
|
|
299
|
-
try: () => response
|
|
306
|
+
try: () => safeJson(response),
|
|
300
307
|
catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
|
|
301
308
|
}).pipe(
|
|
302
309
|
import_effect5.Effect.tapError((error) => import_effect5.Effect.logError("Error parsing error response", error.cause)),
|