kizlo 0.1.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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/adapters/auth.d.ts +18 -0
  4. package/dist/adapters/auth.js +15 -0
  5. package/dist/adapters/captcha.d.ts +28 -0
  6. package/dist/adapters/captcha.js +86 -0
  7. package/dist/adapters/geo.d.ts +18 -0
  8. package/dist/adapters/geo.js +18 -0
  9. package/dist/adapters/geo.vercel.d.ts +6 -0
  10. package/dist/adapters/geo.vercel.js +41 -0
  11. package/dist/adapters/logger.d.ts +31 -0
  12. package/dist/adapters/logger.js +30 -0
  13. package/dist/cli/banner.js +26 -0
  14. package/dist/cli/commands/generate.js +34 -0
  15. package/dist/cli/commands/init.js +313 -0
  16. package/dist/cli/commands/test.js +68 -0
  17. package/dist/cli/commands/watch.js +53 -0
  18. package/dist/cli/commands/wp.js +66 -0
  19. package/dist/cli/daemon/config.js +87 -0
  20. package/dist/cli/daemon/generate.js +40 -0
  21. package/dist/cli/daemon/lock.js +31 -0
  22. package/dist/cli/daemon/logger.js +8 -0
  23. package/dist/cli/daemon/watch.js +37 -0
  24. package/dist/cli/index.d.ts +1 -0
  25. package/dist/cli/index.js +22 -0
  26. package/dist/cli/presets/base.js +23 -0
  27. package/dist/cli/presets/index.js +16 -0
  28. package/dist/cli/presets/nextjs.js +39 -0
  29. package/dist/cli/utils.js +182 -0
  30. package/dist/cli/wp/bootstrap.js +114 -0
  31. package/dist/cli/wp/compose/docker-compose.yml +73 -0
  32. package/dist/cli/wp/constants.js +52 -0
  33. package/dist/cli/wp/docker.d.ts +24 -0
  34. package/dist/cli/wp/docker.js +69 -0
  35. package/dist/cli/wp/setup.js +39 -0
  36. package/dist/cli/wp/types.d.ts +72 -0
  37. package/dist/cli/wp/types.js +8 -0
  38. package/dist/cli/wp/utils.d.ts +39 -0
  39. package/dist/cli/wp/utils.js +105 -0
  40. package/dist/client.d.ts +24 -0
  41. package/dist/client.js +55 -0
  42. package/dist/comment/errors.js +47 -0
  43. package/dist/comment/index.js +138 -0
  44. package/dist/comment/schema.js +72 -0
  45. package/dist/comment/utils.js +35 -0
  46. package/dist/config.d.ts +39 -0
  47. package/dist/config.js +7 -0
  48. package/dist/context.d.ts +73 -0
  49. package/dist/context.js +145 -0
  50. package/dist/cookie.d.ts +19 -0
  51. package/dist/cookie.js +25 -0
  52. package/dist/email/service.d.ts +11 -0
  53. package/dist/email/service.interface.d.ts +8 -0
  54. package/dist/email/service.js +20 -0
  55. package/dist/index.d.ts +39 -0
  56. package/dist/index.js +31 -0
  57. package/dist/integrations/nextjs/kizlo.client.d.ts +10 -0
  58. package/dist/integrations/nextjs/kizlo.client.js +13 -0
  59. package/dist/integrations/nextjs/kizlo.server.d.ts +12 -0
  60. package/dist/integrations/nextjs/kizlo.server.js +13 -0
  61. package/dist/integrations/nextjs/utils.js +11 -0
  62. package/dist/kizlo.d.ts +73 -0
  63. package/dist/kizlo.js +144 -0
  64. package/dist/menu/errors.js +16 -0
  65. package/dist/menu/fixture.d.ts +8 -0
  66. package/dist/menu/fixture.js +62 -0
  67. package/dist/menu/index.js +70 -0
  68. package/dist/menu/schema.js +70 -0
  69. package/dist/menu/utils.js +57 -0
  70. package/dist/nextjs/server.d.ts +2 -0
  71. package/dist/nextjs/server.js +3 -0
  72. package/dist/nextjs.d.ts +2 -0
  73. package/dist/nextjs.js +3 -0
  74. package/dist/package.js +5 -0
  75. package/dist/post/error.js +30 -0
  76. package/dist/post/fixture.d.ts +8 -0
  77. package/dist/post/fixture.js +71 -0
  78. package/dist/post/index.js +123 -0
  79. package/dist/post/schema.js +120 -0
  80. package/dist/post/utils.js +42 -0
  81. package/dist/post-type/service.js +48 -0
  82. package/dist/router.d.ts +624 -0
  83. package/dist/router.js +15 -0
  84. package/dist/seo/index.js +54 -0
  85. package/dist/seo/schema.d.ts +196 -0
  86. package/dist/seo/schema.js +96 -0
  87. package/dist/seo/types.d.ts +80 -0
  88. package/dist/seo/utils.js +44 -0
  89. package/dist/service.d.ts +17 -0
  90. package/dist/service.js +17 -0
  91. package/dist/shared/constants.js +10 -0
  92. package/dist/shared/contract.d.ts +21 -0
  93. package/dist/shared/contract.js +43 -0
  94. package/dist/shared/crypto.d.ts +28 -0
  95. package/dist/shared/crypto.js +34 -0
  96. package/dist/shared/error.d.ts +128 -0
  97. package/dist/shared/error.js +147 -0
  98. package/dist/shared/extension.d.ts +25 -0
  99. package/dist/shared/extension.js +7 -0
  100. package/dist/shared/identifier.d.ts +11 -0
  101. package/dist/shared/identifier.js +26 -0
  102. package/dist/shared/middleware.d.ts +29 -0
  103. package/dist/shared/procedure.d.ts +114 -0
  104. package/dist/shared/procedure.js +114 -0
  105. package/dist/shared/result.d.ts +24 -0
  106. package/dist/shared/result.js +49 -0
  107. package/dist/shared/router.d.ts +7 -0
  108. package/dist/shared/router.js +26 -0
  109. package/dist/shared/schema.d.ts +55 -0
  110. package/dist/shared/schema.js +43 -0
  111. package/dist/shared/serialize.d.ts +12 -0
  112. package/dist/shared/serialize.js +51 -0
  113. package/dist/shared/types.d.ts +35 -0
  114. package/dist/shared/utils.js +17 -0
  115. package/dist/test/auth.d.ts +7 -0
  116. package/dist/test/auth.js +15 -0
  117. package/dist/test/captcha.d.ts +7 -0
  118. package/dist/test/captcha.js +8 -0
  119. package/dist/test/client.d.ts +11 -0
  120. package/dist/test/client.js +14 -0
  121. package/dist/test/fixtures.d.ts +14 -0
  122. package/dist/test/fixtures.js +13 -0
  123. package/dist/test/server.d.ts +10 -0
  124. package/dist/test/server.js +32 -0
  125. package/dist/test/users.d.ts +14 -0
  126. package/dist/test/users.js +17 -0
  127. package/dist/test.d.ts +12 -0
  128. package/dist/test.js +13 -0
  129. package/dist/webhook/index.d.ts +38 -0
  130. package/dist/webhook/index.js +44 -0
  131. package/dist/webhook/schema.d.ts +45 -0
  132. package/dist/webhook/schema.js +72 -0
  133. package/dist/webhook/utils.js +21 -0
  134. package/dist/wordpress/comment/service.d.ts +28 -0
  135. package/dist/wordpress/comment/service.js +55 -0
  136. package/dist/wordpress/comment/types.d.ts +206 -0
  137. package/dist/wordpress/constants.d.ts +14 -0
  138. package/dist/wordpress/constants.js +13 -0
  139. package/dist/wordpress/error.d.ts +9 -0
  140. package/dist/wordpress/error.js +12 -0
  141. package/dist/wordpress/index.d.ts +15 -0
  142. package/dist/wordpress/menu/items/service.d.ts +28 -0
  143. package/dist/wordpress/menu/items/service.js +55 -0
  144. package/dist/wordpress/menu/items/types.d.ts +214 -0
  145. package/dist/wordpress/menu/service.d.ts +30 -0
  146. package/dist/wordpress/menu/service.js +58 -0
  147. package/dist/wordpress/menu/types.d.ts +115 -0
  148. package/dist/wordpress/post/service.d.ts +28 -0
  149. package/dist/wordpress/post/service.js +55 -0
  150. package/dist/wordpress/post/types.d.ts +290 -0
  151. package/dist/wordpress/service.d.ts +77 -0
  152. package/dist/wordpress/service.js +180 -0
  153. package/dist/wordpress/types.d.ts +67 -0
  154. package/dist/wordpress/user/service.d.ts +28 -0
  155. package/dist/wordpress/user/service.js +55 -0
  156. package/dist/wordpress/user/types.d.ts +221 -0
  157. package/dist/wordpress/utils.d.ts +7 -0
  158. package/dist/wordpress/utils.js +9 -0
  159. package/package.json +109 -0
package/dist/config.js ADDED
@@ -0,0 +1,7 @@
1
+ //#region src/config.ts
2
+ function defineConfig(config) {
3
+ return config;
4
+ }
5
+
6
+ //#endregion
7
+ export { defineConfig };
@@ -0,0 +1,73 @@
1
+ import { WordPressCredentials } from "./wordpress/types.js";
2
+ import "./wordpress/index.js";
3
+ import { AuthUser } from "./adapters/auth.js";
4
+ import { ConnInfo } from "./adapters/geo.js";
5
+ import { Logger } from "./adapters/logger.js";
6
+ import { PreviewTokenPayload } from "./shared/schema.js";
7
+ import { CookiesStorage } from "./cookie.js";
8
+ import { ServiceAdapters } from "./kizlo.js";
9
+ import { Service } from "./service.js";
10
+
11
+ //#region src/context.d.ts
12
+ interface ContextConfig {
13
+ siteSecret: string;
14
+ adapters?: ServiceAdapters;
15
+ credentials: WordPressCredentials;
16
+ }
17
+ type AuthUserFn = () => Promise<AuthUser | null>;
18
+ type ConnInfoFn = () => Promise<ConnInfo | null>;
19
+ type VerifyCaptchaFn = (token: string) => Promise<boolean>;
20
+ type VerifyPreviewTokenFn = (token: string) => Promise<PreviewTokenPayload | null>;
21
+ interface ServerContext {
22
+ request: Request | null;
23
+ headers: Headers | null;
24
+ logger: Logger;
25
+ service: Service;
26
+ config: ContextConfig;
27
+ getConnInfo: ConnInfoFn;
28
+ getAuthUser: AuthUserFn;
29
+ cookies: CookiesStorage;
30
+ verifyCaptcha: VerifyCaptchaFn;
31
+ verifyPreviewToken: VerifyPreviewTokenFn;
32
+ invokedBy: "client" | "server";
33
+ }
34
+ declare class Context {
35
+ private readonly config;
36
+ private readonly logger;
37
+ private readonly service;
38
+ constructor(config: ContextConfig);
39
+ createRestContext(request: Request): {
40
+ headers: Headers;
41
+ request: Request;
42
+ config: ContextConfig;
43
+ logger: Logger;
44
+ service: Service;
45
+ getConnInfo: ConnInfoFn;
46
+ verifyCaptcha: VerifyCaptchaFn;
47
+ getAuthUser: AuthUserFn;
48
+ verifyPreviewToken: VerifyPreviewTokenFn;
49
+ cookies: CookiesStorage;
50
+ invokedBy: "client";
51
+ };
52
+ createServerContext(): {
53
+ cookies: CookiesStorage;
54
+ headers: null;
55
+ request: null;
56
+ config: ContextConfig;
57
+ logger: Logger;
58
+ service: Service;
59
+ getAuthUser: AuthUserFn;
60
+ getConnInfo: ConnInfoFn;
61
+ verifyCaptcha: VerifyCaptchaFn;
62
+ verifyPreviewToken: VerifyPreviewTokenFn;
63
+ invokedBy: "server";
64
+ };
65
+ private createRestCookieStorage;
66
+ private createVerifyCaptchaFn;
67
+ private createConnInfoFn;
68
+ private createGetUserFn;
69
+ private createVerifyPreviewTokenFn;
70
+ private createLogger;
71
+ }
72
+ //#endregion
73
+ export { AuthUserFn, ConnInfoFn, Context, ContextConfig, ServerContext, VerifyCaptchaFn, VerifyPreviewTokenFn };
@@ -0,0 +1,145 @@
1
+ import { noopAdapter } from "./adapters/logger.js";
2
+ import { PreviewTokenData } from "./shared/schema.js";
3
+ import { CookiesStorage } from "./cookie.js";
4
+ import { Service } from "./service.js";
5
+ import { compare, hmac } from "./shared/crypto.js";
6
+ import { base64Decode, tryCatchSync } from "@kizlo/shared";
7
+ import { serialize } from "cookie";
8
+
9
+ //#region src/context.ts
10
+ var Context = class {
11
+ config;
12
+ logger;
13
+ service;
14
+ constructor(config) {
15
+ this.config = config;
16
+ this.service = new Service(config);
17
+ this.logger = this.createLogger();
18
+ }
19
+ createRestContext(request) {
20
+ const headers = new Headers();
21
+ return {
22
+ headers,
23
+ request,
24
+ config: this.config,
25
+ logger: this.logger,
26
+ service: this.service,
27
+ getConnInfo: this.createConnInfoFn(request),
28
+ verifyCaptcha: this.createVerifyCaptchaFn(request),
29
+ getAuthUser: this.createGetUserFn(request),
30
+ verifyPreviewToken: this.createVerifyPreviewTokenFn(),
31
+ cookies: this.createRestCookieStorage(request, headers),
32
+ invokedBy: "client"
33
+ };
34
+ }
35
+ createServerContext() {
36
+ return {
37
+ cookies: new CookiesStorage(this.config.adapters?.cookies),
38
+ headers: null,
39
+ request: null,
40
+ config: this.config,
41
+ logger: this.logger,
42
+ service: this.service,
43
+ getAuthUser: this.createGetUserFn(null),
44
+ getConnInfo: this.createConnInfoFn(null),
45
+ verifyCaptcha: this.createVerifyCaptchaFn(null),
46
+ verifyPreviewToken: this.createVerifyPreviewTokenFn(),
47
+ invokedBy: "server"
48
+ };
49
+ }
50
+ createRestCookieStorage(request, headers) {
51
+ return new CookiesStorage({
52
+ getAll: async () => {
53
+ const cookieHeader = request.headers.get("cookie");
54
+ if (!cookieHeader) return [];
55
+ const cookies = [];
56
+ for (const cookie of cookieHeader.split(";")) {
57
+ const [name, ...valueParts] = cookie.trim().split("=");
58
+ if (!name?.trim()) continue;
59
+ cookies.push({
60
+ name: name.trim(),
61
+ value: valueParts.join("=").trim()
62
+ });
63
+ }
64
+ return cookies;
65
+ },
66
+ setAll: async (cookies) => {
67
+ cookies.forEach((cookie) => {
68
+ headers.append("Set-Cookie", serialize(cookie.name, cookie.value, cookie.options));
69
+ });
70
+ },
71
+ deleteAll: async (cookies) => {
72
+ cookies.forEach((cookie) => {
73
+ headers.append("Set-Cookie", serialize(cookie.name, "", {
74
+ ...cookie.options,
75
+ maxAge: 0,
76
+ expires: /* @__PURE__ */ new Date(0)
77
+ }));
78
+ });
79
+ }
80
+ });
81
+ }
82
+ createVerifyCaptchaFn(request) {
83
+ return async (token) => {
84
+ const connInfo = await this.config.adapters?.geo?.getConnInfo?.(request) ?? null;
85
+ return await this.config.adapters?.captcha?.({
86
+ ip: connInfo?.ip ?? "unknown-ip",
87
+ token
88
+ }) ?? false;
89
+ };
90
+ }
91
+ createConnInfoFn(request) {
92
+ return async () => {
93
+ return await this.config.adapters?.geo?.getConnInfo?.(request) ?? null;
94
+ };
95
+ }
96
+ createGetUserFn(request) {
97
+ return async () => {
98
+ return await Promise.resolve(this.config.adapters?.auth?.getUser?.(request)) ?? null;
99
+ };
100
+ }
101
+ createVerifyPreviewTokenFn() {
102
+ return async (token) => {
103
+ const [, decoded] = tryCatchSync(() => base64Decode(token));
104
+ if (!decoded) return null;
105
+ const { data, error } = PreviewTokenData.safeParse(decoded);
106
+ if (error) return null;
107
+ if (Date.now() > data.payload.expires * 1e3) return null;
108
+ const payloadStr = `${data.payload.id}.${data.payload.parent}.${data.payload.expires}`;
109
+ if (!compare(hmac(this.config.siteSecret ?? "", payloadStr), data.hash)) return null;
110
+ return data.payload;
111
+ };
112
+ }
113
+ createLogger() {
114
+ const adapter = this.config.adapters?.logger ?? noopAdapter;
115
+ function build(boundContext) {
116
+ const emit = (level, message, context, error) => {
117
+ const mergedContext = {
118
+ ...boundContext,
119
+ ...context
120
+ };
121
+ adapter({
122
+ level,
123
+ error,
124
+ message,
125
+ timestamp: /* @__PURE__ */ new Date(),
126
+ context: Object.keys(mergedContext).length > 0 ? mergedContext : void 0
127
+ });
128
+ };
129
+ return {
130
+ debug: (msg, ctx) => emit("debug", msg, ctx),
131
+ info: (msg, ctx) => emit("info", msg, ctx),
132
+ warn: (msg, ctx) => emit("warn", msg, ctx),
133
+ error: (msg, err, ctx) => emit("error", msg, ctx, err),
134
+ child: (ctx) => build({
135
+ ...boundContext,
136
+ ...ctx
137
+ })
138
+ };
139
+ }
140
+ return build({});
141
+ }
142
+ };
143
+
144
+ //#endregion
145
+ export { Context };
@@ -0,0 +1,19 @@
1
+ import { CookiesAdapter } from "./shared/types.js";
2
+ import { Cookie, CookieOptions, CookieWithOptions } from "@kizlo/shared";
3
+
4
+ //#region src/cookie.d.ts
5
+ declare class CookiesStorage {
6
+ private readonly cookies?;
7
+ constructor(cookies?: CookiesAdapter);
8
+ get(): Promise<Cookie[]>;
9
+ get(name: string): Promise<string | null>;
10
+ set(cookie: CookieWithOptions): Promise<void>;
11
+ set(cookies: CookieWithOptions[]): Promise<void>;
12
+ delete(name: string, options?: CookieOptions): Promise<void>;
13
+ delete(cookies: {
14
+ name: string;
15
+ options?: CookieOptions;
16
+ }[]): Promise<void>;
17
+ }
18
+ //#endregion
19
+ export { CookiesStorage };
package/dist/cookie.js ADDED
@@ -0,0 +1,25 @@
1
+ //#region src/cookie.ts
2
+ var CookiesStorage = class {
3
+ cookies;
4
+ constructor(cookies) {
5
+ this.cookies = cookies;
6
+ }
7
+ async get(name) {
8
+ const cookies = await Promise.resolve(this.cookies?.getAll()) ?? [];
9
+ if (name) return cookies.find((item) => item.name === name)?.value ?? null;
10
+ return cookies;
11
+ }
12
+ async set(cookieOrCookies) {
13
+ const cookies = Array.isArray(cookieOrCookies) ? cookieOrCookies : [cookieOrCookies];
14
+ return await Promise.resolve(this.cookies?.setAll(cookies));
15
+ }
16
+ async delete(nameOrCookies, options) {
17
+ return await Promise.resolve(this.cookies?.deleteAll(Array.isArray(nameOrCookies) ? nameOrCookies : [{
18
+ name: nameOrCookies,
19
+ options
20
+ }]));
21
+ }
22
+ };
23
+
24
+ //#endregion
25
+ export { CookiesStorage };
@@ -0,0 +1,11 @@
1
+ import { EmailSendParams } from "./service.interface.js";
2
+ import { Service } from "../service.js";
3
+
4
+ //#region src/email/service.d.ts
5
+ declare class EmailService {
6
+ private readonly service;
7
+ constructor(service: Service);
8
+ send(params: EmailSendParams): Promise<void>;
9
+ }
10
+ //#endregion
11
+ export { EmailService };
@@ -0,0 +1,8 @@
1
+ //#region src/email/service.interface.d.ts
2
+ interface EmailSendParams {
3
+ to: string[] | string;
4
+ subject: string;
5
+ body: string;
6
+ }
7
+ //#endregion
8
+ export { EmailSendParams };
@@ -0,0 +1,20 @@
1
+ import { WP_KIZLO_BASE } from "../wordpress/constants.js";
2
+
3
+ //#region src/email/service.ts
4
+ var EmailService = class {
5
+ service;
6
+ constructor(service) {
7
+ this.service = service;
8
+ }
9
+ async send(params) {
10
+ const { data, error } = await this.service.wordpress.post("/email/send", {
11
+ body: params,
12
+ base: WP_KIZLO_BASE
13
+ });
14
+ if (error) throw error;
15
+ if (!data?.success) throw new Error("Failed to send email");
16
+ }
17
+ };
18
+
19
+ //#endregion
20
+ export { EmailService };
@@ -0,0 +1,39 @@
1
+ import { WP_Error } from "./wordpress/error.js";
2
+ import { WP_CommonErrorCode, WP_Context, WP_CurrencyFormat, WP_ErrorData, WP_Link, WP_List, WP_ListMetadata, WP_ListOrder, WP_RequestInput, WP_Result, WordPressCredentials } from "./wordpress/types.js";
3
+ import { WP_MenuItem, WP_MenuItemCreateErrorCode, WP_MenuItemCreateInput, WP_MenuItemDeleteErrorCode, WP_MenuItemDeleteInput, WP_MenuItemDeleteResponse, WP_MenuItemLinks, WP_MenuItemListErrorCode, WP_MenuItemListInput, WP_MenuItemOrderBy, WP_MenuItemRetrieveErrorCode, WP_MenuItemRetrieveInput, WP_MenuItemStatus, WP_MenuItemStatusFilter, WP_MenuItemTarget, WP_MenuItemTaxRelation, WP_MenuItemTitle, WP_MenuItemTitleInput, WP_MenuItemType, WP_MenuItemUpdateErrorCode, WP_MenuItemUpdateInput } from "./wordpress/menu/items/types.js";
4
+ import { MenuItemService } from "./wordpress/menu/items/service.js";
5
+ import { WP_Menu, WP_MenuCreateErrorCode, WP_MenuCreateInput, WP_MenuDeleteErrorCode, WP_MenuDeleteInput, WP_MenuDeleteResponse, WP_MenuLinks, WP_MenuListErrorCode, WP_MenuListInput, WP_MenuOrderBy, WP_MenuRetrieveErrorCode, WP_MenuRetrieveInput, WP_MenuUpdateErrorCode, WP_MenuUpdateInput } from "./wordpress/menu/types.js";
6
+ import { MenuService } from "./wordpress/menu/service.js";
7
+ import { WP_Post, WP_PostCommentStatus, WP_PostContent, WP_PostContentInput, WP_PostCreateErrorCode, WP_PostCreateInput, WP_PostDeleteErrorCode, WP_PostDeleteInput, WP_PostDeleteResponse, WP_PostExcerpt, WP_PostExcerptInput, WP_PostFormat, WP_PostGuid, WP_PostLinks, WP_PostListErrorCode, WP_PostListInput, WP_PostOrderBy, WP_PostRetrieveErrorCode, WP_PostRetrieveInput, WP_PostStatus, WP_PostStatusFilter, WP_PostTaxRelation, WP_PostTitle, WP_PostTitleInput, WP_PostUpdateErrorCode, WP_PostUpdateInput } from "./wordpress/post/types.js";
8
+ import { PostService } from "./wordpress/post/service.js";
9
+ import { WP_User, WP_UserAvatarUrls, WP_UserCapabilities, WP_UserCreateErrorCode, WP_UserCreateInput, WP_UserDeleteErrorCode, WP_UserDeleteInput, WP_UserDeleteMeErrorCode, WP_UserDeleteMeInput, WP_UserDeleteMeResponse, WP_UserDeleteResponse, WP_UserLinks, WP_UserListErrorCode, WP_UserListInput, WP_UserOrderBy, WP_UserRetrieveErrorCode, WP_UserRetrieveInput, WP_UserRetrieveMeErrorCode, WP_UserRetrieveMeInput, WP_UserUpdateErrorCode, WP_UserUpdateInput, WP_UserUpdateMeErrorCode, WP_UserUpdateMeInput, WP_UserWho } from "./wordpress/user/types.js";
10
+ import { UserService } from "./wordpress/user/service.js";
11
+ import { WordPressService } from "./wordpress/service.js";
12
+ import { WP_Comment, WP_CommentAvatarUrls, WP_CommentContent, WP_CommentContentInput, WP_CommentCreateErrorCode, WP_CommentCreateInput, WP_CommentDeleteErrorCode, WP_CommentDeleteInput, WP_CommentDeleteResponse, WP_CommentLinks, WP_CommentListErrorCode, WP_CommentListInput, WP_CommentOrderBy, WP_CommentRetrieveErrorCode, WP_CommentRetrieveInput, WP_CommentStatus, WP_CommentStatusFilter, WP_CommentStatusInput, WP_CommentType, WP_CommentUpdateErrorCode, WP_CommentUpdateInput } from "./wordpress/comment/types.js";
13
+ import { CommentService } from "./wordpress/comment/service.js";
14
+ import { CART_HASH_HEADER_KEY, SAFE_REQUEST_TIMEOUT, UNEXPECTED_BODY_SNIPPET_LENGTH, WC_CORE_BASE, WC_STORE_BASE, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_KIZLO_BASE } from "./wordpress/constants.js";
15
+ import { isWordPressResourceError } from "./wordpress/utils.js";
16
+ import "./wordpress/index.js";
17
+ import { AuthAdapter, AuthUser, authMock } from "./adapters/auth.js";
18
+ import { CaptchaAdapter, altcha, arkose, friendlyCaptcha, hcaptcha, recaptcha, turnstile } from "./adapters/captcha.js";
19
+ import { ConnInfo, GeoAdapter, geoMock } from "./adapters/geo.js";
20
+ import { geoVercelNext } from "./adapters/geo.vercel.js";
21
+ import { ConsoleLogAdapterOptions, Environment, LogLevel, LogPayload, Logger, LoggerAdapter, consoleLog, noopAdapter } from "./adapters/logger.js";
22
+ import { CurrencyFormat, IdentifierInput, LIST_ORDER, ListMetadata, ListOrder, Media, PreviewTokenData, PreviewTokenPayload } from "./shared/schema.js";
23
+ import { AnyContext, AnyNestedClient, CookiesAdapter, HTTPMethod, List, MaybeOptionalOptions, RedirectInput, RedirectStatus } from "./shared/types.js";
24
+ import { AnyWebhookEventSchema, AnyWebhookEvents, EventHandler, InferWebhookEventUnion, WebhookHandlerFn, WebhookOptions, createEventHandler, createWebhookRouter } from "./webhook/index.js";
25
+ import { AnyExtension, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, InferExtensionRouter, createExtension } from "./shared/extension.js";
26
+ import { COMMON_ERRORS, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, DefinedErrorLike, DefinedErrorMapLike, KizloError, KizloErrorOptions, ThrowableErrorFn, ThrowableErrorMap, WithCommonErrorMap, createThrowableErrorMap, defineErrorMap, isKizloError, toKizloError } from "./shared/error.js";
27
+ import { AnyKizloConfig, CreateKizloOptions, Kizlo, KizloConfig, RootRouter, S2SClient, ServiceAdapters, createKizlo, resolveKizloConfig } from "./kizlo.js";
28
+ import { Service, ServiceConfig } from "./service.js";
29
+ import { AuthUserFn, ConnInfoFn, Context, ContextConfig, ServerContext, VerifyCaptchaFn, VerifyPreviewTokenFn } from "./context.js";
30
+ import { AnyMiddleware, AnyProcedure, AnyProcedureRouter, ExtractMiddlewareContextOutput, ExtractParams, ExtractProcedureByScope, InvocationScope, Middleware, MiddlewareHandler, MiddlewareNextFn, MiddlewareOptions, MiddlewareResult, OpenapiPart, Procedure, ProcedureContext, ProcedureHandler, ProcedureOptions, ResolveParamsPart, ResolvedSchemaInput, ResolvedSchemaOutput, RouterDepthTuple, SchemaIO, buildProcedure, combineDetailed, createMiddleware, createProcedure, handleUnexpectedError, schemaType } from "./shared/procedure.js";
31
+ import { KizloClient, KizloClientConfig, createKizloClient } from "./client.js";
32
+ import { CONTENT_TYPES, ContentType, ListSitemapUrlInput, ListSitemapUrlInputBase, Robots, RobotsRule, Seo, SeoHead, SeoSchema, Sitemap, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList } from "./seo/schema.js";
33
+ import { WPK_ListSitemapUrlInput, WPK_RobotRule, WPK_Robots, WPK_Seo, WPK_Sitemap, WPK_SitemapContentType, WPK_SitemapUrl, WPK_SitemapUrlImage } from "./seo/types.js";
34
+ import { Contract, ContractProcedure, generateContract, isContractProcedure, restoreContract } from "./shared/contract.js";
35
+ import { compare, hash, hmac } from "./shared/crypto.js";
36
+ import { Identifier, parseIdentifier } from "./shared/identifier.js";
37
+ import { createOrpcRouter } from "./shared/router.js";
38
+ import { deserializeCurrencyFormat, deserializeListMetadata, emptyList, serializeCurrencyFormat } from "./shared/serialize.js";
39
+ export { AnyContext, AnyExtension, AnyKizloConfig, AnyMiddleware, AnyNestedClient, AnyProcedure, AnyProcedureRouter, AnyWebhookEventSchema, AnyWebhookEvents, AuthAdapter, AuthUser, AuthUserFn, CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CaptchaAdapter, CommentService, CommonErrorCode, CommonErrorLiteral, CommonErrorMap, ConnInfo, ConnInfoFn, ConsoleLogAdapterOptions, ContentType, Context, ContextConfig, Contract, ContractProcedure, CookiesAdapter, CreateKizloOptions, CurrencyFormat, DefinedErrorLike, DefinedErrorMapLike, Environment, EventHandler, Extension, ExtensionInitFn, ExtensionInitOptions, ExtensionInitResult, ExtractExtensionRouter, ExtractMiddlewareContextOutput, ExtractParams, ExtractProcedureByScope, GeoAdapter, HTTPMethod, Identifier, IdentifierInput, InferExtensionRouter, InferWebhookEventUnion, InvocationScope, Kizlo, KizloClient, KizloClientConfig, KizloConfig, KizloError, KizloErrorOptions, LIST_ORDER, List, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, LogLevel, LogPayload, Logger, LoggerAdapter, MaybeOptionalOptions, Media, MenuItemService, MenuService, Middleware, MiddlewareHandler, MiddlewareNextFn, MiddlewareOptions, MiddlewareResult, OpenapiPart, PostService, PreviewTokenData, PreviewTokenPayload, Procedure, ProcedureContext, ProcedureHandler, ProcedureOptions, RedirectInput, RedirectStatus, ResolveParamsPart, ResolvedSchemaInput, ResolvedSchemaOutput, Robots, RobotsRule, RootRouter, RouterDepthTuple, S2SClient, SAFE_REQUEST_TIMEOUT, SchemaIO, Seo, SeoHead, SeoSchema, ServerContext, Service, ServiceAdapters, ServiceConfig, Sitemap, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList, ThrowableErrorFn, ThrowableErrorMap, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, VerifyCaptchaFn, VerifyPreviewTokenFn, WC_CORE_BASE, WC_STORE_BASE, WPK_ListSitemapUrlInput, WPK_RobotRule, WPK_Robots, WPK_Seo, WPK_Sitemap, WPK_SitemapContentType, WPK_SitemapUrl, WPK_SitemapUrlImage, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Comment, WP_CommentAvatarUrls, WP_CommentContent, WP_CommentContentInput, WP_CommentCreateErrorCode, WP_CommentCreateInput, WP_CommentDeleteErrorCode, WP_CommentDeleteInput, WP_CommentDeleteResponse, WP_CommentLinks, WP_CommentListErrorCode, WP_CommentListInput, WP_CommentOrderBy, WP_CommentRetrieveErrorCode, WP_CommentRetrieveInput, WP_CommentStatus, WP_CommentStatusFilter, WP_CommentStatusInput, WP_CommentType, WP_CommentUpdateErrorCode, WP_CommentUpdateInput, WP_CommonErrorCode, WP_Context, WP_CurrencyFormat, WP_Error, WP_ErrorData, WP_KIZLO_BASE, WP_Link, WP_List, WP_ListMetadata, WP_ListOrder, WP_Menu, WP_MenuCreateErrorCode, WP_MenuCreateInput, WP_MenuDeleteErrorCode, WP_MenuDeleteInput, WP_MenuDeleteResponse, WP_MenuItem, WP_MenuItemCreateErrorCode, WP_MenuItemCreateInput, WP_MenuItemDeleteErrorCode, WP_MenuItemDeleteInput, WP_MenuItemDeleteResponse, WP_MenuItemLinks, WP_MenuItemListErrorCode, WP_MenuItemListInput, WP_MenuItemOrderBy, WP_MenuItemRetrieveErrorCode, WP_MenuItemRetrieveInput, WP_MenuItemStatus, WP_MenuItemStatusFilter, WP_MenuItemTarget, WP_MenuItemTaxRelation, WP_MenuItemTitle, WP_MenuItemTitleInput, WP_MenuItemType, WP_MenuItemUpdateErrorCode, WP_MenuItemUpdateInput, WP_MenuLinks, WP_MenuListErrorCode, WP_MenuListInput, WP_MenuOrderBy, WP_MenuRetrieveErrorCode, WP_MenuRetrieveInput, WP_MenuUpdateErrorCode, WP_MenuUpdateInput, WP_Post, WP_PostCommentStatus, WP_PostContent, WP_PostContentInput, WP_PostCreateErrorCode, WP_PostCreateInput, WP_PostDeleteErrorCode, WP_PostDeleteInput, WP_PostDeleteResponse, WP_PostExcerpt, WP_PostExcerptInput, WP_PostFormat, WP_PostGuid, WP_PostLinks, WP_PostListErrorCode, WP_PostListInput, WP_PostOrderBy, WP_PostRetrieveErrorCode, WP_PostRetrieveInput, WP_PostStatus, WP_PostStatusFilter, WP_PostTaxRelation, WP_PostTitle, WP_PostTitleInput, WP_PostUpdateErrorCode, WP_PostUpdateInput, WP_RequestInput, WP_Result, WP_User, WP_UserAvatarUrls, WP_UserCapabilities, WP_UserCreateErrorCode, WP_UserCreateInput, WP_UserDeleteErrorCode, WP_UserDeleteInput, WP_UserDeleteMeErrorCode, WP_UserDeleteMeInput, WP_UserDeleteMeResponse, WP_UserDeleteResponse, WP_UserLinks, WP_UserListErrorCode, WP_UserListInput, WP_UserOrderBy, WP_UserRetrieveErrorCode, WP_UserRetrieveInput, WP_UserRetrieveMeErrorCode, WP_UserRetrieveMeInput, WP_UserUpdateErrorCode, WP_UserUpdateInput, WP_UserUpdateMeErrorCode, WP_UserUpdateMeInput, WP_UserWho, WebhookHandlerFn, WebhookOptions, WithCommonErrorMap, WordPressCredentials, WordPressService, altcha, arkose, authMock, buildProcedure, combineDetailed, compare, consoleLog, createEventHandler, createExtension, createKizlo, createKizloClient, createMiddleware, createOrpcRouter, createProcedure, createThrowableErrorMap, createWebhookRouter, defineErrorMap, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ import { authMock } from "./adapters/auth.js";
2
+ import { altcha, arkose, friendlyCaptcha, hcaptcha, recaptcha, turnstile } from "./adapters/captcha.js";
3
+ import { geoMock } from "./adapters/geo.js";
4
+ import { geoVercelNext } from "./adapters/geo.vercel.js";
5
+ import { consoleLog, noopAdapter } from "./adapters/logger.js";
6
+ import { COMMON_ERRORS, KizloError, createThrowableErrorMap, defineErrorMap, isKizloError, toKizloError } from "./shared/error.js";
7
+ import { buildProcedure, combineDetailed, createMiddleware, createProcedure, handleUnexpectedError, schemaType } from "./shared/procedure.js";
8
+ import { createOrpcRouter } from "./shared/router.js";
9
+ import { generateContract, isContractProcedure, restoreContract } from "./shared/contract.js";
10
+ import { CurrencyFormat, IdentifierInput, LIST_ORDER, ListMetadata, ListOrder, Media, PreviewTokenData, PreviewTokenPayload } from "./shared/schema.js";
11
+ import { KizloClient, createKizloClient } from "./client.js";
12
+ import { CART_HASH_HEADER_KEY, SAFE_REQUEST_TIMEOUT, UNEXPECTED_BODY_SNIPPET_LENGTH, WC_CORE_BASE, WC_STORE_BASE, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_KIZLO_BASE } from "./wordpress/constants.js";
13
+ import { CommentService } from "./wordpress/comment/service.js";
14
+ import { WP_Error } from "./wordpress/error.js";
15
+ import { MenuItemService } from "./wordpress/menu/items/service.js";
16
+ import { MenuService } from "./wordpress/menu/service.js";
17
+ import { PostService } from "./wordpress/post/service.js";
18
+ import { UserService } from "./wordpress/user/service.js";
19
+ import { isWordPressResourceError } from "./wordpress/utils.js";
20
+ import { WordPressService } from "./wordpress/service.js";
21
+ import { Service } from "./service.js";
22
+ import { compare, hash, hmac } from "./shared/crypto.js";
23
+ import { Context } from "./context.js";
24
+ import { deserializeCurrencyFormat, deserializeListMetadata, emptyList, serializeCurrencyFormat } from "./shared/serialize.js";
25
+ import { parseIdentifier } from "./shared/identifier.js";
26
+ import { CONTENT_TYPES, ContentType, ListSitemapUrlInput, ListSitemapUrlInputBase, Robots, RobotsRule, Seo, SeoHead, SeoSchema, Sitemap, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList } from "./seo/schema.js";
27
+ import { createEventHandler, createWebhookRouter } from "./webhook/index.js";
28
+ import { Kizlo, createKizlo, resolveKizloConfig } from "./kizlo.js";
29
+ import { createExtension } from "./shared/extension.js";
30
+
31
+ export { CART_HASH_HEADER_KEY, COMMON_ERRORS, CONTENT_TYPES, CommentService, ContentType, Context, CurrencyFormat, IdentifierInput, Kizlo, KizloClient, KizloError, LIST_ORDER, ListMetadata, ListOrder, ListSitemapUrlInput, ListSitemapUrlInputBase, Media, MenuItemService, MenuService, PostService, PreviewTokenData, PreviewTokenPayload, Robots, RobotsRule, SAFE_REQUEST_TIMEOUT, Seo, SeoHead, SeoSchema, Service, Sitemap, SitemapList, SitemapUrl, SitemapUrlImage, SitemapUrlList, UNEXPECTED_BODY_SNIPPET_LENGTH, UserService, WC_CORE_BASE, WC_STORE_BASE, WP_AUTH_HEADER_KEY, WP_AUTH_TYPE, WP_CORE_BASE, WP_Error, WP_KIZLO_BASE, WordPressService, altcha, arkose, authMock, buildProcedure, combineDetailed, compare, consoleLog, createEventHandler, createExtension, createKizlo, createKizloClient, createMiddleware, createOrpcRouter, createProcedure, createThrowableErrorMap, createWebhookRouter, defineErrorMap, deserializeCurrencyFormat, deserializeListMetadata, emptyList, friendlyCaptcha, generateContract, geoMock, geoVercelNext, handleUnexpectedError, hash, hcaptcha, hmac, isContractProcedure, isKizloError, isWordPressResourceError, noopAdapter, parseIdentifier, recaptcha, resolveKizloConfig, restoreContract, schemaType, serializeCurrencyFormat, toKizloError, turnstile };
@@ -0,0 +1,10 @@
1
+ import { AnyProcedureRouter } from "../../shared/procedure.js";
2
+ import { KizloClient } from "../../client.js";
3
+
4
+ //#region src/integrations/nextjs/kizlo.client.d.ts
5
+ interface KizloClientOptions {
6
+ url?: string;
7
+ }
8
+ declare function createKizloClient<T extends AnyProcedureRouter>(contract: T, options?: KizloClientOptions): KizloClient<T>;
9
+ //#endregion
10
+ export { KizloClientOptions, createKizloClient };
@@ -0,0 +1,13 @@
1
+ import { KizloClient } from "../../client.js";
2
+ import { getServerBaseUrl } from "./utils.js";
3
+
4
+ //#region src/integrations/nextjs/kizlo.client.ts
5
+ function createKizloClient(contract, options) {
6
+ return new KizloClient({
7
+ url: options?.url ?? getServerBaseUrl(),
8
+ contract
9
+ });
10
+ }
11
+
12
+ //#endregion
13
+ export { createKizloClient };
@@ -0,0 +1,12 @@
1
+ import { AnyExtension } from "../../shared/extension.js";
2
+ import { CreateKizloOptions, Kizlo } from "../../kizlo.js";
3
+
4
+ //#region src/integrations/nextjs/kizlo.server.d.ts
5
+ type KizloServerOptions<TExts extends readonly AnyExtension[] = []> = CreateKizloOptions<TExts>;
6
+ /**
7
+ * Creates a Kizlo server for Next.js — same as the base `createKizlo`, but reads
8
+ * the public base URL from `NEXT_PUBLIC_SERVER_BASE_URL`.
9
+ */
10
+ declare function createKizlo<TExts extends readonly AnyExtension[] = []>(options?: CreateKizloOptions<TExts>): Kizlo<TExts>;
11
+ //#endregion
12
+ export { KizloServerOptions, createKizlo };
@@ -0,0 +1,13 @@
1
+ import { Kizlo, resolveKizloConfig } from "../../kizlo.js";
2
+
3
+ //#region src/integrations/nextjs/kizlo.server.ts
4
+ /**
5
+ * Creates a Kizlo server for Next.js — same as the base `createKizlo`, but reads
6
+ * the public base URL from `NEXT_PUBLIC_SERVER_BASE_URL`.
7
+ */
8
+ function createKizlo(options) {
9
+ return new Kizlo(resolveKizloConfig(options, { baseUrlEnvKey: "NEXT_PUBLIC_SERVER_BASE_URL" }));
10
+ }
11
+
12
+ //#endregion
13
+ export { createKizlo };
@@ -0,0 +1,11 @@
1
+ import { KizloError } from "../../shared/error.js";
2
+
3
+ //#region src/integrations/nextjs/utils.ts
4
+ function getServerBaseUrl() {
5
+ const baseUrl = process.env.NEXT_PUBLIC_SERVER_BASE_URL;
6
+ if (!baseUrl) throw new KizloError("MISSING_ENV_VARIABLE", { message: "Please define NEXT_PUBLIC_SERVER_BASE_URL in you .env file." });
7
+ return baseUrl;
8
+ }
9
+
10
+ //#endregion
11
+ export { getServerBaseUrl };
@@ -0,0 +1,73 @@
1
+ import { WordPressCredentials } from "./wordpress/types.js";
2
+ import "./wordpress/index.js";
3
+ import { AuthAdapter } from "./adapters/auth.js";
4
+ import { CaptchaAdapter } from "./adapters/captcha.js";
5
+ import { GeoAdapter } from "./adapters/geo.js";
6
+ import { Environment, LoggerAdapter } from "./adapters/logger.js";
7
+ import { CookiesAdapter } from "./shared/types.js";
8
+ import { RouterMap } from "./router.js";
9
+ import { AnyExtension, InferExtensionRouter } from "./shared/extension.js";
10
+ import { ResultClient } from "./shared/result.js";
11
+ import { Context } from "./context.js";
12
+ import { Pathname } from "@kizlo/shared";
13
+
14
+ //#region src/kizlo.d.ts
15
+ type AnyKizloConfig = KizloConfig<any>;
16
+ interface KizloConfig<TExts extends readonly AnyExtension[]> {
17
+ baseUrl: string;
18
+ siteSecret: string;
19
+ extensions?: TExts;
20
+ environment: Environment;
21
+ adapters?: ServiceAdapters;
22
+ credentials: WordPressCredentials;
23
+ webhookPath?: Pathname;
24
+ }
25
+ interface ServiceAdapters {
26
+ geo?: GeoAdapter;
27
+ auth?: AuthAdapter;
28
+ logger?: LoggerAdapter;
29
+ captcha?: CaptchaAdapter;
30
+ cookies?: CookiesAdapter;
31
+ }
32
+ type RootRouter<TExts extends readonly AnyExtension[]> = InferExtensionRouter<TExts> & RouterMap;
33
+ type S2SClient<TExts extends readonly AnyExtension[]> = ResultClient<RootRouter<TExts>>;
34
+ declare class Kizlo<TExts extends readonly AnyExtension[] = []> {
35
+ readonly context: Context;
36
+ readonly client: S2SClient<TExts>;
37
+ readonly router: RootRouter<TExts>;
38
+ private readonly remoteHandler;
39
+ private readonly openapiHandler;
40
+ private readonly config;
41
+ constructor(config: KizloConfig<TExts>);
42
+ handler(request: Request): Promise<Response>;
43
+ private errorInterceptor;
44
+ private checkInvocationScope;
45
+ private registerExtensions;
46
+ }
47
+ interface CreateKizloOptions<TExts extends readonly AnyExtension[] = []> {
48
+ baseUrl?: string;
49
+ siteSecret?: string;
50
+ extensions?: TExts;
51
+ environment?: Environment;
52
+ adapters?: ServiceAdapters;
53
+ wordpress?: {
54
+ credentials?: Partial<WordPressCredentials>;
55
+ };
56
+ }
57
+ /**
58
+ * Resolves a full `KizloConfig` from options and the environment. Shared by the
59
+ * base `createKizlo` and each framework factory — the single place env values
60
+ * and credentials are read. `baseUrlEnvKey` is the only framework-varying part.
61
+ */
62
+ declare function resolveKizloConfig<TExts extends readonly AnyExtension[]>(options: CreateKizloOptions<TExts> | undefined, defaults: {
63
+ baseUrlEnvKey: string;
64
+ adapters?: ServiceAdapters;
65
+ }): KizloConfig<TExts>;
66
+ /**
67
+ * Creates a Kizlo server from the environment (`SERVER_BASE_URL`, `SITE_SECRET`,
68
+ * `WORDPRESS_*`), with options taking precedence. Framework packages wrap this
69
+ * with their own URL convention and adapters.
70
+ */
71
+ declare function createKizlo<TExts extends readonly AnyExtension[] = []>(options?: CreateKizloOptions<TExts>): Kizlo<TExts>;
72
+ //#endregion
73
+ export { AnyKizloConfig, CreateKizloOptions, Kizlo, KizloConfig, RootRouter, S2SClient, ServiceAdapters, createKizlo, resolveKizloConfig };