@memberjunction/ai-heygen 6.1.0-edge.3 → 6.1.0-edge.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @memberjunction/ai-heygen@6.1.0-edge.3 build /home/runner/work/MJ/MJ/packages/AI/Providers/HeyGen
2
+ > @memberjunction/ai-heygen@6.1.0-edge.4 build /home/runner/work/MJ/MJ/packages/AI/Providers/HeyGen
3
3
  > tsc && tsc-alias -f
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @memberjunction/ai-heygen
2
2
 
3
+ ## 6.1.0-edge.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 7857d8e: Add `@memberjunction/network-utils` and remove `axios` from the repository.
8
+
9
+ The SSRF guard added for the web/HTTP actions was Actions-specific but the concern is not, so it
10
+ moves into a new dependency-free, Node-only package (`node:dns` + `node:net` only) that any
11
+ server-side package can depend on: `AssertPublicUrl`, `SafeFetch`, `IsBlockedIPAddress`, `SSRFError`.
12
+
13
+ The same package ships `HttpClient` / `HttpRequest` — a native-`fetch` HTTP client that replaces
14
+ `axios` across all 11 packages that used it. Consolidating on one client removes the third-party
15
+ dependency and puts the SSRF guard one option flag (`ValidateUrl`) away from every outbound call
16
+ site, which was impossible when each package reached for `axios` directly.
17
+
18
+ Also fixes an SSRF sink the original pass missed: the `API Rate Limiter` action takes a
19
+ caller-controlled URL and returns the response body, and is now guarded.
20
+
21
+ Public exports use `PascalCase`, per repo convention.
22
+
23
+ - Updated dependencies [e533ce5]
24
+ - Updated dependencies [4586215]
25
+ - Updated dependencies [a5f92d2]
26
+ - Updated dependencies [7857d8e]
27
+ - @memberjunction/ai@6.1.0-edge.4
28
+ - @memberjunction/global@6.1.0-edge.4
29
+ - @memberjunction/network-utils@6.1.0-edge.4
30
+
3
31
  ## 6.1.0-edge.3
4
32
 
5
33
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AAGnH,qBACa,oBAAqB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,WAAW,CAA+C;gBAEtD,MAAM,EAAE,MAAM;IAIb,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IA6ClE,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzD,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAsBnC,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AAsBnH,qBACa,oBAAqB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,WAAW,CAA+C;gBAEtD,MAAM,EAAE,MAAM;IAIb,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IA6ClE,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzD,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAsBnC,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGxD"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { RegisterClass } from "@memberjunction/global";
11
11
  import { AvatarInfo, BaseVideoGenerator, VideoResult, ErrorAnalyzer } from "@memberjunction/ai";
12
- import axios from "axios";
12
+ import { HttpGet, HttpPost } from "@memberjunction/network-utils";
13
13
  let HeyGenVideoGenerator = class HeyGenVideoGenerator extends BaseVideoGenerator {
14
14
  constructor(apiKey) {
15
15
  super(apiKey);
@@ -19,7 +19,7 @@ let HeyGenVideoGenerator = class HeyGenVideoGenerator extends BaseVideoGenerator
19
19
  async CreateAvatarVideo(params) {
20
20
  const videoResult = new VideoResult();
21
21
  try {
22
- const response = await axios.post(this._generateUrl, {
22
+ const response = await HttpPost(this._generateUrl, {
23
23
  video_inputs: [
24
24
  {
25
25
  character: {
@@ -44,9 +44,9 @@ let HeyGenVideoGenerator = class HeyGenVideoGenerator extends BaseVideoGenerator
44
44
  height: params.outputHeight,
45
45
  }
46
46
  }, {
47
- headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
47
+ Headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
48
48
  });
49
- videoResult.videoId = response.data.data.video_id;
49
+ videoResult.videoId = response.Data.data.video_id;
50
50
  videoResult.success = true;
51
51
  }
52
52
  catch (error) {
@@ -63,10 +63,10 @@ let HeyGenVideoGenerator = class HeyGenVideoGenerator extends BaseVideoGenerator
63
63
  async GetAvatars() {
64
64
  const result = [];
65
65
  try {
66
- const response = await axios.get(this._avatarsUrl, {
67
- headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
66
+ const response = await HttpGet(this._avatarsUrl, {
67
+ Headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
68
68
  });
69
- for (const avatar of response.data.data.avatars) {
69
+ for (const avatar of response.Data.data.avatars) {
70
70
  const avatarInfo = new AvatarInfo();
71
71
  avatarInfo.id = avatar.avatar_id;
72
72
  avatarInfo.name = avatar.avatar_name;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAqB,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,KAAK,MAAM,OAAO,CAAC;AAGnB,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,kBAAkB;IAIxD,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;QAJV,iBAAY,GAAW,0CAA0C,CAAC;QAClE,gBAAW,GAAW,mCAAmC,CAAC;IAIlE,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,MAAyB;QACpD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC7B,IAAI,CAAC,YAAY,EAAE;gBACf,YAAY,EAAE;oBACV;wBACI,SAAS,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,MAAM,CAAC,QAAQ;4BAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,YAAY,EAAE,MAAM,CAAC,WAAW;4BAChC,MAAM,EAAE,EAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,EAAC;yBACjD;wBACD,KAAK,EAAE;4BACH,IAAI,EAAE,OAAO;4BACb,cAAc,EAAE,MAAM,CAAC,YAAY;yBACtC;wBACD,UAAU,EAAE;4BACR,IAAI,EAAE,OAAO;4BACb,cAAc,EAAE,MAAM,CAAC,YAAY;yBACtC;qBACJ;iBACJ;gBACD,SAAS,EAAE;oBACP,KAAK,EAAE,MAAM,CAAC,WAAW;oBACzB,MAAM,EAAE,MAAM,CAAC,YAAY;iBAC9B;aACJ,EACD;gBACI,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;aACpE,CACJ,CAAC;YAEF,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClD,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;YAC5B,WAAW,CAAC,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,MAAW;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC/C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;aACpE,CAAC,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;gBACpC,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;gBACjC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;gBACrC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;gBACjC,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBACtD,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBACtD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC5B,OAAO,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,YAAY,CAAC,CAAC;IACzE,CAAC;CACJ,CAAA;AAlFY,oBAAoB;IADhC,aAAa,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;;GAC7C,oBAAoB,CAkFhC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/ai-heygen",
3
3
  "type": "module",
4
- "version": "6.1.0-edge.3",
4
+ "version": "6.1.0-edge.4",
5
5
  "description": "MemberJunction Wrapper for HeyGen Video Generation",
6
6
  "main": "dist/index.js",
7
7
  "author": "MemberJunction.com",
@@ -11,10 +11,10 @@
11
11
  "typescript": "^5.9.3"
12
12
  },
13
13
  "dependencies": {
14
- "@memberjunction/ai": "6.1.0-edge.3",
15
- "@memberjunction/global": "6.1.0-edge.3",
16
- "axios": "^1.13.4",
17
- "@elevenlabs/elevenlabs-js": "^2.34.0"
14
+ "@elevenlabs/elevenlabs-js": "^2.34.0",
15
+ "@memberjunction/ai": "6.1.0-edge.4",
16
+ "@memberjunction/global": "6.1.0-edge.4",
17
+ "@memberjunction/network-utils": "6.1.0-edge.4"
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",
@@ -3,14 +3,12 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
3
3
  /* ------------------------------------------------------------------ */
4
4
  /* Hoisted mocks */
5
5
  /* ------------------------------------------------------------------ */
6
- const mockAxiosPost = vi.hoisted(() => vi.fn());
7
- const mockAxiosGet = vi.hoisted(() => vi.fn());
8
-
9
- vi.mock('axios', () => ({
10
- default: {
11
- post: mockAxiosPost,
12
- get: mockAxiosGet,
13
- },
6
+ const mockHttpPost = vi.hoisted(() => vi.fn());
7
+ const mockHttpGet = vi.hoisted(() => vi.fn());
8
+
9
+ vi.mock('@memberjunction/network-utils', () => ({
10
+ HttpPost: mockHttpPost,
11
+ HttpGet: mockHttpGet,
14
12
  }));
15
13
 
16
14
  vi.mock('@memberjunction/global', () => ({
@@ -73,8 +71,8 @@ describe('HeyGenVideoGenerator', () => {
73
71
  /* ---- CreateAvatarVideo request building ---- */
74
72
  describe('CreateAvatarVideo', () => {
75
73
  it('should build correct API request and return videoId on success', async () => {
76
- mockAxiosPost.mockResolvedValueOnce({
77
- data: { data: { video_id: 'vid-123' } },
74
+ mockHttpPost.mockResolvedValueOnce({
75
+ Data: { data: { video_id: 'vid-123' } },
78
76
  });
79
77
 
80
78
  const params = {
@@ -93,7 +91,7 @@ describe('HeyGenVideoGenerator', () => {
93
91
  expect(result.success).toBe(true);
94
92
  expect(result.videoId).toBe('vid-123');
95
93
 
96
- expect(mockAxiosPost).toHaveBeenCalledWith(
94
+ expect(mockHttpPost).toHaveBeenCalledWith(
97
95
  'https://api.heygen.com/v2/video/generate',
98
96
  expect.objectContaining({
99
97
  video_inputs: expect.arrayContaining([
@@ -106,13 +104,13 @@ describe('HeyGenVideoGenerator', () => {
106
104
  dimension: { width: 1920, height: 1080 },
107
105
  }),
108
106
  expect.objectContaining({
109
- headers: expect.objectContaining({ 'X-Api-Key': 'test-heygen-key' }),
107
+ Headers: expect.objectContaining({ 'X-Api-Key': 'test-heygen-key' }),
110
108
  }),
111
109
  );
112
110
  });
113
111
 
114
112
  it('should return error result on API failure', async () => {
115
- mockAxiosPost.mockRejectedValueOnce(new Error('HeyGen API error'));
113
+ mockHttpPost.mockRejectedValueOnce(new Error('HeyGen API error'));
116
114
 
117
115
  const params = {
118
116
  avatarId: 'avatar1',
@@ -135,8 +133,8 @@ describe('HeyGenVideoGenerator', () => {
135
133
  /* ---- GetAvatars ---- */
136
134
  describe('GetAvatars', () => {
137
135
  it('should parse avatar list from API response', async () => {
138
- mockAxiosGet.mockResolvedValueOnce({
139
- data: {
136
+ mockHttpGet.mockResolvedValueOnce({
137
+ Data: {
140
138
  data: {
141
139
  avatars: [
142
140
  {
@@ -167,7 +165,7 @@ describe('HeyGenVideoGenerator', () => {
167
165
  });
168
166
 
169
167
  it('should return empty array on error', async () => {
170
- mockAxiosGet.mockRejectedValueOnce(new Error('API error'));
168
+ mockHttpGet.mockRejectedValueOnce(new Error('API error'));
171
169
  const avatars = await video.GetAvatars();
172
170
  expect(avatars).toEqual([]);
173
171
  });
package/src/index.ts CHANGED
@@ -1,6 +1,25 @@
1
1
  import { RegisterClass } from "@memberjunction/global";
2
2
  import { AvatarInfo, AvatarVideoParams, BaseVideoGenerator, VideoResult, ErrorAnalyzer } from "@memberjunction/ai";
3
- import axios from "axios";
3
+ import { HttpGet, HttpPost } from "@memberjunction/network-utils";
4
+
5
+
6
+ /** Response from HeyGen's `POST /v2/video/generate`. */
7
+ interface HeyGenGenerateResponse {
8
+ data: { video_id: string };
9
+ }
10
+
11
+ /** Response from HeyGen's `GET /v2/avatars`. */
12
+ interface HeyGenAvatarsResponse {
13
+ data: {
14
+ avatars: Array<{
15
+ avatar_id: string;
16
+ avatar_name: string;
17
+ gender: string;
18
+ preview_image_url: string;
19
+ preview_video_url: string;
20
+ }>;
21
+ };
22
+ }
4
23
 
5
24
  @RegisterClass(BaseVideoGenerator, "HeyGenVideoGenerator")
6
25
  export class HeyGenVideoGenerator extends BaseVideoGenerator {
@@ -14,7 +33,7 @@ export class HeyGenVideoGenerator extends BaseVideoGenerator {
14
33
  public async CreateAvatarVideo(params: AvatarVideoParams): Promise<VideoResult> {
15
34
  const videoResult = new VideoResult();
16
35
  try {
17
- const response = await axios.post(
36
+ const response = await HttpPost<HeyGenGenerateResponse>(
18
37
  this._generateUrl, {
19
38
  video_inputs: [
20
39
  {
@@ -41,11 +60,11 @@ export class HeyGenVideoGenerator extends BaseVideoGenerator {
41
60
  }
42
61
  },
43
62
  {
44
- headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
63
+ Headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
45
64
  }
46
65
  );
47
66
 
48
- videoResult.videoId = response.data.data.video_id;
67
+ videoResult.videoId = response.Data.data.video_id;
49
68
  videoResult.success = true;
50
69
  } catch (error) {
51
70
  const errorInfo = ErrorAnalyzer.analyzeError(error, 'HeyGen');
@@ -63,10 +82,10 @@ export class HeyGenVideoGenerator extends BaseVideoGenerator {
63
82
  public async GetAvatars(): Promise<AvatarInfo[]> {
64
83
  const result: AvatarInfo[] = [];
65
84
  try {
66
- const response = await axios.get(this._avatarsUrl, {
67
- headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
85
+ const response = await HttpGet<HeyGenAvatarsResponse>(this._avatarsUrl, {
86
+ Headers: { Accept: 'application/json', 'X-Api-Key': this.apiKey }
68
87
  });
69
- for (const avatar of response.data.data.avatars) {
88
+ for (const avatar of response.Data.data.avatars) {
70
89
  const avatarInfo = new AvatarInfo();
71
90
  avatarInfo.id = avatar.avatar_id;
72
91
  avatarInfo.name = avatar.avatar_name;