saferoute-api 0.0.1 → 0.0.3
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 +75 -13
- package/dist/api/widgets.d.ts +4 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -93,8 +93,8 @@
|
|
|
93
93
|
- [Данные по доступным вариантам отгрузки](#данные-по-доступным-вариантам-отгрузки)
|
|
94
94
|
- [Виджеты](#виджеты)
|
|
95
95
|
- [apiScript](#apiScript)
|
|
96
|
-
- [widgets/update-order](#
|
|
97
|
-
- [widgets/confirm-order](#
|
|
96
|
+
- [widgets/update-order](#widgetsupdate-order)
|
|
97
|
+
- [widgets/confirm-order](#widgetsconfirm-order)
|
|
98
98
|
- [Константы](#константы)
|
|
99
99
|
|
|
100
100
|
## Установка
|
|
@@ -121,12 +121,12 @@ yarn add saferoute-api
|
|
|
121
121
|
|
|
122
122
|
Реализация API-скрипта виджетов для nodejs.
|
|
123
123
|
|
|
124
|
-
Пример подключения с использованием NestJS.
|
|
124
|
+
#### Пример подключения с использованием NestJS.
|
|
125
125
|
|
|
126
126
|
```typescript
|
|
127
127
|
import { Body, Controller, Get, Post, Query, HttpCode, HttpStatus, Ip } from '@nestjs/common';
|
|
128
128
|
|
|
129
|
-
import api from 'saferoute-api';
|
|
129
|
+
import api, { WidgetsApiResponse } from 'saferoute-api';
|
|
130
130
|
|
|
131
131
|
const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
|
|
132
132
|
const shopId = 777777;
|
|
@@ -134,13 +134,13 @@ const shopId = 777777;
|
|
|
134
134
|
@Controller('widgets')
|
|
135
135
|
export default class WidgetsController {
|
|
136
136
|
@Get('api')
|
|
137
|
-
getApiRequest(@Query() query, @Ip() ip: string) {
|
|
137
|
+
getApiRequest(@Query() query, @Ip() ip: string): Promise<WidgetsApiResponse> {
|
|
138
138
|
return api.widgets.widgetApi(query.url, 'GET', query.data, { token, shopId }, ip);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
@Post('api')
|
|
142
142
|
@HttpCode(HttpStatus.OK)
|
|
143
|
-
postApiRequest(@Body('url') url: string, @Body('data') data, @Ip() ip: string) {
|
|
143
|
+
postApiRequest(@Body('url') url: string, @Body('data') data, @Ip() ip: string): Promise<WidgetsApiResponse> {
|
|
144
144
|
return api.widgets.widgetApi(url, 'POST', data, { token, shopId }, ip);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -152,40 +152,102 @@ export default class WidgetsController {
|
|
|
152
152
|
|
|
153
153
|
См. [изменение параметров заказа после его создания](https://wiki.saferoute.ru/ru/widgets/cart#%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5-%D0%B5%D0%B3%D0%BE-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F).
|
|
154
154
|
|
|
155
|
+
#### Пример использования.
|
|
156
|
+
|
|
155
157
|
```typescript
|
|
156
158
|
import api, { WidgetsUpdateOrderResponse } from 'saferoute-api';
|
|
157
159
|
|
|
158
160
|
const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
|
|
159
161
|
const shopId = 777777;
|
|
160
162
|
|
|
163
|
+
// ID заказа, полученный из виджета, либо возвращённый предыдущим вызовом api.widgets.updateOrder() в data.cabinetId
|
|
161
164
|
const orderId = '';
|
|
162
165
|
|
|
163
166
|
const res: Promise<WidgetsUpdateOrderResponse> = api.widgets.updateOrder(orderId, {
|
|
164
|
-
status: 'confirmed',
|
|
165
|
-
paymentMethod: 'cod',
|
|
166
|
-
|
|
167
|
-
cmsId: '656565',
|
|
168
|
-
payment: false,
|
|
167
|
+
status: 'confirmed', // Код статуса заказа
|
|
168
|
+
paymentMethod: 'cod', // Код способа оплаты заказа
|
|
169
|
+
COD: true, // Наличие наложенного платежа (nppOption из документации к виджету)
|
|
170
|
+
cmsId: '656565', // ID заказа в CMS
|
|
171
|
+
payment: false, // Флаг совершения оплаты
|
|
169
172
|
}, { token, shopId });
|
|
170
173
|
```
|
|
171
174
|
|
|
175
|
+
#### Описание ответа `WidgetsUpdateOrderResponse`.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
type WidgetsUpdateOrderResponse =
|
|
179
|
+
// Заказ обновлён успешно
|
|
180
|
+
// Если заказ был отправлен в Личный кабинет, data.cabinetId будет содержать его ID в Личном кабинете
|
|
181
|
+
| {
|
|
182
|
+
status: WIDGETS_RESPONSE_STATUS_CODES.SUCCESS;
|
|
183
|
+
data: {
|
|
184
|
+
cabinetId: number | null;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
// Ошибка
|
|
188
|
+
// data.code содержит код ошибки (см. документацию к виджету), data.message - текстовую расшифровку (опционально)
|
|
189
|
+
| {
|
|
190
|
+
status: WIDGETS_RESPONSE_STATUS_CODES.REQUEST_ERROR;
|
|
191
|
+
data: {
|
|
192
|
+
code: WIDGETS_UPDATE_ORDER_ERRORS;
|
|
193
|
+
message: string;
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// Ошибка авторизации - передан некорректный токен
|
|
197
|
+
| {
|
|
198
|
+
status: WIDGETS_RESPONSE_STATUS_CODES.AUTH_ERROR;
|
|
199
|
+
}
|
|
200
|
+
// Ошибка сервера - обратитесь в техподдержку
|
|
201
|
+
| {
|
|
202
|
+
status: WIDGETS_RESPONSE_STATUS_CODES.SERVER_ERROR;
|
|
203
|
+
};
|
|
204
|
+
```
|
|
205
|
+
|
|
172
206
|
### widgets/confirm-order
|
|
173
207
|
|
|
174
208
|
Функция подтверждения оформления заказа на сайте при оплате через эквайринг корзинного виджета.
|
|
175
209
|
|
|
176
210
|
См. [встроенный эквайринг](https://wiki.saferoute.ru/ru/widgets/cart#%D0%B2%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9-%D1%8D%D0%BA%D0%B2%D0%B0%D0%B9%D1%80%D0%B8%D0%BD%D0%B3).
|
|
177
211
|
|
|
212
|
+
#### Пример использования.
|
|
213
|
+
|
|
178
214
|
```typescript
|
|
179
215
|
import api, { WidgetsConfirmOrderResponse } from 'saferoute-api';
|
|
180
216
|
|
|
181
217
|
const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
|
|
182
218
|
const shopId = 777777;
|
|
183
219
|
|
|
220
|
+
// ID сессии чекаута, полученный из виджета после оформления заказа
|
|
184
221
|
const checkoutSessId = '';
|
|
185
222
|
|
|
186
223
|
const res: Promise<WidgetsConfirmOrderResponse> = api.widgets.confirmOrder(checkoutSessId, { token, shopId });
|
|
187
224
|
```
|
|
188
225
|
|
|
226
|
+
#### Описание ответа `WidgetsConfirmOrderResponse`.
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
type WidgetsConfirmOrderResponse =
|
|
230
|
+
// Заказ успешно подтверждён
|
|
231
|
+
| {
|
|
232
|
+
status: WIDGETS_RESPONSE_STATUS_CODES_SUCCESS;
|
|
233
|
+
}
|
|
234
|
+
// Ошибка, data.code содержит код ошибки (см. документацию к виджету)
|
|
235
|
+
| {
|
|
236
|
+
status: WIDGETS_RESPONSE_STATUS_CODES_REQUEST_ERROR;
|
|
237
|
+
data: {
|
|
238
|
+
code: WIDGETS_CONFIRM_ORDER_ERRORS;
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// Ошибка авторизации - передан некорректный токен
|
|
242
|
+
| {
|
|
243
|
+
status: WIDGETS_RESPONSE_STATUS_CODES_AUTH_ERROR;
|
|
244
|
+
}
|
|
245
|
+
// Ошибка сервера - обратитесь в техподдержку
|
|
246
|
+
| {
|
|
247
|
+
status: WIDGETS_RESPONSE_STATUS_CODES_SERVER_ERROR;
|
|
248
|
+
};
|
|
249
|
+
```
|
|
250
|
+
|
|
189
251
|
## Константы
|
|
190
252
|
|
|
191
253
|
### Общие
|
|
@@ -195,5 +257,5 @@ const res: Promise<WidgetsConfirmOrderResponse> = api.widgets.confirmOrder(check
|
|
|
195
257
|
### Виджеты
|
|
196
258
|
|
|
197
259
|
* `WIDGETS_RESPONSE_STATUS_CODES` - Статусы ответа API виджета
|
|
198
|
-
* `WIDGETS_UPDATE_ORDER_ERRORS` - Коды ошибок [API обновления заказа](#
|
|
199
|
-
* `WIDGETS_CONFIRM_ORDER_ERRORS` - Коды ошибок [API подтверждения оформления заказа](#
|
|
260
|
+
* `WIDGETS_UPDATE_ORDER_ERRORS` - Коды ошибок [API обновления заказа](#widgetsupdate-order) из виджета
|
|
261
|
+
* `WIDGETS_CONFIRM_ORDER_ERRORS` - Коды ошибок [API подтверждения оформления заказа](#widgetsconfirm-order) в виджете (при оплате через эквайринг виджета)
|
package/dist/api/widgets.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import { WidgetsApiResponse, WidgetsConfirmOrderResponse, WidgetsUpdateOrderPara
|
|
|
3
3
|
* Обновляет заказ, переданный из виджета
|
|
4
4
|
*
|
|
5
5
|
* @param id ID заказа
|
|
6
|
-
* @param
|
|
6
|
+
* @param COD Наличие наложенного платежа
|
|
7
7
|
* @param params Параметры, которые требуется обновить
|
|
8
8
|
* @param credentials Токен аккаунта и ID магазина
|
|
9
9
|
*/
|
|
10
|
-
export declare const updateOrder: (id: string | number, {
|
|
10
|
+
export declare const updateOrder: (id: string | number, { COD, ...params }: WidgetsUpdateOrderParams, credentials: {
|
|
11
11
|
token: string;
|
|
12
12
|
shopId: number;
|
|
13
13
|
}) => Promise<WidgetsUpdateOrderResponse>;
|
|
@@ -26,12 +26,12 @@ declare const _default: {
|
|
|
26
26
|
token: string;
|
|
27
27
|
shopId: number;
|
|
28
28
|
}, ip?: string | undefined) => Promise<WidgetsApiResponse>;
|
|
29
|
-
updateOrder: (id: string | number, {
|
|
29
|
+
updateOrder: (id: string | number, { COD, ...params }: Partial<{
|
|
30
30
|
status: string;
|
|
31
31
|
payment: boolean;
|
|
32
32
|
cmsId: string | number;
|
|
33
33
|
paymentMethod: string;
|
|
34
|
-
|
|
34
|
+
COD: boolean;
|
|
35
35
|
}>, credentials: {
|
|
36
36
|
token: string;
|
|
37
37
|
shopId: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,12 +7,12 @@ declare const _default: {
|
|
|
7
7
|
token: string;
|
|
8
8
|
shopId: number;
|
|
9
9
|
}, ip?: string | undefined) => Promise<WidgetsApiResponse>;
|
|
10
|
-
updateOrder: (id: string | number, {
|
|
10
|
+
updateOrder: (id: string | number, { COD, ...params }: Partial<{
|
|
11
11
|
status: string;
|
|
12
12
|
payment: boolean;
|
|
13
13
|
cmsId: string | number;
|
|
14
14
|
paymentMethod: string;
|
|
15
|
-
|
|
15
|
+
COD: boolean;
|
|
16
16
|
}>, credentials: {
|
|
17
17
|
token: string;
|
|
18
18
|
shopId: number;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,(()=>(()=>{"use strict";var e={496:(e,t,r)=>{const{isIP:n,isIPv4:o}=r(256),{createSocket:a}=r(696),{ADDRCONFIG:R}=r(880),{lookup:s}=r(880).promises,i=new RegExp(`^(${[/^(:{2}f{4}:)?10(?:\.\d{1,3}){3}$/,/^(:{2}f{4}:)?127(?:\.\d{1,3}){3}$/,/^(::f{4}:)?169\.254\.([1-9]|1?\d\d|2[0-4]\d|25[0-4])\.\d{1,3}$/,/^(:{2}f{4}:)?(172\.1[6-9]|172\.2\d|172\.3[01])(?:\.\d{1,3}){2}$/,/^(:{2}f{4}:)?192\.168(?:\.\d{1,3}){2}$/,/^f[cd][\da-f]{2}(::1$|:[\da-f]{1,4}){1,7}$/,/^fe[89ab][\da-f](::1$|:[\da-f]{1,4}){1,7}$/].map((e=>e.source)).join("|")})$`),u=/(?![\w-]{64})((^(?=[-\w.]{1,253}\.?$)((\w{1,63}|(\w[-\w]{0,61}\w))\.?)+$)(?<!\.{2}))/;e.exports=async function e(t,r=!1){if("string"!=typeof t)return!1;if(n(t))return!(!i.test(t)||r)||async function(e){const t=a(o(e)?"udp4":"udp6");return new Promise((r=>{try{t.once("error",(()=>t.close((()=>r(!1))))).once("listening",(()=>t.close((()=>r(!0))))).unref().bind(0,e)}catch{t.close((()=>r(!1)))}}))}(t);if(!u.test(t))return!1;try{const n=await s(t,{all:!0,family:0,verbatim:!0,hints:R});if(!Array.isArray(n))return!1;for(const{address:t}of n)if(await e(t,r))return!0}catch{}return!1},e.exports.VALID_HOSTNAME=u},412:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.confirmOrder=t.updateOrder=void 0;const o=n(r(496)),a=r(884),R=n(r(792));t.updateOrder=async(e,{
|
|
1
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,(()=>(()=>{"use strict";var e={496:(e,t,r)=>{const{isIP:n,isIPv4:o}=r(256),{createSocket:a}=r(696),{ADDRCONFIG:R}=r(880),{lookup:s}=r(880).promises,i=new RegExp(`^(${[/^(:{2}f{4}:)?10(?:\.\d{1,3}){3}$/,/^(:{2}f{4}:)?127(?:\.\d{1,3}){3}$/,/^(::f{4}:)?169\.254\.([1-9]|1?\d\d|2[0-4]\d|25[0-4])\.\d{1,3}$/,/^(:{2}f{4}:)?(172\.1[6-9]|172\.2\d|172\.3[01])(?:\.\d{1,3}){2}$/,/^(:{2}f{4}:)?192\.168(?:\.\d{1,3}){2}$/,/^f[cd][\da-f]{2}(::1$|:[\da-f]{1,4}){1,7}$/,/^fe[89ab][\da-f](::1$|:[\da-f]{1,4}){1,7}$/].map((e=>e.source)).join("|")})$`),u=/(?![\w-]{64})((^(?=[-\w.]{1,253}\.?$)((\w{1,63}|(\w[-\w]{0,61}\w))\.?)+$)(?<!\.{2}))/;e.exports=async function e(t,r=!1){if("string"!=typeof t)return!1;if(n(t))return!(!i.test(t)||r)||async function(e){const t=a(o(e)?"udp4":"udp6");return new Promise((r=>{try{t.once("error",(()=>t.close((()=>r(!1))))).once("listening",(()=>t.close((()=>r(!0))))).unref().bind(0,e)}catch{t.close((()=>r(!1)))}}))}(t);if(!u.test(t))return!1;try{const n=await s(t,{all:!0,family:0,verbatim:!0,hints:R});if(!Array.isArray(n))return!1;for(const{address:t}of n)if(await e(t,r))return!0}catch{}return!1},e.exports.VALID_HOSTNAME=u},412:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.confirmOrder=t.updateOrder=void 0;const o=n(r(496)),a=r(884),R=n(r(792));t.updateOrder=async(e,{COD:t,...r},n)=>{const o=await(0,R.default)({url:"widgets/update-order",method:"POST",data:{id:e,...r,nppOption:t},...n}),s=await o.json();return o.status===a.WIDGETS_RESPONSE_STATUS_CODES.SUCCESS||o.status===a.WIDGETS_RESPONSE_STATUS_CODES.REQUEST_ERROR?{status:o.status,data:s}:{status:o.status}},t.confirmOrder=async(e,t)=>{const r=await(0,R.default)({url:"widgets/confirm-order",method:"POST",data:{checkoutSessId:e},...t});return r.status===a.WIDGETS_RESPONSE_STATUS_CODES.REQUEST_ERROR?{status:r.status,data:{code:(await r.json()).code}}:{status:r.status}},t.default={widgetApi:async(e,t,r,n,a)=>{if(!/\w+\.saferoute\.ru$/.test(new URL(e).host))return"";if(e.endsWith(".html"))return(await(0,R.default)({url:e,method:"GET"})).text();r&&"ip"in r&&!r.ip&&a&&(await(0,o.default)(a)||(r.ip=a));const s=await(0,R.default)({url:e,method:t,data:r,...n,headers:{"From-Widget":"1"}}),i=await s.json();return 200===s.status?{status:s.status,data:i}:{status:s.status,code:i&&"code"in i?i.code:null}},updateOrder:t.updateOrder,confirmOrder:t.confirmOrder}},884:(e,t)=>{var r,n,o;Object.defineProperty(t,"__esModule",{value:!0}),t.WIDGETS_CONFIRM_ORDER_ERRORS=t.WIDGETS_UPDATE_ORDER_ERRORS=t.WIDGETS_RESPONSE_STATUS_CODES=void 0,function(e){e[e.SUCCESS=200]="SUCCESS",e[e.REQUEST_ERROR=400]="REQUEST_ERROR",e[e.AUTH_ERROR=401]="AUTH_ERROR",e[e.SERVER_ERROR=500]="SERVER_ERROR"}(r||(t.WIDGETS_RESPONSE_STATUS_CODES=r={})),function(e){e[e.NO_ORDER_ID=0]="NO_ORDER_ID",e[e.ORDER_NOT_FOUND=1001]="ORDER_NOT_FOUND",e[e.INVALID_SHOP_ID=2001]="INVALID_SHOP_ID",e[e.ORDER_CREATION_ERROR=1002]="ORDER_CREATION_ERROR",e[e.ORDER_UPDATE_ERROR=1003]="ORDER_UPDATE_ERROR"}(n||(t.WIDGETS_UPDATE_ORDER_ERRORS=n={})),function(e){e[e.INVALID_SHOP_ID=2001]="INVALID_SHOP_ID",e[e.PAY_SYSTEM_TRANSACTION_CONFIRM_ERROR=7001]="PAY_SYSTEM_TRANSACTION_CONFIRM_ERROR",e[e.INVALID_SESSION_ID=7003]="INVALID_SESSION_ID"}(o||(t.WIDGETS_CONFIRM_ORDER_ERRORS=o={}))},740:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WIDGETS_CONFIRM_ORDER_ERRORS=t.WIDGETS_UPDATE_ORDER_ERRORS=t.WIDGETS_RESPONSE_STATUS_CODES=void 0;const o=r(884);Object.defineProperty(t,"WIDGETS_RESPONSE_STATUS_CODES",{enumerable:!0,get:function(){return o.WIDGETS_RESPONSE_STATUS_CODES}}),Object.defineProperty(t,"WIDGETS_UPDATE_ORDER_ERRORS",{enumerable:!0,get:function(){return o.WIDGETS_UPDATE_ORDER_ERRORS}}),Object.defineProperty(t,"WIDGETS_CONFIRM_ORDER_ERRORS",{enumerable:!0,get:function(){return o.WIDGETS_CONFIRM_ORDER_ERRORS}});const a=n(r(412));t.default={widgets:a.default}},792:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(r(832));t.default=({url:e,method:t,data:r,headers:n,token:a,shopId:R})=>{const s=new URL(e.startsWith("https://")?e:(0,o.default)("https://api.saferoute.ru/v2",e));if("GET"===t&&r)for(const[e,t]of Object.entries(r))s.searchParams.set(e,t??"");return fetch(s.toString(),{method:t,body:"POST"===t?JSON.stringify(r):null,headers:{...n,..."POST"===t?{"Content-Type":"application/json"}:null,...a?{Authorization:`Bearer ${a}`}:null,...R?{"Shop-Id":String(R)}:null}})}},696:e=>{e.exports=require("dgram")},880:e=>{e.exports=require("dns")},256:e=>{e.exports=require("net")},832:(e,t,r)=>{function n(){return function(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var r=e.shift();e[0]=r+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<e.length;n++){var o=e[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<e.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),t.push(o))}var a=t.join("/"),R=(a=a.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return R.shift()+(R.length>0?"?":"")+R.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}r.r(t),r.d(t,{default:()=>n})}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,r),a.exports}return r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r(740)})()));
|