@heripo/research-radar 3.3.11 → 4.0.0

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/README.md CHANGED
@@ -144,7 +144,7 @@ Uses the **Provider-Service pattern** from `@llm-newsletter-kit/core`. See [core
144
144
 
145
145
  **Parsers** (`src/parsers/`): Custom extractors per organization
146
146
 
147
- **Templates** (`src/templates/`): `newsletter-html.ts` (responsive email with light/dark mode), `welcome-html.ts` (`generateWelcomeHTML()`), `shared.ts` (shared HTML components)
147
+ **Templates** (`src/templates/`): `newsletter-html.ts` (responsive email with light/dark mode), `welcome-html.ts` (`generateWelcomeHTML()` async), `shared.ts` (shared HTML components)
148
148
 
149
149
  ## Development commands
150
150
 
package/dist/index.cjs CHANGED
@@ -9,7 +9,6 @@ var TurndownService = require('turndown');
9
9
  var jsdom = require('jsdom');
10
10
  var safeMarkdown2Html = require('safe-markdown2html');
11
11
  var DOMPurify = require('dompurify');
12
- var juice = require('juice');
13
12
 
14
13
  function _interopNamespaceDefault(e) {
15
14
  var n = Object.create(null);
@@ -2855,19 +2854,20 @@ async function generateNewsletter(dependencies) {
2855
2854
  * @example
2856
2855
  * ```typescript
2857
2856
  * // Default heripo branding (same as original heripo-web usage):
2858
- * const html = generateWelcomeHTML('subscriber-123', '홍길동');
2857
+ * const html = await generateWelcomeHTML('subscriber-123', '홍길동');
2859
2858
  *
2860
2859
  * // KRAS mode:
2861
- * const krasHtml = generateWelcomeHTML('subscriber-123', '홍길동', {
2860
+ * const krasHtml = await generateWelcomeHTML('subscriber-123', '홍길동', {
2862
2861
  * isKrasNewsletter: true,
2863
2862
  * });
2864
2863
  * ```
2865
2864
  */
2866
- function generateWelcomeHTML(id, name, options) {
2865
+ async function generateWelcomeHTML(id, name, options) {
2867
2866
  const isKras = options?.isKrasNewsletter ?? false;
2868
2867
  const siteUrl = options?.siteUrl ?? 'https://heripo.app';
2869
2868
  const safeName = sanitizeText(name);
2870
2869
  const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
2870
+ const { default: juice } = await import('juice');
2871
2871
  return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
2872
2872
  }
2873
2873
  function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
package/dist/index.d.ts CHANGED
@@ -264,15 +264,15 @@ declare function generateNewsletter(dependencies: NewsletterGeneratorDependencie
264
264
  * @example
265
265
  * ```typescript
266
266
  * // Default heripo branding (same as original heripo-web usage):
267
- * const html = generateWelcomeHTML('subscriber-123', '홍길동');
267
+ * const html = await generateWelcomeHTML('subscriber-123', '홍길동');
268
268
  *
269
269
  * // KRAS mode:
270
- * const krasHtml = generateWelcomeHTML('subscriber-123', '홍길동', {
270
+ * const krasHtml = await generateWelcomeHTML('subscriber-123', '홍길동', {
271
271
  * isKrasNewsletter: true,
272
272
  * });
273
273
  * ```
274
274
  */
275
- declare function generateWelcomeHTML(id: string, name: string, options?: WelcomeTemplateOptions): string;
275
+ declare function generateWelcomeHTML(id: string, name: string, options?: WelcomeTemplateOptions): Promise<string>;
276
276
 
277
277
  /**
278
278
  * Date service implementation
package/dist/index.js CHANGED
@@ -7,7 +7,6 @@ import TurndownService from 'turndown';
7
7
  import { JSDOM } from 'jsdom';
8
8
  import safeMarkdown2Html from 'safe-markdown2html';
9
9
  import DOMPurify from 'dompurify';
10
- import juice from 'juice';
11
10
 
12
11
  /**
13
12
  * Formats a date string by replacing dots with dashes.
@@ -2834,19 +2833,20 @@ async function generateNewsletter(dependencies) {
2834
2833
  * @example
2835
2834
  * ```typescript
2836
2835
  * // Default heripo branding (same as original heripo-web usage):
2837
- * const html = generateWelcomeHTML('subscriber-123', '홍길동');
2836
+ * const html = await generateWelcomeHTML('subscriber-123', '홍길동');
2838
2837
  *
2839
2838
  * // KRAS mode:
2840
- * const krasHtml = generateWelcomeHTML('subscriber-123', '홍길동', {
2839
+ * const krasHtml = await generateWelcomeHTML('subscriber-123', '홍길동', {
2841
2840
  * isKrasNewsletter: true,
2842
2841
  * });
2843
2842
  * ```
2844
2843
  */
2845
- function generateWelcomeHTML(id, name, options) {
2844
+ async function generateWelcomeHTML(id, name, options) {
2846
2845
  const isKras = options?.isKrasNewsletter ?? false;
2847
2846
  const siteUrl = options?.siteUrl ?? 'https://heripo.app';
2848
2847
  const safeName = sanitizeText(name);
2849
2848
  const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
2849
+ const { default: juice } = await import('juice');
2850
2850
  return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
2851
2851
  }
2852
2852
  function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@heripo/research-radar",
3
3
  "private": false,
4
4
  "type": "module",
5
- "version": "3.3.11",
5
+ "version": "4.0.0",
6
6
  "description": "AI-driven intelligence for Korean cultural heritage. This package serves as both a ready-to-use newsletter service and a practical implementation example for the LLM-Newsletter-Kit.",
7
7
  "main": "dist/index.cjs",
8
8
  "module": "dist/index.js",
@@ -48,35 +48,35 @@
48
48
  "author": "kimhongyeon",
49
49
  "license": "Apache-2.0",
50
50
  "dependencies": {
51
- "@ai-sdk/anthropic": "^3.0.79",
52
- "@ai-sdk/google": "^3.0.79",
53
- "@ai-sdk/openai": "^3.0.65",
51
+ "@ai-sdk/anthropic": "^3.0.81",
52
+ "@ai-sdk/google": "^3.0.80",
53
+ "@ai-sdk/openai": "^3.0.68",
54
54
  "cheerio": "^1.2.0",
55
- "dompurify": "^3.4.5",
55
+ "dompurify": "^3.4.8",
56
56
  "jsdom": "^29.1.1",
57
- "juice": "^11.1.1",
58
- "safe-markdown2html": "^1.0.5",
57
+ "juice": "^12.1.0",
58
+ "safe-markdown2html": "^1.0.6",
59
59
  "turndown": "^7.2.4"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@eslint/js": "^10.0.1",
63
- "@llm-newsletter-kit/core": "^2.0.3",
63
+ "@llm-newsletter-kit/core": "^2.0.5",
64
64
  "@trivago/prettier-plugin-sort-imports": "^6.0.2",
65
65
  "@types/express": "^5.0.6",
66
66
  "@types/jsdom": "^28.0.3",
67
- "@types/node": "^25.9.1",
67
+ "@types/node": "^25.9.2",
68
68
  "@types/turndown": "^5.0.6",
69
- "eslint": "^10.4.0",
69
+ "eslint": "^10.4.1",
70
70
  "eslint-plugin-unused-imports": "^4.4.1",
71
71
  "express": "^5.2.1",
72
72
  "prettier": "^3.8.3",
73
73
  "rimraf": "^6.1.3",
74
- "rollup": "^4.60.4",
74
+ "rollup": "^4.61.1",
75
75
  "rollup-plugin-dts": "^6.4.1",
76
76
  "rollup-plugin-typescript2": "^0.37.0",
77
- "tsx": "^4.22.3",
77
+ "tsx": "^4.22.4",
78
78
  "typescript": "^6.0.3",
79
- "typescript-eslint": "^8.59.4"
79
+ "typescript-eslint": "^8.60.1"
80
80
  },
81
81
  "repository": {
82
82
  "type": "git",