@edgebound/bigcommerce 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/bigcommerce.fetcher-D1TyK4y4.d.mts +90 -0
  2. package/dist/bigcommerce.fetcher-D1TyK4y4.d.ts +90 -0
  3. package/dist/chunk-7GBRYAQG.mjs +272 -0
  4. package/dist/chunk-7GBRYAQG.mjs.map +1 -0
  5. package/dist/chunk-CERZFSUE.mjs +20 -0
  6. package/dist/chunk-CERZFSUE.mjs.map +1 -0
  7. package/dist/companies.d.mts +2 -0
  8. package/dist/companies.d.ts +2 -0
  9. package/dist/companies.js +2 -0
  10. package/dist/companies.js.map +1 -0
  11. package/dist/companies.mjs +1 -0
  12. package/dist/companies.mjs.map +1 -0
  13. package/dist/currencies.d.mts +2 -0
  14. package/dist/currencies.d.ts +2 -0
  15. package/dist/currencies.js +2 -0
  16. package/dist/currencies.js.map +1 -0
  17. package/dist/currencies.mjs +1 -0
  18. package/dist/currencies.mjs.map +1 -0
  19. package/dist/customers.d.mts +65 -0
  20. package/dist/customers.d.ts +65 -0
  21. package/dist/customers.js +399 -0
  22. package/dist/customers.js.map +1 -0
  23. package/dist/customers.mjs +107 -0
  24. package/dist/customers.mjs.map +1 -0
  25. package/dist/index.d.mts +29 -0
  26. package/dist/index.d.ts +29 -0
  27. package/dist/index.js +304 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/index.mjs +37 -0
  30. package/dist/index.mjs.map +1 -0
  31. package/dist/orders.d.mts +416 -0
  32. package/dist/orders.d.ts +416 -0
  33. package/dist/orders.js +608 -0
  34. package/dist/orders.js.map +1 -0
  35. package/dist/orders.mjs +314 -0
  36. package/dist/orders.mjs.map +1 -0
  37. package/dist/products.d.mts +32 -0
  38. package/dist/products.d.ts +32 -0
  39. package/dist/products.js +409 -0
  40. package/dist/products.js.map +1 -0
  41. package/dist/products.mjs +119 -0
  42. package/dist/products.mjs.map +1 -0
  43. package/dist/validation.error-CHLpPYC_.d.mts +14 -0
  44. package/dist/validation.error-CHLpPYC_.d.ts +14 -0
  45. package/package.json +63 -0
@@ -0,0 +1,65 @@
1
+ import { I as InputValidationError } from './validation.error-CHLpPYC_.js';
2
+ import { S as SomeBigCommerceError, B as BigCommerceFetcher } from './bigcommerce.fetcher-D1TyK4y4.js';
3
+ import { Effect } from 'effect';
4
+ import * as z from 'zod';
5
+ import 'effect/Cause';
6
+ import 'effect/Types';
7
+
8
+ declare const FindCustomersCriteriaSchema: z.ZodObject<{
9
+ 'id:in': z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodInt>, z.ZodTransform<string, number[]>>>;
10
+ page: z.ZodOptional<z.ZodInt>;
11
+ limit: z.ZodOptional<z.ZodInt>;
12
+ 'company:in': z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<string, string[]>>>;
13
+ 'customer_group_id:in': z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodInt>, z.ZodTransform<string, number[]>>>;
14
+ }, z.core.$strip>;
15
+ type FindCustomersCriteriaInput = z.input<typeof FindCustomersCriteriaSchema>;
16
+
17
+ declare const findCustomers: (criteria?: FindCustomersCriteriaInput) => Effect.Effect<{
18
+ data: {
19
+ email: string;
20
+ first_name: string;
21
+ last_name: string;
22
+ phone: string;
23
+ customer_group_id: number;
24
+ id: number;
25
+ channel_ids: number[];
26
+ company?: string | undefined;
27
+ }[];
28
+ meta: {
29
+ pagination: {
30
+ total: number;
31
+ count: number;
32
+ per_page: number;
33
+ current_page: number;
34
+ total_pages: number;
35
+ links: {
36
+ current: string;
37
+ previous?: string | null | undefined;
38
+ next?: string | null | undefined;
39
+ };
40
+ };
41
+ };
42
+ }, SomeBigCommerceError | InputValidationError, BigCommerceFetcher>;
43
+ declare const getAllCustomersBy: (criteria: Omit<FindCustomersCriteriaInput, "page" | "limit">) => Effect.Effect<{
44
+ email: string;
45
+ first_name: string;
46
+ last_name: string;
47
+ phone: string;
48
+ customer_group_id: number;
49
+ id: number;
50
+ channel_ids: number[];
51
+ company?: string | undefined;
52
+ }[], SomeBigCommerceError | InputValidationError, BigCommerceFetcher>;
53
+
54
+ declare const getCustomer: (customerId: number) => Effect.Effect<{
55
+ email: string;
56
+ first_name: string;
57
+ last_name: string;
58
+ phone: string;
59
+ customer_group_id: number;
60
+ id: number;
61
+ channel_ids: number[];
62
+ company?: string | undefined;
63
+ } | undefined, SomeBigCommerceError | InputValidationError, BigCommerceFetcher>;
64
+
65
+ export { findCustomers, getAllCustomersBy, getCustomer };
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/bigcommerce-entities/customers/index.ts
31
+ var customers_exports = {};
32
+ __export(customers_exports, {
33
+ findCustomers: () => findCustomers,
34
+ getAllCustomersBy: () => getAllCustomersBy,
35
+ getCustomer: () => getCustomer
36
+ });
37
+ module.exports = __toCommonJS(customers_exports);
38
+
39
+ // src/bigcommerce-entities/customers/find-customers.ts
40
+ var import_effect8 = require("effect");
41
+
42
+ // src/constants.ts
43
+ var import_effect = require("effect");
44
+ var DEFAULT_TIMEOUT_MS = 3e4;
45
+ var API_BASE_URLS = {
46
+ B2B: "https://api-b2b.bigcommerce.com/api",
47
+ REGULAR: "https://api.bigcommerce.com/stores"
48
+ };
49
+ var DEFAULT_RETRY_TIMES = 2;
50
+ var DEFAULT_RETRY_WAIT = 200;
51
+ var DEFAULT_RETRY_SCHEDULE = import_effect.Schedule.exponential(import_effect.Duration.millis(DEFAULT_RETRY_WAIT));
52
+ var RETRY_POLICY_WITH_BACKOFF = import_effect.Schedule.exponential(
53
+ import_effect.Duration.millis(DEFAULT_RETRY_WAIT),
54
+ 2
55
+ ).pipe(import_effect.Schedule.intersect(import_effect.Schedule.recurs(DEFAULT_RETRY_TIMES)));
56
+ var GET_CUSTOMERS_BATCH_SIZE = 100;
57
+
58
+ // src/core/bigcommerce.error.ts
59
+ var import_effect2 = require("effect");
60
+ var BigCommerceUnprocessableEntityError = class extends import_effect2.Data.TaggedError(
61
+ "BigCommerceUnprocessableEntityError"
62
+ ) {
63
+ };
64
+ var BigCommerceUnauthorizedError = class extends import_effect2.Data.TaggedError(
65
+ "BigCommerceUnauthorizedError"
66
+ ) {
67
+ };
68
+ var BigCommerceForbiddenError = class extends import_effect2.Data.TaggedError("BigCommerceForbiddenError") {
69
+ };
70
+ var BigCommerceNotFoundError = class extends import_effect2.Data.TaggedError("BigCommerceNotFoundError") {
71
+ };
72
+ var BigCommerceConflictError = class extends import_effect2.Data.TaggedError("BigCommerceConflictError") {
73
+ };
74
+ var BigCommerceConnectionError = class extends import_effect2.Data.TaggedError("BigCommerceConnectionError") {
75
+ };
76
+ var BigCommerceUnknownError = class extends import_effect2.Data.TaggedError("BigCommerceUnknownError") {
77
+ };
78
+ var BigCommerceInvalidResponseError = class extends import_effect2.Data.TaggedError(
79
+ "BigCommerceInvalidResponseError"
80
+ ) {
81
+ };
82
+ var BigCommerceInvalidRequestError = class extends import_effect2.Data.TaggedError(
83
+ "BigCommerceInvalidRequestError"
84
+ ) {
85
+ };
86
+ var BigCommerceParseResponseError = class extends import_effect2.Data.TaggedError(
87
+ "BigCommerceParseResponseError"
88
+ ) {
89
+ };
90
+
91
+ // src/core/bigcommerce.fetcher.ts
92
+ var import_effect3 = require("effect");
93
+ var BigCommerceFetcher = class extends import_effect3.Context.Tag("BigCommerceFetcher")() {
94
+ };
95
+
96
+ // src/core/bigcommerce.fetcher.live.ts
97
+ var import_effect5 = require("effect");
98
+
99
+ // src/core/config.ts
100
+ var import_effect4 = require("effect");
101
+ var NoBigCommerceConfigError = class extends import_effect4.Data.TaggedError("NoBigCommerceConfigError") {
102
+ };
103
+ var BigCommerceConfig = class extends import_effect4.Context.Tag("BigCommerceConfig")() {
104
+ };
105
+ var getBigCommerceConfig = (key) => {
106
+ return import_effect4.Config.nested(import_effect4.Config.string(key), "BIGCOMMERCE").pipe(
107
+ import_effect4.Effect.mapError(() => new NoBigCommerceConfigError({ key }))
108
+ );
109
+ };
110
+ var getBigCommerceTimeout = () => {
111
+ return import_effect4.Config.nested(import_effect4.Config.number("TIMEOUT"), "BIGCOMMERCE").pipe(
112
+ import_effect4.Effect.mapError(() => new NoBigCommerceConfigError({ key: "TIMEOUT" })),
113
+ // Default to 30 seconds if not configured
114
+ import_effect4.Effect.orElse(() => import_effect4.Effect.succeed(DEFAULT_TIMEOUT_MS))
115
+ );
116
+ };
117
+ var BigCommerceConfigLive = import_effect4.Layer.effect(
118
+ BigCommerceConfig,
119
+ import_effect4.Effect.gen(function* () {
120
+ const [storeHash, clientId, clientSecret, accessToken, timeout] = yield* import_effect4.Effect.all([
121
+ getBigCommerceConfig("STORE_HASH"),
122
+ getBigCommerceConfig("CLIENT_ID"),
123
+ getBigCommerceConfig("CLIENT_SECRET"),
124
+ getBigCommerceConfig("ACCESS_TOKEN"),
125
+ getBigCommerceTimeout()
126
+ ]);
127
+ return {
128
+ getStoreHash: import_effect4.Effect.succeed(storeHash),
129
+ getClientId: import_effect4.Effect.succeed(clientId),
130
+ getClientSecret: import_effect4.Effect.succeed(clientSecret),
131
+ getAccessToken: import_effect4.Effect.succeed(accessToken),
132
+ getTimeout: import_effect4.Effect.succeed(timeout)
133
+ };
134
+ })
135
+ );
136
+ var BigCommerceConfigTest = import_effect4.Layer.succeed(BigCommerceConfig, {
137
+ getAccessToken: import_effect4.Effect.succeed("test"),
138
+ getClientId: import_effect4.Effect.succeed("test"),
139
+ getClientSecret: import_effect4.Effect.succeed("test"),
140
+ getStoreHash: import_effect4.Effect.succeed("test"),
141
+ getTimeout: import_effect4.Effect.succeed(DEFAULT_TIMEOUT_MS)
142
+ });
143
+
144
+ // src/core/bigcommerce.fetcher.live.ts
145
+ var BigCommerceStatusCodes = {
146
+ UNAUTHORIZED: 401,
147
+ CONFLICT: 409,
148
+ FORBIDDEN: 403,
149
+ NOT_FOUND: 404,
150
+ UNPROCESSABLE_ENTITY: 422,
151
+ INTERNAL_SERVER_ERROR: 500,
152
+ BAD_GATEWAY: 502,
153
+ SERVICE_UNAVAILABLE: 503,
154
+ GATEWAY_TIMEOUT: 504,
155
+ INVALID_REQUEST: 400
156
+ };
157
+ var BigCommerceFetcherLive = import_effect5.Layer.effect(
158
+ BigCommerceFetcher,
159
+ import_effect5.Effect.gen(function* () {
160
+ const config = yield* BigCommerceConfig;
161
+ const storeHash = yield* config.getStoreHash;
162
+ const accessToken = yield* config.getAccessToken;
163
+ const timeout = yield* config.getTimeout;
164
+ return {
165
+ fetch: (params) => {
166
+ const base = getBase(params);
167
+ const headers = {
168
+ Accept: "application/json",
169
+ "Content-Type": "application/json",
170
+ "x-auth-token": accessToken
171
+ };
172
+ if (params.isB2B) {
173
+ headers["x-store-hash"] = storeHash;
174
+ }
175
+ const url = applyParams(base.replace("[storeHash]", storeHash), params.query);
176
+ return import_effect5.Effect.tryPromise({
177
+ try: () => fetch(url, {
178
+ headers,
179
+ signal: AbortSignal.timeout(timeout),
180
+ method: params.method,
181
+ ...params.body && { body: JSON.stringify(params.body) }
182
+ }),
183
+ catch: (error) => {
184
+ if (error instanceof Error && error.name === "TimeoutError") {
185
+ return new BigCommerceConnectionError({
186
+ message: `Request timeout after ${timeout}ms`,
187
+ type: "timeout"
188
+ });
189
+ }
190
+ if (error instanceof Error && error.name === "AbortError") {
191
+ return new BigCommerceConnectionError({
192
+ message: `Request timeout after ${timeout}ms`,
193
+ type: "timeout"
194
+ });
195
+ }
196
+ return new BigCommerceUnknownError({ cause: error });
197
+ }
198
+ }).pipe(
199
+ import_effect5.Effect.tapError(
200
+ (error) => import_effect5.Effect.logError("Failed to fetch from BigCommerce API", error.cause)
201
+ ),
202
+ import_effect5.Effect.flatMap((response) => transformResponse(response, params.resultSchema))
203
+ );
204
+ }
205
+ };
206
+ })
207
+ );
208
+ var applyParams = (url, params) => {
209
+ const base = new URL(url);
210
+ if (!params) {
211
+ return base;
212
+ }
213
+ for (const [key, value] of Object.entries(params)) {
214
+ base.searchParams.append(key, `${value}`);
215
+ }
216
+ return base;
217
+ };
218
+ var getBase = ({
219
+ isB2B,
220
+ path,
221
+ version
222
+ }) => {
223
+ if (isB2B) {
224
+ return `${API_BASE_URLS.B2B}/${version}/io/${path}`;
225
+ }
226
+ return `${API_BASE_URLS.REGULAR}/[storeHash]/${version}/${path}`;
227
+ };
228
+ function processSuccessResponse(response, schema) {
229
+ return import_effect5.Effect.tryPromise({
230
+ try: () => response.json(),
231
+ catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
232
+ }).pipe(
233
+ import_effect5.Effect.tapError(
234
+ (error) => import_effect5.Effect.logError("Error parsing response from BigCommerce API", error.cause)
235
+ ),
236
+ import_effect5.Effect.tryMap({
237
+ try: (json) => schema.parse(json),
238
+ catch: (error) => new BigCommerceParseResponseError({ error })
239
+ })
240
+ );
241
+ }
242
+ var processErrorResponse = (response) => {
243
+ const code = response.status;
244
+ return import_effect5.Effect.tryPromise({
245
+ try: () => response.json(),
246
+ catch: (error) => new BigCommerceInvalidResponseError({ cause: error })
247
+ }).pipe(
248
+ import_effect5.Effect.tapError((error) => import_effect5.Effect.logError("Error parsing error response", error.cause)),
249
+ import_effect5.Effect.flatMap(
250
+ (errorDetails) => import_effect5.Effect.fail(
251
+ import_effect5.Match.value(code).pipe(
252
+ import_effect5.Match.when(
253
+ BigCommerceStatusCodes.INVALID_REQUEST,
254
+ () => new BigCommerceInvalidRequestError({ errorDetails })
255
+ ),
256
+ import_effect5.Match.when(BigCommerceStatusCodes.UNAUTHORIZED, () => new BigCommerceUnauthorizedError()),
257
+ import_effect5.Match.when(BigCommerceStatusCodes.FORBIDDEN, () => new BigCommerceForbiddenError()),
258
+ import_effect5.Match.when(BigCommerceStatusCodes.NOT_FOUND, () => new BigCommerceNotFoundError()),
259
+ import_effect5.Match.when(
260
+ BigCommerceStatusCodes.CONFLICT,
261
+ () => new BigCommerceConflictError({ details: errorDetails })
262
+ ),
263
+ import_effect5.Match.when(
264
+ BigCommerceStatusCodes.UNPROCESSABLE_ENTITY,
265
+ () => new BigCommerceUnprocessableEntityError({ errorDetails })
266
+ ),
267
+ import_effect5.Match.when(
268
+ (code2) => code2 >= 500,
269
+ () => new BigCommerceConnectionError({
270
+ message: `Server error: ${code}`,
271
+ type: code === BigCommerceStatusCodes.INTERNAL_SERVER_ERROR ? "internalError" : code === BigCommerceStatusCodes.BAD_GATEWAY || code === BigCommerceStatusCodes.GATEWAY_TIMEOUT ? "timeout" : "internalError"
272
+ })
273
+ ),
274
+ import_effect5.Match.orElse(() => new BigCommerceUnknownError({ cause: errorDetails }))
275
+ )
276
+ )
277
+ )
278
+ );
279
+ };
280
+ var transformResponse = (response, schema) => {
281
+ if (response.ok) {
282
+ return processSuccessResponse(response, schema);
283
+ }
284
+ return processErrorResponse(response);
285
+ };
286
+
287
+ // src/validation/index.ts
288
+ var import_effect7 = require("effect");
289
+
290
+ // src/validation/validation.error.ts
291
+ var import_effect6 = require("effect");
292
+ var InputValidationError = class extends import_effect6.Data.TaggedError("InputValidationError") {
293
+ };
294
+
295
+ // src/validation/index.ts
296
+ var validateInput = (schema, data) => {
297
+ return import_effect7.Effect.try({
298
+ try: () => schema.parse(data),
299
+ catch: (error) => new InputValidationError({ input: data, error })
300
+ });
301
+ };
302
+
303
+ // src/bigcommerce-entities/customers/schemas/customer.schema.ts
304
+ var z = __toESM(require("zod"));
305
+ var CustomerSchema = z.object({
306
+ email: z.email(),
307
+ first_name: z.string(),
308
+ last_name: z.string(),
309
+ company: z.string().optional(),
310
+ phone: z.string(),
311
+ customer_group_id: z.int(),
312
+ id: z.int(),
313
+ channel_ids: z.array(z.int())
314
+ });
315
+ var FindCustomerResponse = z.object({
316
+ data: z.array(CustomerSchema),
317
+ meta: z.object({
318
+ pagination: z.object({
319
+ total: z.int(),
320
+ count: z.int(),
321
+ per_page: z.int(),
322
+ current_page: z.int(),
323
+ total_pages: z.int(),
324
+ links: z.object({
325
+ previous: z.string().optional().nullable(),
326
+ current: z.string(),
327
+ next: z.string().optional().nullable()
328
+ })
329
+ })
330
+ })
331
+ });
332
+
333
+ // src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts
334
+ var z2 = __toESM(require("zod"));
335
+ var FindCustomersCriteriaSchema = z2.object({
336
+ "id:in": z2.array(z2.int()).transform((ids) => ids.join(",")).optional(),
337
+ page: z2.int().optional(),
338
+ limit: z2.int().optional(),
339
+ "company:in": z2.array(z2.string()).transform((companies) => companies.join(",")).optional(),
340
+ "customer_group_id:in": z2.array(z2.int()).transform((ids) => ids.join(",")).optional()
341
+ });
342
+
343
+ // src/bigcommerce-entities/customers/find-customers.ts
344
+ var findCustomers = (criteria) => {
345
+ return import_effect8.Effect.gen(function* () {
346
+ const fetcher = yield* BigCommerceFetcher;
347
+ const validatedResponse = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});
348
+ const query = {};
349
+ for (const [key, value] of Object.entries(validatedResponse)) {
350
+ if (value !== void 0) {
351
+ query[key] = `${value}`;
352
+ }
353
+ }
354
+ return yield* fetcher.fetch({
355
+ method: "GET",
356
+ path: `customers`,
357
+ isB2B: false,
358
+ version: "v3",
359
+ resultSchema: FindCustomerResponse,
360
+ query
361
+ });
362
+ });
363
+ };
364
+ var getAllCustomersBy = (criteria) => {
365
+ return import_effect8.Effect.gen(function* () {
366
+ const allCustomers = [];
367
+ let page = 1;
368
+ let hasMoreCustomers = true;
369
+ while (hasMoreCustomers) {
370
+ const customers = yield* findCustomers({
371
+ ...criteria,
372
+ page,
373
+ limit: GET_CUSTOMERS_BATCH_SIZE
374
+ });
375
+ if (customers.meta.pagination.links.next) {
376
+ allCustomers.push(...customers.data);
377
+ page++;
378
+ } else {
379
+ hasMoreCustomers = false;
380
+ }
381
+ }
382
+ return allCustomers;
383
+ });
384
+ };
385
+
386
+ // src/bigcommerce-entities/customers/get-customer.ts
387
+ var import_effect9 = require("effect");
388
+ var getCustomer = (customerId) => {
389
+ return findCustomers({
390
+ "id:in": [customerId]
391
+ }).pipe(import_effect9.Effect.map((response) => response.data[0]));
392
+ };
393
+ // Annotate the CommonJS export names for ESM import in node:
394
+ 0 && (module.exports = {
395
+ findCustomers,
396
+ getAllCustomersBy,
397
+ getCustomer
398
+ });
399
+ //# sourceMappingURL=customers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bigcommerce-entities/customers/index.ts","../src/bigcommerce-entities/customers/find-customers.ts","../src/constants.ts","../src/core/bigcommerce.error.ts","../src/core/bigcommerce.fetcher.ts","../src/core/bigcommerce.fetcher.live.ts","../src/core/config.ts","../src/validation/index.ts","../src/validation/validation.error.ts","../src/bigcommerce-entities/customers/schemas/customer.schema.ts","../src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts","../src/bigcommerce-entities/customers/get-customer.ts"],"sourcesContent":["export * from './find-customers';\nexport * from './get-customer';\n","import { Effect } from 'effect';\nimport { GET_CUSTOMERS_BATCH_SIZE } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport { FindCustomerResponse, type Customer } from './schemas/customer.schema';\nimport {\n FindCustomersCriteriaSchema,\n type FindCustomersCriteriaInput,\n} from './schemas/find-customer.criteria';\n\nexport const findCustomers = (criteria?: FindCustomersCriteriaInput) => {\n return Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedResponse = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(validatedResponse)) {\n if (value !== undefined) {\n query[key] = `${value}`;\n }\n }\n return yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query,\n });\n });\n};\n\nexport const getAllCustomersBy = (criteria: Omit<FindCustomersCriteriaInput, 'page' | 'limit'>) => {\n return Effect.gen(function* () {\n const allCustomers: Customer[] = [];\n let page = 1;\n let hasMoreCustomers = true;\n\n while (hasMoreCustomers) {\n const customers = yield* findCustomers({\n ...criteria,\n page,\n limit: GET_CUSTOMERS_BATCH_SIZE,\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 { Duration, Schedule } from 'effect';\n\nexport const DEFAULT_TIMEOUT_MS = 30000;\nexport const API_BASE_URLS = {\n B2B: 'https://api-b2b.bigcommerce.com/api',\n REGULAR: 'https://api.bigcommerce.com/stores',\n} as const;\nexport const GET_ORDER_BATCH_SIZE = 250;\nexport const UPDATE_PRODUCT_BATCH_SIZE = 5;\nexport const UPDATE_INVENTORY_BATCH_SIZE = 2000;\nexport const UPDATE_INVENTORY_CONCURRENCY = 2;\nexport const DEFAULT_RETRY_TIMES = 2;\nexport const DEFAULT_RETRY_WAIT = 200;\nexport const DEFAULT_RETRY_SCHEDULE = Schedule.exponential(Duration.millis(DEFAULT_RETRY_WAIT));\nexport const RETRY_POLICY_WITH_BACKOFF = Schedule.exponential(\n Duration.millis(DEFAULT_RETRY_WAIT),\n 2,\n).pipe(Schedule.intersect(Schedule.recurs(DEFAULT_RETRY_TIMES)));\nexport const GET_CUSTOMERS_BATCH_SIZE = 100;\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>,\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>,\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 { API_BASE_URLS } 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 } from './config';\n\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.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 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>): URL => {\n const base = new URL(url);\n if (!params) {\n return base;\n }\n for (const [key, value] of Object.entries(params)) {\n base.searchParams.append(key, `${value}`);\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 `${API_BASE_URLS.B2B}/${version}/io/${path}`;\n }\n return `${API_BASE_URLS.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.ZodTypeAny>(\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 { Config, Context, Data, Effect, Layer } from 'effect';\nimport { DEFAULT_TIMEOUT_MS } 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, string>;\n readonly getClientId: Effect.Effect<string, NoBigCommerceConfigError, string>;\n readonly getClientSecret: Effect.Effect<string, NoBigCommerceConfigError, string>;\n readonly getAccessToken: Effect.Effect<string, NoBigCommerceConfigError, string>;\n readonly getTimeout: Effect.Effect<number, NoBigCommerceConfigError, string>;\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(DEFAULT_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(DEFAULT_TIMEOUT_MS),\n});\n","import { Effect } from 'effect';\nimport * as z from 'zod';\nimport { InputValidationError } from './validation.error';\nexport const validateInput = <Schema extends z.ZodType>(schema: Schema, data: z.input<Schema>) => {\n return Effect.try({\n try: () => schema.parse(data),\n catch: (error) => new InputValidationError({ input: data, error: error as z.ZodError }),\n });\n};\n","import { Data } from 'effect';\nimport * as z from 'zod';\nexport class InputValidationError extends Data.TaggedError('InputValidationError')<{\n input: unknown;\n error: z.ZodError;\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\nexport type Customer = z.output<typeof CustomerSchema>;\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\nexport type FindCustomersCriteriaInput = z.input<typeof FindCustomersCriteriaSchema>;\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"],"mappings":"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","names":["import_effect","import_effect","import_effect","import_effect","import_effect","code","import_effect","import_effect","z","import_effect"]}
@@ -0,0 +1,107 @@
1
+ import {
2
+ validateInput
3
+ } from "./chunk-CERZFSUE.mjs";
4
+ import {
5
+ BigCommerceFetcher,
6
+ GET_CUSTOMERS_BATCH_SIZE
7
+ } from "./chunk-7GBRYAQG.mjs";
8
+
9
+ // src/bigcommerce-entities/customers/find-customers.ts
10
+ import { Effect } from "effect";
11
+
12
+ // src/bigcommerce-entities/customers/schemas/customer.schema.ts
13
+ import * as z from "zod";
14
+ var CustomerSchema = z.object({
15
+ email: z.email(),
16
+ first_name: z.string(),
17
+ last_name: z.string(),
18
+ company: z.string().optional(),
19
+ phone: z.string(),
20
+ customer_group_id: z.int(),
21
+ id: z.int(),
22
+ channel_ids: z.array(z.int())
23
+ });
24
+ var FindCustomerResponse = z.object({
25
+ data: z.array(CustomerSchema),
26
+ meta: z.object({
27
+ pagination: z.object({
28
+ total: z.int(),
29
+ count: z.int(),
30
+ per_page: z.int(),
31
+ current_page: z.int(),
32
+ total_pages: z.int(),
33
+ links: z.object({
34
+ previous: z.string().optional().nullable(),
35
+ current: z.string(),
36
+ next: z.string().optional().nullable()
37
+ })
38
+ })
39
+ })
40
+ });
41
+
42
+ // src/bigcommerce-entities/customers/schemas/find-customer.criteria.ts
43
+ import * as z2 from "zod";
44
+ var FindCustomersCriteriaSchema = z2.object({
45
+ "id:in": z2.array(z2.int()).transform((ids) => ids.join(",")).optional(),
46
+ page: z2.int().optional(),
47
+ limit: z2.int().optional(),
48
+ "company:in": z2.array(z2.string()).transform((companies) => companies.join(",")).optional(),
49
+ "customer_group_id:in": z2.array(z2.int()).transform((ids) => ids.join(",")).optional()
50
+ });
51
+
52
+ // src/bigcommerce-entities/customers/find-customers.ts
53
+ var findCustomers = (criteria) => {
54
+ return Effect.gen(function* () {
55
+ const fetcher = yield* BigCommerceFetcher;
56
+ const validatedResponse = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});
57
+ const query = {};
58
+ for (const [key, value] of Object.entries(validatedResponse)) {
59
+ if (value !== void 0) {
60
+ query[key] = `${value}`;
61
+ }
62
+ }
63
+ return yield* fetcher.fetch({
64
+ method: "GET",
65
+ path: `customers`,
66
+ isB2B: false,
67
+ version: "v3",
68
+ resultSchema: FindCustomerResponse,
69
+ query
70
+ });
71
+ });
72
+ };
73
+ var getAllCustomersBy = (criteria) => {
74
+ return Effect.gen(function* () {
75
+ const allCustomers = [];
76
+ let page = 1;
77
+ let hasMoreCustomers = true;
78
+ while (hasMoreCustomers) {
79
+ const customers = yield* findCustomers({
80
+ ...criteria,
81
+ page,
82
+ limit: GET_CUSTOMERS_BATCH_SIZE
83
+ });
84
+ if (customers.meta.pagination.links.next) {
85
+ allCustomers.push(...customers.data);
86
+ page++;
87
+ } else {
88
+ hasMoreCustomers = false;
89
+ }
90
+ }
91
+ return allCustomers;
92
+ });
93
+ };
94
+
95
+ // src/bigcommerce-entities/customers/get-customer.ts
96
+ import { Effect as Effect2 } from "effect";
97
+ var getCustomer = (customerId) => {
98
+ return findCustomers({
99
+ "id:in": [customerId]
100
+ }).pipe(Effect2.map((response) => response.data[0]));
101
+ };
102
+ export {
103
+ findCustomers,
104
+ getAllCustomersBy,
105
+ getCustomer
106
+ };
107
+ //# sourceMappingURL=customers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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-customer.ts"],"sourcesContent":["import { Effect } from 'effect';\nimport { GET_CUSTOMERS_BATCH_SIZE } from '../../constants';\nimport { BigCommerceFetcher } from '../../core';\nimport { validateInput } from '../../validation';\nimport { FindCustomerResponse, type Customer } from './schemas/customer.schema';\nimport {\n FindCustomersCriteriaSchema,\n type FindCustomersCriteriaInput,\n} from './schemas/find-customer.criteria';\n\nexport const findCustomers = (criteria?: FindCustomersCriteriaInput) => {\n return Effect.gen(function* () {\n const fetcher = yield* BigCommerceFetcher;\n const validatedResponse = yield* validateInput(FindCustomersCriteriaSchema, criteria ?? {});\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(validatedResponse)) {\n if (value !== undefined) {\n query[key] = `${value}`;\n }\n }\n return yield* fetcher.fetch({\n method: 'GET',\n path: `customers`,\n isB2B: false,\n version: 'v3',\n resultSchema: FindCustomerResponse,\n query,\n });\n });\n};\n\nexport const getAllCustomersBy = (criteria: Omit<FindCustomersCriteriaInput, 'page' | 'limit'>) => {\n return Effect.gen(function* () {\n const allCustomers: Customer[] = [];\n let page = 1;\n let hasMoreCustomers = true;\n\n while (hasMoreCustomers) {\n const customers = yield* findCustomers({\n ...criteria,\n page,\n limit: GET_CUSTOMERS_BATCH_SIZE,\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\nexport type Customer = z.output<typeof CustomerSchema>;\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\nexport type FindCustomersCriteriaInput = z.input<typeof FindCustomersCriteriaSchema>;\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"],"mappings":";;;;;;;;;AAAA,SAAS,cAAc;;;ACAvB,YAAY,OAAO;AAEZ,IAAM,iBAAmB,SAAO;AAAA,EACrC,OAAS,QAAM;AAAA,EACf,YAAc,SAAO;AAAA,EACrB,WAAa,SAAO;AAAA,EACpB,SAAW,SAAO,EAAE,SAAS;AAAA,EAC7B,OAAS,SAAO;AAAA,EAChB,mBAAqB,MAAI;AAAA,EACzB,IAAM,MAAI;AAAA,EACV,aAAe,QAAQ,MAAI,CAAC;AAC9B,CAAC;AAEM,IAAM,uBAAyB,SAAO;AAAA,EAC3C,MAAQ,QAAM,cAAc;AAAA,EAC5B,MAAQ,SAAO;AAAA,IACb,YAAc,SAAO;AAAA,MACnB,OAAS,MAAI;AAAA,MACb,OAAS,MAAI;AAAA,MACb,UAAY,MAAI;AAAA,MAChB,cAAgB,MAAI;AAAA,MACpB,aAAe,MAAI;AAAA,MACnB,OAAS,SAAO;AAAA,QACd,UAAY,SAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QACzC,SAAW,SAAO;AAAA,QAClB,MAAQ,SAAO,EAAE,SAAS,EAAE,SAAS;AAAA,MACvC,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH,CAAC;;;AC7BD,YAAYA,QAAO;AACZ,IAAM,8BAAgC,UAAO;AAAA,EAClD,SACG,SAAQ,OAAI,CAAC,EACb,UAAU,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,EAChC,SAAS;AAAA,EACZ,MAAQ,OAAI,EAAE,SAAS;AAAA,EACvB,OAAS,OAAI,EAAE,SAAS;AAAA,EACxB,cACG,SAAQ,UAAO,CAAC,EAChB,UAAU,CAAC,cAAc,UAAU,KAAK,GAAG,CAAC,EAC5C,SAAS;AAAA,EACZ,wBACG,SAAQ,OAAI,CAAC,EACb,UAAU,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,EAChC,SAAS;AACd,CAAC;;;AFNM,IAAM,gBAAgB,CAAC,aAA0C;AACtE,SAAO,OAAO,IAAI,aAAa;AAC7B,UAAM,UAAU,OAAO;AACvB,UAAM,oBAAoB,OAAO,cAAc,6BAA6B,YAAY,CAAC,CAAC;AAC1F,UAAM,QAAgC,CAAC;AACvC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAC5D,UAAI,UAAU,QAAW;AACvB,cAAM,GAAG,IAAI,GAAG,KAAK;AAAA,MACvB;AAAA,IACF;AACA,WAAO,OAAO,QAAQ,MAAM;AAAA,MAC1B,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,oBAAoB,CAAC,aAAiE;AACjG,SAAO,OAAO,IAAI,aAAa;AAC7B,UAAM,eAA2B,CAAC;AAClC,QAAI,OAAO;AACX,QAAI,mBAAmB;AAEvB,WAAO,kBAAkB;AACvB,YAAM,YAAY,OAAO,cAAc;AAAA,QACrC,GAAG;AAAA,QACH;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAED,UAAI,UAAU,KAAK,WAAW,MAAM,MAAM;AACxC,qBAAa,KAAK,GAAG,UAAU,IAAI;AACnC;AAAA,MACF,OAAO;AACL,2BAAmB;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AACH;;;AGtDA,SAAS,UAAAC,eAAc;AAGhB,IAAM,cAAc,CAAC,eAAuB;AACjD,SAAO,cAAc;AAAA,IACnB,SAAS,CAAC,UAAU;AAAA,EACtB,CAAC,EAAE,KAAKC,QAAO,IAAI,CAAC,aAAa,SAAS,KAAK,CAAC,CAAC,CAAC;AACpD;","names":["z","Effect","Effect"]}
@@ -0,0 +1,29 @@
1
+ import { B as BigCommerceFetcher } from './bigcommerce.fetcher-D1TyK4y4.mjs';
2
+ export { e as BigCommerceConflictError, f as BigCommerceConnectionError, k as BigCommerceFetchMethods, l as BigCommerceFetchParams, c as BigCommerceForbiddenError, i as BigCommerceInvalidRequestError, h as BigCommerceInvalidResponseError, d as BigCommerceNotFoundError, j as BigCommerceParseResponseError, b as BigCommerceUnauthorizedError, g as BigCommerceUnknownError, a as BigCommerceUnprocessableEntityError, S as SomeBigCommerceError } from './bigcommerce.fetcher-D1TyK4y4.mjs';
3
+ import * as effect_Cause from 'effect/Cause';
4
+ import * as effect_Types from 'effect/Types';
5
+ import { Context, Effect, Layer } from 'effect';
6
+ import 'zod';
7
+
8
+ declare const NoBigCommerceConfigError_base: new <A extends Record<string, any> = {}>(args: effect_Types.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => effect_Cause.YieldableError & {
9
+ readonly _tag: "NoBigCommerceConfigError";
10
+ } & Readonly<A>;
11
+ declare class NoBigCommerceConfigError extends NoBigCommerceConfigError_base<{
12
+ readonly key: string;
13
+ }> {
14
+ }
15
+ declare const BigCommerceConfig_base: Context.TagClass<BigCommerceConfig, "BigCommerceConfig", {
16
+ readonly getStoreHash: Effect.Effect<string, NoBigCommerceConfigError, string>;
17
+ readonly getClientId: Effect.Effect<string, NoBigCommerceConfigError, string>;
18
+ readonly getClientSecret: Effect.Effect<string, NoBigCommerceConfigError, string>;
19
+ readonly getAccessToken: Effect.Effect<string, NoBigCommerceConfigError, string>;
20
+ readonly getTimeout: Effect.Effect<number, NoBigCommerceConfigError, string>;
21
+ }>;
22
+ declare class BigCommerceConfig extends BigCommerceConfig_base {
23
+ }
24
+ declare const BigCommerceConfigLive: Layer.Layer<BigCommerceConfig, NoBigCommerceConfigError, never>;
25
+ declare const BigCommerceConfigTest: Layer.Layer<BigCommerceConfig, never, never>;
26
+
27
+ declare const BigCommerceFetcherLive: Layer.Layer<BigCommerceFetcher, NoBigCommerceConfigError, string | BigCommerceConfig>;
28
+
29
+ export { BigCommerceConfig, BigCommerceConfigLive, BigCommerceConfigTest, BigCommerceFetcher, BigCommerceFetcherLive, NoBigCommerceConfigError };