@marteye/studiojs 1.1.48-beta.1 → 1.1.49-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -101
- package/dist/index.common.d.ts +1 -0
- package/dist/index.d.ts +3188 -13
- package/dist/index.esm.js +1158 -747
- package/dist/index.js +1172 -746
- package/dist/media-crate-client.d.ts +285 -0
- package/dist/net/http.d.ts +3 -3
- package/dist/resources/actions.d.ts +0 -1
- package/dist/resources/customerLists.d.ts +17 -1
- package/dist/resources/payouts.d.ts +4 -0
- package/dist/resources/productCodes.d.ts +5 -1
- package/dist/resources/webhooks.d.ts +0 -1
- package/dist/resources.d.ts +128 -127
- package/dist/studio.d.ts +128 -127
- package/dist/types.d.ts +48 -1
- package/package.json +1 -1
- package/dist/__tests__/activity.test.d.ts +0 -1
- package/dist/__tests__/cattlePassport.test.d.ts +0 -1
- package/dist/__tests__/customerLists.test.d.ts +0 -1
- package/dist/__tests__/customerLists.unit.test.d.ts +0 -1
- package/dist/__tests__/eartag.test.d.ts +0 -1
- package/dist/__tests__/lot-util.test.d.ts +0 -1
- package/dist/__tests__/lots.test.d.ts +0 -1
- package/dist/__tests__/markets.test.d.ts +0 -1
- package/dist/__tests__/media.test.d.ts +0 -1
- package/dist/__tests__/sales.test.d.ts +0 -1
- package/dist/__tests__/studio.test.d.ts +0 -311
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
export declare const MEDIA_CRATE_V2_BASE_URL_ENV_VARS: readonly ["MEDIA_CRATE_V2_BASE_URL", "NEXT_PUBLIC_MEDIA_CRATE_BASE_URL"];
|
|
2
|
+
export type MediaCrateProjectEnv = Record<string, string | undefined>;
|
|
3
|
+
export declare const MEDIA_CRATE_SINGLE_UPLOAD_MAX_BYTES: number;
|
|
4
|
+
export declare const MEDIA_CRATE_MULTIPART_MAX_CHUNK_BYTES: number;
|
|
5
|
+
export declare const MEDIA_CRATE_DEFAULT_CHUNK_BYTES: number;
|
|
6
|
+
export declare const MEDIA_CRATE_MEDIA_STATUSES: readonly ["uploading", "processing", "done", "error", "deleted", "partial", "expired", "indeterminate"];
|
|
7
|
+
/** @deprecated Use MEDIA_CRATE_MEDIA_STATUSES. */
|
|
8
|
+
export declare const MEDIA_CRATE_ASSET_STATUSES: readonly ["uploading", "processing", "done", "error", "deleted", "partial", "expired", "indeterminate"];
|
|
9
|
+
export type MediaCrateUploadMode = "lot" | "transform" | "direct";
|
|
10
|
+
export type MediaCrateMediaMode = Exclude<MediaCrateUploadMode, "lot">;
|
|
11
|
+
export type MediaCrateMediaStatus = (typeof MEDIA_CRATE_MEDIA_STATUSES)[number];
|
|
12
|
+
/** @deprecated Use MediaCrateUploadMode. */
|
|
13
|
+
export type MediaCrateAssetMode = MediaCrateUploadMode;
|
|
14
|
+
/** @deprecated Use MediaCrateMediaStatus. */
|
|
15
|
+
export type MediaCrateAssetStatus = MediaCrateMediaStatus;
|
|
16
|
+
export type MediaCrateUploadStrategy = "auto" | "single" | "multipart";
|
|
17
|
+
export type MediaCrateExpectedVariant = {
|
|
18
|
+
url: string;
|
|
19
|
+
key: string;
|
|
20
|
+
ready: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type MediaCrateExpectedUrls = {
|
|
23
|
+
original: MediaCrateExpectedVariant;
|
|
24
|
+
variants?: Record<string, MediaCrateExpectedVariant>;
|
|
25
|
+
};
|
|
26
|
+
export type MediaCrateStatusUrls = MediaCrateExpectedUrls;
|
|
27
|
+
export type MediaCrateVariantSource = MediaCrateExpectedUrls | MediaCrateStatusUrls | {
|
|
28
|
+
expected: MediaCrateExpectedUrls;
|
|
29
|
+
} | {
|
|
30
|
+
urls: MediaCrateStatusUrls;
|
|
31
|
+
};
|
|
32
|
+
export type MediaCrateVariantSelectionOptions = {
|
|
33
|
+
/** Only return the variant if Media Crate marks it as ready. */
|
|
34
|
+
requireReady?: boolean;
|
|
35
|
+
/** Fall back to the original URL when the named variant is absent. */
|
|
36
|
+
fallbackToOriginal?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export declare function getMediaCrateVariant(source: MediaCrateVariantSource, variantName: string, opts?: MediaCrateVariantSelectionOptions): MediaCrateExpectedVariant | undefined;
|
|
39
|
+
export declare function getMediaCrateVariantUrl(source: MediaCrateVariantSource, variantName: string, opts?: MediaCrateVariantSelectionOptions): string | undefined;
|
|
40
|
+
export declare function requireMediaCrateVariantUrl(source: MediaCrateVariantSource, variantName: string, opts?: MediaCrateVariantSelectionOptions): string;
|
|
41
|
+
export type MediaCrateUploadResult = {
|
|
42
|
+
message?: string;
|
|
43
|
+
assetId: string;
|
|
44
|
+
statusUrl: string;
|
|
45
|
+
status: MediaCrateMediaStatus;
|
|
46
|
+
expected: MediaCrateExpectedUrls;
|
|
47
|
+
retryAfterMs?: number;
|
|
48
|
+
};
|
|
49
|
+
export type MediaCrateStatusResult = {
|
|
50
|
+
assetId: string;
|
|
51
|
+
marketId: string;
|
|
52
|
+
mode: MediaCrateUploadMode;
|
|
53
|
+
status: MediaCrateMediaStatus;
|
|
54
|
+
urls: MediaCrateStatusUrls;
|
|
55
|
+
error?: string;
|
|
56
|
+
retryAfterMs?: number;
|
|
57
|
+
attemptCount?: number;
|
|
58
|
+
subStatus?: "queued-for-capacity";
|
|
59
|
+
queuedSince?: string;
|
|
60
|
+
};
|
|
61
|
+
export type MediaCrateDuplicateResult = MediaCrateUploadResult;
|
|
62
|
+
export type MediaCrateMultipartStartResult = {
|
|
63
|
+
message: string;
|
|
64
|
+
data: {
|
|
65
|
+
parsedFilePath: string;
|
|
66
|
+
uploadId: string;
|
|
67
|
+
key: string;
|
|
68
|
+
assetId: string;
|
|
69
|
+
generation: number;
|
|
70
|
+
status: "started";
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
export type MediaCrateMultipartChunkResult = {
|
|
74
|
+
message: string;
|
|
75
|
+
data: {
|
|
76
|
+
partNumber: number;
|
|
77
|
+
eTag?: string | null;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
export type MediaCrateStandaloneMultipartStartResult = MediaCrateUploadResult & {
|
|
81
|
+
uploadId: string;
|
|
82
|
+
targetKey: string;
|
|
83
|
+
};
|
|
84
|
+
export type MediaCrateStandaloneMultipartChunkResult = {
|
|
85
|
+
partNumber: number;
|
|
86
|
+
eTag?: string | null;
|
|
87
|
+
};
|
|
88
|
+
export type MediaCrateErrorResponse = {
|
|
89
|
+
message: string;
|
|
90
|
+
collidingKeys?: string[];
|
|
91
|
+
};
|
|
92
|
+
export type MediaCrateMultipartSection = {
|
|
93
|
+
partNumber: string;
|
|
94
|
+
eTag: string;
|
|
95
|
+
};
|
|
96
|
+
export type MediaCrateUploadProgressPhase = "starting" | "resuming" | "uploading" | "retrying" | "finishing" | "uploaded" | "error";
|
|
97
|
+
export type MediaCrateUploadProgress = {
|
|
98
|
+
phase: MediaCrateUploadProgressPhase;
|
|
99
|
+
bytesUploaded: number;
|
|
100
|
+
totalBytes: number;
|
|
101
|
+
partNumber?: number;
|
|
102
|
+
totalParts?: number;
|
|
103
|
+
attempt?: number;
|
|
104
|
+
uploadId?: string;
|
|
105
|
+
};
|
|
106
|
+
export type ReactNativeFormDataFile = {
|
|
107
|
+
uri: string;
|
|
108
|
+
type?: string;
|
|
109
|
+
name?: string;
|
|
110
|
+
};
|
|
111
|
+
export type MediaCrateUploadPartBody = Blob | ArrayBuffer | Uint8Array | string | ReactNativeFormDataFile;
|
|
112
|
+
export type MediaCrateUploadPartRequest = {
|
|
113
|
+
start: number;
|
|
114
|
+
end: number;
|
|
115
|
+
partNumber: number;
|
|
116
|
+
};
|
|
117
|
+
export type MediaCrateUploadSource = {
|
|
118
|
+
name: string;
|
|
119
|
+
type?: string;
|
|
120
|
+
size: number;
|
|
121
|
+
lastModified?: number;
|
|
122
|
+
fingerprint?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Set this to false for adapters that can only upload through multipart
|
|
125
|
+
* form-data, for example some React Native URI-backed sources.
|
|
126
|
+
*/
|
|
127
|
+
canUseSingleUpload?: boolean;
|
|
128
|
+
getPart: (request: MediaCrateUploadPartRequest) => Promise<MediaCrateUploadPartBody>;
|
|
129
|
+
};
|
|
130
|
+
export type MediaCrateMultipartSession = {
|
|
131
|
+
key: string;
|
|
132
|
+
mode: MediaCrateUploadMode;
|
|
133
|
+
path: string;
|
|
134
|
+
marketId: string;
|
|
135
|
+
uploadId: string;
|
|
136
|
+
chunkSize: number;
|
|
137
|
+
totalBytes: number;
|
|
138
|
+
totalParts: number;
|
|
139
|
+
sourceFingerprint: string;
|
|
140
|
+
overwrite: boolean;
|
|
141
|
+
sections: MediaCrateMultipartSection[];
|
|
142
|
+
targetKey?: string;
|
|
143
|
+
startResult?: MediaCrateUploadResult;
|
|
144
|
+
createdAt: number;
|
|
145
|
+
updatedAt: number;
|
|
146
|
+
};
|
|
147
|
+
export type MediaCrateMultipartSessionStore = {
|
|
148
|
+
get: (key: string) => Promise<MediaCrateMultipartSession | null>;
|
|
149
|
+
set: (key: string, session: MediaCrateMultipartSession) => Promise<void>;
|
|
150
|
+
delete: (key: string) => Promise<void>;
|
|
151
|
+
};
|
|
152
|
+
export type MediaCrateClientOptions = {
|
|
153
|
+
baseUrl?: string;
|
|
154
|
+
marketId: string;
|
|
155
|
+
getFirebaseToken: () => Promise<string>;
|
|
156
|
+
fetchImpl?: typeof fetch;
|
|
157
|
+
sessionStore?: MediaCrateMultipartSessionStore;
|
|
158
|
+
chunkSizeBytes?: number;
|
|
159
|
+
maxPartAttempts?: number;
|
|
160
|
+
maxFinishAttempts?: number;
|
|
161
|
+
retryBaseDelayMs?: number;
|
|
162
|
+
maxConcurrentParts?: number;
|
|
163
|
+
defaultUploadStrategy?: MediaCrateUploadStrategy;
|
|
164
|
+
sleep?: (durationMs: number) => Promise<void>;
|
|
165
|
+
now?: () => number;
|
|
166
|
+
random?: () => number;
|
|
167
|
+
};
|
|
168
|
+
export type MediaCrateUploadOptions = {
|
|
169
|
+
overwrite?: boolean;
|
|
170
|
+
strategy?: MediaCrateUploadStrategy;
|
|
171
|
+
chunkSizeBytes?: number;
|
|
172
|
+
maxConcurrentParts?: number;
|
|
173
|
+
sessionKey?: string;
|
|
174
|
+
onProgress?: (progress: MediaCrateUploadProgress) => void;
|
|
175
|
+
};
|
|
176
|
+
export type MediaCrateLotMediaUploadOptions = MediaCrateUploadOptions & {
|
|
177
|
+
saleId: string;
|
|
178
|
+
lotId: string;
|
|
179
|
+
attributeId: string;
|
|
180
|
+
source: MediaCrateUploadSource;
|
|
181
|
+
fileName?: string;
|
|
182
|
+
};
|
|
183
|
+
export type MediaCrateMediaUploadOptions = MediaCrateUploadOptions & {
|
|
184
|
+
mode: MediaCrateMediaMode;
|
|
185
|
+
path: string;
|
|
186
|
+
source: MediaCrateUploadSource;
|
|
187
|
+
};
|
|
188
|
+
export type MediaCrateDeleteOptions = {
|
|
189
|
+
fileUrl: string;
|
|
190
|
+
};
|
|
191
|
+
export type MediaCrateDuplicateOptions = {
|
|
192
|
+
sourceUrl: string;
|
|
193
|
+
targetFilePath: string;
|
|
194
|
+
targetFileName?: string;
|
|
195
|
+
overwrite?: boolean;
|
|
196
|
+
};
|
|
197
|
+
type ParsedErrorBody = Partial<MediaCrateErrorResponse> & {
|
|
198
|
+
[key: string]: unknown;
|
|
199
|
+
};
|
|
200
|
+
export declare class MediaCrateHttpError extends Error {
|
|
201
|
+
status: number;
|
|
202
|
+
method: string;
|
|
203
|
+
url: string;
|
|
204
|
+
body: ParsedErrorBody | string | null;
|
|
205
|
+
collidingKeys?: string[];
|
|
206
|
+
constructor(args: {
|
|
207
|
+
status: number;
|
|
208
|
+
method: string;
|
|
209
|
+
url: string;
|
|
210
|
+
message: string;
|
|
211
|
+
body: ParsedErrorBody | string | null;
|
|
212
|
+
collidingKeys?: string[];
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
export declare class MediaCrateUploadSourceError extends Error {
|
|
216
|
+
constructor(message: string);
|
|
217
|
+
}
|
|
218
|
+
export declare class InMemoryMediaCrateMultipartSessionStore implements MediaCrateMultipartSessionStore {
|
|
219
|
+
private sessions;
|
|
220
|
+
get(key: string): Promise<MediaCrateMultipartSession | null>;
|
|
221
|
+
set(key: string, session: MediaCrateMultipartSession): Promise<void>;
|
|
222
|
+
delete(key: string): Promise<void>;
|
|
223
|
+
}
|
|
224
|
+
export declare function createWebUploadSource(file: Blob, opts?: {
|
|
225
|
+
name?: string;
|
|
226
|
+
type?: string;
|
|
227
|
+
lastModified?: number;
|
|
228
|
+
fingerprint?: string;
|
|
229
|
+
}): MediaCrateUploadSource;
|
|
230
|
+
export declare class MediaCrateClient {
|
|
231
|
+
readonly baseUrl: string;
|
|
232
|
+
readonly marketId: string;
|
|
233
|
+
private getFirebaseToken;
|
|
234
|
+
private fetchImpl;
|
|
235
|
+
private sessionStore;
|
|
236
|
+
private chunkSizeBytes;
|
|
237
|
+
private maxPartAttempts;
|
|
238
|
+
private maxFinishAttempts;
|
|
239
|
+
private retryBaseDelayMs;
|
|
240
|
+
private maxConcurrentParts;
|
|
241
|
+
private defaultUploadStrategy;
|
|
242
|
+
private sleep;
|
|
243
|
+
private now;
|
|
244
|
+
private random;
|
|
245
|
+
constructor(opts: MediaCrateClientOptions);
|
|
246
|
+
createMediaPath(...segments: string[]): string;
|
|
247
|
+
createLotMediaPath(args: {
|
|
248
|
+
saleId: string;
|
|
249
|
+
lotId: string;
|
|
250
|
+
attributeId: string;
|
|
251
|
+
fileName: string;
|
|
252
|
+
}): string;
|
|
253
|
+
uploadLotMedia(opts: MediaCrateLotMediaUploadOptions): Promise<MediaCrateUploadResult>;
|
|
254
|
+
uploadMedia(opts: MediaCrateMediaUploadOptions): Promise<MediaCrateUploadResult>;
|
|
255
|
+
private upload;
|
|
256
|
+
getStatus(statusUrl: string): Promise<MediaCrateStatusResult>;
|
|
257
|
+
delete(opts: MediaCrateDeleteOptions): Promise<void>;
|
|
258
|
+
duplicate(opts: MediaCrateDuplicateOptions): Promise<MediaCrateDuplicateResult>;
|
|
259
|
+
cancelMultipartUpload(args: {
|
|
260
|
+
mode: MediaCrateUploadMode;
|
|
261
|
+
path: string;
|
|
262
|
+
uploadId: string;
|
|
263
|
+
fileName?: string;
|
|
264
|
+
sessionKey?: string;
|
|
265
|
+
}): Promise<void>;
|
|
266
|
+
private resolveUploadStrategy;
|
|
267
|
+
private uploadSingle;
|
|
268
|
+
private uploadMultipart;
|
|
269
|
+
private getOrStartMultipartSession;
|
|
270
|
+
private startMultipartUpload;
|
|
271
|
+
private uploadPartWithRetry;
|
|
272
|
+
private uploadMultipartPart;
|
|
273
|
+
private finishMultipartUploadWithRetry;
|
|
274
|
+
private finishMultipartUpload;
|
|
275
|
+
private cancelDirectMultipartUpload;
|
|
276
|
+
private cancelProcessedMultipartUpload;
|
|
277
|
+
private runWithRetry;
|
|
278
|
+
private getRetryDelay;
|
|
279
|
+
private createBaseHeaders;
|
|
280
|
+
private createUploadHeaders;
|
|
281
|
+
private assertPathMatchesMarket;
|
|
282
|
+
private urlFor;
|
|
283
|
+
}
|
|
284
|
+
export declare function getMediaCrateBaseUrlFromEnv(env?: MediaCrateProjectEnv): string;
|
|
285
|
+
export {};
|
package/dist/net/http.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default function SimpleHttpClient(baseUrl: string, apiKey: string, fetch: any, defaultTimeout: number, debug?: boolean): {
|
|
2
2
|
get: <T>(path: string, queryParams?: any) => Promise<T>;
|
|
3
|
-
post: <
|
|
4
|
-
patch: <
|
|
5
|
-
delete: <
|
|
3
|
+
post: <T>(path: string, body: any) => Promise<T>;
|
|
4
|
+
patch: <T>(path: string, body: any) => Promise<T>;
|
|
5
|
+
delete: <T>(path: string) => Promise<T>;
|
|
6
6
|
};
|
|
7
7
|
export type HttpClient = ReturnType<typeof SimpleHttpClient>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HttpClient } from "../net/http";
|
|
2
2
|
export type CustomerListType = "simple" | "smart";
|
|
3
3
|
export type CustomerListRole = "buyer" | "seller" | "both";
|
|
4
|
+
export type CustomerListSourceCustomerType = Exclude<CustomerListRole, "both">;
|
|
4
5
|
export interface GeoBounds {
|
|
5
6
|
north: number;
|
|
6
7
|
south: number;
|
|
@@ -17,11 +18,16 @@ export interface CustomerListQuery {
|
|
|
17
18
|
filter?: string;
|
|
18
19
|
excludeFilters?: string[];
|
|
19
20
|
bounds?: GeoBounds;
|
|
21
|
+
sourceCustomerType?: CustomerListSourceCustomerType | null;
|
|
22
|
+
sourceSaleId?: string | null;
|
|
23
|
+
sourceCustomerIds?: string[];
|
|
20
24
|
rollingDateConfig?: RollingDateConfig;
|
|
21
25
|
secondaryFilter?: {
|
|
22
26
|
role: CustomerListRole;
|
|
23
27
|
filter?: string;
|
|
24
28
|
bounds?: GeoBounds;
|
|
29
|
+
sourceCustomerType?: CustomerListSourceCustomerType | null;
|
|
30
|
+
sourceCustomerIds?: string[];
|
|
25
31
|
rollingDateConfig?: RollingDateConfig;
|
|
26
32
|
};
|
|
27
33
|
}
|
|
@@ -62,10 +68,13 @@ export interface CustomerListMember {
|
|
|
62
68
|
phoneNumber?: string;
|
|
63
69
|
}
|
|
64
70
|
export interface CustomerListFilterGroup {
|
|
65
|
-
role
|
|
71
|
+
role?: CustomerListRole | null;
|
|
66
72
|
dateStart?: string | null;
|
|
67
73
|
dateEnd?: string | null;
|
|
68
74
|
productCodes?: string[];
|
|
75
|
+
sourceCustomerType?: CustomerListSourceCustomerType | null;
|
|
76
|
+
sourceCustomerIds?: string[];
|
|
77
|
+
sourceSaleId?: string | null;
|
|
69
78
|
geoBounds?: GeoBounds | null;
|
|
70
79
|
rollingDateConfig?: RollingDateConfig;
|
|
71
80
|
}
|
|
@@ -74,6 +83,9 @@ export interface CustomerListFilters {
|
|
|
74
83
|
dateStart?: string | null;
|
|
75
84
|
dateEnd?: string | null;
|
|
76
85
|
productCodes?: string[];
|
|
86
|
+
sourceCustomerType?: CustomerListSourceCustomerType | null;
|
|
87
|
+
sourceCustomerIds?: string[];
|
|
88
|
+
sourceSaleId?: string | null;
|
|
77
89
|
excludeDateStart?: string | null;
|
|
78
90
|
excludeDateEnd?: string | null;
|
|
79
91
|
excludedProductCodes?: string[];
|
|
@@ -155,6 +167,10 @@ export interface CustomerListMembersResponse {
|
|
|
155
167
|
export interface CustomerListPreviewResponse {
|
|
156
168
|
rows: CustomerListReportRow[];
|
|
157
169
|
summary: CustomerListReportSummary;
|
|
170
|
+
sourceGroups?: Array<{
|
|
171
|
+
source: CustomerListReportRow;
|
|
172
|
+
targets: CustomerListReportRow[];
|
|
173
|
+
}>;
|
|
158
174
|
}
|
|
159
175
|
export interface CustomerListProductCodesResponse {
|
|
160
176
|
uniqueProductCodes: string[];
|
|
@@ -29,6 +29,10 @@ export interface CreatePayoutRequest {
|
|
|
29
29
|
sortCode?: string;
|
|
30
30
|
/** Name on cheque (Cheque only). Falls back to customer display name. */
|
|
31
31
|
chequeMadePayableTo?: string;
|
|
32
|
+
/** True when the cheque has already been issued and should not be queued for Studio printing. */
|
|
33
|
+
chequeIsPrinted?: boolean;
|
|
34
|
+
/** True when the cheque was written or printed outside Studio. */
|
|
35
|
+
chequeIssuedManually?: boolean;
|
|
32
36
|
}
|
|
33
37
|
export default function create(httpClient: HttpClient): {
|
|
34
38
|
/**
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { HttpClient } from "../net/http";
|
|
2
2
|
import { ProductCodeConfiguration, ReadOptions } from "../types";
|
|
3
|
+
type ProductCodeListOptions = {
|
|
4
|
+
includeArchived?: boolean;
|
|
5
|
+
};
|
|
3
6
|
export default function create(httpClient: HttpClient): {
|
|
4
|
-
list: (marketId: string) => Promise<ProductCodeConfiguration[]>;
|
|
7
|
+
list: (marketId: string, options?: ProductCodeListOptions) => Promise<ProductCodeConfiguration[]>;
|
|
5
8
|
get: (marketId: string, id: string, options?: ReadOptions) => Promise<ProductCodeConfiguration>;
|
|
6
9
|
create: (marketId: string, data: Partial<ProductCodeConfiguration>) => Promise<ProductCodeConfiguration>;
|
|
7
10
|
update: (marketId: string, id: string, data: Partial<ProductCodeConfiguration>) => Promise<ProductCodeConfiguration>;
|
|
8
11
|
};
|
|
9
12
|
export type ProductCodes = ReturnType<typeof create>;
|
|
13
|
+
export {};
|