for-modules 1.1.5 → 1.1.6
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/LICENSE +21 -0
- package/NOTICE.txt +12 -0
- package/README.md +1 -7
- package/TikTok.txt +13 -0
- package/babel.config.json +6 -0
- package/bun.lock +686 -0
- package/dist/Structures/Manager.js +22 -36
- package/dist/Structures/Node.js +1 -1
- package/dist/Structures/Player.js +1 -1
- package/dist/Structures/Rest.js +1 -1
- package/dist/Structures/Utils.js +1 -1
- package/dist/index.js +1 -12
- package/eslint.config.d.ts +2 -0
- package/eslint.config.js +12 -0
- package/ff.txt +3037 -0
- package/package.json +52 -23
- package/renovate.json +6 -0
- package/tsconfig.json +24 -0
- package/dist/Structures/Filters.d.ts +0 -109
- package/dist/Structures/Manager.d.ts +0 -192
- package/dist/Structures/Node.d.ts +0 -140
- package/dist/Structures/Player.d.ts +0 -250
- package/dist/Structures/Queue.d.ts +0 -38
- package/dist/Structures/Rest.d.ts +0 -60
- package/dist/Structures/TikTok.d.ts +0 -18
- package/dist/Structures/TikTok.js +0 -118
- package/dist/Structures/Utils.d.ts +0 -174
- package/dist/Utils/FiltersEqualizers.d.ts +0 -12
- package/dist/Utils/ManagerCheck.d.ts +0 -2
- package/dist/Utils/NodeCheck.d.ts +0 -2
- package/dist/Utils/PlayerCheck.d.ts +0 -2
- package/dist/index.d.ts +0 -12
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { Filters } from "./Filters";
|
|
2
|
-
import { Manager, SearchQuery, SearchResult } from "./Manager";
|
|
3
|
-
import { Node } from "./Node";
|
|
4
|
-
import { Queue } from "./Queue";
|
|
5
|
-
import { Sizes, State, TrackSourceName, VoiceState } from "./Utils";
|
|
6
|
-
import { ClientUser, Message, User } from "discord.js";
|
|
7
|
-
export declare class Player {
|
|
8
|
-
options: PlayerOptions;
|
|
9
|
-
/** The Queue for the Player. */
|
|
10
|
-
readonly queue: Queue;
|
|
11
|
-
/** The filters applied to the audio. */
|
|
12
|
-
filters: Filters;
|
|
13
|
-
/** Whether the queue repeats the track. */
|
|
14
|
-
trackRepeat: boolean;
|
|
15
|
-
/** Whether the queue repeats the queue. */
|
|
16
|
-
queueRepeat: boolean;
|
|
17
|
-
/**Whether the queue repeats and shuffles after each song. */
|
|
18
|
-
dynamicRepeat: boolean;
|
|
19
|
-
/** The time the player is in the track. */
|
|
20
|
-
position: number;
|
|
21
|
-
/** Whether the player is playing. */
|
|
22
|
-
playing: boolean;
|
|
23
|
-
/** Whether the player is paused. */
|
|
24
|
-
paused: boolean;
|
|
25
|
-
/** The volume for the player */
|
|
26
|
-
volume: number;
|
|
27
|
-
/** The Node for the Player. */
|
|
28
|
-
node: Node;
|
|
29
|
-
/** The guild for the player. */
|
|
30
|
-
guild: string;
|
|
31
|
-
/** The voice channel for the player. */
|
|
32
|
-
voiceChannel: string | null;
|
|
33
|
-
/** The text channel for the player. */
|
|
34
|
-
textChannel: string | null;
|
|
35
|
-
/**The now playing message. */
|
|
36
|
-
nowPlayingMessage?: Message;
|
|
37
|
-
/** The current state of the player. */
|
|
38
|
-
state: State;
|
|
39
|
-
/** The equalizer bands array. */
|
|
40
|
-
bands: number[];
|
|
41
|
-
/** The voice state object from Discord. */
|
|
42
|
-
voiceState: VoiceState;
|
|
43
|
-
/** The Manager. */
|
|
44
|
-
manager: Manager;
|
|
45
|
-
/** The autoplay state of the player. */
|
|
46
|
-
isAutoplay: boolean;
|
|
47
|
-
private static _manager;
|
|
48
|
-
private readonly data;
|
|
49
|
-
private dynamicLoopInterval;
|
|
50
|
-
/**
|
|
51
|
-
* Set custom data.
|
|
52
|
-
* @param key
|
|
53
|
-
* @param value
|
|
54
|
-
*/
|
|
55
|
-
set(key: string, value: unknown): void;
|
|
56
|
-
/**
|
|
57
|
-
* Get custom data.
|
|
58
|
-
* @param key
|
|
59
|
-
*/
|
|
60
|
-
get<T>(key: string): T;
|
|
61
|
-
/** @hidden */
|
|
62
|
-
static init(manager: Manager): void;
|
|
63
|
-
/**
|
|
64
|
-
* Creates a new player, returns one if it already exists.
|
|
65
|
-
* @param options
|
|
66
|
-
*/
|
|
67
|
-
constructor(options: PlayerOptions);
|
|
68
|
-
/**
|
|
69
|
-
* Same as Manager#search() but a shortcut on the player itself.
|
|
70
|
-
* @param query
|
|
71
|
-
* @param requester
|
|
72
|
-
*/
|
|
73
|
-
search(query: string | SearchQuery, requester?: User | ClientUser): Promise<SearchResult>;
|
|
74
|
-
/** Connect to the voice channel. */
|
|
75
|
-
connect(): this;
|
|
76
|
-
/**
|
|
77
|
-
* Moves the player to a different node.
|
|
78
|
-
*
|
|
79
|
-
* @param {string} [node] - The ID of the node to move to.
|
|
80
|
-
* @returns {this} - The player instance.
|
|
81
|
-
*/
|
|
82
|
-
moveNode(node?: string): Promise<this>;
|
|
83
|
-
/** Disconnect from the voice channel. */
|
|
84
|
-
disconnect(): this;
|
|
85
|
-
/** Destroys the player. */
|
|
86
|
-
destroy(disconnect?: boolean): void;
|
|
87
|
-
/**
|
|
88
|
-
* Sets the player voice channel.
|
|
89
|
-
* @param channel
|
|
90
|
-
*/
|
|
91
|
-
setVoiceChannel(channel: string): this;
|
|
92
|
-
/**
|
|
93
|
-
* Sets the player text channel.
|
|
94
|
-
* @param channel
|
|
95
|
-
*/
|
|
96
|
-
setTextChannel(channel: string): this;
|
|
97
|
-
/** Sets the now playing message. */
|
|
98
|
-
setNowPlayingMessage(message: Message): Message;
|
|
99
|
-
/** Plays the next track. */
|
|
100
|
-
play(): Promise<void>;
|
|
101
|
-
/**
|
|
102
|
-
* Plays the specified track.
|
|
103
|
-
* @param track
|
|
104
|
-
*/
|
|
105
|
-
play(track: Track | UnresolvedTrack): Promise<void>;
|
|
106
|
-
/**
|
|
107
|
-
* Plays the next track with some options.
|
|
108
|
-
* @param options
|
|
109
|
-
*/
|
|
110
|
-
play(options: PlayOptions): Promise<void>;
|
|
111
|
-
/**
|
|
112
|
-
* Plays the specified track with some options.
|
|
113
|
-
* @param track
|
|
114
|
-
* @param options
|
|
115
|
-
*/
|
|
116
|
-
play(track: Track | UnresolvedTrack, options: PlayOptions): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Sets the autoplay-state of the player.
|
|
119
|
-
* @param autoplayState
|
|
120
|
-
* @param botUser
|
|
121
|
-
*/
|
|
122
|
-
setAutoplay(autoplayState: boolean, botUser: object): this;
|
|
123
|
-
/**
|
|
124
|
-
* Gets recommended tracks and returns an array of tracks.
|
|
125
|
-
* @param track
|
|
126
|
-
* @param requester
|
|
127
|
-
*/
|
|
128
|
-
getRecommended(track: Track, requester?: User | ClientUser): Promise<Track[]>;
|
|
129
|
-
/**
|
|
130
|
-
* Sets the player volume.
|
|
131
|
-
* @param volume
|
|
132
|
-
*/
|
|
133
|
-
setVolume(volume: number): this;
|
|
134
|
-
/**
|
|
135
|
-
* Sets the track repeat.
|
|
136
|
-
* @param repeat
|
|
137
|
-
*/
|
|
138
|
-
setTrackRepeat(repeat: boolean): this;
|
|
139
|
-
/**
|
|
140
|
-
* Sets the queue repeat.
|
|
141
|
-
* @param repeat
|
|
142
|
-
*/
|
|
143
|
-
setQueueRepeat(repeat: boolean): this;
|
|
144
|
-
/**
|
|
145
|
-
* Sets the queue to repeat and shuffles the queue after each song.
|
|
146
|
-
* @param repeat "true" or "false".
|
|
147
|
-
* @param ms After how many milliseconds to trigger dynamic repeat.
|
|
148
|
-
*/
|
|
149
|
-
setDynamicRepeat(repeat: boolean, ms: number): this;
|
|
150
|
-
/** Restarts the current track to the start. */
|
|
151
|
-
restart(): void;
|
|
152
|
-
/** Stops the current track, optionally give an amount to skip to, e.g 5 would play the 5th song. */
|
|
153
|
-
stop(amount?: number): this;
|
|
154
|
-
/**
|
|
155
|
-
* Pauses the current track.
|
|
156
|
-
* @param pause
|
|
157
|
-
*/
|
|
158
|
-
pause(pause: boolean): this;
|
|
159
|
-
/** Go back to the previous song. */
|
|
160
|
-
previous(): this;
|
|
161
|
-
/**
|
|
162
|
-
* Seeks to the position in the current track.
|
|
163
|
-
* @param position
|
|
164
|
-
*/
|
|
165
|
-
seek(position: number): this;
|
|
166
|
-
}
|
|
167
|
-
export interface PlayerOptions {
|
|
168
|
-
/** The guild the Player belongs to. */
|
|
169
|
-
guild: string;
|
|
170
|
-
/** The text channel the Player belongs to. */
|
|
171
|
-
textChannel: string;
|
|
172
|
-
/** The voice channel the Player belongs to. */
|
|
173
|
-
voiceChannel?: string;
|
|
174
|
-
/** The node the Player uses. */
|
|
175
|
-
node?: string;
|
|
176
|
-
/** The initial volume the Player will use. */
|
|
177
|
-
volume?: number;
|
|
178
|
-
/** If the player should mute itself. */
|
|
179
|
-
selfMute?: boolean;
|
|
180
|
-
/** If the player should deaf itself. */
|
|
181
|
-
selfDeafen?: boolean;
|
|
182
|
-
}
|
|
183
|
-
/** If track partials are set some of these will be `undefined` as they were removed. */
|
|
184
|
-
export interface Track {
|
|
185
|
-
/** The base64 encoded track. */
|
|
186
|
-
readonly track: string;
|
|
187
|
-
/** The artwork url of the track. */
|
|
188
|
-
readonly artworkUrl: string;
|
|
189
|
-
/** The track source name. */
|
|
190
|
-
readonly sourceName: TrackSourceName;
|
|
191
|
-
/** The title of the track. */
|
|
192
|
-
title: string;
|
|
193
|
-
/** The identifier of the track. */
|
|
194
|
-
readonly identifier: string;
|
|
195
|
-
/** The author of the track. */
|
|
196
|
-
author: string;
|
|
197
|
-
/** The duration of the track. */
|
|
198
|
-
readonly duration: number;
|
|
199
|
-
/** The ISRC of the track. */
|
|
200
|
-
readonly isrc: string;
|
|
201
|
-
/** If the track is seekable. */
|
|
202
|
-
readonly isSeekable: boolean;
|
|
203
|
-
/** If the track is a stream.. */
|
|
204
|
-
readonly isStream: boolean;
|
|
205
|
-
/** The uri of the track. */
|
|
206
|
-
readonly uri: string;
|
|
207
|
-
/** The thumbnail of the track or null if it's a unsupported source. */
|
|
208
|
-
readonly thumbnail: string | null;
|
|
209
|
-
/** The user that requested the track. */
|
|
210
|
-
readonly requester: User | ClientUser | null;
|
|
211
|
-
/** Displays the track thumbnail with optional size or null if it's a unsupported source. */
|
|
212
|
-
displayThumbnail(size?: Sizes): string;
|
|
213
|
-
/** Additional track info provided by plugins. */
|
|
214
|
-
pluginInfo: TrackPluginInfo;
|
|
215
|
-
/** Add your own data to the track. */
|
|
216
|
-
customData: Record<string, unknown>;
|
|
217
|
-
}
|
|
218
|
-
export interface TrackPluginInfo {
|
|
219
|
-
albumName?: string;
|
|
220
|
-
albumUrl?: string;
|
|
221
|
-
artistArtworkUrl?: string;
|
|
222
|
-
artistUrl?: string;
|
|
223
|
-
isPreview?: string;
|
|
224
|
-
previewUrl?: string;
|
|
225
|
-
}
|
|
226
|
-
/** Unresolved tracks can't be played normally, they will resolve before playing into a Track. */
|
|
227
|
-
export interface UnresolvedTrack extends Partial<Track> {
|
|
228
|
-
/** The title to search against. */
|
|
229
|
-
title: string;
|
|
230
|
-
/** The author to search against. */
|
|
231
|
-
author?: string;
|
|
232
|
-
/** The duration to search within 1500 milliseconds of the results from YouTube. */
|
|
233
|
-
duration?: number;
|
|
234
|
-
/** Resolves into a Track. */
|
|
235
|
-
resolve(): Promise<void>;
|
|
236
|
-
}
|
|
237
|
-
export interface PlayOptions {
|
|
238
|
-
/** The position to start the track. */
|
|
239
|
-
readonly startTime?: number;
|
|
240
|
-
/** The position to end the track. */
|
|
241
|
-
readonly endTime?: number;
|
|
242
|
-
/** Whether to not replace the track if a play payload is sent. */
|
|
243
|
-
readonly noReplace?: boolean;
|
|
244
|
-
}
|
|
245
|
-
export interface EqualizerBand {
|
|
246
|
-
/** The band number being 0 to 14. */
|
|
247
|
-
band: number;
|
|
248
|
-
/** The gain amount being -0.25 to 1.00, 0.25 being double. */
|
|
249
|
-
gain: number;
|
|
250
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Track, UnresolvedTrack } from "./Player";
|
|
2
|
-
/**
|
|
3
|
-
* The player's queue, the `current` property is the currently playing track, think of the rest as the up-coming tracks.
|
|
4
|
-
*/
|
|
5
|
-
export declare class Queue extends Array<Track | UnresolvedTrack> {
|
|
6
|
-
/** The total duration of the queue. */
|
|
7
|
-
get duration(): number;
|
|
8
|
-
/** The total size of tracks in the queue including the current track. */
|
|
9
|
-
get totalSize(): number;
|
|
10
|
-
/** The size of tracks in the queue. */
|
|
11
|
-
get size(): number;
|
|
12
|
-
/** The current track */
|
|
13
|
-
current: Track | UnresolvedTrack | null;
|
|
14
|
-
/** The previous track */
|
|
15
|
-
previous: Track | UnresolvedTrack | null;
|
|
16
|
-
/**
|
|
17
|
-
* Adds a track to the queue.
|
|
18
|
-
* @param track
|
|
19
|
-
* @param [offset=null]
|
|
20
|
-
*/
|
|
21
|
-
add(track: (Track | UnresolvedTrack) | (Track | UnresolvedTrack)[], offset?: number): void;
|
|
22
|
-
/**
|
|
23
|
-
* Removes a track from the queue. Defaults to the first track, returning the removed track, EXCLUDING THE `current` TRACK.
|
|
24
|
-
* @param [position=0]
|
|
25
|
-
*/
|
|
26
|
-
remove(position?: number): (Track | UnresolvedTrack)[];
|
|
27
|
-
/**
|
|
28
|
-
* Removes an amount of tracks using a exclusive start and end exclusive index, returning the removed tracks, EXCLUDING THE `current` TRACK.
|
|
29
|
-
* @param start
|
|
30
|
-
* @param end
|
|
31
|
-
*/
|
|
32
|
-
remove(start: number, end: number): (Track | UnresolvedTrack)[];
|
|
33
|
-
/** Clears the queue. */
|
|
34
|
-
clear(): void;
|
|
35
|
-
/** Shuffles the queue. */
|
|
36
|
-
shuffle(): void;
|
|
37
|
-
equalizedShuffle(): void;
|
|
38
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Node } from "./Node";
|
|
2
|
-
/** Handles the requests sent to the Lavalink REST API. */
|
|
3
|
-
export declare class Rest {
|
|
4
|
-
/** The Node that this Rest instance is connected to. */
|
|
5
|
-
private node;
|
|
6
|
-
/** The ID of the current session. */
|
|
7
|
-
private sessionId;
|
|
8
|
-
/** The password for the Node. */
|
|
9
|
-
private readonly password;
|
|
10
|
-
/** The URL of the Node. */
|
|
11
|
-
private readonly url;
|
|
12
|
-
constructor(node: Node);
|
|
13
|
-
/**
|
|
14
|
-
* Sets the session ID.
|
|
15
|
-
* @returns {string} Returns the session ID.
|
|
16
|
-
*/
|
|
17
|
-
setSessionId(sessionId: string): string;
|
|
18
|
-
/** Retrieves all the players that are currently running on the node. */
|
|
19
|
-
getAllPlayers(): Promise<unknown>;
|
|
20
|
-
/** Sends a PATCH request to update player related data. */
|
|
21
|
-
updatePlayer(options: playOptions): Promise<unknown>;
|
|
22
|
-
/** Sends a DELETE request to the server to destroy the player. */
|
|
23
|
-
destroyPlayer(guildId: string): Promise<unknown>;
|
|
24
|
-
private request;
|
|
25
|
-
get(endpoint: string): Promise<unknown>;
|
|
26
|
-
patch(endpoint: string, body: unknown): Promise<unknown>;
|
|
27
|
-
post(endpoint: string, body: unknown): Promise<unknown>;
|
|
28
|
-
delete(endpoint: string): Promise<unknown>;
|
|
29
|
-
}
|
|
30
|
-
interface playOptions {
|
|
31
|
-
guildId: string;
|
|
32
|
-
data: {
|
|
33
|
-
/** The base64 encoded track. */
|
|
34
|
-
encodedTrack?: string;
|
|
35
|
-
/** The track ID. */
|
|
36
|
-
identifier?: string;
|
|
37
|
-
/** The track time to start at. */
|
|
38
|
-
startTime?: number;
|
|
39
|
-
/** The track time to end at. */
|
|
40
|
-
endTime?: number;
|
|
41
|
-
/** The player volume level. */
|
|
42
|
-
volume?: number;
|
|
43
|
-
/** The player position in a track. */
|
|
44
|
-
position?: number;
|
|
45
|
-
/** Whether the player is paused. */
|
|
46
|
-
paused?: boolean;
|
|
47
|
-
/** The audio effects. */
|
|
48
|
-
filters?: object;
|
|
49
|
-
/** voice payload. */
|
|
50
|
-
voice?: {
|
|
51
|
-
token: string;
|
|
52
|
-
sessionId: string;
|
|
53
|
-
endpoint: string;
|
|
54
|
-
};
|
|
55
|
-
/** Whether to not replace the track if a play payload is sent. */
|
|
56
|
-
noReplace?: boolean;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export type Method = "GET" | "POST" | "PATCH" | "DELETE";
|
|
60
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { User, ClientUser } from "discord.js";
|
|
2
|
-
export declare class TikTok {
|
|
3
|
-
/**
|
|
4
|
-
* ตรวจสอบว่าลิงก์เป็นของ TikTok หรือไม่
|
|
5
|
-
*/
|
|
6
|
-
static isTikTokURL(url: string): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* ค้นหาและดึงลิงก์เสียงจาก TikTok
|
|
9
|
-
*/
|
|
10
|
-
static searchTikTok(url: string, requester?: User | ClientUser): Promise<{
|
|
11
|
-
loadType: string;
|
|
12
|
-
tracks: import("./Player").Track[];
|
|
13
|
-
}>;
|
|
14
|
-
/**
|
|
15
|
-
* ดึงลิงก์เสียงจาก TikTok โดยใช้ API หรือ Web Scraper
|
|
16
|
-
*/
|
|
17
|
-
static extractTikTokAudio(url: string): Promise<string | null>;
|
|
18
|
-
}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.TikTok = void 0;
|
|
7
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
8
|
-
var _Utils = require("./Utils");
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
11
|
-
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
12
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
13
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
14
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
15
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
16
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
17
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
18
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
19
|
-
var TikTok = exports.TikTok = /*#__PURE__*/function () {
|
|
20
|
-
function TikTok() {
|
|
21
|
-
_classCallCheck(this, TikTok);
|
|
22
|
-
}
|
|
23
|
-
return _createClass(TikTok, null, [{
|
|
24
|
-
key: "isTikTokURL",
|
|
25
|
-
value:
|
|
26
|
-
/**
|
|
27
|
-
* ตรวจสอบว่าลิงก์เป็นของ TikTok หรือไม่
|
|
28
|
-
*/
|
|
29
|
-
function isTikTokURL(url) {
|
|
30
|
-
return url.includes("tiktok.com");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* ค้นหาและดึงลิงก์เสียงจาก TikTok
|
|
35
|
-
*/
|
|
36
|
-
}, {
|
|
37
|
-
key: "searchTikTok",
|
|
38
|
-
value: (function () {
|
|
39
|
-
var _searchTikTok = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(url, requester) {
|
|
40
|
-
var tiktokAudioURL;
|
|
41
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
42
|
-
while (1) switch (_context.prev = _context.next) {
|
|
43
|
-
case 0:
|
|
44
|
-
_context.next = 2;
|
|
45
|
-
return this.extractTikTokAudio(url);
|
|
46
|
-
case 2:
|
|
47
|
-
tiktokAudioURL = _context.sent;
|
|
48
|
-
if (tiktokAudioURL) {
|
|
49
|
-
_context.next = 5;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
throw new Error("ไม่สามารถดึงข้อมูลเสียงจาก TikTok ได้");
|
|
53
|
-
case 5:
|
|
54
|
-
return _context.abrupt("return", {
|
|
55
|
-
loadType: "track",
|
|
56
|
-
tracks: [_Utils.TrackUtils.build({
|
|
57
|
-
encoded: tiktokAudioURL,
|
|
58
|
-
info: {
|
|
59
|
-
title: "TikTok Audio",
|
|
60
|
-
identifier: url,
|
|
61
|
-
author: "TikTok User",
|
|
62
|
-
length: 0,
|
|
63
|
-
isSeekable: true,
|
|
64
|
-
isStream: false,
|
|
65
|
-
uri: url,
|
|
66
|
-
sourceName: "tiktok"
|
|
67
|
-
},
|
|
68
|
-
pluginInfo: {}
|
|
69
|
-
}, requester)]
|
|
70
|
-
});
|
|
71
|
-
case 6:
|
|
72
|
-
case "end":
|
|
73
|
-
return _context.stop();
|
|
74
|
-
}
|
|
75
|
-
}, _callee, this);
|
|
76
|
-
}));
|
|
77
|
-
function searchTikTok(_x, _x2) {
|
|
78
|
-
return _searchTikTok.apply(this, arguments);
|
|
79
|
-
}
|
|
80
|
-
return searchTikTok;
|
|
81
|
-
}()
|
|
82
|
-
/**
|
|
83
|
-
* ดึงลิงก์เสียงจาก TikTok โดยใช้ API หรือ Web Scraper
|
|
84
|
-
*/
|
|
85
|
-
)
|
|
86
|
-
}, {
|
|
87
|
-
key: "extractTikTokAudio",
|
|
88
|
-
value: (function () {
|
|
89
|
-
var _extractTikTokAudio = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url) {
|
|
90
|
-
var response;
|
|
91
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
92
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
93
|
-
case 0:
|
|
94
|
-
_context2.prev = 0;
|
|
95
|
-
_context2.next = 3;
|
|
96
|
-
return _axios["default"].get("https://api.example.com/extract?tiktok_url=".concat(encodeURIComponent(url)));
|
|
97
|
-
case 3:
|
|
98
|
-
response = _context2.sent;
|
|
99
|
-
return _context2.abrupt("return", response.data.audio_url);
|
|
100
|
-
case 7:
|
|
101
|
-
_context2.prev = 7;
|
|
102
|
-
_context2.t0 = _context2["catch"](0);
|
|
103
|
-
console.error("Error extracting TikTok audio:", _context2.t0);
|
|
104
|
-
return _context2.abrupt("return", null);
|
|
105
|
-
case 11:
|
|
106
|
-
case "end":
|
|
107
|
-
return _context2.stop();
|
|
108
|
-
}
|
|
109
|
-
}, _callee2, null, [[0, 7]]);
|
|
110
|
-
}));
|
|
111
|
-
function extractTikTokAudio(_x3) {
|
|
112
|
-
return _extractTikTokAudio.apply(this, arguments);
|
|
113
|
-
}
|
|
114
|
-
return extractTikTokAudio;
|
|
115
|
-
}())
|
|
116
|
-
}]);
|
|
117
|
-
}();
|
|
118
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsImUiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsInQiLCJyIiwiT2JqZWN0IiwibiIsImhhc093blByb3BlcnR5IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJhIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiVGlrVG9rIiwiZXhwb3J0cyIsImlzVGlrVG9rVVJMIiwidXJsIiwiaW5jbHVkZXMiLCJfc2VhcmNoVGlrVG9rIiwiX2NhbGxlZSIsInJlcXVlc3RlciIsInRpa3Rva0F1ZGlvVVJMIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImV4dHJhY3RUaWtUb2tBdWRpbyIsImxvYWRUeXBlIiwidHJhY2tzIiwiVHJhY2tVdGlscyIsImJ1aWxkIiwiZW5jb2RlZCIsImluZm8iLCJ0aXRsZSIsImlkZW50aWZpZXIiLCJhdXRob3IiLCJpc1NlZWthYmxlIiwiaXNTdHJlYW0iLCJ1cmkiLCJzb3VyY2VOYW1lIiwicGx1Z2luSW5mbyIsInNlYXJjaFRpa1RvayIsIl94IiwiX3gyIiwiX2V4dHJhY3RUaWtUb2tBdWRpbyIsIl9jYWxsZWUyIiwicmVzcG9uc2UiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJheGlvcyIsImdldCIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsImRhdGEiLCJhdWRpb191cmwiLCJ0MCIsImNvbnNvbGUiLCJlcnJvciIsIl94MyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL1Rpa1Rvay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7IFRyYWNrVXRpbHMsIFRyYWNrU291cmNlTmFtZSB9IGZyb20gXCIuL1V0aWxzXCI7XHJcbmltcG9ydCB7IFVzZXIsIENsaWVudFVzZXIgfSBmcm9tIFwiZGlzY29yZC5qc1wiOyBcclxuXHJcbmV4cG9ydCBjbGFzcyBUaWtUb2sge1xyXG4gICAgLyoqXHJcbiAgICAgKiDguJXguKPguKfguIjguKrguK3guJrguKfguYjguLLguKXguLTguIfguIHguYzguYDguJvguYfguJnguILguK3guIcgVGlrVG9rIOC4q+C4o+C4t+C4reC5hOC4oeC5iFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNUaWtUb2tVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdXJsLmluY2x1ZGVzKFwidGlrdG9rLmNvbVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOC4hOC5ieC4meC4q+C4suC5geC4peC4sOC4lOC4tuC4h+C4peC4tOC4h+C4geC5jOC5gOC4quC4teC4ouC4h+C4iOC4suC4gSBUaWtUb2tcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIHNlYXJjaFRpa1Rvayh1cmw6IHN0cmluZywgcmVxdWVzdGVyPzogVXNlciB8IENsaWVudFVzZXIpIHtcclxuICAgICAgICBjb25zdCB0aWt0b2tBdWRpb1VSTCA9IGF3YWl0IHRoaXMuZXh0cmFjdFRpa1Rva0F1ZGlvKHVybCk7XHJcbiAgICBcclxuICAgICAgICBpZiAoIXRpa3Rva0F1ZGlvVVJMKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4lOC4tuC4h+C4guC5ieC4reC4oeC4ueC4peC5gOC4quC4teC4ouC4h+C4iOC4suC4gSBUaWtUb2sg4LmE4LiU4LmJXCIpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxvYWRUeXBlOiBcInRyYWNrXCIsXHJcbiAgICAgICAgICAgIHRyYWNrczogW1RyYWNrVXRpbHMuYnVpbGQoe1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlZDogdGlrdG9rQXVkaW9VUkwsIFxyXG4gICAgICAgICAgICAgICAgaW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIlRpa1RvayBBdWRpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IHVybCxcclxuICAgICAgICAgICAgICAgICAgICBhdXRob3I6IFwiVGlrVG9rIFVzZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTZWVrYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc1N0cmVhbTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJpOiB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogXCJ0aWt0b2tcIiBhcyBUcmFja1NvdXJjZU5hbWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwbHVnaW5JbmZvOiB7fVxyXG4gICAgICAgICAgICB9LCByZXF1ZXN0ZXIpXVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDguJTguLbguIfguKXguLTguIfguIHguYzguYDguKrguLXguKLguIfguIjguLLguIEgVGlrVG9rIOC5guC4lOC4ouC5g+C4iuC5iSBBUEkg4Lir4Lij4Li34LitIFdlYiBTY3JhcGVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhc3luYyBleHRyYWN0VGlrVG9rQXVkaW8odXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZXh0cmFjdD90aWt0b2tfdXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmF1ZGlvX3VybDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZXh0cmFjdGluZyBUaWtUb2sgYXVkaW86XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQXNELFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG9CQUFBLGtCQUF0RCxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQVIsQ0FBQSxTQUFBUyxDQUFBLEVBQUFULENBQUEsT0FBQVUsQ0FBQSxHQUFBQyxNQUFBLENBQUFKLFNBQUEsRUFBQUssQ0FBQSxHQUFBRixDQUFBLENBQUFHLGNBQUEsRUFB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
|