@mx-space/api-client 1.18.1 → 1.19.1

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 (63) hide show
  1. package/dist/index.cjs +54 -54
  2. package/dist/index.d.cts +35 -28
  3. package/dist/index.d.mts +35 -28
  4. package/dist/index.mjs +54 -54
  5. package/package.json +15 -10
  6. package/controllers/ack.ts +0 -42
  7. package/controllers/activity.ts +0 -108
  8. package/controllers/aggregate.ts +0 -75
  9. package/controllers/ai.ts +0 -70
  10. package/controllers/base.ts +0 -36
  11. package/controllers/category.ts +0 -118
  12. package/controllers/comment.ts +0 -71
  13. package/controllers/index.ts +0 -97
  14. package/controllers/link.ts +0 -46
  15. package/controllers/note.ts +0 -128
  16. package/controllers/page.ts +0 -64
  17. package/controllers/post.ts +0 -93
  18. package/controllers/project.ts +0 -27
  19. package/controllers/recently.ts +0 -82
  20. package/controllers/say.ts +0 -40
  21. package/controllers/search.ts +0 -108
  22. package/controllers/severless.ts +0 -31
  23. package/controllers/snippet.ts +0 -35
  24. package/controllers/subscribe.ts +0 -58
  25. package/controllers/topic.ts +0 -37
  26. package/controllers/user.ts +0 -61
  27. package/dtos/comment.ts +0 -12
  28. package/dtos/index.ts +0 -1
  29. package/index.ts +0 -12
  30. package/interfaces/adapter.ts +0 -36
  31. package/interfaces/client.ts +0 -20
  32. package/interfaces/controller.ts +0 -5
  33. package/interfaces/instance.ts +0 -8
  34. package/interfaces/options.ts +0 -1
  35. package/interfaces/params.ts +0 -4
  36. package/interfaces/request.ts +0 -87
  37. package/interfaces/types.ts +0 -3
  38. package/mod-dts.mjs +0 -21
  39. package/models/activity.ts +0 -133
  40. package/models/aggregate.ts +0 -88
  41. package/models/ai.ts +0 -17
  42. package/models/auth.ts +0 -9
  43. package/models/base.ts +0 -48
  44. package/models/category.ts +0 -25
  45. package/models/comment.ts +0 -44
  46. package/models/index.ts +0 -20
  47. package/models/link.ts +0 -25
  48. package/models/note.ts +0 -41
  49. package/models/page.ts +0 -20
  50. package/models/post.ts +0 -28
  51. package/models/project.ts +0 -12
  52. package/models/reader.ts +0 -9
  53. package/models/recently.ts +0 -24
  54. package/models/say.ts +0 -7
  55. package/models/setting.ts +0 -73
  56. package/models/snippet.ts +0 -19
  57. package/models/subscribe.ts +0 -5
  58. package/models/topic.ts +0 -9
  59. package/models/user.ts +0 -27
  60. package/test.d.ts +0 -3
  61. package/tsconfig.json +0 -37
  62. package/tsdown.config.ts +0 -18
  63. package/vitest.config.ts +0 -16
@@ -1,108 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler, RequestProxyResult } from '~/interfaces/request'
4
- import type { PaginateResult } from '~/models/base'
5
- import type { NoteModel } from '~/models/note'
6
- import type { PageModel } from '~/models/page'
7
- import type { PostModel } from '~/models/post'
8
- import { autoBind } from '~/utils/auto-bind'
9
- import type { HTTPClient } from '../core'
10
-
11
- declare module '../core/client' {
12
- interface HTTPClient<
13
- T extends IRequestAdapter = IRequestAdapter,
14
- ResponseWrapper = unknown,
15
- > {
16
- search: SearchController<ResponseWrapper>
17
- }
18
- }
19
-
20
- export type SearchType = 'post' | 'note'
21
-
22
- export type SearchOption = {
23
- orderBy?: string
24
- order?: number
25
- rawAlgolia?: boolean
26
- }
27
- export class SearchController<ResponseWrapper> implements IController {
28
- base = 'search'
29
- name = 'search'
30
-
31
- constructor(private readonly client: HTTPClient) {
32
- autoBind(this)
33
- }
34
-
35
- get proxy(): IRequestHandler<ResponseWrapper> {
36
- return this.client.proxy(this.base)
37
- }
38
-
39
- search(
40
- type: 'note',
41
- keyword: string,
42
- options?: Omit<SearchOption, 'rawAlgolia'>,
43
- ): Promise<
44
- RequestProxyResult<
45
- PaginateResult<
46
- Pick<NoteModel, 'modified' | 'id' | 'title' | 'created' | 'nid'>
47
- >,
48
- ResponseWrapper
49
- >
50
- >
51
- search(
52
- type: 'post',
53
- keyword: string,
54
- options?: Omit<SearchOption, 'rawAlgolia'>,
55
- ): Promise<
56
- RequestProxyResult<
57
- PaginateResult<
58
- Pick<
59
- PostModel,
60
- 'modified' | 'id' | 'title' | 'created' | 'slug' | 'category'
61
- >
62
- >,
63
- ResponseWrapper
64
- >
65
- >
66
- search(
67
- type: SearchType,
68
- keyword: string,
69
- options: Omit<SearchOption, 'rawAlgolia'> = {},
70
- ): any {
71
- return this.proxy(type).get({
72
- params: { keyword, ...options },
73
- })
74
- }
75
- /**
76
- * 从 algolya 搜索
77
- * https://www.algolia.com/doc/api-reference/api-methods/search/
78
- * @param keyword
79
- * @param options
80
- * @returns
81
- */
82
- searchByAlgolia(keyword: string, options?: SearchOption) {
83
- return this.proxy('algolia').get<
84
- RequestProxyResult<
85
- PaginateResult<
86
- | (Pick<
87
- PostModel,
88
- 'modified' | 'id' | 'title' | 'created' | 'slug' | 'category'
89
- > & { type: 'post' })
90
- | (Pick<
91
- NoteModel,
92
- 'id' | 'created' | 'id' | 'modified' | 'title' | 'nid'
93
- > & { type: 'note' })
94
- | (Pick<
95
- PageModel,
96
- 'id' | 'title' | 'created' | 'modified' | 'slug'
97
- > & { type: 'page' })
98
- > & {
99
- /**
100
- * @see: algoliasearch <https://www.algolia.com/doc/api-reference/api-methods/search/>
101
- */
102
- raw?: any
103
- },
104
- ResponseWrapper
105
- >
106
- >({ params: { keyword, ...options } })
107
- }
108
- }
@@ -1,31 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler } from '~/interfaces/request'
4
- import { autoBind } from '~/utils/auto-bind'
5
- import type { HTTPClient } from '../core'
6
-
7
- declare module '../core/client' {
8
- interface HTTPClient<
9
- T extends IRequestAdapter = IRequestAdapter,
10
- ResponseWrapper = unknown,
11
- > {
12
- serverless: ServerlessController<ResponseWrapper>
13
- }
14
- }
15
-
16
- export class ServerlessController<ResponseWrapper> implements IController {
17
- base = 'serverless'
18
- name = 'serverless'
19
-
20
- constructor(protected client: HTTPClient) {
21
- autoBind(this)
22
- }
23
-
24
- get proxy(): IRequestHandler<ResponseWrapper> {
25
- return this.client.proxy(this.base)
26
- }
27
-
28
- getByReferenceAndName<T = unknown>(reference: string, name: string) {
29
- return this.proxy(reference)(name).get<T>()
30
- }
31
- }
@@ -1,35 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler } from '~/interfaces/request'
4
- import { autoBind } from '~/utils/auto-bind'
5
- import type { HTTPClient } from '../core'
6
-
7
- declare module '../core/client' {
8
- interface HTTPClient<
9
- T extends IRequestAdapter = IRequestAdapter,
10
- ResponseWrapper = unknown,
11
- > {
12
- snippet: SnippetController<ResponseWrapper>
13
- }
14
- }
15
-
16
- export class SnippetController<ResponseWrapper> implements IController {
17
- base = 'snippets'
18
- name = 'snippet'
19
-
20
- constructor(protected client: HTTPClient) {
21
- autoBind(this)
22
- }
23
-
24
- get proxy(): IRequestHandler<ResponseWrapper> {
25
- return this.client.proxy(this.base)
26
- }
27
-
28
- // getById(id: string) {
29
- // return this.proxy(id).get<Omit<SnippetModel, 'data'>>()
30
- // }
31
-
32
- getByReferenceAndName<T = unknown>(reference: string, name: string) {
33
- return this.proxy(reference)(name).get<T>()
34
- }
35
- }
@@ -1,58 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler } from '~/interfaces/request'
4
- import type { SubscribeType } from '~/models/subscribe'
5
- import { autoBind } from '~/utils/auto-bind'
6
- import type { HTTPClient } from '../core'
7
-
8
- declare module '../core/client' {
9
- interface HTTPClient<
10
- T extends IRequestAdapter = IRequestAdapter,
11
- ResponseWrapper = unknown,
12
- > {
13
- subscribe: SubscribeController<ResponseWrapper>
14
- }
15
- }
16
-
17
- export class SubscribeController<ResponseWrapper> implements IController {
18
- base = 'subscribe'
19
- name = 'subscribe'
20
-
21
- constructor(protected client: HTTPClient) {
22
- autoBind(this)
23
- }
24
-
25
- public get proxy(): IRequestHandler<ResponseWrapper> {
26
- return this.client.proxy(this.base)
27
- }
28
-
29
- /**
30
- * 检查开启状态
31
- */
32
- check() {
33
- return this.proxy.status.get<{
34
- enable: boolean
35
- bitMap: Record<SubscribeType, number>
36
- allowBits: number[]
37
- allowTypes: SubscribeType[]
38
- }>()
39
- }
40
-
41
- subscribe(email: string, types: SubscribeType[]) {
42
- return this.proxy.post<never>({
43
- data: {
44
- email,
45
- types,
46
- },
47
- })
48
- }
49
-
50
- unsubscribe(email: string, cancelToken: string) {
51
- return this.proxy.unsubscribe.get<string>({
52
- params: {
53
- email,
54
- cancelToken,
55
- },
56
- })
57
- }
58
- }
@@ -1,37 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler } from '~/interfaces/request'
4
- import type { TopicModel } from '~/models/topic'
5
- import { autoBind } from '~/utils/auto-bind'
6
- import type { HTTPClient } from '../core'
7
- import { BaseCrudController } from './base'
8
-
9
- declare module '../core/client' {
10
- interface HTTPClient<
11
- T extends IRequestAdapter = IRequestAdapter,
12
- ResponseWrapper = unknown,
13
- > {
14
- topic: TopicController<ResponseWrapper>
15
- }
16
- }
17
-
18
- export class TopicController<ResponseWrapper>
19
- extends BaseCrudController<TopicModel, ResponseWrapper>
20
- implements IController
21
- {
22
- base = 'topics'
23
- name = 'topic'
24
-
25
- constructor(protected client: HTTPClient) {
26
- super(client)
27
- autoBind(this)
28
- }
29
-
30
- public get proxy(): IRequestHandler<ResponseWrapper> {
31
- return this.client.proxy(this.base)
32
- }
33
-
34
- getTopicBySlug(slug: string) {
35
- return this.proxy.slug(slug).get<TopicModel>()
36
- }
37
- }
@@ -1,61 +0,0 @@
1
- import type { IRequestAdapter } from '~/interfaces/adapter'
2
- import type { IController } from '~/interfaces/controller'
3
- import type { IRequestHandler } from '~/interfaces/request'
4
- import type { TLogin, UserModel } from '~/models/user'
5
- import { autoBind } from '~/utils/auto-bind'
6
- import type { HTTPClient } from '../core'
7
-
8
- declare module '../core/client' {
9
- interface HTTPClient<
10
- T extends IRequestAdapter = IRequestAdapter,
11
- ResponseWrapper = unknown,
12
- > {
13
- user: UserController<ResponseWrapper>
14
- master: UserController<ResponseWrapper>
15
- }
16
- }
17
-
18
- export class UserController<ResponseWrapper> implements IController {
19
- constructor(private readonly client: HTTPClient) {
20
- autoBind(this)
21
- }
22
-
23
- base = 'master'
24
-
25
- name = ['user', 'master']
26
-
27
- public get proxy(): IRequestHandler<ResponseWrapper> {
28
- return this.client.proxy(this.base)
29
- }
30
-
31
- getMasterInfo() {
32
- return this.proxy.get<UserModel>()
33
- }
34
-
35
- login(username: string, password: string) {
36
- return this.proxy.login.post<TLogin>({
37
- data: {
38
- username,
39
- password,
40
- },
41
- })
42
- }
43
-
44
- loginWithToken(token?: string) {
45
- return this.proxy.login.put<{ token: string }>({
46
- params: token
47
- ? {
48
- token: `bearer ${token.replace(/^bearer\s/i, '')}`,
49
- }
50
- : undefined,
51
- })
52
- }
53
-
54
- checkTokenValid(token: string) {
55
- return this.proxy.check_logged.get<{ ok: number; isGuest: boolean }>({
56
- params: {
57
- token: `bearer ${token.replace(/^bearer\s/i, '')}`,
58
- },
59
- })
60
- }
61
- }
package/dtos/comment.ts DELETED
@@ -1,12 +0,0 @@
1
- export interface CommentDto {
2
- author: string
3
-
4
- text: string
5
-
6
- mail: string
7
-
8
- url?: string
9
-
10
- source?: 'github' | 'google'
11
- avatar?: string
12
- }
package/dtos/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './comment'
package/index.ts DELETED
@@ -1,12 +0,0 @@
1
- import { createClient } from './core'
2
-
3
- export * from './controllers'
4
- export * from './models'
5
- export * from './dtos'
6
-
7
- export { createClient, RequestError } from './core'
8
- export type { HTTPClient } from './core'
9
- export { camelcaseKeys as simpleCamelcaseKeys } from './utils/camelcase-keys'
10
-
11
- export default createClient
12
- export type { IRequestAdapter } from './interfaces/adapter'
@@ -1,36 +0,0 @@
1
- import type { RequestOptions } from './instance'
2
-
3
- export type IAdaptorRequestResponseType<P> = Promise<
4
- Record<string, any> & { data: P }
5
- >
6
-
7
- export type IRequestAdapter<T = any, Response = undefined> = Readonly<
8
- (Response extends undefined ? {} : { responseWrapper: Response }) & {
9
- default: T
10
-
11
- get: <P = unknown>(
12
- url: string,
13
- options?: Omit<RequestOptions, 'data'>,
14
- ) => IAdaptorRequestResponseType<P>
15
-
16
- post: <P = unknown>(
17
- url: string,
18
- options: Partial<RequestOptions>,
19
- ) => IAdaptorRequestResponseType<P>
20
-
21
- patch: <P = unknown>(
22
- url: string,
23
- options: Partial<RequestOptions>,
24
- ) => IAdaptorRequestResponseType<P>
25
-
26
- delete: <P = unknown>(
27
- url: string,
28
- options?: Omit<RequestOptions, 'data'>,
29
- ) => IAdaptorRequestResponseType<P>
30
-
31
- put: <P = unknown>(
32
- url: string,
33
- options: Partial<RequestOptions>,
34
- ) => IAdaptorRequestResponseType<P>
35
- }
36
- >
@@ -1,20 +0,0 @@
1
- import type { IController } from './controller'
2
- import type { Class } from './types'
3
-
4
- interface IClientOptions {
5
- controllers: Class<IController>[]
6
- getCodeMessageFromException: <T = Error>(
7
- error: T,
8
- ) => {
9
- message?: string | undefined | null
10
- code?: number | undefined | null
11
- }
12
- customThrowResponseError: <T extends Error = Error>(err: any) => T
13
- transformResponse: <T = any>(data: any) => T
14
- /**
15
- *
16
- * @default (res) => res.data
17
- */
18
- getDataFromResponse: <T = any>(response: unknown) => T
19
- }
20
- export type ClientOptions = Partial<IClientOptions>
@@ -1,5 +0,0 @@
1
- export interface IController {
2
- base: string
3
-
4
- name: string | string[]
5
- }
@@ -1,8 +0,0 @@
1
- export interface RequestOptions {
2
- method?: string
3
- data?: Record<string, any>
4
- params?: Record<string, any> | URLSearchParams
5
- headers?: Record<string, string>
6
-
7
- [key: string]: any
8
- }
@@ -1 +0,0 @@
1
- export type SortOrder = 'asc' | 'desc'
@@ -1,4 +0,0 @@
1
- export interface PaginationParams {
2
- size?: number
3
- page?: number
4
- }
@@ -1,87 +0,0 @@
1
- import type { RequestOptions } from './instance'
2
-
3
- type NoStringIndex<T> = {
4
- [K in keyof T as string extends K ? never : K]: T[K]
5
- }
6
-
7
- export type Method = 'get' | 'delete' | 'post' | 'put' | 'patch'
8
-
9
- export interface IRequestHandler<ResponseWrapper> {
10
- (path?: string | number): IRequestHandler<ResponseWrapper>
11
- // @ts-ignore
12
- get: <P = unknown>(
13
- options?: Omit<NoStringIndex<RequestOptions>, 'data'>,
14
- ) => RequestProxyResult<P, ResponseWrapper>
15
- // @ts-ignore
16
- post: <P = unknown>(
17
- options?: RequestOptions,
18
- ) => RequestProxyResult<P, ResponseWrapper>
19
- // @ts-ignore
20
- patch: <P = unknown>(
21
- options?: RequestOptions,
22
- ) => RequestProxyResult<P, ResponseWrapper>
23
- // @ts-ignore
24
- delete: <P = unknown>(
25
- options?: Omit<NoStringIndex<RequestOptions>, 'data'>,
26
- ) => RequestProxyResult<P, ResponseWrapper>
27
- // @ts-ignore
28
- put: <P = unknown>(
29
- options?: RequestOptions,
30
- ) => RequestProxyResult<P, ResponseWrapper>
31
- // @ts-ignore
32
- toString: (withBase?: boolean) => string
33
- // @ts-ignore
34
- valueOf: (withBase?: boolean) => string
35
- [key: string]: IRequestHandler<ResponseWrapper>
36
- }
37
-
38
- export type RequestProxyResult<
39
- T,
40
- ResponseWrapper,
41
- R = ResponseWrapper extends unknown
42
- ? { data: T; [key: string]: any }
43
- : ResponseWrapper extends { data: T }
44
- ? ResponseWrapper
45
- : Omit<ResponseWrapper, 'data'> & { data: T },
46
- > = Promise<ResponseProxyExtraRaw<T, R, ResponseWrapper>>
47
-
48
- type CamelToSnake<T extends string, P extends string = ''> = string extends T
49
- ? string
50
- : T extends `${infer C0}${infer R}`
51
- ? CamelToSnake<
52
- R,
53
- `${P}${C0 extends Lowercase<C0> ? '' : '_'}${Lowercase<C0>}`
54
- >
55
- : P
56
-
57
- type CamelKeysToSnake<T> = {
58
- [K in keyof T as CamelToSnake<Extract<K, string>>]: T[K]
59
- }
60
-
61
- type ResponseWrapperType<Response, RawData, T> = {
62
- $raw: Response extends { data: infer T }
63
- ? Response
64
- : Response extends unknown
65
- ? {
66
- [i: string]: any
67
- data: RawData extends unknown ? CamelKeysToSnake<T> : RawData
68
- }
69
- : Response
70
- $request: {
71
- path: string
72
- method: string
73
- [k: string]: string
74
- }
75
-
76
- $serialized: T
77
- }
78
-
79
- export type ResponseProxyExtraRaw<
80
- T,
81
- RawData = unknown,
82
- Response = unknown,
83
- > = T extends object
84
- ? T & ResponseWrapperType<Response, RawData, T>
85
- : T extends unknown
86
- ? T & ResponseWrapperType<Response, RawData, T>
87
- : unknown
@@ -1,3 +0,0 @@
1
- export type Class<T> = new (...args: any[]) => T
2
-
3
- export type SelectFields<T extends string> = `${'+' | '-' | ''}${T}`[]
package/mod-dts.mjs DELETED
@@ -1,21 +0,0 @@
1
- import { readFileSync, writeFileSync } from 'node:fs'
2
- import path from 'node:path'
3
-
4
- const __dirname = new URL(import.meta.url).pathname.replace(/\/[^/]*$/, '')
5
- const PKG = JSON.parse(readFileSync(path.resolve(__dirname, './package.json')))
6
-
7
- const dts = path.resolve(__dirname, './dist/index.d.cts')
8
- const dtsm = path.resolve(__dirname, './dist/index.d.mts')
9
- const content = readFileSync(dts, 'utf-8')
10
-
11
- for (const file of [dts, dtsm]) {
12
- // replace declare module '../core/client'
13
- // with declare module '@mx-space/api-client'
14
- writeFileSync(
15
- file,
16
- content.replaceAll(
17
- /declare module '..\/core\/client'/g,
18
- 'declare module ' + `'${PKG.name}'`,
19
- ),
20
- )
21
- }
@@ -1,133 +0,0 @@
1
- import type { CollectionRefTypes } from '@core/constants/db.constant'
2
- import type { CategoryModel } from './category'
3
-
4
- export interface ActivityPresence {
5
- operationTime: number
6
- identity: string
7
- roomName: string
8
- position: number
9
- joinedAt: number
10
- connectedAt: number
11
- updatedAt: number
12
- readerId?: string
13
-
14
- displayName?: string
15
- }
16
-
17
- export interface RoomOmittedNote {
18
- title: string
19
- nid: number
20
- id: string
21
- created: string
22
- }
23
-
24
- export interface RoomOmittedPage {
25
- title: string
26
- slug: string
27
- id: string
28
- created: string
29
- }
30
-
31
- export interface RoomOmittedPost {
32
- slug: string
33
- title: string
34
- categoryId: string
35
- category: CategoryModel
36
- id: string
37
- created: string
38
- }
39
- export interface RoomsData {
40
- rooms: string[]
41
- roomCount: {
42
- [key: string]: number
43
- }
44
- objects: {
45
- posts: RoomOmittedPost[]
46
- notes: RoomOmittedNote[]
47
- pages: RoomOmittedPage[]
48
- }
49
- }
50
-
51
- export interface RecentActivities {
52
- like: RecentLike[]
53
- comment: RecentComment[]
54
- recent: RecentRecent[]
55
- post: RecentPost[]
56
- note: RecentNote[]
57
- }
58
-
59
- export interface RecentComment {
60
- created: string
61
- author: string
62
- text: string
63
- id: string
64
- title: string
65
- slug?: string
66
- type: string
67
- avatar: string
68
- nid?: string
69
- }
70
-
71
- export interface RecentLike {
72
- created: string
73
- id: string
74
- type: CollectionRefTypes.Post | CollectionRefTypes.Note
75
- nid?: number
76
- slug?: string
77
- title: string
78
- }
79
-
80
- export interface RecentNote {
81
- id: string
82
- created: string
83
- title: string
84
- modified: string
85
- nid: number
86
- }
87
-
88
- export interface RecentPost {
89
- id: string
90
- created: string
91
- title: string
92
- modified: string
93
- slug: string
94
- }
95
-
96
- export interface RecentRecent {
97
- id: string
98
-
99
- content: string
100
- up: number
101
- down: number
102
- created: string
103
- }
104
-
105
- export interface LastYearPublication {
106
- posts: PostsItem[]
107
- notes: NotesItem[]
108
- }
109
-
110
- interface PostsItem {
111
- id: string
112
- created: string
113
- title: string
114
- slug: string
115
- categoryId: string
116
- category: Category
117
- }
118
- interface Category {
119
- id: string
120
- type: number
121
- name: string
122
- slug: string
123
- created: string
124
- }
125
- interface NotesItem {
126
- id: string
127
- created: string
128
- title: string
129
- mood: string
130
- weather: string
131
- nid: number
132
- bookmark: boolean
133
- }