drawboard-microservice 1.0.21 → 1.0.23
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/App.d.ts +2 -0
- package/dist/components/BrushToolbar.d.ts +11 -0
- package/dist/components/LatexEditor.d.ts +69 -0
- package/dist/components/LatexToolbar.d.ts +15 -0
- package/dist/components/OCRPreview.d.ts +17 -0
- package/dist/components/OCRToolbar.d.ts +10 -0
- package/dist/components/RangeToolbar.d.ts +8 -0
- package/dist/components/SelDelToolbar.d.ts +11 -0
- package/dist/components/TextEditor.d.ts +9 -0
- package/dist/components/TextToolbar.d.ts +57 -0
- package/dist/components/ToolsToolbar.d.ts +12 -0
- package/dist/constants/fonts.d.ts +1 -0
- package/dist/constants/latexCategories.d.ts +2 -0
- package/dist/constants/latexSymbols.d.ts +2 -0
- package/dist/hooks/useDrawingHandlers.d.ts +36 -0
- package/dist/hooks/useDrawingState.d.ts +9 -0
- package/dist/hooks/useHistory.d.ts +9 -0
- package/dist/hooks/useKeyboard.d.ts +1 -0
- package/dist/hooks/useLatexSymbols.d.ts +3 -0
- package/dist/hooks/useOutsideClick.d.ts +1 -0
- package/dist/hooks/useTextEditing.d.ts +13 -0
- package/dist/hooks/useTextFormatting.d.ts +6 -0
- package/dist/hooks/useWebSocket.d.ts +17 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -6
- package/dist/index.mjs.map +1 -1
- package/dist/main.d.ts +1 -0
- package/dist/services/api.d.ts +15 -0
- package/dist/services/statsService.d.ts +38 -0
- package/dist/services/widgetBridge.d.ts +21 -0
- package/dist/types.d.ts +70 -0
- package/dist/utils/colorUtils.d.ts +1 -0
- package/dist/utils/latexUtils.d.ts +5 -0
- package/dist/utils/shapeUtils.d.ts +33 -0
- package/package.json +2 -1
package/dist/App.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ToolMode = 'select' | 'rectangle' | 'ellipse' | 'line' | 'pencil' | 'eraser' | 'text' | 'latex' | 'highlighter';
|
|
2
|
+
interface BrushToolbarProps {
|
|
3
|
+
finishTextEditing: () => void;
|
|
4
|
+
tool: ToolMode;
|
|
5
|
+
setTool: (tool: ToolMode) => void;
|
|
6
|
+
strokeColor: string;
|
|
7
|
+
setStrokeColor: (color: string) => void;
|
|
8
|
+
editingTextId: string | null;
|
|
9
|
+
}
|
|
10
|
+
declare const BrushToolbar: React.FC<BrushToolbarProps>;
|
|
11
|
+
export default BrushToolbar;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
type ShapeType = 'rectangle' | 'ellipse' | 'line' | 'path' | 'text' | 'latex' | 'highlighter';
|
|
3
|
+
type TextAlign = 'left' | 'center' | 'right';
|
|
4
|
+
interface Shape {
|
|
5
|
+
id: string;
|
|
6
|
+
type: ShapeType;
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
stroke: string;
|
|
12
|
+
strokeWidth: number;
|
|
13
|
+
points?: number[];
|
|
14
|
+
opacity?: number;
|
|
15
|
+
isSelected?: boolean;
|
|
16
|
+
text?: string;
|
|
17
|
+
latex?: string;
|
|
18
|
+
fontSize?: number;
|
|
19
|
+
fontFamily?: string;
|
|
20
|
+
textAlign?: TextAlign;
|
|
21
|
+
isEditing?: boolean;
|
|
22
|
+
fontWeight?: 'normal' | 'bold';
|
|
23
|
+
fontStyle?: 'normal' | 'italic';
|
|
24
|
+
textDecoration?: 'none' | 'underline' | 'line-through' | 'underline line-through';
|
|
25
|
+
isLatex?: boolean;
|
|
26
|
+
latexRendered?: string;
|
|
27
|
+
scaleX?: number;
|
|
28
|
+
scaleY?: number;
|
|
29
|
+
rotation?: number;
|
|
30
|
+
}
|
|
31
|
+
interface LatexSymbol {
|
|
32
|
+
name: string;
|
|
33
|
+
latex: string;
|
|
34
|
+
description: string;
|
|
35
|
+
category: 'fraction' | 'root' | 'superscript' | 'subscript' | 'brackets' | 'operators' | 'symbols';
|
|
36
|
+
placeholder?: string;
|
|
37
|
+
}
|
|
38
|
+
interface LatexCategory {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
icon: string;
|
|
42
|
+
}
|
|
43
|
+
interface LatexEditorProps {
|
|
44
|
+
shape: Shape;
|
|
45
|
+
tempText: string;
|
|
46
|
+
textAreaRef: React.RefObject<HTMLTextAreaElement | null>;
|
|
47
|
+
updateTextInRealTime: (text: string) => void;
|
|
48
|
+
finishTextEditing: (saveToHistoryFlag?: boolean) => void;
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
width: number;
|
|
52
|
+
height: number;
|
|
53
|
+
textareaStyle: React.CSSProperties;
|
|
54
|
+
latexSymbols: LatexSymbol[];
|
|
55
|
+
latexCategories: LatexCategory[];
|
|
56
|
+
handleLatexSymbolClick: (symbol: LatexSymbol) => void;
|
|
57
|
+
renderLatexToHtml: (latex: string, fontSize?: number) => string;
|
|
58
|
+
showLatexPreview?: boolean;
|
|
59
|
+
showLatexMenu?: boolean;
|
|
60
|
+
selectedLatexCategory?: string;
|
|
61
|
+
latexPreview?: string;
|
|
62
|
+
fontSize?: number;
|
|
63
|
+
strokeColor?: string;
|
|
64
|
+
setShowLatexMenu: (show: boolean) => void;
|
|
65
|
+
setShowLatexPreview?: (show: boolean) => void;
|
|
66
|
+
setSelectedLatexCategory: (category: string) => void;
|
|
67
|
+
}
|
|
68
|
+
declare const LatexEditor: React.FC<LatexEditorProps>;
|
|
69
|
+
export default LatexEditor;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { Shape } from '../types';
|
|
3
|
+
interface LatexToolbarProps {
|
|
4
|
+
selectedShape: Shape;
|
|
5
|
+
selectedId: string;
|
|
6
|
+
left: number;
|
|
7
|
+
top: number;
|
|
8
|
+
panelWidth: number;
|
|
9
|
+
startTextEditing: (id: string) => void;
|
|
10
|
+
updateSelectedTextProperty: (property: keyof Shape, value: any) => void;
|
|
11
|
+
fontSize: number;
|
|
12
|
+
strokeColor: string;
|
|
13
|
+
}
|
|
14
|
+
declare const LatexToolbar: React.FC<LatexToolbarProps>;
|
|
15
|
+
export default LatexToolbar;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface OCRPreviewProps {
|
|
3
|
+
latex: string;
|
|
4
|
+
position: {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
fontSize: number;
|
|
9
|
+
strokeColor: string;
|
|
10
|
+
onSave: (finalLatex: string) => void;
|
|
11
|
+
onEdit: () => void;
|
|
12
|
+
onCancel: () => void;
|
|
13
|
+
isEditing?: boolean;
|
|
14
|
+
onFinishEdit?: (editedLatex: string) => void;
|
|
15
|
+
}
|
|
16
|
+
declare const OCRPreview: React.FC<OCRPreviewProps>;
|
|
17
|
+
export default OCRPreview;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface OCRToolbarProps {
|
|
2
|
+
onOcrSelect: () => void;
|
|
3
|
+
onOcrRecognize: () => void;
|
|
4
|
+
tool: string;
|
|
5
|
+
ocrSelection: any;
|
|
6
|
+
editingTextId: string | null;
|
|
7
|
+
finishTextEditing: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const OCRToolbar: React.FC<OCRToolbarProps>;
|
|
10
|
+
export default OCRToolbar;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type ToolMode = 'select' | 'rectangle' | 'ellipse' | 'line' | 'pencil' | 'eraser' | 'text' | 'latex' | 'highlighter';
|
|
2
|
+
interface RangeToolbarInterface {
|
|
3
|
+
tool: ToolMode;
|
|
4
|
+
strokeWidth: number;
|
|
5
|
+
setStrokeWidth: (width: number) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const RangeToolbar: React.FC<RangeToolbarInterface>;
|
|
8
|
+
export default RangeToolbar;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type ToolMode = 'select' | 'rectangle' | 'ellipse' | 'line' | 'pencil' | 'eraser' | 'text' | 'latex' | 'highlighter';
|
|
2
|
+
interface SelDelToolbarInterface {
|
|
3
|
+
finishTextEditing: () => void;
|
|
4
|
+
setTool: (tool: ToolMode) => void;
|
|
5
|
+
tool: ToolMode;
|
|
6
|
+
editingTextId: string;
|
|
7
|
+
selectedId: string;
|
|
8
|
+
handleDeleteShape: (selectedId: string) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const SelDelToolbar: React.FC<SelDelToolbarInterface>;
|
|
11
|
+
export default SelDelToolbar;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface TextEditorProps {
|
|
2
|
+
textAreaRef: React.RefObject<HTMLTextAreaElement | null>;
|
|
3
|
+
tempText: string;
|
|
4
|
+
updateTextInRealTime: (text: string) => void;
|
|
5
|
+
finishTextEditing: () => void;
|
|
6
|
+
textareaStyle: React.CSSProperties;
|
|
7
|
+
}
|
|
8
|
+
declare const TextEditor: React.FC<TextEditorProps>;
|
|
9
|
+
export default TextEditor;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
type ShapeType = 'rectangle' | 'ellipse' | 'line' | 'path' | 'text' | 'latex' | 'highlighter';
|
|
2
|
+
type TextAlign = 'left' | 'center' | 'right';
|
|
3
|
+
interface Shape {
|
|
4
|
+
id: string;
|
|
5
|
+
type: ShapeType;
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
stroke: string;
|
|
11
|
+
strokeWidth: number;
|
|
12
|
+
points?: number[];
|
|
13
|
+
opacity?: number;
|
|
14
|
+
isSelected?: boolean;
|
|
15
|
+
text?: string;
|
|
16
|
+
latex?: string;
|
|
17
|
+
fontSize?: number;
|
|
18
|
+
fontFamily?: string;
|
|
19
|
+
textAlign?: TextAlign;
|
|
20
|
+
isEditing?: boolean;
|
|
21
|
+
fontWeight?: 'normal' | 'bold';
|
|
22
|
+
fontStyle?: 'normal' | 'italic';
|
|
23
|
+
textDecoration?: 'none' | 'underline' | 'line-through' | 'underline line-through';
|
|
24
|
+
isLatex?: boolean;
|
|
25
|
+
latexRendered?: string;
|
|
26
|
+
scaleX?: number;
|
|
27
|
+
scaleY?: number;
|
|
28
|
+
rotation?: number;
|
|
29
|
+
}
|
|
30
|
+
interface TextToolbarProps {
|
|
31
|
+
selectedShape: Shape;
|
|
32
|
+
selectedId: string;
|
|
33
|
+
showTextFormatDropdown: boolean;
|
|
34
|
+
showTextAlignDropdown: boolean;
|
|
35
|
+
setShowTextFormatDropdown: (value: boolean) => void;
|
|
36
|
+
setShowTextAlignDropdown: (value: boolean) => void;
|
|
37
|
+
updateSelectedTextProperty: (property: keyof Shape, value: any) => void;
|
|
38
|
+
startTextEditing: (shapeId: string) => void;
|
|
39
|
+
toggleBold: () => void;
|
|
40
|
+
toggleItalic: () => void;
|
|
41
|
+
toggleUnderline: () => void;
|
|
42
|
+
toggleStrikethrough: () => void;
|
|
43
|
+
fontFamily: string;
|
|
44
|
+
fontSize: number;
|
|
45
|
+
strokeColor: string;
|
|
46
|
+
availableFonts: string[];
|
|
47
|
+
left: number;
|
|
48
|
+
top: number;
|
|
49
|
+
panelWidth: number;
|
|
50
|
+
isBold: boolean;
|
|
51
|
+
isItalic: boolean;
|
|
52
|
+
isUnderline: boolean;
|
|
53
|
+
isStrikethrough: boolean;
|
|
54
|
+
currentAlign: string;
|
|
55
|
+
}
|
|
56
|
+
declare const TextToolbar: React.FC<TextToolbarProps>;
|
|
57
|
+
export default TextToolbar;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type ToolMode = 'select' | 'rectangle' | 'ellipse' | 'line' | 'pencil' | 'eraser' | 'text' | 'latex' | 'highlighter';
|
|
2
|
+
interface ToolsToolbarInterface {
|
|
3
|
+
handleUndo: () => void;
|
|
4
|
+
handleRedo: () => void;
|
|
5
|
+
handleClearCanvas: () => void;
|
|
6
|
+
finishTextEditing: () => void;
|
|
7
|
+
setTool: (tool: ToolMode) => void;
|
|
8
|
+
editingTextId: string;
|
|
9
|
+
tool: ToolMode;
|
|
10
|
+
}
|
|
11
|
+
declare const ToolsToolbar: React.FC<ToolsToolbarInterface>;
|
|
12
|
+
export default ToolsToolbar;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const availableFonts: string[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Shape, DrawingState, TransformState, ToolMode } from '../types';
|
|
2
|
+
export declare const useDrawingHandlers: (setIsDrawingActive: React.Dispatch<React.SetStateAction<boolean>>, shapes: Shape[], setShapes: React.Dispatch<React.SetStateAction<Shape[]>>, saveToHistory: (shapes: Shape[]) => void, tool: ToolMode, strokeColor: string, strokeWidth: number, fontSize: number, fontFamily: string, textAlign: "left" | "center" | "right", selectedId: string | null, setSelectedId: React.Dispatch<React.SetStateAction<string | null>>, setDrawingState: React.Dispatch<React.SetStateAction<DrawingState>>, setTransformState: React.Dispatch<React.SetStateAction<TransformState>>, startTextEditing: (id: string) => void, scale: number, ocrSelection: any, setOcrSelection: React.Dispatch<React.SetStateAction<any>>, clearOcrBorders: () => void) => {
|
|
3
|
+
isDragging: boolean;
|
|
4
|
+
setIsDragging: import('react').Dispatch<import('react').SetStateAction<boolean>>;
|
|
5
|
+
dragStart: {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
};
|
|
9
|
+
setDragStart: import('react').Dispatch<import('react').SetStateAction<{
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
}>>;
|
|
13
|
+
selectedShapeStart: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
setSelectedShapeStart: import('react').Dispatch<import('react').SetStateAction<{
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}>>;
|
|
21
|
+
originalPointsOnDragStart: number[];
|
|
22
|
+
setOriginalPointsOnDragStart: import('react').Dispatch<import('react').SetStateAction<number[]>>;
|
|
23
|
+
erasedShapes: Set<string>;
|
|
24
|
+
setErasedShapes: import('react').Dispatch<import('react').SetStateAction<Set<string>>>;
|
|
25
|
+
eraserHistoryStart: Shape[] | null;
|
|
26
|
+
setEraserHistoryStart: import('react').Dispatch<import('react').SetStateAction<Shape[] | null>>;
|
|
27
|
+
constrainToCanvas: (x: number, y: number, width: number, height: number) => {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
width: number;
|
|
31
|
+
height: number;
|
|
32
|
+
};
|
|
33
|
+
handleMouseDown: (e: any) => void;
|
|
34
|
+
handleMouseMove: (e: any, drawingState: DrawingState, transformState: TransformState, shiftPressed: boolean) => void;
|
|
35
|
+
handleMouseUp: () => void;
|
|
36
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DrawingState, TransformState } from '../types';
|
|
2
|
+
export declare const useDrawingState: () => {
|
|
3
|
+
drawingState: DrawingState;
|
|
4
|
+
setDrawingState: import('react').Dispatch<import('react').SetStateAction<DrawingState>>;
|
|
5
|
+
transformState: TransformState;
|
|
6
|
+
setTransformState: import('react').Dispatch<import('react').SetStateAction<TransformState>>;
|
|
7
|
+
resetDrawingState: () => void;
|
|
8
|
+
resetTransformState: () => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Shape } from '../types';
|
|
2
|
+
export declare const useHistory: (initialShapes: Shape[], onShapesChange?: (shapes: Shape[]) => void) => {
|
|
3
|
+
history: Shape[][];
|
|
4
|
+
historyIndex: number;
|
|
5
|
+
saveToHistory: (newShapes: Shape[]) => void;
|
|
6
|
+
handleUndo: () => Shape[] | null;
|
|
7
|
+
handleRedo: () => Shape[] | null;
|
|
8
|
+
resetHistory: (shapes: Shape[]) => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useKeyboard: (shiftPressed: boolean, setShiftPressed: React.Dispatch<React.SetStateAction<boolean>>, selectedId: string | null, editingTextId: string | null, handleDeleteShape: (id: string) => void, handleUndo: () => void, finishTextEditing: (saveToHistory?: boolean) => void, changeFontSizeWithStep: (selectedId: string | null, direction: "up" | "down", shiftPressed: boolean) => void, toggleTextStyle: (selectedId: string | null, styleType: "bold" | "italic" | "underline" | "strikethrough") => void, shapes: any[], zoomIn?: () => void, zoomOut?: () => void) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useOutsideClick: (refs: React.RefObject<HTMLElement>[], callback: () => void, dependencies?: any[]) => void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Shape } from '../types';
|
|
2
|
+
export declare const useTextEditing: (shapes: Shape[], setShapes: React.Dispatch<React.SetStateAction<Shape[]>>, saveToHistory: (shapes: Shape[]) => void, fontSize: number, strokeColor: string) => {
|
|
3
|
+
editingTextId: string | null;
|
|
4
|
+
tempText: string;
|
|
5
|
+
latexPreview: string;
|
|
6
|
+
setTempText: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
7
|
+
setEditingTextId: import('react').Dispatch<import('react').SetStateAction<string | null>>;
|
|
8
|
+
setLatexPreview: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
9
|
+
startTextEditing: (shapeId: string) => void;
|
|
10
|
+
finishTextEditing: (saveToHistoryFlag?: boolean) => boolean;
|
|
11
|
+
updateTextInRealTime: (newText: string) => void;
|
|
12
|
+
setIsTextChanged: import('react').Dispatch<import('react').SetStateAction<boolean>>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Shape } from '../types';
|
|
2
|
+
export declare const useTextFormatting: (shapes: Shape[], setShapes: React.Dispatch<React.SetStateAction<Shape[]>>, saveToHistory: (shapes: Shape[]) => void, fontSize: number) => {
|
|
3
|
+
updateSelectedTextProperty: (selectedId: string | null, property: keyof Shape, value: any) => void;
|
|
4
|
+
toggleTextStyle: (selectedId: string | null, styleType: "bold" | "italic" | "underline" | "strikethrough") => void;
|
|
5
|
+
changeFontSizeWithStep: (selectedId: string | null, direction: "up" | "down", shiftPressed: boolean) => void;
|
|
6
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Shape } from '../types';
|
|
2
|
+
export interface WebSocketMessage {
|
|
3
|
+
type: 'init' | 'update' | 'clear' | 'undo' | 'shapes';
|
|
4
|
+
data?: any;
|
|
5
|
+
userId?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CanvasData {
|
|
8
|
+
shapes: Shape[];
|
|
9
|
+
config?: any;
|
|
10
|
+
history?: any[];
|
|
11
|
+
}
|
|
12
|
+
export declare const useWebSocket: (boardId: string, onCanvasUpdate: (data: CanvasData) => void, userId?: string) => {
|
|
13
|
+
sendShapesUpdate: (shapes: Shape[]) => void;
|
|
14
|
+
sendClear: () => void;
|
|
15
|
+
sendUndo: () => void;
|
|
16
|
+
isConnected: boolean;
|
|
17
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {}
|
|
1
|
+
export { default as DrawingApp } from './App.tsx';
|
|
2
|
+
export { getInfo } from './services/widgetBridge';
|
package/dist/index.js
CHANGED
|
@@ -58051,13 +58051,12 @@ const onWidgetInitialized = (callback) => {
|
|
|
58051
58051
|
};
|
|
58052
58052
|
};
|
|
58053
58053
|
class StatsService {
|
|
58054
|
-
baseURL = "https://statservice.example.com";
|
|
58055
|
-
moduleToken = null;
|
|
58056
|
-
rateLimitCache = /* @__PURE__ */ new Map();
|
|
58057
|
-
RATE_LIMIT_WINDOW = 60 * 60 * 1e3;
|
|
58058
|
-
// 60 minutes
|
|
58059
|
-
MAX_REQUESTS = 12;
|
|
58060
58054
|
constructor() {
|
|
58055
|
+
this.baseURL = "https://statservice.example.com";
|
|
58056
|
+
this.moduleToken = null;
|
|
58057
|
+
this.rateLimitCache = /* @__PURE__ */ new Map();
|
|
58058
|
+
this.RATE_LIMIT_WINDOW = 60 * 60 * 1e3;
|
|
58059
|
+
this.MAX_REQUESTS = 12;
|
|
58061
58060
|
this.loadToken();
|
|
58062
58061
|
}
|
|
58063
58062
|
loadToken() {
|