@mcpmesh/sdk 0.9.11 → 1.0.0-beta.1

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.
Files changed (94) hide show
  1. package/dist/__tests__/claude-handler.test.js +119 -71
  2. package/dist/__tests__/claude-handler.test.js.map +1 -1
  3. package/dist/__tests__/llm-agent-media.test.d.ts +8 -0
  4. package/dist/__tests__/llm-agent-media.test.d.ts.map +1 -0
  5. package/dist/__tests__/llm-agent-media.test.js +167 -0
  6. package/dist/__tests__/llm-agent-media.test.js.map +1 -0
  7. package/dist/__tests__/media-helpers.test.d.ts +7 -0
  8. package/dist/__tests__/media-helpers.test.d.ts.map +1 -0
  9. package/dist/__tests__/media-helpers.test.js +60 -0
  10. package/dist/__tests__/media-helpers.test.js.map +1 -0
  11. package/dist/__tests__/media-param.test.d.ts +7 -0
  12. package/dist/__tests__/media-param.test.d.ts.map +1 -0
  13. package/dist/__tests__/media-param.test.js +104 -0
  14. package/dist/__tests__/media-param.test.js.map +1 -0
  15. package/dist/__tests__/media-resolver.test.d.ts +8 -0
  16. package/dist/__tests__/media-resolver.test.d.ts.map +1 -0
  17. package/dist/__tests__/media-resolver.test.js +298 -0
  18. package/dist/__tests__/media-resolver.test.js.map +1 -0
  19. package/dist/__tests__/media-result.test.d.ts +5 -0
  20. package/dist/__tests__/media-result.test.d.ts.map +1 -0
  21. package/dist/__tests__/media-result.test.js +180 -0
  22. package/dist/__tests__/media-result.test.js.map +1 -0
  23. package/dist/__tests__/media-store.test.d.ts +7 -0
  24. package/dist/__tests__/media-store.test.d.ts.map +1 -0
  25. package/dist/__tests__/media-store.test.js +102 -0
  26. package/dist/__tests__/media-store.test.js.map +1 -0
  27. package/dist/__tests__/proxy-resource-link.test.d.ts +8 -0
  28. package/dist/__tests__/proxy-resource-link.test.d.ts.map +1 -0
  29. package/dist/__tests__/proxy-resource-link.test.js +175 -0
  30. package/dist/__tests__/proxy-resource-link.test.js.map +1 -0
  31. package/dist/agent.d.ts +1 -0
  32. package/dist/agent.d.ts.map +1 -1
  33. package/dist/agent.js +76 -10
  34. package/dist/agent.js.map +1 -1
  35. package/dist/api-runtime.d.ts.map +1 -1
  36. package/dist/api-runtime.js +7 -1
  37. package/dist/api-runtime.js.map +1 -1
  38. package/dist/config.d.ts +17 -0
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/config.js +19 -0
  41. package/dist/config.js.map +1 -1
  42. package/dist/debug.d.ts +1 -1
  43. package/dist/debug.d.ts.map +1 -1
  44. package/dist/express.d.ts.map +1 -1
  45. package/dist/express.js +33 -18
  46. package/dist/express.js.map +1 -1
  47. package/dist/index.d.ts +5 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +6 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/llm-agent.d.ts +2 -0
  52. package/dist/llm-agent.d.ts.map +1 -1
  53. package/dist/llm-agent.js +62 -13
  54. package/dist/llm-agent.js.map +1 -1
  55. package/dist/llm-provider.d.ts +55 -16
  56. package/dist/llm-provider.d.ts.map +1 -1
  57. package/dist/llm-provider.js +321 -32
  58. package/dist/llm-provider.js.map +1 -1
  59. package/dist/media/index.d.ts +104 -0
  60. package/dist/media/index.d.ts.map +1 -0
  61. package/dist/media/index.js +135 -0
  62. package/dist/media/index.js.map +1 -0
  63. package/dist/media/media-store.d.ts +75 -0
  64. package/dist/media/media-store.d.ts.map +1 -0
  65. package/dist/media/media-store.js +217 -0
  66. package/dist/media/media-store.js.map +1 -0
  67. package/dist/media/resolver.d.ts +67 -0
  68. package/dist/media/resolver.d.ts.map +1 -0
  69. package/dist/media/resolver.js +311 -0
  70. package/dist/media/resolver.js.map +1 -0
  71. package/dist/media-param.d.ts +17 -0
  72. package/dist/media-param.d.ts.map +1 -0
  73. package/dist/media-param.js +32 -0
  74. package/dist/media-param.js.map +1 -0
  75. package/dist/provider-handlers/claude-handler.d.ts +21 -26
  76. package/dist/provider-handlers/claude-handler.d.ts.map +1 -1
  77. package/dist/provider-handlers/claude-handler.js +65 -45
  78. package/dist/provider-handlers/claude-handler.js.map +1 -1
  79. package/dist/provider-handlers/provider-handler.d.ts.map +1 -1
  80. package/dist/provider-handlers/provider-handler.js +5 -4
  81. package/dist/provider-handlers/provider-handler.js.map +1 -1
  82. package/dist/proxy.d.ts +29 -0
  83. package/dist/proxy.d.ts.map +1 -1
  84. package/dist/proxy.js +66 -21
  85. package/dist/proxy.js.map +1 -1
  86. package/dist/tls-config.d.ts +31 -0
  87. package/dist/tls-config.d.ts.map +1 -0
  88. package/dist/tls-config.js +102 -0
  89. package/dist/tls-config.js.map +1 -0
  90. package/dist/types.d.ts +63 -2
  91. package/dist/types.d.ts.map +1 -1
  92. package/dist/types.js +33 -1
  93. package/dist/types.js.map +1 -1
  94. package/package.json +3 -3
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Unit tests for media/index.ts helper functions.
3
+ *
4
+ * Tests mediaResult() and uploadMedia() convenience functions.
5
+ */
6
+ import { describe, it, expect, vi } from "vitest";
7
+ // Mock @mcpmesh/core before importing
8
+ vi.mock("@mcpmesh/core", () => ({
9
+ resolveConfig: vi.fn((_key, _value) => ""),
10
+ resolveConfigInt: vi.fn((_key, _value) => null),
11
+ getDefault: vi.fn((_key) => null),
12
+ }));
13
+ import { mediaResult } from "../media/index.js";
14
+ describe("mediaResult", () => {
15
+ it("should build a proper MCP ResourceLink content item", () => {
16
+ const result = mediaResult("file:///tmp/image.png", "image.png", "image/png");
17
+ expect(result).toEqual({
18
+ type: "resource_link",
19
+ uri: "file:///tmp/image.png",
20
+ name: "image.png",
21
+ mimeType: "image/png",
22
+ });
23
+ });
24
+ it("should include description when provided", () => {
25
+ const result = mediaResult("s3://bucket/photo.jpg", "photo.jpg", "image/jpeg", "A vacation photo");
26
+ expect(result).toEqual({
27
+ type: "resource_link",
28
+ uri: "s3://bucket/photo.jpg",
29
+ name: "photo.jpg",
30
+ mimeType: "image/jpeg",
31
+ description: "A vacation photo",
32
+ });
33
+ });
34
+ it("should include size in _meta when provided", () => {
35
+ const result = mediaResult("file:///data.csv", "data.csv", "text/csv", undefined, 1024);
36
+ expect(result).toEqual({
37
+ type: "resource_link",
38
+ uri: "file:///data.csv",
39
+ name: "data.csv",
40
+ mimeType: "text/csv",
41
+ _meta: { size: 1024 },
42
+ });
43
+ });
44
+ it("should include both description and size when provided", () => {
45
+ const result = mediaResult("file:///report.pdf", "report.pdf", "application/pdf", "Quarterly report", 204800);
46
+ expect(result).toEqual({
47
+ type: "resource_link",
48
+ uri: "file:///report.pdf",
49
+ name: "report.pdf",
50
+ mimeType: "application/pdf",
51
+ description: "Quarterly report",
52
+ _meta: { size: 204800 },
53
+ });
54
+ });
55
+ it("should handle size of 0 correctly", () => {
56
+ const result = mediaResult("file:///empty.txt", "empty.txt", "text/plain", undefined, 0);
57
+ expect(result._meta).toEqual({ size: 0 });
58
+ });
59
+ });
60
+ //# sourceMappingURL=media-helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-helpers.test.js","sourceRoot":"","sources":["../../src/__tests__/media-helpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for mediaParam() helper and enrichSchemaWithMediaTypes().
3
+ *
4
+ * Tests the [media:TYPE] description convention and JSON Schema enrichment.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=media-param.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-param.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-param.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Unit tests for mediaParam() helper and enrichSchemaWithMediaTypes().
3
+ *
4
+ * Tests the [media:TYPE] description convention and JSON Schema enrichment.
5
+ */
6
+ import { describe, it, expect, vi } from "vitest";
7
+ // Mock @mcpmesh/core before importing
8
+ vi.mock("@mcpmesh/core", () => ({
9
+ resolveConfig: vi.fn((_key, _value) => ""),
10
+ resolveConfigInt: vi.fn((_key, _value) => null),
11
+ getDefault: vi.fn((_key) => null),
12
+ }));
13
+ import { mediaParam } from "../types.js";
14
+ import { enrichSchemaWithMediaTypes } from "../media-param.js";
15
+ describe("mediaParam", () => {
16
+ it("creates optional string schema", () => {
17
+ const schema = mediaParam("image/*");
18
+ expect(schema.isOptional()).toBe(true);
19
+ });
20
+ it("includes media type in description", () => {
21
+ const schema = mediaParam("image/*");
22
+ expect(schema.description).toContain("[media:image/*]");
23
+ });
24
+ it("defaults to */* when no media type specified", () => {
25
+ const schema = mediaParam();
26
+ expect(schema.description).toContain("[media:*/*]");
27
+ });
28
+ it("accepts specific MIME types", () => {
29
+ const schema = mediaParam("audio/wav");
30
+ expect(schema.description).toContain("[media:audio/wav]");
31
+ });
32
+ });
33
+ describe("enrichSchemaWithMediaTypes", () => {
34
+ it("adds x-media-type from description convention", () => {
35
+ const schema = {
36
+ properties: {
37
+ image: {
38
+ type: "string",
39
+ description: "[media:image/*] Media URI for this parameter",
40
+ },
41
+ },
42
+ };
43
+ enrichSchemaWithMediaTypes(schema);
44
+ const props = schema.properties;
45
+ expect(props.image["x-media-type"]).toBe("image/*");
46
+ expect(props.image.description).toContain("accepts media URI");
47
+ expect(props.image.description).not.toContain("[media:");
48
+ });
49
+ it("leaves non-media params unchanged", () => {
50
+ const schema = {
51
+ properties: {
52
+ question: { type: "string", description: "A question" },
53
+ },
54
+ };
55
+ enrichSchemaWithMediaTypes(schema);
56
+ const props = schema.properties;
57
+ expect(props.question["x-media-type"]).toBeUndefined();
58
+ expect(props.question.description).toBe("A question");
59
+ });
60
+ it("handles schema with no properties", () => {
61
+ const schema = { type: "object" };
62
+ // Should not throw
63
+ enrichSchemaWithMediaTypes(schema);
64
+ expect(schema.type).toBe("object");
65
+ });
66
+ it("handles mixed media and non-media params", () => {
67
+ const schema = {
68
+ properties: {
69
+ question: { type: "string", description: "User question" },
70
+ image: {
71
+ type: "string",
72
+ description: "[media:image/*] Media URI for this parameter",
73
+ },
74
+ audio: {
75
+ type: "string",
76
+ description: "[media:audio/wav] Media URI for this parameter",
77
+ },
78
+ },
79
+ };
80
+ enrichSchemaWithMediaTypes(schema);
81
+ const props = schema.properties;
82
+ expect(props.question["x-media-type"]).toBeUndefined();
83
+ expect(props.question.description).toBe("User question");
84
+ expect(props.image["x-media-type"]).toBe("image/*");
85
+ expect(props.image.description).toContain("accepts media URI: image/*");
86
+ expect(props.audio["x-media-type"]).toBe("audio/wav");
87
+ expect(props.audio.description).toContain("accepts media URI: audio/wav");
88
+ });
89
+ it("cleans [media:...] prefix from description", () => {
90
+ const schema = {
91
+ properties: {
92
+ photo: {
93
+ type: "string",
94
+ description: "[media:image/png] Upload a photo",
95
+ },
96
+ },
97
+ };
98
+ enrichSchemaWithMediaTypes(schema);
99
+ const props = schema.properties;
100
+ expect(props.photo.description).toBe("Upload a photo (accepts media URI: image/png)");
101
+ expect(props.photo["x-media-type"]).toBe("image/png");
102
+ });
103
+ });
104
+ //# sourceMappingURL=media-param.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-param.test.js","sourceRoot":"","sources":["../../src/__tests__/media-param.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,sCAAsC;AACtC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,EAAE,CAAC;IACjE,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,IAAI,CAAC;IACtE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;aACxD;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3D,mBAAmB;QACnB,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;gBAC1D,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gDAAgD;iBAC9D;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAE3E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEzD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAExE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAA4B;YACtC,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;SACF,CAAC;QACF,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAqD,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACtF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Unit tests for media/resolver.ts
3
+ *
4
+ * Tests resolveResourceLinks() and hasResourceLink() for converting
5
+ * resource_link items to provider-native multimodal content.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=media-resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-resolver.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-resolver.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Unit tests for media/resolver.ts
3
+ *
4
+ * Tests resolveResourceLinks() and hasResourceLink() for converting
5
+ * resource_link items to provider-native multimodal content.
6
+ */
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ // Mock @mcpmesh/core before importing
9
+ vi.mock("@mcpmesh/core", () => ({
10
+ resolveConfig: vi.fn((_key, _value) => ""),
11
+ resolveConfigInt: vi.fn((_key, _value) => null),
12
+ getDefault: vi.fn((_key) => null),
13
+ }));
14
+ // Mock the media store
15
+ const mockFetch = vi.fn();
16
+ vi.mock("../media/media-store.js", () => ({
17
+ getMediaStore: vi.fn(() => ({
18
+ fetch: mockFetch,
19
+ upload: vi.fn(),
20
+ exists: vi.fn(),
21
+ })),
22
+ }));
23
+ import { resolveResourceLinks, hasResourceLink } from "../media/resolver.js";
24
+ describe("resolveResourceLinks", () => {
25
+ beforeEach(() => {
26
+ vi.clearAllMocks();
27
+ });
28
+ describe("image resource_link resolution", () => {
29
+ it("resolves image resource_link for claude (anthropic)", async () => {
30
+ const imageData = Buffer.from("fake-png-data");
31
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/png" });
32
+ const result = await resolveResourceLinks({
33
+ type: "resource_link",
34
+ resource: {
35
+ uri: "file:///tmp/photo.png",
36
+ name: "photo.png",
37
+ mimeType: "image/png",
38
+ },
39
+ }, "anthropic");
40
+ expect(result).toHaveLength(1);
41
+ expect(result[0]).toEqual({
42
+ type: "image",
43
+ source: {
44
+ type: "base64",
45
+ media_type: "image/png",
46
+ data: imageData.toString("base64"),
47
+ },
48
+ });
49
+ expect(mockFetch).toHaveBeenCalledWith("file:///tmp/photo.png");
50
+ });
51
+ it("resolves image resource_link for openai", async () => {
52
+ const imageData = Buffer.from("fake-jpeg-data");
53
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/jpeg" });
54
+ const result = await resolveResourceLinks({
55
+ type: "resource_link",
56
+ resource: {
57
+ uri: "file:///tmp/photo.jpg",
58
+ name: "photo.jpg",
59
+ mimeType: "image/jpeg",
60
+ },
61
+ }, "openai");
62
+ expect(result).toHaveLength(1);
63
+ expect(result[0]).toEqual({
64
+ type: "image_url",
65
+ image_url: {
66
+ url: `data:image/jpeg;base64,${imageData.toString("base64")}`,
67
+ detail: "high",
68
+ },
69
+ });
70
+ });
71
+ it("resolves image resource_link for gemini (uses openai format)", async () => {
72
+ const imageData = Buffer.from("fake-webp-data");
73
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/webp" });
74
+ const result = await resolveResourceLinks({
75
+ type: "resource_link",
76
+ resource: {
77
+ uri: "s3://bucket/img.webp",
78
+ name: "img.webp",
79
+ mimeType: "image/webp",
80
+ },
81
+ }, "gemini");
82
+ expect(result).toHaveLength(1);
83
+ expect(result[0].type).toBe("image_url");
84
+ expect(result[0].image_url).toBeDefined();
85
+ });
86
+ it("resolves image resource_link with flat format (no nested resource)", async () => {
87
+ const imageData = Buffer.from("flat-format-data");
88
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/png" });
89
+ const result = await resolveResourceLinks({
90
+ type: "resource_link",
91
+ uri: "file:///tmp/flat.png",
92
+ name: "flat.png",
93
+ mimeType: "image/png",
94
+ }, "anthropic");
95
+ expect(result).toHaveLength(1);
96
+ expect(result[0].type).toBe("image");
97
+ expect(mockFetch).toHaveBeenCalledWith("file:///tmp/flat.png");
98
+ });
99
+ });
100
+ describe("non-image resource_links", () => {
101
+ it("passes through non-image resource_links as text", async () => {
102
+ const result = await resolveResourceLinks({
103
+ type: "resource_link",
104
+ resource: {
105
+ uri: "file:///tmp/data.csv",
106
+ name: "data.csv",
107
+ mimeType: "text/csv",
108
+ },
109
+ }, "anthropic");
110
+ expect(result).toHaveLength(1);
111
+ expect(result[0].type).toBe("text");
112
+ expect(result[0].text).toContain("data.csv");
113
+ // Text files are now fetched and content included inline
114
+ expect(mockFetch).toHaveBeenCalledWith("file:///tmp/data.csv");
115
+ });
116
+ it("passes through PDF resource_links as text", async () => {
117
+ const result = await resolveResourceLinks({
118
+ type: "resource_link",
119
+ resource: {
120
+ uri: "file:///tmp/report.pdf",
121
+ name: "report.pdf",
122
+ mimeType: "application/pdf",
123
+ },
124
+ }, "openai");
125
+ expect(result).toHaveLength(1);
126
+ expect(result[0].type).toBe("text");
127
+ expect(result[0].text).toContain("report.pdf");
128
+ });
129
+ });
130
+ describe("plain string results", () => {
131
+ it("handles plain string results unchanged", async () => {
132
+ const result = await resolveResourceLinks("Hello, world!", "anthropic");
133
+ expect(result).toHaveLength(1);
134
+ expect(result[0]).toEqual({ type: "text", text: "Hello, world!" });
135
+ });
136
+ it("handles JSON string results", async () => {
137
+ const result = await resolveResourceLinks('{"key":"value"}', "openai");
138
+ expect(result).toHaveLength(1);
139
+ expect(result[0]).toEqual({ type: "text", text: '{"key":"value"}' });
140
+ });
141
+ });
142
+ describe("multi_content with mixed types", () => {
143
+ it("handles multi_content with text and image resource_links", async () => {
144
+ const imageData = Buffer.from("multi-image-data");
145
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/png" });
146
+ const result = await resolveResourceLinks({
147
+ type: "multi_content",
148
+ content: [
149
+ { type: "text", text: "Here is the image:" },
150
+ {
151
+ type: "resource_link",
152
+ resource: {
153
+ uri: "file:///tmp/img.png",
154
+ name: "img.png",
155
+ mimeType: "image/png",
156
+ },
157
+ },
158
+ ],
159
+ }, "anthropic");
160
+ expect(result).toHaveLength(2);
161
+ expect(result[0]).toEqual({ type: "text", text: "Here is the image:" });
162
+ expect(result[1].type).toBe("image");
163
+ expect(result[1].source).toBeDefined();
164
+ });
165
+ it("handles multi_content with items key (alternative format)", async () => {
166
+ const imageData = Buffer.from("items-format-data");
167
+ mockFetch.mockResolvedValue({ data: imageData, mimeType: "image/jpeg" });
168
+ const result = await resolveResourceLinks({
169
+ type: "multi_content",
170
+ items: [
171
+ {
172
+ type: "resource_link",
173
+ resource: {
174
+ uri: "file:///tmp/photo.jpg",
175
+ name: "photo.jpg",
176
+ mimeType: "image/jpeg",
177
+ },
178
+ },
179
+ ],
180
+ }, "openai");
181
+ expect(result).toHaveLength(1);
182
+ expect(result[0].type).toBe("image_url");
183
+ });
184
+ it("handles multi_content with non-image resource_links", async () => {
185
+ const result = await resolveResourceLinks({
186
+ type: "multi_content",
187
+ content: [
188
+ { type: "text", text: "Generated files:" },
189
+ {
190
+ type: "resource_link",
191
+ resource: {
192
+ uri: "file:///tmp/a.pdf",
193
+ name: "a.pdf",
194
+ mimeType: "application/pdf",
195
+ },
196
+ },
197
+ ],
198
+ }, "anthropic");
199
+ expect(result).toHaveLength(2);
200
+ expect(result[0]).toEqual({ type: "text", text: "Generated files:" });
201
+ // Claude gets native document type for PDFs
202
+ expect(result[1].type).toBe("document");
203
+ expect(mockFetch).toHaveBeenCalledWith("file:///tmp/a.pdf");
204
+ });
205
+ it("handles multi_content with plain string items", async () => {
206
+ const result = await resolveResourceLinks({
207
+ type: "multi_content",
208
+ content: ["plain string item"],
209
+ }, "anthropic");
210
+ expect(result).toHaveLength(1);
211
+ expect(result[0]).toEqual({ type: "text", text: "plain string item" });
212
+ });
213
+ });
214
+ describe("error handling", () => {
215
+ it("gracefully handles fetch failure — falls back to text", async () => {
216
+ mockFetch.mockRejectedValue(new Error("File not found"));
217
+ const result = await resolveResourceLinks({
218
+ type: "resource_link",
219
+ resource: {
220
+ uri: "file:///tmp/missing.png",
221
+ name: "missing.png",
222
+ mimeType: "image/png",
223
+ },
224
+ }, "anthropic");
225
+ expect(result).toHaveLength(1);
226
+ expect(result[0].type).toBe("text");
227
+ expect(result[0].text).toContain("missing.png");
228
+ expect(result[0].text).toContain("fetch failed");
229
+ });
230
+ });
231
+ describe("other result types", () => {
232
+ it("handles null result", async () => {
233
+ const result = await resolveResourceLinks(null, "anthropic");
234
+ expect(result).toHaveLength(1);
235
+ expect(result[0].type).toBe("text");
236
+ expect(result[0].text).toBe("null");
237
+ });
238
+ it("handles number result", async () => {
239
+ const result = await resolveResourceLinks(42, "openai");
240
+ expect(result).toHaveLength(1);
241
+ expect(result[0]).toEqual({ type: "text", text: "42" });
242
+ });
243
+ it("handles plain object result (no resource_link type)", async () => {
244
+ const result = await resolveResourceLinks({ key: "value" }, "anthropic");
245
+ expect(result).toHaveLength(1);
246
+ expect(result[0]).toEqual({ type: "text", text: '{"key":"value"}' });
247
+ });
248
+ });
249
+ });
250
+ describe("hasResourceLink", () => {
251
+ it("returns true for resource_link object", () => {
252
+ expect(hasResourceLink({
253
+ type: "resource_link",
254
+ resource: { uri: "file:///x", name: "x", mimeType: "image/png" },
255
+ })).toBe(true);
256
+ });
257
+ it("returns true for multi_content with resource_link items", () => {
258
+ expect(hasResourceLink({
259
+ type: "multi_content",
260
+ content: [
261
+ { type: "text", text: "hello" },
262
+ { type: "resource_link", resource: { uri: "file:///x" } },
263
+ ],
264
+ })).toBe(true);
265
+ });
266
+ it("returns false for multi_content without resource_link items", () => {
267
+ expect(hasResourceLink({
268
+ type: "multi_content",
269
+ content: [
270
+ { type: "text", text: "hello" },
271
+ ],
272
+ })).toBe(false);
273
+ });
274
+ it("returns false for plain string", () => {
275
+ expect(hasResourceLink("hello")).toBe(false);
276
+ });
277
+ it("returns false for null", () => {
278
+ expect(hasResourceLink(null)).toBe(false);
279
+ });
280
+ it("returns false for undefined", () => {
281
+ expect(hasResourceLink(undefined)).toBe(false);
282
+ });
283
+ it("returns false for number", () => {
284
+ expect(hasResourceLink(42)).toBe(false);
285
+ });
286
+ it("returns false for plain object", () => {
287
+ expect(hasResourceLink({ type: "text", text: "hello" })).toBe(false);
288
+ });
289
+ it("returns true for multi_content with items key", () => {
290
+ expect(hasResourceLink({
291
+ type: "multi_content",
292
+ items: [
293
+ { type: "resource_link", resource: { uri: "file:///x" } },
294
+ ],
295
+ })).toBe(true);
296
+ });
297
+ });
298
+ //# sourceMappingURL=media-resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-resolver.test.js","sourceRoot":"","sources":["../../src/__tests__/media-resolver.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,sCAAsC;AACtC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,EAAE,CAAC;IACjE,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,MAAqB,EAAE,EAAE,CAAC,IAAI,CAAC;IACtE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC;CAC1C,CAAC,CAAC,CAAC;AAEJ,uBAAuB;AACvB,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;QACf,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;KAChB,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE7E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC/C,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAExE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,WAAW;iBACtB;aACF,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,WAAW;oBACvB,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBACnC;aACF,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChD,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,uBAAuB;oBAC5B,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,YAAY;iBACvB;aACF,EACD,QAAQ,CACT,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxB,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE;oBACT,GAAG,EAAE,0BAA0B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAC7D,MAAM,EAAE,MAAM;iBACf;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChD,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,sBAAsB;oBAC3B,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,YAAY;iBACvB;aACF,EACD,QAAQ,CACT,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,CAAE,MAAM,CAAC,CAAC,CAA6B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAExE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,GAAG,EAAE,sBAAsB;gBAC3B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW;aACtB,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,sBAAsB;oBAC3B,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,UAAU;iBACrB;aACF,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC7C,yDAAyD;YACzD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;oBAC7B,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,iBAAiB;iBAC5B;aACF,EACD,QAAQ,CACT,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;YAExE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClD,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAExE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE;oBAC5C;wBACE,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE;4BACR,GAAG,EAAE,qBAAqB;4BAC1B,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,WAAW;yBACtB;qBACF;iBACF;aACF,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,CAAE,MAAM,CAAC,CAAC,CAA6B,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnD,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE;4BACR,GAAG,EAAE,uBAAuB;4BAC5B,IAAI,EAAE,WAAW;4BACjB,QAAQ,EAAE,YAAY;yBACvB;qBACF;iBACF;aACF,EACD,QAAQ,CACT,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;oBAC1C;wBACE,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE;4BACR,GAAG,EAAE,mBAAmB;4BACxB,IAAI,EAAE,OAAO;4BACb,QAAQ,EAAE,iBAAiB;yBAC5B;qBACF;iBACF;aACF,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACtE,4CAA4C;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,CAAC,mBAAmB,CAAC;aAC/B,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAEzD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;gBACE,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE;oBACR,GAAG,EAAE,yBAAyB;oBAC9B,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,WAAW;iBACtB;aACF,EACD,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAE7D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,eAAe,CAAC;YACrB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE;SACjE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,eAAe,CAAC;YACrB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC/B,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;aAC1D;SACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,eAAe,CAAC;YACrB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;aAChC;SACF,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,eAAe,CAAC;YACrB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;aAC1D;SACF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for MediaResult class, createMediaResult, saveUpload, saveUploadResult.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=media-result.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-result.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/media-result.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}