@btst/stack 1.1.4 → 1.1.6

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 (35) hide show
  1. package/dist/node_modules/.pnpm/@radix-ui_react-alert-dialog@1.1.15_@types_react-dom@19.2.2_@types_react@19.2.2__@types_ec789942cd38340bd7362c09e7d34384/node_modules/@radix-ui/react-alert-dialog/dist/index.cjs +182 -0
  2. package/dist/node_modules/.pnpm/@radix-ui_react-alert-dialog@1.1.15_@types_react-dom@19.2.2_@types_react@19.2.2__@types_ec789942cd38340bd7362c09e7d34384/node_modules/@radix-ui/react-alert-dialog/dist/index.mjs +149 -0
  3. package/dist/packages/better-stack/src/plugins/blog/api/plugin.cjs +14 -7
  4. package/dist/packages/better-stack/src/plugins/blog/api/plugin.mjs +14 -7
  5. package/dist/packages/better-stack/src/plugins/blog/client/components/forms/post-forms.cjs +64 -14
  6. package/dist/packages/better-stack/src/plugins/blog/client/components/forms/post-forms.mjs +66 -16
  7. package/dist/packages/better-stack/src/plugins/blog/client/components/pages/edit-post-page.internal.cjs +5 -1
  8. package/dist/packages/better-stack/src/plugins/blog/client/components/pages/edit-post-page.internal.mjs +5 -1
  9. package/dist/packages/better-stack/src/plugins/blog/client/hooks/blog-hooks.cjs +31 -0
  10. package/dist/packages/better-stack/src/plugins/blog/client/hooks/blog-hooks.mjs +31 -1
  11. package/dist/packages/better-stack/src/plugins/blog/client/localization/blog-forms.cjs +8 -0
  12. package/dist/packages/better-stack/src/plugins/blog/client/localization/blog-forms.mjs +8 -0
  13. package/dist/packages/ui/src/components/alert-dialog.cjs +149 -0
  14. package/dist/packages/ui/src/components/alert-dialog.mjs +137 -0
  15. package/dist/plugins/blog/client/hooks/index.cjs +1 -0
  16. package/dist/plugins/blog/client/hooks/index.d.cts +7 -1
  17. package/dist/plugins/blog/client/hooks/index.d.mts +7 -1
  18. package/dist/plugins/blog/client/hooks/index.d.ts +7 -1
  19. package/dist/plugins/blog/client/hooks/index.mjs +1 -1
  20. package/dist/plugins/blog/client/index.d.cts +171 -177
  21. package/dist/plugins/blog/client/index.d.mts +171 -177
  22. package/dist/plugins/blog/client/index.d.ts +171 -177
  23. package/dist/plugins/blog/query-keys.d.cts +1 -0
  24. package/dist/plugins/blog/query-keys.d.mts +1 -0
  25. package/dist/plugins/blog/query-keys.d.ts +1 -0
  26. package/dist/plugins/client/index.d.cts +3 -2
  27. package/dist/plugins/client/index.d.mts +3 -2
  28. package/dist/plugins/client/index.d.ts +3 -2
  29. package/package.json +5 -3
  30. package/src/plugins/blog/api/plugin.ts +14 -6
  31. package/src/plugins/blog/client/components/forms/post-forms.tsx +92 -14
  32. package/src/plugins/blog/client/components/pages/edit-post-page.internal.tsx +6 -0
  33. package/src/plugins/blog/client/hooks/blog-hooks.tsx +38 -0
  34. package/src/plugins/blog/client/localization/blog-forms.ts +10 -0
  35. package/src/plugins/client/index.ts +7 -3
@@ -1,3 +1,4 @@
1
+ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
1
2
  import * as react from 'react';
2
3
  import { ComponentType } from 'react';
3
4
  import * as _btst_yar from '@btst/yar';
@@ -66,190 +67,176 @@ interface BlogClientHooks {
66
67
  *
67
68
  * @param config - Configuration including queryClient, baseURL, and optional hooks
68
69
  */
69
- declare const blogClientPlugin: (config: BlogClientConfig) => {
70
- name: string;
71
- routes: () => {
72
- posts: {
73
- (inputCtx_0?: _btst_yar.InputContext<"/blog", _btst_yar.RouteOptions> | undefined): {
74
- PageComponent?: react.ComponentType<unknown> | undefined;
75
- LoadingComponent?: react.ComponentType<unknown> | undefined;
76
- ErrorComponent?: react.ComponentType<unknown> | undefined;
77
- loader?: (() => Promise<void>) | undefined;
78
- meta?: (() => ({
79
- title: string;
80
- name?: undefined;
81
- content?: undefined;
82
- property?: undefined;
83
- } | {
84
- name: string;
85
- content: string;
86
- title?: undefined;
87
- property?: undefined;
88
- } | {
89
- property: string;
90
- content: string;
91
- title?: undefined;
92
- name?: undefined;
93
- })[]) | undefined;
94
- extra?: (() => any) | undefined;
95
- };
96
- options: _btst_yar.RouteOptions | undefined;
97
- path: "/blog";
98
- meta: _btst_yar.RouteMeta | undefined;
70
+ declare const blogClientPlugin: (config: BlogClientConfig) => _btst_stack_plugins_client.ClientPlugin<Record<string, never>, {
71
+ posts: {
72
+ (inputCtx_0?: _btst_yar.InputContext<"/blog", _btst_yar.RouteOptions> | undefined): {
73
+ PageComponent?: react.ComponentType<unknown> | undefined;
74
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
75
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
76
+ loader?: (() => Promise<void>) | undefined;
77
+ meta?: (() => ({
78
+ title: string;
79
+ name?: undefined;
80
+ content?: undefined;
81
+ property?: undefined;
82
+ } | {
83
+ name: string;
84
+ content: string;
85
+ title?: undefined;
86
+ property?: undefined;
87
+ } | {
88
+ property: string;
89
+ content: string;
90
+ title?: undefined;
91
+ name?: undefined;
92
+ })[]) | undefined;
93
+ extra?: (() => any) | undefined;
99
94
  };
100
- drafts: {
101
- (inputCtx_0?: _btst_yar.InputContext<"/blog/drafts", _btst_yar.RouteOptions> | undefined): {
102
- PageComponent?: react.ComponentType<unknown> | undefined;
103
- LoadingComponent?: react.ComponentType<unknown> | undefined;
104
- ErrorComponent?: react.ComponentType<unknown> | undefined;
105
- loader?: (() => Promise<void>) | undefined;
106
- meta?: (() => ({
107
- title: string;
108
- name?: undefined;
109
- content?: undefined;
110
- property?: undefined;
111
- } | {
112
- name: string;
113
- content: string;
114
- title?: undefined;
115
- property?: undefined;
116
- } | {
117
- property: string;
118
- content: string;
119
- title?: undefined;
120
- name?: undefined;
121
- })[]) | undefined;
122
- extra?: (() => any) | undefined;
123
- };
124
- options: _btst_yar.RouteOptions | undefined;
125
- path: "/blog/drafts";
126
- meta: _btst_yar.RouteMeta | undefined;
95
+ options: _btst_yar.RouteOptions | undefined;
96
+ path: "/blog";
97
+ meta: _btst_yar.RouteMeta | undefined;
98
+ };
99
+ drafts: {
100
+ (inputCtx_0?: _btst_yar.InputContext<"/blog/drafts", _btst_yar.RouteOptions> | undefined): {
101
+ PageComponent?: react.ComponentType<unknown> | undefined;
102
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
103
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
104
+ loader?: (() => Promise<void>) | undefined;
105
+ meta?: (() => ({
106
+ title: string;
107
+ name?: undefined;
108
+ content?: undefined;
109
+ property?: undefined;
110
+ } | {
111
+ name: string;
112
+ content: string;
113
+ title?: undefined;
114
+ property?: undefined;
115
+ } | {
116
+ property: string;
117
+ content: string;
118
+ title?: undefined;
119
+ name?: undefined;
120
+ })[]) | undefined;
121
+ extra?: (() => any) | undefined;
127
122
  };
128
- newPost: {
129
- (inputCtx_0?: _btst_yar.InputContext<"/blog/new", _btst_yar.RouteOptions> | undefined): {
130
- PageComponent?: react.ComponentType<unknown> | undefined;
131
- LoadingComponent?: react.ComponentType<unknown> | undefined;
132
- ErrorComponent?: react.ComponentType<unknown> | undefined;
133
- loader?: (() => any) | undefined;
134
- meta?: (() => ({
135
- title: string;
136
- name?: undefined;
137
- content?: undefined;
138
- property?: undefined;
139
- } | {
140
- name: string;
141
- content: string;
142
- title?: undefined;
143
- property?: undefined;
144
- } | {
145
- property: string;
146
- content: string;
147
- title?: undefined;
148
- name?: undefined;
149
- })[]) | undefined;
150
- extra?: (() => any) | undefined;
151
- };
152
- options: _btst_yar.RouteOptions | undefined;
153
- path: "/blog/new";
154
- meta: _btst_yar.RouteMeta | undefined;
123
+ options: _btst_yar.RouteOptions | undefined;
124
+ path: "/blog/drafts";
125
+ meta: _btst_yar.RouteMeta | undefined;
126
+ };
127
+ newPost: {
128
+ (inputCtx_0?: _btst_yar.InputContext<"/blog/new", _btst_yar.RouteOptions> | undefined): {
129
+ PageComponent?: react.ComponentType<unknown> | undefined;
130
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
131
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
132
+ loader?: (() => any) | undefined;
133
+ meta?: (() => ({
134
+ title: string;
135
+ name?: undefined;
136
+ content?: undefined;
137
+ property?: undefined;
138
+ } | {
139
+ name: string;
140
+ content: string;
141
+ title?: undefined;
142
+ property?: undefined;
143
+ } | {
144
+ property: string;
145
+ content: string;
146
+ title?: undefined;
147
+ name?: undefined;
148
+ })[]) | undefined;
149
+ extra?: (() => any) | undefined;
155
150
  };
156
- editPost: {
157
- (inputCtx_0: _btst_yar.InputContext<"/blog/:slug/edit", _btst_yar.RouteOptions>): {
158
- PageComponent?: react.ComponentType<unknown> | undefined;
159
- LoadingComponent?: react.ComponentType<unknown> | undefined;
160
- ErrorComponent?: react.ComponentType<unknown> | undefined;
161
- loader?: (() => Promise<void>) | undefined;
162
- meta?: (() => ({
163
- title: string;
164
- name?: undefined;
165
- content?: undefined;
166
- property?: undefined;
167
- } | {
168
- name: string;
169
- content: string;
170
- title?: undefined;
171
- property?: undefined;
172
- } | {
173
- property: string;
174
- content: string;
175
- title?: undefined;
176
- name?: undefined;
177
- })[]) | undefined;
178
- extra?: (() => any) | undefined;
179
- };
180
- options: _btst_yar.RouteOptions | undefined;
181
- path: "/blog/:slug/edit";
182
- meta: _btst_yar.RouteMeta | undefined;
151
+ options: _btst_yar.RouteOptions | undefined;
152
+ path: "/blog/new";
153
+ meta: _btst_yar.RouteMeta | undefined;
154
+ };
155
+ editPost: {
156
+ (inputCtx_0: _btst_yar.InputContext<"/blog/:slug/edit", _btst_yar.RouteOptions>): {
157
+ PageComponent?: react.ComponentType<unknown> | undefined;
158
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
159
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
160
+ loader?: (() => Promise<void>) | undefined;
161
+ meta?: (() => ({
162
+ title: string;
163
+ name?: undefined;
164
+ content?: undefined;
165
+ property?: undefined;
166
+ } | {
167
+ name: string;
168
+ content: string;
169
+ title?: undefined;
170
+ property?: undefined;
171
+ } | {
172
+ property: string;
173
+ content: string;
174
+ title?: undefined;
175
+ name?: undefined;
176
+ })[]) | undefined;
177
+ extra?: (() => any) | undefined;
183
178
  };
184
- tag: {
185
- (inputCtx_0: _btst_yar.InputContext<"/blog/tag/:tagSlug", _btst_yar.RouteOptions>): {
186
- PageComponent?: react.ComponentType<unknown> | undefined;
187
- LoadingComponent?: react.ComponentType<unknown> | undefined;
188
- ErrorComponent?: react.ComponentType<unknown> | undefined;
189
- loader?: (() => Promise<void>) | undefined;
190
- meta?: (() => ({
191
- title: string;
192
- name?: undefined;
193
- content?: undefined;
194
- property?: undefined;
195
- } | {
196
- name: string;
197
- content: string;
198
- title?: undefined;
199
- property?: undefined;
200
- } | {
201
- property: string;
202
- content: string;
203
- title?: undefined;
204
- name?: undefined;
205
- })[]) | undefined;
206
- extra?: (() => any) | undefined;
207
- };
208
- options: _btst_yar.RouteOptions | undefined;
209
- path: "/blog/tag/:tagSlug";
210
- meta: _btst_yar.RouteMeta | undefined;
179
+ options: _btst_yar.RouteOptions | undefined;
180
+ path: "/blog/:slug/edit";
181
+ meta: _btst_yar.RouteMeta | undefined;
182
+ };
183
+ tag: {
184
+ (inputCtx_0: _btst_yar.InputContext<"/blog/tag/:tagSlug", _btst_yar.RouteOptions>): {
185
+ PageComponent?: react.ComponentType<unknown> | undefined;
186
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
187
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
188
+ loader?: (() => Promise<void>) | undefined;
189
+ meta?: (() => ({
190
+ title: string;
191
+ name?: undefined;
192
+ content?: undefined;
193
+ property?: undefined;
194
+ } | {
195
+ name: string;
196
+ content: string;
197
+ title?: undefined;
198
+ property?: undefined;
199
+ } | {
200
+ property: string;
201
+ content: string;
202
+ title?: undefined;
203
+ name?: undefined;
204
+ })[]) | undefined;
205
+ extra?: (() => any) | undefined;
211
206
  };
212
- post: {
213
- (inputCtx_0: _btst_yar.InputContext<"/blog/:slug", _btst_yar.RouteOptions>): {
214
- PageComponent?: react.ComponentType<unknown> | undefined;
215
- LoadingComponent?: react.ComponentType<unknown> | undefined;
216
- ErrorComponent?: react.ComponentType<unknown> | undefined;
217
- loader?: (() => Promise<void>) | undefined;
218
- meta?: (() => ({
219
- title: string;
220
- name?: undefined;
221
- content?: undefined;
222
- property?: undefined;
223
- } | {
224
- name: string;
225
- content: string | undefined;
226
- title?: undefined;
227
- property?: undefined;
228
- } | {
229
- property: string;
230
- content: string;
231
- title?: undefined;
232
- name?: undefined;
233
- })[]) | undefined;
234
- extra?: (() => any) | undefined;
235
- };
236
- options: _btst_yar.RouteOptions | undefined;
237
- path: "/blog/:slug";
238
- meta: _btst_yar.RouteMeta | undefined;
207
+ options: _btst_yar.RouteOptions | undefined;
208
+ path: "/blog/tag/:tagSlug";
209
+ meta: _btst_yar.RouteMeta | undefined;
210
+ };
211
+ post: {
212
+ (inputCtx_0: _btst_yar.InputContext<"/blog/:slug", _btst_yar.RouteOptions>): {
213
+ PageComponent?: react.ComponentType<unknown> | undefined;
214
+ LoadingComponent?: react.ComponentType<unknown> | undefined;
215
+ ErrorComponent?: react.ComponentType<unknown> | undefined;
216
+ loader?: (() => Promise<void>) | undefined;
217
+ meta?: (() => ({
218
+ title: string;
219
+ name?: undefined;
220
+ content?: undefined;
221
+ property?: undefined;
222
+ } | {
223
+ name: string;
224
+ content: string | undefined;
225
+ title?: undefined;
226
+ property?: undefined;
227
+ } | {
228
+ property: string;
229
+ content: string;
230
+ title?: undefined;
231
+ name?: undefined;
232
+ })[]) | undefined;
233
+ extra?: (() => any) | undefined;
239
234
  };
235
+ options: _btst_yar.RouteOptions | undefined;
236
+ path: "/blog/:slug";
237
+ meta: _btst_yar.RouteMeta | undefined;
240
238
  };
241
- sitemap: () => Promise<({
242
- url: string;
243
- lastModified: Date | undefined;
244
- changeFrequency: "monthly";
245
- priority: number;
246
- } | {
247
- url: string;
248
- lastModified: Date | undefined;
249
- changeFrequency: "daily";
250
- priority: number;
251
- })[]>;
252
- };
239
+ }>;
253
240
 
254
241
  declare const BLOG_LOCALIZATION: {
255
242
  BLOG_FORMS_TITLE_LABEL: string;
@@ -271,7 +258,14 @@ declare const BLOG_LOCALIZATION: {
271
258
  BLOG_FORMS_CANCEL_BUTTON: string;
272
259
  BLOG_FORMS_TOAST_CREATE_SUCCESS: string;
273
260
  BLOG_FORMS_TOAST_UPDATE_SUCCESS: string;
261
+ BLOG_FORMS_TOAST_DELETE_SUCCESS: string;
274
262
  BLOG_FORMS_LOADING_POST: string;
263
+ BLOG_FORMS_DELETE_BUTTON: string;
264
+ BLOG_FORMS_DELETE_DIALOG_TITLE: string;
265
+ BLOG_FORMS_DELETE_DIALOG_DESCRIPTION: string;
266
+ BLOG_FORMS_DELETE_DIALOG_CANCEL: string;
267
+ BLOG_FORMS_DELETE_DIALOG_CONFIRM: string;
268
+ BLOG_FORMS_DELETE_PENDING: string;
275
269
  BLOG_FORMS_EDITOR_PLACEHOLDER: string;
276
270
  BLOG_FORMS_FEATURED_IMAGE_LABEL: string;
277
271
  BLOG_FORMS_FEATURED_IMAGE_REQUIRED_ASTERISK: string;
@@ -24,6 +24,7 @@ interface BlogApiContext<TBody = any, TParams = any, TQuery = any> {
24
24
  params?: TParams;
25
25
  query?: TQuery;
26
26
  request?: Request;
27
+ headers?: Headers;
27
28
  [key: string]: any;
28
29
  }
29
30
  /**
@@ -24,6 +24,7 @@ interface BlogApiContext<TBody = any, TParams = any, TQuery = any> {
24
24
  params?: TParams;
25
25
  query?: TQuery;
26
26
  request?: Request;
27
+ headers?: Headers;
27
28
  [key: string]: any;
28
29
  }
29
30
  /**
@@ -24,6 +24,7 @@ interface BlogApiContext<TBody = any, TParams = any, TQuery = any> {
24
24
  params?: TParams;
25
25
  query?: TQuery;
26
26
  request?: Request;
27
+ headers?: Headers;
27
28
  [key: string]: any;
28
29
  }
29
30
  /**
@@ -48,8 +48,9 @@ declare function createApiClient<TRouter extends Router | Record<string, Endpoin
48
48
  * });
49
49
  * ```
50
50
  *
51
- * @template TPlugin - The exact plugin definition (auto-inferred)
51
+ * @template TOverrides - The shape of overridable components/functions this plugin requires
52
+ * @template TRoutes - The exact shape of routes this plugin provides (preserves keys and route types)
52
53
  */
53
- declare function defineClientPlugin<TPlugin extends ClientPlugin<any, Record<string, Route>>>(plugin: TPlugin): TPlugin;
54
+ declare function defineClientPlugin<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>>(plugin: ClientPlugin<TOverrides, TRoutes>): ClientPlugin<TOverrides, TRoutes>;
54
55
 
55
56
  export { ClientPlugin, createApiClient, defineClientPlugin };
@@ -48,8 +48,9 @@ declare function createApiClient<TRouter extends Router | Record<string, Endpoin
48
48
  * });
49
49
  * ```
50
50
  *
51
- * @template TPlugin - The exact plugin definition (auto-inferred)
51
+ * @template TOverrides - The shape of overridable components/functions this plugin requires
52
+ * @template TRoutes - The exact shape of routes this plugin provides (preserves keys and route types)
52
53
  */
53
- declare function defineClientPlugin<TPlugin extends ClientPlugin<any, Record<string, Route>>>(plugin: TPlugin): TPlugin;
54
+ declare function defineClientPlugin<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>>(plugin: ClientPlugin<TOverrides, TRoutes>): ClientPlugin<TOverrides, TRoutes>;
54
55
 
55
56
  export { ClientPlugin, createApiClient, defineClientPlugin };
@@ -48,8 +48,9 @@ declare function createApiClient<TRouter extends Router | Record<string, Endpoin
48
48
  * });
49
49
  * ```
50
50
  *
51
- * @template TPlugin - The exact plugin definition (auto-inferred)
51
+ * @template TOverrides - The shape of overridable components/functions this plugin requires
52
+ * @template TRoutes - The exact shape of routes this plugin provides (preserves keys and route types)
52
53
  */
53
- declare function defineClientPlugin<TPlugin extends ClientPlugin<any, Record<string, Route>>>(plugin: TPlugin): TPlugin;
54
+ declare function defineClientPlugin<TOverrides = Record<string, never>, TRoutes extends Record<string, Route> = Record<string, Route>>(plugin: ClientPlugin<TOverrides, TRoutes>): ClientPlugin<TOverrides, TRoutes>;
54
55
 
55
56
  export { ClientPlugin, createApiClient, defineClientPlugin };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@btst/stack",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "A composable, plugin-based library for building full-stack applications.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -158,20 +158,20 @@
158
158
  },
159
159
  "dependencies": {
160
160
  "@btst/db": "1.0.2",
161
- "@btst/yar": "1.1.1",
162
161
  "@lukemorales/query-key-factory": "^1.3.4",
163
162
  "@milkdown/crepe": "^7.17.1",
164
163
  "@milkdown/kit": "^7.17.1",
165
- "better-call": "1.0.19",
166
164
  "slug": "^11.0.1"
167
165
  },
168
166
  "peerDependencies": {
167
+ "@btst/yar": ">=1.1.0",
169
168
  "@hookform/resolvers": ">=5.0.0",
170
169
  "@radix-ui/react-dialog": ">=1.1.0",
171
170
  "@radix-ui/react-label": ">=2.1.0",
172
171
  "@radix-ui/react-slot": ">=1.1.0",
173
172
  "@radix-ui/react-switch": ">=1.1.0",
174
173
  "@tanstack/react-query": "^5.0.0",
174
+ "better-call": ">=1.0.0",
175
175
  "class-variance-authority": ">=0.7.0",
176
176
  "clsx": ">=2.1.0",
177
177
  "cmdk": ">=1.1.0",
@@ -197,9 +197,11 @@
197
197
  },
198
198
  "devDependencies": {
199
199
  "@btst/adapter-memory": "1.0.2",
200
+ "@btst/yar": "1.1.1",
200
201
  "@types/react": "^19.0.0",
201
202
  "@types/slug": "^5.0.9",
202
203
  "@workspace/ui": "workspace:*",
204
+ "better-call": "1.0.19",
203
205
  "react": "^19.1.1",
204
206
  "react-dom": "^19.1.1",
205
207
  "react-error-boundary": "^4.1.2",
@@ -36,6 +36,7 @@ export interface BlogApiContext<TBody = any, TParams = any, TQuery = any> {
36
36
  params?: TParams;
37
37
  query?: TQuery;
38
38
  request?: Request;
39
+ headers?: Headers;
39
40
  [key: string]: any;
40
41
  }
41
42
 
@@ -282,8 +283,8 @@ export const blogBackendPlugin = (hooks?: BlogBackendHooks) =>
282
283
  query: PostListQuerySchema,
283
284
  },
284
285
  async (ctx) => {
285
- const { query } = ctx;
286
- const context: BlogApiContext = { query };
286
+ const { query, headers } = ctx;
287
+ const context: BlogApiContext = { query, headers };
287
288
  const tagCache = createTagCache();
288
289
  const postTagCache = createPostTagCache();
289
290
 
@@ -402,7 +403,10 @@ export const blogBackendPlugin = (hooks?: BlogBackendHooks) =>
402
403
  body: createPostSchema,
403
404
  },
404
405
  async (ctx) => {
405
- const context: BlogApiContext = { body: ctx.body };
406
+ const context: BlogApiContext = {
407
+ body: ctx.body,
408
+ headers: ctx.headers,
409
+ };
406
410
  const tagCache = createTagCache();
407
411
 
408
412
  try {
@@ -475,6 +479,7 @@ export const blogBackendPlugin = (hooks?: BlogBackendHooks) =>
475
479
  const context: BlogApiContext = {
476
480
  body: ctx.body,
477
481
  params: ctx.params,
482
+ headers: ctx.headers,
478
483
  };
479
484
  const tagCache = createTagCache();
480
485
 
@@ -583,7 +588,10 @@ export const blogBackendPlugin = (hooks?: BlogBackendHooks) =>
583
588
  method: "DELETE",
584
589
  },
585
590
  async (ctx) => {
586
- const context: BlogApiContext = { params: ctx.params };
591
+ const context: BlogApiContext = {
592
+ params: ctx.params,
593
+ headers: ctx.headers,
594
+ };
587
595
 
588
596
  try {
589
597
  // Authorization hook
@@ -634,8 +642,8 @@ export const blogBackendPlugin = (hooks?: BlogBackendHooks) =>
634
642
  query: NextPreviousPostsQuerySchema,
635
643
  },
636
644
  async (ctx) => {
637
- const { query } = ctx;
638
- const context: BlogApiContext = { query };
645
+ const { query, headers } = ctx;
646
+ const context: BlogApiContext = { query, headers };
639
647
  const tagCache = createTagCache();
640
648
  const postTagCache = createPostTagCache();
641
649