@rudderhq/shared 0.4.4 → 0.4.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-icons.js","sourceRoot":"","sources":["../src/website-icons.ts"],"names":[],"mappings":"AAOA,SAAS,YAAY,CAAC,QAAgB,EAAE,MAAc;IACpD,OAAO,QAAQ,QAAQ,WAAW,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,8tBAA8tB,CAAC,CAAC;AACxwB,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,EAAE,k2gCAAk2gC,CAAC,CAAC;AACt5gC,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,s/QAAs/Q,CAAC,CAAC;AACxiR,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,EAAE,kgDAAkgD,CAAC,CAAC;AACrjD,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,0kOAA0kO,CAAC,CAAC;AAC5nO,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE,slLAAslL,CAAC,CAAC;AAC5oL,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,kuzCAAkuzC,CAAC,CAAC;AACpxzC,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,spnBAAspnB,CAAC,CAAC;AACxsnB,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,04zBAA04zB,CAAC,CAAC;AACz7zB,MAAM,WAAW,GAAG,YAAY,CAAC,eAAe,EAAE,06LAA06L,CAAC,CAAC;AAC99L,MAAM,aAAa,GAAG,YAAY,CAAC,cAAc,EAAE,spnBAAspnB,CAAC,CAAC;AAC3snB,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,spnBAAspnB,CAAC,CAAC;AACxsnB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,0iBAA0iB,CAAC,CAAC;AACxlB,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,EAAE,85/BAA85/B,CAAC,CAAC;AAC/8/B,MAAM,iBAAiB,GAAG,YAAY,CAAC,cAAc,EAAE,spTAAspT,CAAC,CAAC;AAC/sT,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,spnBAAspnB,CAAC,CAAC;AACxsnB,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,EAAE,8rCAA8rC,CAAC,CAAC;AACjvC,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,k1EAAk1E,CAAC,CAAC;AACh4E,MAAM,UAAU,GAAG,YAAY,CAAC,eAAe,EAAE,8hQAA8hQ,CAAC,CAAC;AACjlQ,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,0xEAA0xE,CAAC,CAAC;AAE50E,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,EAAE,SAAS,EAAE,CAAC,OAAO,EAAC,aAAa,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;IAClG,EAAE,SAAS,EAAE,CAAC,cAAc,EAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE;IACnG,EAAE,SAAS,EAAE,CAAC,YAAY,EAAC,gBAAgB,EAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC7G,EAAE,SAAS,EAAE,CAAC,aAAa,EAAC,iBAAiB,EAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE;IAC1G,EAAE,SAAS,EAAE,CAAC,YAAY,EAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3F,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE;IACxF,EAAE,SAAS,EAAE,CAAC,WAAW,EAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IACzF,EAAE,SAAS,EAAE,CAAC,YAAY,EAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IACvF,EAAE,SAAS,EAAE,CAAC,YAAY,EAAC,gBAAgB,EAAC,qBAAqB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IACjH,EAAE,SAAS,EAAE,CAAC,aAAa,EAAC,iBAAiB,EAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE;IACjH,EAAE,SAAS,EAAE,CAAC,eAAe,EAAC,mBAAmB,EAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE;IAC/H,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IACzE,EAAE,SAAS,EAAE,CAAC,WAAW,EAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE;IACvF,EAAE,SAAS,EAAE,CAAC,WAAW,EAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE;IACvF,EAAE,SAAS,EAAE,CAAC,mBAAmB,EAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACxH,EAAE,SAAS,EAAE,CAAC,YAAY,EAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3F,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE;IAC3G,EAAE,SAAS,EAAE,CAAC,WAAW,EAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE;IACvF,EAAE,SAAS,EAAE,CAAC,WAAW,EAAC,eAAe,EAAC,cAAc,EAAC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IACpJ,EAAE,SAAS,EAAE,CAAC,cAAc,EAAC,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;CACrH,CAAC;AAEX,MAAM,0BAA0B,GAAG,IAAI,GAAG,CACxC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAC1F,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,KAAmB;IACzD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,KAAK,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,0BAA0B,CAAC,OAAO,EAAE,EAAE,CAAC;QACzE,IAAI,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=website-icons.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-icons.test.d.ts","sourceRoot":"","sources":["../src/website-icons.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { KNOWN_WEBSITE_ICONS, resolveKnownWebsiteIcon } from "./website-icons.js";
3
+ describe("resolveKnownWebsiteIcon", () => {
4
+ function expectImageSignature(icon, bytes) {
5
+ if (icon.iconDataUrl.startsWith("data:image/png;base64,")) {
6
+ expect(bytes.subarray(0, 8), `${icon.siteName} icon should be a PNG`).toEqual(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]));
7
+ return;
8
+ }
9
+ if (icon.iconDataUrl.startsWith("data:image/x-icon;base64,")) {
10
+ expect(bytes.subarray(0, 4), `${icon.siteName} icon should be an ICO`).toEqual(Buffer.from([0x00, 0x00, 0x01, 0x00]));
11
+ return;
12
+ }
13
+ if (icon.iconDataUrl.startsWith("data:image/svg+xml;base64,")) {
14
+ expect(bytes.subarray(0, 128).toString("utf8"), `${icon.siteName} icon should be an SVG`).toContain("<svg");
15
+ return;
16
+ }
17
+ throw new Error(`${icon.siteName} has an unsupported icon MIME type`);
18
+ }
19
+ it("resolves known public sites used in rendered link icons", () => {
20
+ expect(resolveKnownWebsiteIcon("https://x.com/user/status/1")?.siteName).toBe("X");
21
+ expect(resolveKnownWebsiteIcon("https://www.linkedin.com/pulse/post")?.siteName).toBe("LinkedIn");
22
+ expect(resolveKnownWebsiteIcon("https://platform.openai.com/docs")?.siteName).toBe("OpenAI");
23
+ expect(resolveKnownWebsiteIcon("https://chatgpt.com/c/example")?.siteName).toBe("ChatGPT");
24
+ expect(resolveKnownWebsiteIcon("https://claude.ai/chat/example")?.siteName).toBe("Claude");
25
+ expect(resolveKnownWebsiteIcon("https://www.figma.com/design/file")?.siteName).toBe("Figma");
26
+ expect(resolveKnownWebsiteIcon("https://docs.feishu.cn/docx/example")?.siteName).toBe("Feishu");
27
+ expect(resolveKnownWebsiteIcon("https://rudderhq.dev/docs")?.siteName).toBe("Rudder");
28
+ expect(resolveKnownWebsiteIcon("https://app.rudder.zeeland.studio/issues/RUD-1")?.siteName).toBe("Rudder");
29
+ });
30
+ it("does not treat unrelated provider subdomains as known site icons", () => {
31
+ expect(resolveKnownWebsiteIcon("https://developers.google.com/engineering-practices/code-review")).toBeNull();
32
+ });
33
+ it("uses real embedded image assets instead of generated letter placeholders", () => {
34
+ for (const icon of KNOWN_WEBSITE_ICONS) {
35
+ expect(icon.iconDataUrl).toMatch(/^data:image\/(?:x-icon|png|svg\+xml);base64,/u);
36
+ expect(icon.iconDataUrl).not.toMatch(/^data:image\/svg\+xml,/u);
37
+ const [, base64 = ""] = icon.iconDataUrl.split(",", 2);
38
+ const bytes = Buffer.from(base64, "base64");
39
+ expect(bytes.byteLength, `${icon.siteName} icon should not be empty`).toBeGreaterThan(100);
40
+ const prefix = bytes.subarray(0, 32).toString("utf8").toLowerCase();
41
+ expect(prefix, `${icon.siteName} icon must not be an HTML response`).not.toContain("<!doctype");
42
+ expect(prefix, `${icon.siteName} icon must not be an HTML response`).not.toContain("<html");
43
+ expectImageSignature(icon, bytes);
44
+ }
45
+ });
46
+ it("uses the default Rudder favicon.ico for Rudder-owned domains", async () => {
47
+ const icon = resolveKnownWebsiteIcon("https://rudderhq.dev/docs");
48
+ expect(icon?.siteName).toBe("Rudder");
49
+ expect(icon?.iconDataUrl).toMatch(/^data:image\/x-icon;base64,/u);
50
+ const [, base64 = ""] = icon?.iconDataUrl.split(",", 2) ?? [];
51
+ const bytes = Buffer.from(base64, "base64");
52
+ const favicon = await import("node:fs/promises").then((fs) => fs.readFile("ui/public/favicon.ico"));
53
+ expect(bytes).toEqual(favicon);
54
+ });
55
+ });
56
+ //# sourceMappingURL=website-icons.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"website-icons.test.js","sourceRoot":"","sources":["../src/website-icons.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderhq/shared",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "homepage": "https://github.com/Undertone0809/rudder",
6
6
  "bugs": {