@ashdev/codex-plugin-sdk 1.9.2 → 1.10.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.
@@ -30,10 +30,19 @@ export interface PluginCapabilities {
30
30
  * E.g., ["series"] or ["series", "book"]
31
31
  */
32
32
  metadataProvider?: MetadataContentType[];
33
- /** Can sync reading progress with external service */
34
- syncProvider?: boolean;
33
+ /** Can sync reading progress with external service (per-user) */
34
+ userReadSync?: boolean;
35
+ /**
36
+ * External ID source used to match sync entries to Codex series.
37
+ * When set, pulled sync entries are matched to series via the
38
+ * `series_external_ids` table using this source string.
39
+ *
40
+ * Should use the `api:<service>` convention, e.g. "api:anilist".
41
+ * Only meaningful when `userReadSync` is true.
42
+ */
43
+ externalIdSource?: string;
35
44
  /** Can provide recommendations */
36
- recommendationProvider?: boolean;
45
+ userRecommendationProvider?: boolean;
37
46
  }
38
47
  /**
39
48
  * Configuration field definition for documenting plugin config options
@@ -63,6 +72,29 @@ export interface ConfigSchema {
63
72
  /** List of configuration fields */
64
73
  fields: ConfigField[];
65
74
  }
75
+ /**
76
+ * OAuth 2.0 configuration for user plugins requiring external service authentication.
77
+ *
78
+ * Codex handles the full OAuth flow (authorization URL, code exchange, token storage).
79
+ * Plugins only need to declare their OAuth requirements here.
80
+ */
81
+ export interface OAuthConfig {
82
+ /** OAuth 2.0 authorization endpoint URL */
83
+ authorizationUrl: string;
84
+ /** OAuth 2.0 token endpoint URL */
85
+ tokenUrl: string;
86
+ /** Required OAuth scopes */
87
+ scopes?: string[];
88
+ /**
89
+ * Whether to use PKCE (Proof Key for Code Exchange).
90
+ * Recommended for public clients. Defaults to true.
91
+ */
92
+ pkce?: boolean;
93
+ /** Optional user info endpoint URL (to fetch external identity after auth) */
94
+ userInfoUrl?: string;
95
+ /** Optional default OAuth client ID (can be overridden by admin in plugin config) */
96
+ clientId?: string;
97
+ }
66
98
  /**
67
99
  * Plugin manifest returned by the `initialize` method
68
100
  */
@@ -89,10 +121,34 @@ export interface PluginManifest {
89
121
  requiredCredentials?: CredentialField[];
90
122
  /**
91
123
  * Configuration schema documenting available config options.
92
- * This is displayed in the admin UI to help users configure the plugin.
124
+ * This is displayed in the admin UI to help administrators configure the plugin.
93
125
  */
94
126
  configSchema?: ConfigSchema;
127
+ /**
128
+ * Configuration schema for per-user settings.
129
+ * Displayed in the user-facing Integrations settings modal.
130
+ * Users can customize these fields per-account (stored in user_plugins.config).
131
+ */
132
+ userConfigSchema?: ConfigSchema;
133
+ /**
134
+ * OAuth 2.0 configuration for user plugins that require external service authentication.
135
+ * When present, the Integrations UI shows "Connect with {name}" instead of "Enable".
136
+ */
137
+ oauth?: OAuthConfig;
138
+ /** User-facing description shown when enabling the plugin */
139
+ userDescription?: string;
140
+ /** Admin-facing setup instructions (e.g., how to create OAuth app, configure client ID) */
141
+ adminSetupInstructions?: string;
142
+ /** User-facing setup instructions (e.g., how to connect or get a personal token) */
143
+ userSetupInstructions?: string;
95
144
  }
145
+ /**
146
+ * Canonical external ID source for AniList.
147
+ *
148
+ * Use this as the `externalIdSource` in plugin capabilities and when
149
+ * creating external ID entries. Follows the `api:<service>` convention.
150
+ */
151
+ export declare const EXTERNAL_ID_SOURCE_ANILIST: "api:anilist";
96
152
  /**
97
153
  * Type guard to check if manifest declares series metadata provider capability
98
154
  */
@@ -109,13 +165,4 @@ export declare function hasBookMetadataProvider(manifest: PluginManifest): manif
109
165
  metadataProvider: MetadataContentType[];
110
166
  };
111
167
  };
112
- /**
113
- * @deprecated Use PluginCapabilities with metadataProvider array instead
114
- */
115
- export interface LegacyPluginCapabilities {
116
- /** @deprecated Use metadataProvider: ["series"] instead */
117
- seriesMetadataProvider?: boolean;
118
- syncProvider?: boolean;
119
- recommendationProvider?: boolean;
120
- }
121
168
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IAClC,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACzC,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,eAAe,EAAE,KAAK,CAAC;IAEvB,8BAA8B;IAC9B,YAAY,EAAE,kBAAkB,CAAC;IAEjC,sCAAsC;IACtC,mBAAmB,CAAC,EAAE,eAAe,EAAE,CAAC;IAExC;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,IAAI,cAAc,GAAG;IAChG,YAAY,EAAE;QAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAC3D,CAKA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,QAAQ,IAAI,cAAc,GAAG;IAC9F,YAAY,EAAE;QAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;CAC3D,CAKA;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,16 @@
2
2
  * Plugin manifest types - describes plugin capabilities and requirements
3
3
  */
4
4
  // =============================================================================
5
+ // External ID Source Constants
6
+ // =============================================================================
7
+ /**
8
+ * Canonical external ID source for AniList.
9
+ *
10
+ * Use this as the `externalIdSource` in plugin capabilities and when
11
+ * creating external ID entries. Follows the `api:<service>` convention.
12
+ */
13
+ export const EXTERNAL_ID_SOURCE_ANILIST = "api:anilist";
14
+ // =============================================================================
5
15
  // Type Guards for Manifest Validation
6
16
  // =============================================================================
7
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwGH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAwB;IAGhE,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACrD,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAwB;IAG9D,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACrD,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+JH,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,aAAsB,CAAC;AAEjE,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAwB;IAGhE,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACrD,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAwB;IAG9D,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACrD,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxD,CAAC;AACJ,CAAC"}
@@ -115,6 +115,28 @@ export interface PluginSeriesMetadata {
115
115
  externalRatings?: ExternalRating[];
116
116
  /** Links to other sites */
117
117
  externalLinks: ExternalLink[];
118
+ /**
119
+ * Cross-reference IDs from other services.
120
+ * Uses the `api:` prefix convention (e.g., "api:anilist", "api:myanimelist").
121
+ *
122
+ * These allow other plugins (sync, recommendations) to match series
123
+ * to external services without needing title-based search.
124
+ */
125
+ externalIds?: ExternalId[];
126
+ }
127
+ /**
128
+ * Cross-reference ID for a series on an external service.
129
+ *
130
+ * Source naming convention:
131
+ * - `api:<service>` - External API service ID (e.g., "api:anilist", "api:myanimelist")
132
+ * - `plugin:<name>` - Plugin match provenance (managed by Codex, not set by plugins)
133
+ * - No prefix - File/user sources (e.g., "comicinfo", "epub", "manual")
134
+ */
135
+ export interface ExternalId {
136
+ /** Source identifier (e.g., "api:anilist", "api:myanimelist", "api:mangadex") */
137
+ source: string;
138
+ /** ID on the external service */
139
+ externalId: string;
118
140
  }
119
141
  /**
120
142
  * Alternate title with language info
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Recommendation Provider Protocol Types
3
+ *
4
+ * Defines the types for recommendation provider operations. These types MUST match
5
+ * the Rust protocol exactly (see src/services/plugin/recommendations.rs in the Codex backend).
6
+ *
7
+ * Recommendation providers generate personalized suggestions based on a user's
8
+ * library and reading history.
9
+ *
10
+ * ## Methods
11
+ *
12
+ * - `recommendations/get` - Get personalized recommendations
13
+ * - `recommendations/updateProfile` - Update the user's taste profile
14
+ * - `recommendations/clear` - Clear cached recommendations
15
+ * - `recommendations/dismiss` - Dismiss a recommendation
16
+ *
17
+ * @see src/services/plugin/recommendations.rs in the Codex backend
18
+ */
19
+ /** An entry in the user's library, sent to the plugin for context */
20
+ export interface UserLibraryEntry {
21
+ /** Codex series ID */
22
+ seriesId: string;
23
+ /** Primary title */
24
+ title: string;
25
+ /** Alternate titles */
26
+ alternateTitles: string[];
27
+ /** Year of publication */
28
+ year?: number;
29
+ /** Series status (e.g., "ongoing", "completed") */
30
+ status?: string;
31
+ /** Genres */
32
+ genres: string[];
33
+ /** Tags */
34
+ tags: string[];
35
+ /** Total number of books in the series */
36
+ totalBookCount?: number;
37
+ /** External IDs from metadata providers */
38
+ externalIds: Array<{
39
+ source: string;
40
+ externalId: string;
41
+ }>;
42
+ /** User's reading status */
43
+ readingStatus?: string;
44
+ /** Number of books the user has read */
45
+ booksRead: number;
46
+ /** Number of books the user owns */
47
+ booksOwned: number;
48
+ /** User's rating (0-100 scale) */
49
+ userRating?: number;
50
+ /** User's notes */
51
+ userNotes?: string;
52
+ /** When the user started reading (ISO 8601) */
53
+ startedAt?: string;
54
+ /** When the user last read (ISO 8601) */
55
+ lastReadAt?: string;
56
+ /** When the user completed reading (ISO 8601) */
57
+ completedAt?: string;
58
+ }
59
+ /** Parameters for `recommendations/get` method */
60
+ export interface RecommendationRequest {
61
+ /** User's library entries */
62
+ library: UserLibraryEntry[];
63
+ /** Max recommendations to return */
64
+ limit?: number;
65
+ /** External IDs to exclude */
66
+ excludeIds: string[];
67
+ }
68
+ /** A single recommendation */
69
+ export interface Recommendation {
70
+ /** External ID on the source service */
71
+ externalId: string;
72
+ /** URL to the entry on the external service */
73
+ externalUrl?: string;
74
+ /** Title of the recommended series/book */
75
+ title: string;
76
+ /** Cover image URL */
77
+ coverUrl?: string;
78
+ /** Summary/description */
79
+ summary?: string;
80
+ /** Genres */
81
+ genres: string[];
82
+ /** Confidence/relevance score (0.0 to 1.0) */
83
+ score: number;
84
+ /** Human-readable reason for this recommendation */
85
+ reason: string;
86
+ /** Titles that influenced this recommendation */
87
+ basedOn: string[];
88
+ /** Codex series ID if matched */
89
+ codexSeriesId?: string;
90
+ /** Whether this series is already in the user's library */
91
+ inLibrary: boolean;
92
+ }
93
+ /** Response from `recommendations/get` method */
94
+ export interface RecommendationResponse {
95
+ /** Personalized recommendations */
96
+ recommendations: Recommendation[];
97
+ /** When generated (ISO 8601) */
98
+ generatedAt?: string;
99
+ /** Whether cached results */
100
+ cached: boolean;
101
+ }
102
+ /** Parameters for `recommendations/updateProfile` method */
103
+ export interface ProfileUpdateRequest {
104
+ /** Updated library entries */
105
+ entries: UserLibraryEntry[];
106
+ }
107
+ /** Response from `recommendations/updateProfile` method */
108
+ export interface ProfileUpdateResponse {
109
+ /** Whether the profile was updated */
110
+ updated: boolean;
111
+ /** Number of entries processed */
112
+ entriesProcessed: number;
113
+ }
114
+ /** Response from `recommendations/clear` method */
115
+ export interface RecommendationClearResponse {
116
+ /** Whether the clear succeeded */
117
+ cleared: boolean;
118
+ }
119
+ /** Dismiss reason */
120
+ export type DismissReason = "not_interested" | "already_read" | "already_owned";
121
+ /** Parameters for `recommendations/dismiss` method */
122
+ export interface RecommendationDismissRequest {
123
+ /** External ID of the recommendation to dismiss */
124
+ externalId: string;
125
+ /** Reason for dismissal */
126
+ reason?: DismissReason;
127
+ }
128
+ /** Response from `recommendations/dismiss` method */
129
+ export interface RecommendationDismissResponse {
130
+ /** Whether the dismissal was recorded */
131
+ dismissed: boolean;
132
+ }
133
+ //# sourceMappingURL=recommendations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../src/types/recommendations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Recommendation Provider Protocol Types
3
+ *
4
+ * Defines the types for recommendation provider operations. These types MUST match
5
+ * the Rust protocol exactly (see src/services/plugin/recommendations.rs in the Codex backend).
6
+ *
7
+ * Recommendation providers generate personalized suggestions based on a user's
8
+ * library and reading history.
9
+ *
10
+ * ## Methods
11
+ *
12
+ * - `recommendations/get` - Get personalized recommendations
13
+ * - `recommendations/updateProfile` - Update the user's taste profile
14
+ * - `recommendations/clear` - Clear cached recommendations
15
+ * - `recommendations/dismiss` - Dismiss a recommendation
16
+ *
17
+ * @see src/services/plugin/recommendations.rs in the Codex backend
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=recommendations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/types/recommendations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Sync Provider Protocol Types
3
+ *
4
+ * Defines the types for sync provider operations. These types MUST match
5
+ * the Rust protocol exactly (see src/services/plugin/sync.rs in the Codex backend).
6
+ *
7
+ * Sync providers push and pull reading progress between Codex and external
8
+ * services like AniList and MyAnimeList.
9
+ *
10
+ * ## Architecture
11
+ *
12
+ * Sync operations are initiated by the host (Codex) and sent to the plugin.
13
+ * The plugin communicates with the external service using user credentials
14
+ * provided during initialization.
15
+ *
16
+ * ## Methods
17
+ *
18
+ * - `sync/getUserInfo` - Get user info from external service
19
+ * - `sync/pushProgress` - Push reading progress to external service
20
+ * - `sync/pullProgress` - Pull reading progress from external service
21
+ * - `sync/status` - Get sync status/diff between Codex and external
22
+ *
23
+ * @see src/services/plugin/sync.rs in the Codex backend
24
+ */
25
+ /**
26
+ * Reading status for sync entries.
27
+ *
28
+ * Uses snake_case values to match Rust's `#[serde(rename_all = "snake_case")]`.
29
+ */
30
+ export type SyncReadingStatus = "reading" | "completed" | "on_hold" | "dropped" | "plan_to_read";
31
+ /**
32
+ * Status of a single sync entry operation result.
33
+ *
34
+ * Uses snake_case values to match Rust's `#[serde(rename_all = "snake_case")]`.
35
+ */
36
+ export type SyncEntryResultStatus = "created" | "updated" | "unchanged" | "failed";
37
+ /**
38
+ * Response from `sync/getUserInfo` method.
39
+ *
40
+ * Returns the user's identity on the external service.
41
+ * Used to display the connected account in the UI.
42
+ */
43
+ export interface ExternalUserInfo {
44
+ /** User ID on the external service */
45
+ externalId: string;
46
+ /** Display name / username */
47
+ username: string;
48
+ /** Avatar/profile image URL */
49
+ avatarUrl?: string;
50
+ /** Profile URL on the external service */
51
+ profileUrl?: string;
52
+ }
53
+ /**
54
+ * Reading progress details.
55
+ *
56
+ * All fields are optional to support different tracking granularities
57
+ * (e.g., chapter-based for manga, page-based for single volumes).
58
+ */
59
+ export interface SyncProgress {
60
+ /** Number of chapters read */
61
+ chapters?: number;
62
+ /** Number of volumes read */
63
+ volumes?: number;
64
+ /** Number of pages read (for single-volume works) */
65
+ pages?: number;
66
+ /** Total number of chapters in the series (if known) */
67
+ totalChapters?: number;
68
+ /** Total number of volumes in the series (if known) */
69
+ totalVolumes?: number;
70
+ }
71
+ /**
72
+ * A single reading progress entry for sync.
73
+ *
74
+ * Represents one series/book's reading state that can be pushed to
75
+ * or pulled from an external service.
76
+ */
77
+ export interface SyncEntry {
78
+ /** External ID on the target service (e.g., AniList media ID) */
79
+ externalId: string;
80
+ /** Reading status */
81
+ status: SyncReadingStatus;
82
+ /** Reading progress */
83
+ progress?: SyncProgress;
84
+ /** User's score/rating (service-specific scale, e.g., 1-10 or 1-100) */
85
+ score?: number;
86
+ /** When the user started reading (ISO 8601) */
87
+ startedAt?: string;
88
+ /** When the user completed reading (ISO 8601) */
89
+ completedAt?: string;
90
+ /** User notes */
91
+ notes?: string;
92
+ /**
93
+ * When the series was most recently updated (ISO 8601).
94
+ * Populated from the most recent read_progress.updated_at for the series.
95
+ * Plugins can use this for time-based logic (e.g., pause/drop stale series).
96
+ */
97
+ latestUpdatedAt?: string;
98
+ /**
99
+ * Series title (for plugins that support title-based search fallback).
100
+ * Populated when the backend knows the series name. Plugins can use this
101
+ * to search the external service by title when no external ID is present.
102
+ */
103
+ title?: string;
104
+ }
105
+ /**
106
+ * Parameters for `sync/pushProgress` method.
107
+ *
108
+ * Sends reading progress from Codex to the external service.
109
+ */
110
+ export interface SyncPushRequest {
111
+ /** Entries to push to the external service */
112
+ entries: SyncEntry[];
113
+ }
114
+ /**
115
+ * Result for a single sync entry (push or pull).
116
+ */
117
+ export interface SyncEntryResult {
118
+ /** External ID of the entry */
119
+ externalId: string;
120
+ /** Result status */
121
+ status: SyncEntryResultStatus;
122
+ /** Error message if failed */
123
+ error?: string;
124
+ }
125
+ /**
126
+ * Response from `sync/pushProgress` method.
127
+ */
128
+ export interface SyncPushResponse {
129
+ /** Successfully synced entries */
130
+ success: SyncEntryResult[];
131
+ /** Failed entries */
132
+ failed: SyncEntryResult[];
133
+ }
134
+ /**
135
+ * Parameters for `sync/pullProgress` method.
136
+ *
137
+ * Requests reading progress from the external service.
138
+ */
139
+ export interface SyncPullRequest {
140
+ /** Only pull entries updated after this timestamp (ISO 8601). If not set, pulls all entries. */
141
+ since?: string;
142
+ /** Maximum number of entries to pull */
143
+ limit?: number;
144
+ /** Pagination cursor for continuing a previous pull */
145
+ cursor?: string;
146
+ }
147
+ /**
148
+ * Response from `sync/pullProgress` method.
149
+ */
150
+ export interface SyncPullResponse {
151
+ /** Entries pulled from the external service */
152
+ entries: SyncEntry[];
153
+ /** Cursor for next page (if more entries available) */
154
+ nextCursor?: string;
155
+ /** Whether there are more entries to pull */
156
+ hasMore: boolean;
157
+ }
158
+ /**
159
+ * Response from `sync/status` method.
160
+ *
161
+ * Provides an overview of the sync state between Codex and the external service.
162
+ */
163
+ export interface SyncStatusResponse {
164
+ /** Last successful sync timestamp (ISO 8601) */
165
+ lastSyncAt?: string;
166
+ /** Number of entries on the external service */
167
+ externalCount?: number;
168
+ /** Number of entries that need to be pushed */
169
+ pendingPush: number;
170
+ /** Number of entries that need to be pulled */
171
+ pendingPull: number;
172
+ /** Entries with conflicts (different on both sides) */
173
+ conflicts: number;
174
+ }
175
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Sync Provider Protocol Types
3
+ *
4
+ * Defines the types for sync provider operations. These types MUST match
5
+ * the Rust protocol exactly (see src/services/plugin/sync.rs in the Codex backend).
6
+ *
7
+ * Sync providers push and pull reading progress between Codex and external
8
+ * services like AniList and MyAnimeList.
9
+ *
10
+ * ## Architecture
11
+ *
12
+ * Sync operations are initiated by the host (Codex) and sent to the plugin.
13
+ * The plugin communicates with the external service using user credentials
14
+ * provided during initialization.
15
+ *
16
+ * ## Methods
17
+ *
18
+ * - `sync/getUserInfo` - Get user info from external service
19
+ * - `sync/pushProgress` - Push reading progress to external service
20
+ * - `sync/pullProgress` - Pull reading progress from external service
21
+ * - `sync/status` - Get sync status/diff between Codex and external
22
+ *
23
+ * @see src/services/plugin/sync.rs in the Codex backend
24
+ */
25
+ export {};
26
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/types/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ashdev/codex-plugin-sdk",
3
- "version": "1.9.2",
3
+ "version": "1.10.0",
4
4
  "description": "SDK for building Codex plugins",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",