glitch-javascript-sdk 3.2.25 → 3.2.26

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.
@@ -24,6 +24,14 @@ export type PrContactVerificationStatus = "unverified" | "verified" | "stale" |
24
24
  * Link refresh status for evidence URLs.
25
25
  */
26
26
  export type PrLinkStatus = "unverified" | "ok" | "redirected" | "broken" | "blocked" | "failed" | "stale";
27
+ /**
28
+ * Refresh state for discovered RSS/Atom/JSON feeds.
29
+ */
30
+ export type PrFeedStatus = "unverified" | "ok" | "empty" | "blocked" | "failed" | "stale" | "needs_review";
31
+ /**
32
+ * Feed format detected during PR content ingestion.
33
+ */
34
+ export type PrFeedType = "rss" | "atom" | "json" | "unknown";
27
35
  /**
28
36
  * Filters accepted by `/pr/publications` and `/pr/report`.
29
37
  *
@@ -67,6 +75,39 @@ export interface PrPeopleSearchParams {
67
75
  page?: number;
68
76
  per_page?: number;
69
77
  }
78
+ /**
79
+ * Filters accepted by `/pr/feeds`.
80
+ */
81
+ export interface PrFeedSearchParams {
82
+ q?: string;
83
+ publication_id?: string;
84
+ feed_type?: PrFeedType;
85
+ status?: PrFeedStatus;
86
+ source?: string;
87
+ has_stories?: boolean;
88
+ sort?: "title" | "-title" | "feed_type" | "-feed_type" | "status" | "-status" | "last_fetched_at" | "-last_fetched_at" | "next_fetch_at" | "-next_fetch_at" | "updated_at" | "-updated_at" | string;
89
+ page?: number;
90
+ per_page?: number;
91
+ include_raw?: boolean;
92
+ }
93
+ /**
94
+ * Filters accepted by `/pr/stories`.
95
+ */
96
+ export interface PrStorySearchParams {
97
+ q?: string;
98
+ publication_id?: string;
99
+ pr_feed_id?: string;
100
+ pr_person_id?: string;
101
+ story_type?: string;
102
+ language?: string;
103
+ ingestion_status?: string;
104
+ has_author?: boolean;
105
+ published_after?: string;
106
+ published_before?: string;
107
+ sort?: "published_at" | "-published_at" | "updated_at" | "-updated_at" | "title" | "-title" | string;
108
+ page?: number;
109
+ per_page?: number;
110
+ }
70
111
  /**
71
112
  * Filters accepted by `/pr/tags`.
72
113
  */
@@ -86,6 +127,13 @@ export interface PrTitleMatchParams extends PrPublicationSearchParams {
86
127
  audiences?: string[];
87
128
  limit?: number;
88
129
  }
130
+ /**
131
+ * Query parameters accepted by `/titles/{title_id}/pr/research`.
132
+ */
133
+ export interface PrTitleResearchParams extends PrStorySearchParams {
134
+ limit?: number;
135
+ story_sort?: string;
136
+ }
89
137
  /**
90
138
  * Request body accepted by `/admin/pr/verification/queue`.
91
139
  */
@@ -94,6 +142,34 @@ export interface PrQueueVerificationRequest {
94
142
  limit?: number;
95
143
  link_ids?: string[];
96
144
  }
145
+ /**
146
+ * Review-only PR draft request for `/titles/{title_id}/pr/drafts`.
147
+ */
148
+ export interface PrTitleDraftRequest {
149
+ publication_id?: string;
150
+ pr_person_id?: string;
151
+ q?: string;
152
+ prompt?: string;
153
+ press_kit_url?: string;
154
+ trailer_url?: string;
155
+ demo_or_review_key?: string;
156
+ embargo_or_timing?: string;
157
+ sender?: {
158
+ name?: string;
159
+ };
160
+ use_ai?: boolean;
161
+ }
162
+ /**
163
+ * Admin request body for `/admin/pr/feeds/refresh`.
164
+ */
165
+ export interface PrFeedRefreshRequest {
166
+ discover?: boolean;
167
+ due?: boolean;
168
+ queue?: boolean;
169
+ limit?: number;
170
+ feed_ids?: string[];
171
+ publication_ids?: string[];
172
+ }
97
173
  /**
98
174
  * A normalized metadata tag used to filter and match PR outlets, people, and
99
175
  * roles.
@@ -143,6 +219,90 @@ export interface PrLink {
143
219
  created_at?: string | null;
144
220
  updated_at?: string | null;
145
221
  }
222
+ /**
223
+ * RSS/Atom/JSON feed discovered for a publication and used for story research.
224
+ */
225
+ export interface PrFeed {
226
+ id: string;
227
+ publication_id: string;
228
+ pr_link_id?: string | null;
229
+ feed_url: string;
230
+ canonical_url?: string | null;
231
+ feed_type: PrFeedType;
232
+ title?: string | null;
233
+ description?: string | null;
234
+ language?: string | null;
235
+ status: PrFeedStatus;
236
+ http_status?: number | null;
237
+ content_type?: string | null;
238
+ etag?: string | null;
239
+ raw_feed_hash?: string | null;
240
+ raw_feed_content?: string | null;
241
+ raw_feed_size?: number;
242
+ last_modified_at?: string | null;
243
+ last_fetched_at?: string | null;
244
+ next_fetch_at?: string | null;
245
+ item_count_last_fetch: number;
246
+ source?: string | null;
247
+ last_error?: string | null;
248
+ publication?: PrPublication | null;
249
+ stories_count?: number;
250
+ stories?: PrStory[];
251
+ metadata?: Record<string, any>;
252
+ created_at?: string | null;
253
+ updated_at?: string | null;
254
+ }
255
+ /**
256
+ * A story, article, guide, review, or episode imported from a PR feed.
257
+ */
258
+ export interface PrStory {
259
+ id: string;
260
+ publication_id: string;
261
+ pr_feed_id?: string | null;
262
+ canonical_url?: string | null;
263
+ guid?: string | null;
264
+ title: string;
265
+ dek?: string | null;
266
+ summary?: string | null;
267
+ content_excerpt?: string | null;
268
+ content_hash?: string | null;
269
+ author_name_raw?: string | null;
270
+ author_email_raw?: string | null;
271
+ author_url_raw?: string | null;
272
+ published_at?: string | null;
273
+ updated_at_feed?: string | null;
274
+ story_type?: string | null;
275
+ language?: string | null;
276
+ categories?: string[];
277
+ tags?: string[];
278
+ media_url?: string | null;
279
+ analysis?: Record<string, any>;
280
+ ingestion_status?: string | null;
281
+ publication?: PrPublication | null;
282
+ feed?: PrFeed | null;
283
+ authors?: PrStoryAuthor[];
284
+ created_at?: string | null;
285
+ updated_at?: string | null;
286
+ }
287
+ /**
288
+ * Raw byline evidence and optional match to a known PR contact.
289
+ */
290
+ export interface PrStoryAuthor {
291
+ id: string;
292
+ pr_story_id: string;
293
+ publication_id?: string | null;
294
+ pr_person_id?: string | null;
295
+ author_name?: string | null;
296
+ author_email?: string | null;
297
+ author_url?: string | null;
298
+ confidence?: number | null;
299
+ match_source?: string | null;
300
+ evidence?: Record<string, any>;
301
+ story?: PrStory | null;
302
+ person?: PrPerson | null;
303
+ created_at?: string | null;
304
+ updated_at?: string | null;
305
+ }
146
306
  /**
147
307
  * A normalized way to reach an outlet, person, or publication role.
148
308
  */
@@ -220,9 +380,13 @@ export interface PrPublication {
220
380
  people_count?: number;
221
381
  contact_points_count?: number;
222
382
  links_count?: number;
383
+ feeds_count?: number;
384
+ stories_count?: number;
223
385
  people?: PublicationPerson[];
224
386
  contact_points?: PrContactPoint[];
225
387
  links?: PrLink[];
388
+ feeds?: PrFeed[];
389
+ stories?: PrStory[];
226
390
  tags?: PrTag[];
227
391
  metadata?: Record<string, any>;
228
392
  created_at?: string | null;
@@ -249,9 +413,11 @@ export interface PrPerson {
249
413
  roles_count?: number;
250
414
  contact_points_count?: number;
251
415
  links_count?: number;
416
+ stories_count?: number;
252
417
  roles?: PublicationPerson[];
253
418
  contact_points?: PrContactPoint[];
254
419
  links?: PrLink[];
420
+ stories?: PrStoryAuthor[];
255
421
  tags?: PrTag[];
256
422
  metadata?: Record<string, any>;
257
423
  created_at?: string | null;
@@ -292,6 +458,16 @@ export interface PrDirectoryReport {
292
458
  total: number;
293
459
  by_namespace: Record<string, number>;
294
460
  };
461
+ feeds: {
462
+ total: number;
463
+ by_status: Record<string, number>;
464
+ due_for_fetch: number;
465
+ };
466
+ stories: {
467
+ total: number;
468
+ with_author: number;
469
+ by_type: Record<string, number>;
470
+ };
295
471
  }
296
472
  /**
297
473
  * A ranked title-to-outlet match with evidence, contact route, and plain-English
@@ -306,19 +482,88 @@ export interface PrTitleMatch {
306
482
  risks: string[];
307
483
  evidence_links: PrLink[];
308
484
  }
485
+ /**
486
+ * Title-scoped PR research workspace response.
487
+ */
488
+ export interface PrTitleResearchResponse {
489
+ generated_at: string;
490
+ title: {
491
+ id: string;
492
+ name: string;
493
+ slug?: string | null;
494
+ short_description?: string | null;
495
+ description?: string | null;
496
+ genres?: string[];
497
+ platforms?: string[];
498
+ website_url?: string | null;
499
+ steam_url?: string | null;
500
+ itch_url?: string | null;
501
+ demo_url?: string | null;
502
+ video_url?: string | null;
503
+ };
504
+ readiness: {
505
+ score: number;
506
+ strengths: string[];
507
+ gaps: string[];
508
+ };
509
+ publication_matches: PrTitleMatch[];
510
+ stories: PrStory[];
511
+ story_summary: {
512
+ count: number;
513
+ with_known_author: number;
514
+ publication_count: number;
515
+ };
516
+ suggested_next_steps: string[];
517
+ }
518
+ /**
519
+ * Structured draft fields returned alongside the formatted HTML email body.
520
+ */
521
+ export interface PrOutreachDraft {
522
+ subject?: string | null;
523
+ opener?: string | null;
524
+ body?: string | null;
525
+ body_html?: string | null;
526
+ key_points?: string[];
527
+ personalization_notes?: string[];
528
+ review_notes?: string[];
529
+ missing_context_warnings?: string[];
530
+ [key: string]: any;
531
+ }
532
+ /**
533
+ * Review-only PR draft response. The API never sends email from this endpoint.
534
+ */
535
+ export interface PrTitleDraftResponse {
536
+ draft_status: "draft_only_not_sent" | "no_verified_email_found" | "no_publication_found" | string;
537
+ emails_sent: boolean;
538
+ publication?: PrPublication | null;
539
+ person?: PrPerson | null;
540
+ target: Record<string, any>;
541
+ recent_stories: PrStory[];
542
+ draft: PrOutreachDraft;
543
+ body_html: string;
544
+ review_notes: string[];
545
+ }
309
546
  /**
310
547
  * Response body returned after queueing PR verification jobs.
311
548
  */
312
549
  export interface PrQueueVerificationResponse {
313
550
  queued: number;
314
551
  }
552
+ /**
553
+ * Response body returned after discovering, queueing, or fetching PR feeds.
554
+ */
555
+ export interface PrFeedRefreshResponse {
556
+ discovered: number;
557
+ queued: number;
558
+ fetched: number;
559
+ }
315
560
  /**
316
561
  * SDK wrapper for the PR Directory API.
317
562
  *
318
563
  * The PR directory is read-friendly by default: public endpoints expose
319
- * searchable publications, people, tags, and reporting metrics. Authenticated
320
- * title admins can request title-specific PR matches, and site admins can queue
321
- * monthly-style verification jobs.
564
+ * searchable publications, people, feeds, stories, tags, and reporting metrics.
565
+ * Authenticated title admins can request title-specific research and review-only
566
+ * outreach drafts, and site admins can queue verification or feed refresh jobs.
322
567
  */
323
568
  declare class PrDirectory {
324
569
  /**
@@ -358,6 +603,23 @@ declare class PrDirectory {
358
603
  * contact points, and metadata tags.
359
604
  */
360
605
  static viewPerson<T = PrPerson>(person_id: string, params?: Record<string, any>): AxiosPromise<Response<T>>;
606
+ /**
607
+ * Search discovered RSS/Atom/JSON feeds across known publications.
608
+ */
609
+ static listFeeds<T = PrFeed[]>(params?: PrFeedSearchParams): AxiosPromise<Response<T>>;
610
+ /**
611
+ * Retrieve one feed with freshness metadata and recent imported stories.
612
+ * Pass `include_raw: true` to request the stored XML/RSS payload.
613
+ */
614
+ static viewFeed<T = PrFeed>(feed_id: string, params?: PrFeedSearchParams): AxiosPromise<Response<T>>;
615
+ /**
616
+ * Search imported stories, reviews, guides, and episodes by outlet or byline.
617
+ */
618
+ static listStories<T = PrStory[]>(params?: PrStorySearchParams): AxiosPromise<Response<T>>;
619
+ /**
620
+ * Retrieve one imported story with feed, publication, and byline evidence.
621
+ */
622
+ static viewStory<T = PrStory>(story_id: string, params?: Record<string, any>): AxiosPromise<Response<T>>;
361
623
  /**
362
624
  * List the normalized tag vocabulary used for PR search, filters, matching,
363
625
  * and reporting.
@@ -373,6 +635,16 @@ declare class PrDirectory {
373
635
  * user who can administer the requested title.
374
636
  */
375
637
  static titleMatches<T = PrTitleMatch[]>(title_id: string, params?: PrTitleMatchParams): AxiosPromise<Response<T>>;
638
+ /**
639
+ * Get a title-scoped PR research workspace with outlet matches, recent story
640
+ * context, media kit readiness, and next steps.
641
+ */
642
+ static titleResearch<T = PrTitleResearchResponse>(title_id: string, params?: PrTitleResearchParams): AxiosPromise<Response<T>>;
643
+ /**
644
+ * Create a formatted, review-only PR email draft for a selected title target.
645
+ * The backend returns HTML with paragraphs, bullets, and links but sends no email.
646
+ */
647
+ static titleDraft<T = PrTitleDraftResponse>(title_id: string, data?: PrTitleDraftRequest, params?: Record<string, any>): AxiosPromise<Response<T>>;
376
648
  /**
377
649
  * Queue PR verification jobs. Requires a site-admin auth token.
378
650
  *
@@ -382,5 +654,10 @@ declare class PrDirectory {
382
654
  * ```
383
655
  */
384
656
  static queueVerification<T = PrQueueVerificationResponse>(data?: PrQueueVerificationRequest, params?: Record<string, any>): AxiosPromise<Response<T>>;
657
+ /**
658
+ * Discover, queue, or synchronously refresh PR feeds. Requires a site-admin
659
+ * auth token.
660
+ */
661
+ static refreshFeeds<T = PrFeedRefreshResponse>(data?: PrFeedRefreshRequest, params?: Record<string, any>): AxiosPromise<Response<T>>;
385
662
  }
386
663
  export default PrDirectory;
package/dist/esm/index.js CHANGED
@@ -19846,7 +19846,7 @@ var Mcp = /** @class */ (function () {
19846
19846
  * Route declarations for the PR Directory API.
19847
19847
  *
19848
19848
  * These mirror the Laravel routes under `/api/pr/*` and the title-scoped
19849
- * matcher route under `/api/titles/{title_id}/pr/matches`. Keeping the URL
19849
+ * matcher/research routes under `/api/titles/{title_id}/pr/*`. Keeping the URL
19850
19850
  * templates in one place lets the SDK methods stay small and consistent with
19851
19851
  * the rest of the package's route-wrapper pattern.
19852
19852
  */
@@ -19858,10 +19858,17 @@ var PrDirectoryRoutes = /** @class */ (function () {
19858
19858
  viewPublication: { url: "/pr/publications/{publication_id}", method: HTTP_METHODS.GET },
19859
19859
  listPeople: { url: "/pr/people", method: HTTP_METHODS.GET },
19860
19860
  viewPerson: { url: "/pr/people/{person_id}", method: HTTP_METHODS.GET },
19861
+ listFeeds: { url: "/pr/feeds", method: HTTP_METHODS.GET },
19862
+ viewFeed: { url: "/pr/feeds/{feed_id}", method: HTTP_METHODS.GET },
19863
+ listStories: { url: "/pr/stories", method: HTTP_METHODS.GET },
19864
+ viewStory: { url: "/pr/stories/{story_id}", method: HTTP_METHODS.GET },
19861
19865
  listTags: { url: "/pr/tags", method: HTTP_METHODS.GET },
19862
19866
  report: { url: "/pr/report", method: HTTP_METHODS.GET },
19863
19867
  titleMatches: { url: "/titles/{title_id}/pr/matches", method: HTTP_METHODS.GET },
19868
+ titleResearch: { url: "/titles/{title_id}/pr/research", method: HTTP_METHODS.GET },
19869
+ titleDraft: { url: "/titles/{title_id}/pr/drafts", method: HTTP_METHODS.POST },
19864
19870
  queueVerification: { url: "/admin/pr/verification/queue", method: HTTP_METHODS.POST },
19871
+ refreshFeeds: { url: "/admin/pr/feeds/refresh", method: HTTP_METHODS.POST },
19865
19872
  };
19866
19873
  return PrDirectoryRoutes;
19867
19874
  }());
@@ -19870,9 +19877,9 @@ var PrDirectoryRoutes = /** @class */ (function () {
19870
19877
  * SDK wrapper for the PR Directory API.
19871
19878
  *
19872
19879
  * The PR directory is read-friendly by default: public endpoints expose
19873
- * searchable publications, people, tags, and reporting metrics. Authenticated
19874
- * title admins can request title-specific PR matches, and site admins can queue
19875
- * monthly-style verification jobs.
19880
+ * searchable publications, people, feeds, stories, tags, and reporting metrics.
19881
+ * Authenticated title admins can request title-specific research and review-only
19882
+ * outreach drafts, and site admins can queue verification or feed refresh jobs.
19876
19883
  */
19877
19884
  var PrDirectory = /** @class */ (function () {
19878
19885
  function PrDirectory() {
@@ -19922,6 +19929,31 @@ var PrDirectory = /** @class */ (function () {
19922
19929
  PrDirectory.viewPerson = function (person_id, params) {
19923
19930
  return Requests.processRoute(PrDirectoryRoutes.routes.viewPerson, {}, { person_id: person_id }, params);
19924
19931
  };
19932
+ /**
19933
+ * Search discovered RSS/Atom/JSON feeds across known publications.
19934
+ */
19935
+ PrDirectory.listFeeds = function (params) {
19936
+ return Requests.processRoute(PrDirectoryRoutes.routes.listFeeds, {}, {}, params);
19937
+ };
19938
+ /**
19939
+ * Retrieve one feed with freshness metadata and recent imported stories.
19940
+ * Pass `include_raw: true` to request the stored XML/RSS payload.
19941
+ */
19942
+ PrDirectory.viewFeed = function (feed_id, params) {
19943
+ return Requests.processRoute(PrDirectoryRoutes.routes.viewFeed, {}, { feed_id: feed_id }, params);
19944
+ };
19945
+ /**
19946
+ * Search imported stories, reviews, guides, and episodes by outlet or byline.
19947
+ */
19948
+ PrDirectory.listStories = function (params) {
19949
+ return Requests.processRoute(PrDirectoryRoutes.routes.listStories, {}, {}, params);
19950
+ };
19951
+ /**
19952
+ * Retrieve one imported story with feed, publication, and byline evidence.
19953
+ */
19954
+ PrDirectory.viewStory = function (story_id, params) {
19955
+ return Requests.processRoute(PrDirectoryRoutes.routes.viewStory, {}, { story_id: story_id }, params);
19956
+ };
19925
19957
  /**
19926
19958
  * List the normalized tag vocabulary used for PR search, filters, matching,
19927
19959
  * and reporting.
@@ -19943,6 +19975,20 @@ var PrDirectory = /** @class */ (function () {
19943
19975
  PrDirectory.titleMatches = function (title_id, params) {
19944
19976
  return Requests.processRoute(PrDirectoryRoutes.routes.titleMatches, {}, { title_id: title_id }, params);
19945
19977
  };
19978
+ /**
19979
+ * Get a title-scoped PR research workspace with outlet matches, recent story
19980
+ * context, media kit readiness, and next steps.
19981
+ */
19982
+ PrDirectory.titleResearch = function (title_id, params) {
19983
+ return Requests.processRoute(PrDirectoryRoutes.routes.titleResearch, {}, { title_id: title_id }, params);
19984
+ };
19985
+ /**
19986
+ * Create a formatted, review-only PR email draft for a selected title target.
19987
+ * The backend returns HTML with paragraphs, bullets, and links but sends no email.
19988
+ */
19989
+ PrDirectory.titleDraft = function (title_id, data, params) {
19990
+ return Requests.processRoute(PrDirectoryRoutes.routes.titleDraft, data || {}, { title_id: title_id }, params);
19991
+ };
19946
19992
  /**
19947
19993
  * Queue PR verification jobs. Requires a site-admin auth token.
19948
19994
  *
@@ -19954,6 +20000,13 @@ var PrDirectory = /** @class */ (function () {
19954
20000
  PrDirectory.queueVerification = function (data, params) {
19955
20001
  return Requests.processRoute(PrDirectoryRoutes.routes.queueVerification, data || {}, {}, params);
19956
20002
  };
20003
+ /**
20004
+ * Discover, queue, or synchronously refresh PR feeds. Requires a site-admin
20005
+ * auth token.
20006
+ */
20007
+ PrDirectory.refreshFeeds = function (data, params) {
20008
+ return Requests.processRoute(PrDirectoryRoutes.routes.refreshFeeds, data || {}, {}, params);
20009
+ };
19957
20010
  return PrDirectory;
19958
20011
  }());
19959
20012