@zlooks.cn/blog-shared 1.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.
@@ -0,0 +1,3 @@
1
+ export declare const BLOG_SERVICE_NAMESPACE = "cn.zlooks.blog.server";
2
+ export declare const BLOG_PLUGIN_ID = "blog";
3
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAC9D,eAAO,MAAM,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const BLOG_SERVICE_NAMESPACE = 'cn.zlooks.blog.server';
2
+ export const BLOG_PLUGIN_ID = 'blog';
3
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './identity.js';
2
+ export * from './micro.js';
3
+ export * from './themes.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './identity.js';
2
+ export * from './micro.js';
3
+ export * from './themes.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type BlogCategoryListItem, type BlogCommentListInput, type BlogRecentComment, type BlogRecentCommentListInput, type BlogFriendLink, type BlogPageListInput, type BlogPageSummary, type BlogReadPageInput, type BlogReadPageResponse, type BlogListCommentsResponse, type BlogPostList, type BlogPostArchive, type BlogPostArchiveInput, type BlogPostConnectionsInput, type BlogReadPostConnectionsResponse, type BlogPostListInput, type BlogReadPostInput, type BlogReadPostResponse, type BlogOpenPostResponse, type BlogTagSummary } from '@zlooks.cn/blog-schema';
2
+ import type { ExecutionContext } from '@hile/context';
3
+ export declare const BLOG_LIST_POSTS_OPERATION = "/public/posts/list";
4
+ export declare const BLOG_LIST_POST_ARCHIVE_OPERATION = "/public/posts/archive";
5
+ export declare const BLOG_READ_POST_OPERATION = "/public/posts/read";
6
+ export declare const BLOG_OPEN_POST_OPERATION = "/public/posts/open";
7
+ export declare const BLOG_READ_POST_CONNECTIONS_OPERATION = "/public/posts/connections";
8
+ export declare const BLOG_LIST_COMMENTS_OPERATION = "/public/comments/list";
9
+ export declare const BLOG_LIST_RECENT_COMMENTS_OPERATION = "/public/comments/recent";
10
+ export declare const BLOG_LIST_CATEGORIES_OPERATION = "/public/categories/list";
11
+ export declare const BLOG_LIST_TAGS_OPERATION = "/public/tags/list";
12
+ export declare const BLOG_LIST_FRIEND_LINKS_OPERATION = "/public/friend-links/list";
13
+ export declare const BLOG_LIST_PAGES_OPERATION = "/public/pages/list";
14
+ export declare const BLOG_READ_PAGE_OPERATION = "/public/pages/read";
15
+ export interface BlogMicroCallOptions {
16
+ readonly context: ExecutionContext;
17
+ readonly timeout?: number;
18
+ readonly retries?: number;
19
+ readonly signal?: AbortSignal;
20
+ }
21
+ export interface BlogMicroCaller {
22
+ call(namespace: string, operation: string, data: unknown, options: BlogMicroCallOptions): Promise<unknown>;
23
+ }
24
+ export interface BlogMicroClient {
25
+ listPosts(input: BlogPostListInput, options: BlogMicroCallOptions): Promise<BlogPostList>;
26
+ listPostArchive(input: BlogPostArchiveInput, options: BlogMicroCallOptions): Promise<BlogPostArchive>;
27
+ readPost(input: BlogReadPostInput, options: BlogMicroCallOptions): Promise<BlogReadPostResponse>;
28
+ openPost(input: BlogReadPostInput, options: BlogMicroCallOptions): Promise<BlogOpenPostResponse>;
29
+ readPostConnections(input: BlogPostConnectionsInput, options: BlogMicroCallOptions): Promise<BlogReadPostConnectionsResponse>;
30
+ listComments(input: BlogCommentListInput, options: BlogMicroCallOptions): Promise<BlogListCommentsResponse>;
31
+ listRecentComments(input: BlogRecentCommentListInput, options: BlogMicroCallOptions): Promise<readonly BlogRecentComment[]>;
32
+ listCategories(options: BlogMicroCallOptions): Promise<readonly BlogCategoryListItem[]>;
33
+ listTags(options: BlogMicroCallOptions): Promise<readonly BlogTagSummary[]>;
34
+ listFriendLinks(options: BlogMicroCallOptions): Promise<readonly BlogFriendLink[]>;
35
+ listPages(input: BlogPageListInput, options: BlogMicroCallOptions): Promise<readonly BlogPageSummary[]>;
36
+ readPage(input: BlogReadPageInput, options: BlogMicroCallOptions): Promise<BlogReadPageResponse>;
37
+ }
38
+ export declare function createBlogMicroClient(caller: BlogMicroCaller): BlogMicroClient;
39
+ //# sourceMappingURL=micro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro.d.ts","sourceRoot":"","sources":["../src/micro.ts"],"names":[],"mappings":"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"}
package/dist/micro.js ADDED
@@ -0,0 +1,66 @@
1
+ import { blogCategoryListSchema, blogCommentListInputSchema, blogRecentCommentListInputSchema, blogRecentCommentListSchema, blogEmptyRequestSchema, blogFriendLinkListSchema, blogPageListInputSchema, blogPageListSchema, blogReadPageInputSchema, blogReadPageResponseSchema, blogListCommentsResponseSchema, blogPostListInputSchema, blogPostListSchema, blogPostArchiveInputSchema, blogPostArchiveSchema, blogPostConnectionsInputSchema, blogReadPostConnectionsResponseSchema, blogReadPostInputSchema, blogReadPostResponseSchema, blogOpenPostResponseSchema, blogTagListSchema, } from '@zlooks.cn/blog-schema';
2
+ import { BLOG_SERVICE_NAMESPACE } from './identity.js';
3
+ export const BLOG_LIST_POSTS_OPERATION = '/public/posts/list';
4
+ export const BLOG_LIST_POST_ARCHIVE_OPERATION = '/public/posts/archive';
5
+ export const BLOG_READ_POST_OPERATION = '/public/posts/read';
6
+ export const BLOG_OPEN_POST_OPERATION = '/public/posts/open';
7
+ export const BLOG_READ_POST_CONNECTIONS_OPERATION = '/public/posts/connections';
8
+ export const BLOG_LIST_COMMENTS_OPERATION = '/public/comments/list';
9
+ export const BLOG_LIST_RECENT_COMMENTS_OPERATION = '/public/comments/recent';
10
+ export const BLOG_LIST_CATEGORIES_OPERATION = '/public/categories/list';
11
+ export const BLOG_LIST_TAGS_OPERATION = '/public/tags/list';
12
+ export const BLOG_LIST_FRIEND_LINKS_OPERATION = '/public/friend-links/list';
13
+ export const BLOG_LIST_PAGES_OPERATION = '/public/pages/list';
14
+ export const BLOG_READ_PAGE_OPERATION = '/public/pages/read';
15
+ export function createBlogMicroClient(caller) {
16
+ const call = async (operation, request, options) => caller.call(BLOG_SERVICE_NAMESPACE, operation, request, options);
17
+ const client = {
18
+ async listPosts(input, options) {
19
+ const request = blogPostListInputSchema.parse(input);
20
+ return blogPostListSchema.parse(await call(BLOG_LIST_POSTS_OPERATION, request, options));
21
+ },
22
+ async listPostArchive(input, options) {
23
+ const request = blogPostArchiveInputSchema.parse(input);
24
+ return blogPostArchiveSchema.parse(await call(BLOG_LIST_POST_ARCHIVE_OPERATION, request, options));
25
+ },
26
+ async readPost(input, options) {
27
+ const request = blogReadPostInputSchema.parse(input);
28
+ return blogReadPostResponseSchema.parse(await call(BLOG_READ_POST_OPERATION, request, options));
29
+ },
30
+ async openPost(input, options) {
31
+ const request = blogReadPostInputSchema.parse(input);
32
+ return blogOpenPostResponseSchema.parse(await call(BLOG_OPEN_POST_OPERATION, request, options));
33
+ },
34
+ async readPostConnections(input, options) {
35
+ const request = blogPostConnectionsInputSchema.parse(input);
36
+ return blogReadPostConnectionsResponseSchema.parse(await call(BLOG_READ_POST_CONNECTIONS_OPERATION, request, options));
37
+ },
38
+ async listComments(input, options) {
39
+ const request = blogCommentListInputSchema.parse(input);
40
+ return blogListCommentsResponseSchema.parse(await call(BLOG_LIST_COMMENTS_OPERATION, request, options));
41
+ },
42
+ async listRecentComments(input, options) {
43
+ const request = blogRecentCommentListInputSchema.parse(input);
44
+ return blogRecentCommentListSchema.parse(await call(BLOG_LIST_RECENT_COMMENTS_OPERATION, request, options));
45
+ },
46
+ async listCategories(options) {
47
+ return blogCategoryListSchema.parse(await call(BLOG_LIST_CATEGORIES_OPERATION, blogEmptyRequestSchema.parse({}), options));
48
+ },
49
+ async listTags(options) {
50
+ return blogTagListSchema.parse(await call(BLOG_LIST_TAGS_OPERATION, blogEmptyRequestSchema.parse({}), options));
51
+ },
52
+ async listFriendLinks(options) {
53
+ return blogFriendLinkListSchema.parse(await call(BLOG_LIST_FRIEND_LINKS_OPERATION, blogEmptyRequestSchema.parse({}), options));
54
+ },
55
+ async listPages(input, options) {
56
+ const request = blogPageListInputSchema.parse(input);
57
+ return blogPageListSchema.parse(await call(BLOG_LIST_PAGES_OPERATION, request, options));
58
+ },
59
+ async readPage(input, options) {
60
+ const request = blogReadPageInputSchema.parse(input);
61
+ return blogReadPageResponseSchema.parse(await call(BLOG_READ_PAGE_OPERATION, request, options));
62
+ },
63
+ };
64
+ return Object.freeze(client);
65
+ }
66
+ //# sourceMappingURL=micro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro.js","sourceRoot":"","sources":["../src/micro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { z } from 'zod';
2
+ export declare const BLOG_THEME_CANDIDATE_TOPIC_PREFIX = "registry:zlooks.cn/blog/themes/candidates/";
3
+ export declare const BLOG_THEME_SELECTION_TOPIC_PREFIX = "registry:zlooks.cn/blog/themes/selections/";
4
+ export declare const BLOG_THEME_ACTIVATION_TOPIC_PREFIX = "registry:zlooks.cn/blog/themes/activations/";
5
+ export declare const blogThemeIdSchema: z.ZodReadonly<z.ZodString>;
6
+ export declare const blogThemeSelectionRevisionSchema: z.ZodReadonly<z.ZodNumber>;
7
+ export declare const blogThemeLeaseSchema: z.ZodReadonly<z.ZodObject<{
8
+ issuedAt: z.ZodISODateTime;
9
+ expiresAt: z.ZodISODateTime;
10
+ sequence: z.ZodNumber;
11
+ }, z.core.$strict>>;
12
+ export declare const blogThemeCandidateSchema: z.ZodReadonly<z.ZodObject<{
13
+ themeId: z.ZodReadonly<z.ZodString>;
14
+ instanceId: z.ZodString;
15
+ displayName: z.ZodString;
16
+ description: z.ZodString;
17
+ pluginId: z.ZodLiteral<"blog">;
18
+ buildId: z.ZodString;
19
+ generation: z.ZodNumber;
20
+ routes: z.ZodReadonly<z.ZodArray<z.ZodString>>;
21
+ lease: z.ZodReadonly<z.ZodObject<{
22
+ issuedAt: z.ZodISODateTime;
23
+ expiresAt: z.ZodISODateTime;
24
+ sequence: z.ZodNumber;
25
+ }, z.core.$strict>>;
26
+ }, z.core.$strict>>;
27
+ export declare const blogThemeSelectionSchema: z.ZodReadonly<z.ZodObject<{
28
+ instanceId: z.ZodString;
29
+ themeId: z.ZodReadonly<z.ZodString>;
30
+ revision: z.ZodReadonly<z.ZodNumber>;
31
+ updatedAt: z.ZodISODateTime;
32
+ updatedBy: z.ZodString;
33
+ lease: z.ZodReadonly<z.ZodObject<{
34
+ issuedAt: z.ZodISODateTime;
35
+ expiresAt: z.ZodISODateTime;
36
+ sequence: z.ZodNumber;
37
+ }, z.core.$strict>>;
38
+ }, z.core.$strict>>;
39
+ export declare const blogThemeActivationSchema: z.ZodReadonly<z.ZodObject<{
40
+ themeId: z.ZodReadonly<z.ZodString>;
41
+ instanceId: z.ZodString;
42
+ selectionRevision: z.ZodReadonly<z.ZodNumber>;
43
+ buildId: z.ZodString;
44
+ generation: z.ZodNumber;
45
+ lease: z.ZodReadonly<z.ZodObject<{
46
+ issuedAt: z.ZodISODateTime;
47
+ expiresAt: z.ZodISODateTime;
48
+ sequence: z.ZodNumber;
49
+ }, z.core.$strict>>;
50
+ }, z.core.$strict>>;
51
+ export declare const blogThemeCandidateSnapshotSchema: z.ZodReadonly<z.ZodObject<{
52
+ topic: z.ZodString;
53
+ payload: z.ZodReadonly<z.ZodObject<{
54
+ themeId: z.ZodReadonly<z.ZodString>;
55
+ instanceId: z.ZodString;
56
+ displayName: z.ZodString;
57
+ description: z.ZodString;
58
+ pluginId: z.ZodLiteral<"blog">;
59
+ buildId: z.ZodString;
60
+ generation: z.ZodNumber;
61
+ routes: z.ZodReadonly<z.ZodArray<z.ZodString>>;
62
+ lease: z.ZodReadonly<z.ZodObject<{
63
+ issuedAt: z.ZodISODateTime;
64
+ expiresAt: z.ZodISODateTime;
65
+ sequence: z.ZodNumber;
66
+ }, z.core.$strict>>;
67
+ }, z.core.$strict>>;
68
+ publishers: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
69
+ host: z.ZodString;
70
+ port: z.ZodNumber;
71
+ }, z.core.$strict>>>>;
72
+ publisherCount: z.ZodLiteral<1>;
73
+ subscriberCount: z.ZodNumber;
74
+ hasData: z.ZodLiteral<true>;
75
+ retained: z.ZodLiteral<false>;
76
+ }, z.core.$strict>>;
77
+ export declare const blogThemeSelectionSnapshotSchema: z.ZodReadonly<z.ZodObject<{
78
+ topic: z.ZodString;
79
+ payload: z.ZodReadonly<z.ZodObject<{
80
+ instanceId: z.ZodString;
81
+ themeId: z.ZodReadonly<z.ZodString>;
82
+ revision: z.ZodReadonly<z.ZodNumber>;
83
+ updatedAt: z.ZodISODateTime;
84
+ updatedBy: z.ZodString;
85
+ lease: z.ZodReadonly<z.ZodObject<{
86
+ issuedAt: z.ZodISODateTime;
87
+ expiresAt: z.ZodISODateTime;
88
+ sequence: z.ZodNumber;
89
+ }, z.core.$strict>>;
90
+ }, z.core.$strict>>;
91
+ publishers: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
92
+ host: z.ZodString;
93
+ port: z.ZodNumber;
94
+ }, z.core.$strict>>>>;
95
+ publisherCount: z.ZodLiteral<1>;
96
+ subscriberCount: z.ZodNumber;
97
+ hasData: z.ZodLiteral<true>;
98
+ retained: z.ZodLiteral<false>;
99
+ }, z.core.$strict>>;
100
+ export declare const blogThemeActivationSnapshotSchema: z.ZodReadonly<z.ZodObject<{
101
+ topic: z.ZodString;
102
+ payload: z.ZodReadonly<z.ZodObject<{
103
+ themeId: z.ZodReadonly<z.ZodString>;
104
+ instanceId: z.ZodString;
105
+ selectionRevision: z.ZodReadonly<z.ZodNumber>;
106
+ buildId: z.ZodString;
107
+ generation: z.ZodNumber;
108
+ lease: z.ZodReadonly<z.ZodObject<{
109
+ issuedAt: z.ZodISODateTime;
110
+ expiresAt: z.ZodISODateTime;
111
+ sequence: z.ZodNumber;
112
+ }, z.core.$strict>>;
113
+ }, z.core.$strict>>;
114
+ publishers: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
115
+ host: z.ZodString;
116
+ port: z.ZodNumber;
117
+ }, z.core.$strict>>>>;
118
+ publisherCount: z.ZodLiteral<1>;
119
+ subscriberCount: z.ZodNumber;
120
+ hasData: z.ZodLiteral<true>;
121
+ retained: z.ZodLiteral<false>;
122
+ }, z.core.$strict>>;
123
+ export type BlogThemeLease = z.infer<typeof blogThemeLeaseSchema>;
124
+ export type BlogThemeCandidate = z.infer<typeof blogThemeCandidateSchema>;
125
+ export type BlogThemeSelection = z.infer<typeof blogThemeSelectionSchema>;
126
+ export type BlogThemeActivation = z.infer<typeof blogThemeActivationSchema>;
127
+ export type BlogThemeCandidateSnapshot = z.infer<typeof blogThemeCandidateSnapshotSchema>;
128
+ export type BlogThemeSelectionSnapshot = z.infer<typeof blogThemeSelectionSnapshotSchema>;
129
+ export type BlogThemeActivationSnapshot = z.infer<typeof blogThemeActivationSnapshotSchema>;
130
+ export declare function blogThemeCandidateTopic(themeId: string, instanceId: string): string;
131
+ export declare function blogThemeSelectionTopic(instanceId: string): string;
132
+ export declare function blogThemeActivationTopic(themeId: string, instanceId: string): string;
133
+ export declare function parseTrustedBlogThemeCandidate(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeCandidate;
134
+ export declare function parseTrustedBlogThemeSelection(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeSelection;
135
+ export declare function parseTrustedBlogThemeActivation(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeActivation;
136
+ export declare function parseTrustedBlogThemeCandidateSnapshot(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeCandidateSnapshot;
137
+ export declare function parseTrustedBlogThemeSelectionSnapshot(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeSelectionSnapshot;
138
+ export declare function parseTrustedBlogThemeActivationSnapshot(input: unknown, now?: Date, maxLeaseMs?: number, maxClockSkewMs?: number): BlogThemeActivationSnapshot;
139
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iCAAiC,+CAA+C,CAAC;AAC9F,eAAO,MAAM,iCAAiC,+CAA+C,CAAC;AAC9F,eAAO,MAAM,kCAAkC,gDAAgD,CAAC;AAEhG,eAAO,MAAM,iBAAiB,4BAC4B,CAAC;AAI3D,eAAO,MAAM,gCAAgC,4BACC,CAAC;AAO/C,eAAO,MAAM,oBAAoB;;;;mBAMpB,CAAC;AAEd,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;mBAYxB,CAAC;AAEd,eAAO,MAAM,wBAAwB;;;;;;;;;;;mBAOxB,CAAC;AAEd,eAAO,MAAM,yBAAyB;;;;;;;;;;;mBAOzB,CAAC;AAEd,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;mBAA2C,CAAC;AACzF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;mBAA2C,CAAC;AACzF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;mBAA4C,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAC1F,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAC1F,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,kBAAkB,CAEpB;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,kBAAkB,CAEpB;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,mBAAmB,CAErB;AAED,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,0BAA0B,CAK5B;AAED,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,0BAA0B,CAK5B;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,OAAO,EACd,GAAG,OAAa,EAChB,UAAU,SAAS,EACnB,cAAc,SAAI,GACjB,2BAA2B,CAK7B"}
package/dist/themes.js ADDED
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ import { BLOG_PLUGIN_ID } from './identity.js';
3
+ export const BLOG_THEME_CANDIDATE_TOPIC_PREFIX = 'registry:zlooks.cn/blog/themes/candidates/';
4
+ export const BLOG_THEME_SELECTION_TOPIC_PREFIX = 'registry:zlooks.cn/blog/themes/selections/';
5
+ export const BLOG_THEME_ACTIVATION_TOPIC_PREFIX = 'registry:zlooks.cn/blog/themes/activations/';
6
+ export const blogThemeIdSchema = z.string().max(128)
7
+ .regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/).readonly();
8
+ const instanceIdentifier = z.string().regex(/^[a-z][a-z0-9._-]{0,127}$/);
9
+ const instant = z.iso.datetime({ offset: true });
10
+ const generation = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
11
+ export const blogThemeSelectionRevisionSchema = z.number().int().nonnegative()
12
+ .max(Number.MAX_SAFE_INTEGER - 1).readonly();
13
+ const absoluteRscPath = z.string().min(1).max(2_048).regex(/^\/(?!\/)[^?#\s]*$/);
14
+ const publisherSchema = z.strictObject({
15
+ host: z.string().trim().min(1).max(253),
16
+ port: z.number().int().min(1).max(65_535),
17
+ }).readonly();
18
+ export const blogThemeLeaseSchema = z.strictObject({
19
+ issuedAt: instant,
20
+ expiresAt: instant,
21
+ sequence: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
22
+ }).refine((lease) => Date.parse(lease.expiresAt) > Date.parse(lease.issuedAt), {
23
+ message: 'Blog theme lease must expire after it is issued',
24
+ }).readonly();
25
+ export const blogThemeCandidateSchema = z.strictObject({
26
+ themeId: blogThemeIdSchema,
27
+ instanceId: instanceIdentifier,
28
+ displayName: z.string().trim().min(1).max(100),
29
+ description: z.string().trim().min(1).max(500),
30
+ pluginId: z.literal(BLOG_PLUGIN_ID),
31
+ buildId: z.string().trim().min(1).max(256),
32
+ generation,
33
+ routes: z.array(absoluteRscPath).min(1).max(64)
34
+ .refine((routes) => new Set(routes).size === routes.length, 'Theme routes must be unique')
35
+ .readonly(),
36
+ lease: blogThemeLeaseSchema,
37
+ }).readonly();
38
+ export const blogThemeSelectionSchema = z.strictObject({
39
+ instanceId: instanceIdentifier,
40
+ themeId: blogThemeIdSchema,
41
+ revision: blogThemeSelectionRevisionSchema,
42
+ updatedAt: instant,
43
+ updatedBy: z.string().trim().min(1).max(256),
44
+ lease: blogThemeLeaseSchema,
45
+ }).readonly();
46
+ export const blogThemeActivationSchema = z.strictObject({
47
+ themeId: blogThemeIdSchema,
48
+ instanceId: instanceIdentifier,
49
+ selectionRevision: blogThemeSelectionRevisionSchema,
50
+ buildId: z.string().trim().min(1).max(256),
51
+ generation,
52
+ lease: blogThemeLeaseSchema,
53
+ }).readonly();
54
+ export const blogThemeCandidateSnapshotSchema = snapshotSchema(blogThemeCandidateSchema);
55
+ export const blogThemeSelectionSnapshotSchema = snapshotSchema(blogThemeSelectionSchema);
56
+ export const blogThemeActivationSnapshotSchema = snapshotSchema(blogThemeActivationSchema);
57
+ export function blogThemeCandidateTopic(themeId, instanceId) {
58
+ return `${BLOG_THEME_CANDIDATE_TOPIC_PREFIX}${blogThemeIdSchema.parse(themeId)}/${instanceIdentifier.parse(instanceId)}`;
59
+ }
60
+ export function blogThemeSelectionTopic(instanceId) {
61
+ return `${BLOG_THEME_SELECTION_TOPIC_PREFIX}${instanceIdentifier.parse(instanceId)}`;
62
+ }
63
+ export function blogThemeActivationTopic(themeId, instanceId) {
64
+ return `${BLOG_THEME_ACTIVATION_TOPIC_PREFIX}${blogThemeIdSchema.parse(themeId)}/${instanceIdentifier.parse(instanceId)}`;
65
+ }
66
+ export function parseTrustedBlogThemeCandidate(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
67
+ return parseTrustedAnnouncement(blogThemeCandidateSchema, input, now, maxLeaseMs, maxClockSkewMs);
68
+ }
69
+ export function parseTrustedBlogThemeSelection(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
70
+ return parseTrustedAnnouncement(blogThemeSelectionSchema, input, now, maxLeaseMs, maxClockSkewMs);
71
+ }
72
+ export function parseTrustedBlogThemeActivation(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
73
+ return parseTrustedAnnouncement(blogThemeActivationSchema, input, now, maxLeaseMs, maxClockSkewMs);
74
+ }
75
+ export function parseTrustedBlogThemeCandidateSnapshot(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
76
+ const snapshot = blogThemeCandidateSnapshotSchema.parse(input);
77
+ const payload = parseTrustedBlogThemeCandidate(snapshot.payload, now, maxLeaseMs, maxClockSkewMs);
78
+ assertTopic(snapshot.topic, blogThemeCandidateTopic(payload.themeId, payload.instanceId));
79
+ return { ...snapshot, payload };
80
+ }
81
+ export function parseTrustedBlogThemeSelectionSnapshot(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
82
+ const snapshot = blogThemeSelectionSnapshotSchema.parse(input);
83
+ const payload = parseTrustedBlogThemeSelection(snapshot.payload, now, maxLeaseMs, maxClockSkewMs);
84
+ assertTopic(snapshot.topic, blogThemeSelectionTopic(payload.instanceId));
85
+ return { ...snapshot, payload };
86
+ }
87
+ export function parseTrustedBlogThemeActivationSnapshot(input, now = new Date(), maxLeaseMs = 30_000, maxClockSkewMs = 0) {
88
+ const snapshot = blogThemeActivationSnapshotSchema.parse(input);
89
+ const payload = parseTrustedBlogThemeActivation(snapshot.payload, now, maxLeaseMs, maxClockSkewMs);
90
+ assertTopic(snapshot.topic, blogThemeActivationTopic(payload.themeId, payload.instanceId));
91
+ return { ...snapshot, payload };
92
+ }
93
+ function snapshotSchema(payload) {
94
+ return z.strictObject({
95
+ topic: z.string().min(1).max(512),
96
+ payload,
97
+ publishers: z.array(publisherSchema).length(1).readonly(),
98
+ publisherCount: z.literal(1),
99
+ subscriberCount: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
100
+ hasData: z.literal(true),
101
+ retained: z.literal(false),
102
+ }).readonly();
103
+ }
104
+ function parseTrustedAnnouncement(schema, input, now, maxLeaseMs, maxClockSkewMs) {
105
+ assertNonNegativeSafeInteger(maxLeaseMs, 'Blog theme maximum lease');
106
+ assertNonNegativeSafeInteger(maxClockSkewMs, 'Blog theme clock skew');
107
+ const announcement = schema.parse(input);
108
+ const lease = blogThemeLeaseSchema.parse(announcement.lease);
109
+ const issuedAt = Date.parse(lease.issuedAt);
110
+ const expiresAt = Date.parse(lease.expiresAt);
111
+ if (expiresAt - issuedAt > maxLeaseMs)
112
+ throw new Error('Blog theme lease is too long');
113
+ if (now.getTime() + maxClockSkewMs < issuedAt)
114
+ throw new Error('Blog theme lease is not active yet');
115
+ if (now.getTime() - maxClockSkewMs >= expiresAt)
116
+ throw new Error('Blog theme lease has expired');
117
+ return announcement;
118
+ }
119
+ function assertNonNegativeSafeInteger(value, label) {
120
+ if (!Number.isSafeInteger(value) || value < 0) {
121
+ throw new TypeError(`${label} must be a non-negative safe integer`);
122
+ }
123
+ }
124
+ function assertTopic(actual, expected) {
125
+ if (actual !== expected)
126
+ throw new Error('Blog theme discovery topic does not match identity');
127
+ }
128
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@zlooks.cn/blog-shared",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "scripts": {
16
+ "build": "pnpm run clean && tsc -p tsconfig.json && fix-esm-import-path --preserve-import-type ./dist",
17
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
18
+ "test": "vitest run",
19
+ "typecheck": "tsc -p tsconfig.json --noEmit"
20
+ },
21
+ "dependencies": {
22
+ "@hile/context": "4.0.2",
23
+ "@zlooks.cn/blog-schema": "1.0.0",
24
+ "zod": "4.4.3"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "26.2.0",
28
+ "fix-esm-import-path": "1.10.3",
29
+ "typescript": "7.0.2",
30
+ "vitest": "4.1.11"
31
+ },
32
+ "gitHead": "a3e825c2a62561f73f49a54720e286f08da63429"
33
+ }