@ziplayer/ytexecplug 0.0.3 → 0.0.4

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/index.d.ts CHANGED
@@ -1,10 +1,5 @@
1
1
  import { BasePlugin } from "ziplayer";
2
2
  import { Track, SearchResult, StreamInfo } from "ziplayer";
3
- import { Readable } from "stream";
4
- /**
5
- * Converts a Web ReadableStream to a Node.js Readable stream
6
- */
7
- export declare function webStreamToNodeStream(webStream: ReadableStream, highWaterMark?: number, seekBytes?: number): Promise<Readable>;
8
3
  export declare class YTexec extends BasePlugin {
9
4
  name: string;
10
5
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,SAAS,EAAE,cAAc,EACzB,aAAa,GAAE,MAAkB,EACjC,SAAS,GAAE,MAAU,GACnB,OAAO,CAAC,QAAQ,CAAC,CAoEnB;AA0CD,qBAAa,MAAO,SAAQ,UAAU;IACrC,IAAI,SAAY;IAChB,OAAO,SAAW;IAElB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAe3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;CAqBlD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA6C3D,qBAAa,MAAO,SAAQ,UAAU;IACrC,IAAI,SAAY;IAChB,OAAO,SAAW;IAElB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAe3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;CAgBlD"}
package/dist/index.js CHANGED
@@ -4,76 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.YTexec = void 0;
7
- exports.webStreamToNodeStream = webStreamToNodeStream;
8
7
  const ziplayer_1 = require("ziplayer");
9
- const stream_1 = require("stream");
10
8
  const youtube_dl_exec_1 = __importDefault(require("youtube-dl-exec"));
11
- /**
12
- * Converts a Web ReadableStream to a Node.js Readable stream
13
- */
14
- async function webStreamToNodeStream(webStream, highWaterMark = 64 * 1024, seekBytes = 0) {
15
- const reader = webStream.getReader();
16
- let bytesSkipped = 0;
17
- let streamEnded = false;
18
- const nodeStream = new stream_1.Readable({
19
- highWaterMark,
20
- async read() {
21
- if (streamEnded) {
22
- this.push(null);
23
- return;
24
- }
25
- try {
26
- while (true) {
27
- const { done, value } = await reader.read();
28
- if (done) {
29
- streamEnded = true;
30
- this.push(null);
31
- break;
32
- }
33
- if (!value)
34
- continue;
35
- // Handle seek
36
- if (seekBytes > 0 && bytesSkipped < seekBytes) {
37
- const remaining = seekBytes - bytesSkipped;
38
- if (value.length <= remaining) {
39
- bytesSkipped += value.length;
40
- continue;
41
- }
42
- else {
43
- const partial = value.subarray(remaining);
44
- bytesSkipped = seekBytes;
45
- const buffer = Buffer.from(partial);
46
- if (!this.push(buffer)) {
47
- // Backpressure
48
- break;
49
- }
50
- return;
51
- }
52
- }
53
- const buffer = Buffer.from(value);
54
- if (!this.push(buffer)) {
55
- // Backpressure
56
- break;
57
- }
58
- return;
59
- }
60
- }
61
- catch (err) {
62
- console.error("Stream read error:", err);
63
- streamEnded = true;
64
- this.destroy(err);
65
- }
66
- },
67
- });
68
- // Cleanup handlers
69
- nodeStream.on("close", () => {
70
- reader.releaseLock();
71
- });
72
- nodeStream.on("error", () => {
73
- reader.releaseLock();
74
- });
75
- return nodeStream;
76
- }
77
9
  function extractVideoId(input) {
78
10
  try {
79
11
  const u = new URL(input);
@@ -141,14 +73,9 @@ class YTexec extends ziplayer_1.BasePlugin {
141
73
  if (!youtubeUrl) {
142
74
  throw new Error("Failed to get YouTube stream URL");
143
75
  }
144
- const response = await fetch(youtubeUrl);
145
- if (!response.ok || !response.body) {
146
- throw new Error("Failed to fetch YouTube stream");
147
- }
148
- const stream = webStreamToNodeStream(response.body);
149
76
  return {
150
- stream,
151
- type: "arbitrary",
77
+ url: youtubeUrl,
78
+ type: "url",
152
79
  metadata: track.metadata,
153
80
  };
154
81
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ziplayer/ytexecplug",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "A modular Discord voice player with plugin system",
5
5
  "keywords": [
6
6
  "ZiPlayer",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "youtube-dl-exec": "^3.1.1",
32
- "ziplayer": "^0.2.1"
32
+ "ziplayer": "^0.3.11"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^20.0.0",
package/src/index.ts CHANGED
@@ -2,83 +2,7 @@ import { BasePlugin } from "ziplayer";
2
2
  import { Track, SearchResult, StreamInfo } from "ziplayer";
3
3
  import { Readable } from "stream";
4
4
  import youtubedl from "youtube-dl-exec";
5
-
6
- /**
7
- * Converts a Web ReadableStream to a Node.js Readable stream
8
- */
9
- export async function webStreamToNodeStream(
10
- webStream: ReadableStream,
11
- highWaterMark: number = 64 * 1024,
12
- seekBytes: number = 0,
13
- ): Promise<Readable> {
14
- const reader = webStream.getReader();
15
- let bytesSkipped = 0;
16
- let streamEnded = false;
17
-
18
- const nodeStream = new Readable({
19
- highWaterMark,
20
- async read() {
21
- if (streamEnded) {
22
- this.push(null);
23
- return;
24
- }
25
-
26
- try {
27
- while (true) {
28
- const { done, value } = await reader.read();
29
-
30
- if (done) {
31
- streamEnded = true;
32
- this.push(null);
33
- break;
34
- }
35
-
36
- if (!value) continue;
37
-
38
- // Handle seek
39
- if (seekBytes > 0 && bytesSkipped < seekBytes) {
40
- const remaining = seekBytes - bytesSkipped;
41
- if (value.length <= remaining) {
42
- bytesSkipped += value.length;
43
- continue;
44
- } else {
45
- const partial = value.subarray(remaining);
46
- bytesSkipped = seekBytes;
47
- const buffer = Buffer.from(partial);
48
- if (!this.push(buffer)) {
49
- // Backpressure
50
- break;
51
- }
52
- return;
53
- }
54
- }
55
-
56
- const buffer = Buffer.from(value);
57
- if (!this.push(buffer)) {
58
- // Backpressure
59
- break;
60
- }
61
- return;
62
- }
63
- } catch (err) {
64
- console.error("Stream read error:", err);
65
- streamEnded = true;
66
- this.destroy(err as Error);
67
- }
68
- },
69
- });
70
-
71
- // Cleanup handlers
72
- nodeStream.on("close", () => {
73
- reader.releaseLock();
74
- });
75
-
76
- nodeStream.on("error", () => {
77
- reader.releaseLock();
78
- });
79
-
80
- return nodeStream;
81
- }
5
+ import { url } from "inspector/promises";
82
6
 
83
7
  function extractVideoId(input: string): string | null {
84
8
  try {
@@ -149,15 +73,10 @@ export class YTexec extends BasePlugin {
149
73
  if (!youtubeUrl) {
150
74
  throw new Error("Failed to get YouTube stream URL");
151
75
  }
152
- const response = await fetch(youtubeUrl);
153
- if (!response.ok || !response.body) {
154
- throw new Error("Failed to fetch YouTube stream");
155
- }
156
- const stream = webStreamToNodeStream(response.body as ReadableStream) as unknown as Readable;
157
76
 
158
77
  return {
159
- stream,
160
- type: "arbitrary",
78
+ url: youtubeUrl,
79
+ type: "url",
161
80
  metadata: track.metadata,
162
81
  };
163
82
  } catch (error) {