@verbatims/sdk 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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -0
  3. package/dist/client.d.ts +35 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +156 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +26 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +51 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +22 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +27 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/pagination.d.ts +9 -0
  16. package/dist/pagination.d.ts.map +1 -0
  17. package/dist/pagination.js +16 -0
  18. package/dist/pagination.js.map +1 -0
  19. package/dist/resources/authors.d.ts +145 -0
  20. package/dist/resources/authors.d.ts.map +1 -0
  21. package/dist/resources/authors.js +48 -0
  22. package/dist/resources/authors.js.map +1 -0
  23. package/dist/resources/collections.d.ts +57 -0
  24. package/dist/resources/collections.d.ts.map +1 -0
  25. package/dist/resources/collections.js +32 -0
  26. package/dist/resources/collections.js.map +1 -0
  27. package/dist/resources/index.d.ts +7 -0
  28. package/dist/resources/index.d.ts.map +1 -0
  29. package/dist/resources/index.js +7 -0
  30. package/dist/resources/index.js.map +1 -0
  31. package/dist/resources/quotes.d.ts +226 -0
  32. package/dist/resources/quotes.d.ts.map +1 -0
  33. package/dist/resources/quotes.js +69 -0
  34. package/dist/resources/quotes.js.map +1 -0
  35. package/dist/resources/references.d.ts +135 -0
  36. package/dist/resources/references.d.ts.map +1 -0
  37. package/dist/resources/references.js +46 -0
  38. package/dist/resources/references.js.map +1 -0
  39. package/dist/resources/search.d.ts +36 -0
  40. package/dist/resources/search.d.ts.map +1 -0
  41. package/dist/resources/search.js +27 -0
  42. package/dist/resources/search.js.map +1 -0
  43. package/dist/resources/tags.d.ts +39 -0
  44. package/dist/resources/tags.d.ts.map +1 -0
  45. package/dist/resources/tags.js +26 -0
  46. package/dist/resources/tags.js.map +1 -0
  47. package/dist/types.d.ts +203 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +23 -0
  50. package/dist/types.js.map +1 -0
  51. package/nuxt/composables.ts +31 -0
  52. package/nuxt/module.ts +31 -0
  53. package/package.json +85 -0
  54. package/src/__tests__/client.test.ts +304 -0
  55. package/src/__tests__/errors.test.ts +85 -0
  56. package/src/__tests__/pagination.test.ts +100 -0
  57. package/src/client.ts +213 -0
  58. package/src/errors.ts +54 -0
  59. package/src/index.ts +58 -0
  60. package/src/pagination.ts +25 -0
  61. package/src/resources/__tests__/resources.test.ts +386 -0
  62. package/src/resources/authors.ts +58 -0
  63. package/src/resources/collections.ts +45 -0
  64. package/src/resources/index.ts +6 -0
  65. package/src/resources/quotes.ts +80 -0
  66. package/src/resources/references.ts +56 -0
  67. package/src/resources/search.ts +34 -0
  68. package/src/resources/tags.ts +32 -0
  69. package/src/types.ts +221 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/resources/references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAA;AAEF,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAA;AAC/E,MAAM,6BAA6B,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;AAIxE,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,MAA6B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAiC,EAAE,EAAE,2BAA2B,CAAC,CAAA;IACnH,CAAC;IAED,QAAQ,CAAC,MAA6B;QACpC,OAAO,QAAQ,CAAgB,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAA;IAChF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAyB;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAA;IACjF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAyB;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,6BAA6B,CAAC,CAAA;IACtF,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod/v4';
2
+ import type { VerbatimsClient } from '../client';
3
+ import type { SearchParams } from '../types';
4
+ declare const searchResultSchema: z.ZodObject<{
5
+ id: z.ZodNumber;
6
+ type: z.ZodString;
7
+ name: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ match: z.ZodOptional<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ type SearchResultItem = z.infer<typeof searchResultSchema>;
12
+ export declare class SearchResource {
13
+ private client;
14
+ constructor(client: VerbatimsClient);
15
+ query(params: SearchParams): Promise<{
16
+ success: true;
17
+ data?: {
18
+ id: number;
19
+ type: string;
20
+ name: string;
21
+ description?: string | undefined;
22
+ match?: string | undefined;
23
+ }[] | undefined;
24
+ message?: string | undefined;
25
+ pagination?: {
26
+ page: number;
27
+ limit: number;
28
+ total: number;
29
+ totalPages: number;
30
+ hasMore: boolean;
31
+ } | undefined;
32
+ }>;
33
+ paginate(params: SearchParams): AsyncGenerator<SearchResultItem>;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,QAAA,MAAM,kBAAkB;;;;;;iBAMtB,CAAA;AAEF,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAI1D,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAErC,KAAK,CAAC,MAAM,EAAE,YAAY;;;;;;;;;;;;;;;;;;IAIhC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC,gBAAgB,CAAC;CAQjE"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod/v4';
2
+ import { apiResponseSchema } from '../types';
3
+ import { paginate } from '../pagination';
4
+ const searchResultSchema = z.object({
5
+ id: z.number(),
6
+ type: z.string(),
7
+ name: z.string(),
8
+ description: z.string().optional(),
9
+ match: z.string().optional(),
10
+ });
11
+ const searchResponseSchema = apiResponseSchema(z.array(searchResultSchema));
12
+ export class SearchResource {
13
+ client;
14
+ constructor(client) {
15
+ this.client = client;
16
+ }
17
+ async query(params) {
18
+ return this.client.get('/search', { params: params }, searchResponseSchema);
19
+ }
20
+ paginate(params) {
21
+ return paginate((page) => this.query({ ...params, page }).then(r => ({
22
+ data: r.data,
23
+ pagination: r.pagination,
24
+ })));
25
+ }
26
+ }
27
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/resources/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAIF,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;AAE3E,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,KAAK,CAAC,KAAK,CAAC,MAAoB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAA4C,EAAE,EAAE,oBAAoB,CAAC,CAAA;IACnH,CAAC;IAED,QAAQ,CAAC,MAAoB;QAC3B,OAAO,QAAQ,CAAmB,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod/v4';
2
+ import type { VerbatimsClient } from '../client';
3
+ declare const tagSchema: z.ZodObject<{
4
+ id: z.ZodNumber;
5
+ name: z.ZodString;
6
+ color: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7
+ usage_count: z.ZodOptional<z.ZodNumber>;
8
+ }, z.core.$strip>;
9
+ type TagItem = z.infer<typeof tagSchema>;
10
+ export declare class TagsResource {
11
+ private client;
12
+ constructor(client: VerbatimsClient);
13
+ list(params?: {
14
+ page?: number;
15
+ limit?: number;
16
+ }): Promise<{
17
+ success: true;
18
+ data?: {
19
+ id: number;
20
+ name: string;
21
+ color?: string | null | undefined;
22
+ usage_count?: number | undefined;
23
+ }[] | undefined;
24
+ message?: string | undefined;
25
+ pagination?: {
26
+ page: number;
27
+ limit: number;
28
+ total: number;
29
+ totalPages: number;
30
+ hasMore: boolean;
31
+ } | undefined;
32
+ }>;
33
+ paginate(params?: {
34
+ page?: number;
35
+ limit?: number;
36
+ }): AsyncGenerator<TagItem>;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/resources/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAIhD,QAAA,MAAM,SAAS;;;;;iBAKb,CAAA;AAEF,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAIxC,qBAAa,YAAY;IACX,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAErC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;IAIrD,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC,OAAO,CAAC;CAQ9E"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod/v4';
2
+ import { apiResponseSchema } from '../types';
3
+ import { paginate } from '../pagination';
4
+ const tagSchema = z.object({
5
+ id: z.number(),
6
+ name: z.string(),
7
+ color: z.string().nullable().optional(),
8
+ usage_count: z.number().optional(),
9
+ });
10
+ const tagListResponseSchema = apiResponseSchema(z.array(tagSchema));
11
+ export class TagsResource {
12
+ client;
13
+ constructor(client) {
14
+ this.client = client;
15
+ }
16
+ async list(params) {
17
+ return this.client.get('/tags', { params: params }, tagListResponseSchema);
18
+ }
19
+ paginate(params) {
20
+ return paginate((page) => this.list({ ...params, page }).then(r => ({
21
+ data: r.data,
22
+ pagination: r.pagination,
23
+ })));
24
+ }
25
+ }
26
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/resources/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAIF,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;AAEnE,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,MAA0C;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAiC,EAAE,EAAE,qBAAqB,CAAC,CAAA;IACvG,CAAC;IAED,QAAQ,CAAC,MAA0C;QACjD,OAAO,QAAQ,CAAU,CAAC,IAAI,EAAE,EAAE,CAChC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,203 @@
1
+ import { z } from 'zod/v4';
2
+ export declare const paginationMetaSchema: z.ZodObject<{
3
+ page: z.ZodNumber;
4
+ limit: z.ZodNumber;
5
+ total: z.ZodNumber;
6
+ totalPages: z.ZodNumber;
7
+ hasMore: z.ZodBoolean;
8
+ }, z.core.$strip>;
9
+ export declare function apiResponseSchema<T extends z.ZodTypeAny>(dataSchema: T): z.ZodObject<{
10
+ success: z.ZodLiteral<true>;
11
+ data: z.ZodOptional<T>;
12
+ message: z.ZodOptional<z.ZodString>;
13
+ pagination: z.ZodOptional<z.ZodObject<{
14
+ page: z.ZodNumber;
15
+ limit: z.ZodNumber;
16
+ total: z.ZodNumber;
17
+ totalPages: z.ZodNumber;
18
+ hasMore: z.ZodBoolean;
19
+ }, z.core.$strip>>;
20
+ }, z.core.$strip>;
21
+ export declare const errorResponseSchema: z.ZodObject<{
22
+ success: z.ZodLiteral<false>;
23
+ message: z.ZodOptional<z.ZodString>;
24
+ errors: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ }, z.core.$strip>;
26
+ export type PaginationMeta = z.infer<typeof paginationMetaSchema>;
27
+ export interface ApiResponse<T = unknown> {
28
+ success: boolean;
29
+ data?: T;
30
+ message?: string;
31
+ pagination?: PaginationMeta;
32
+ }
33
+ export interface QuoteAuthor {
34
+ id: number;
35
+ name: string;
36
+ is_fictional?: boolean;
37
+ image_url?: string | null;
38
+ description?: string | null;
39
+ }
40
+ export interface QuoteReferenceInfo {
41
+ id: number;
42
+ name: string;
43
+ primary_type?: string;
44
+ }
45
+ export interface QuoteWithRelations {
46
+ id: number;
47
+ name: string;
48
+ language: string;
49
+ author_id?: number;
50
+ reference_id?: number;
51
+ status: string;
52
+ views_count: number;
53
+ likes_count: number;
54
+ shares_count: number;
55
+ is_featured?: boolean;
56
+ created_at: string;
57
+ updated_at: string;
58
+ author?: QuoteAuthor;
59
+ reference?: QuoteReferenceInfo;
60
+ tags?: Array<{
61
+ id?: number;
62
+ name: string;
63
+ color?: string | null;
64
+ }>;
65
+ }
66
+ export interface Author {
67
+ id: number;
68
+ name: string;
69
+ is_fictional?: boolean;
70
+ image_url?: string | null;
71
+ job?: string | null;
72
+ description?: string | null;
73
+ birth_date?: string | null;
74
+ birth_location?: string | null;
75
+ death_date?: string | null;
76
+ death_location?: string | null;
77
+ views_count: number;
78
+ likes_count: number;
79
+ shares_count: number;
80
+ quotes_count?: number;
81
+ created_at: string;
82
+ updated_at: string;
83
+ }
84
+ export interface QuoteReference {
85
+ id: number;
86
+ name: string;
87
+ primary_type: string;
88
+ secondary_type?: string | null;
89
+ original_language?: string;
90
+ release_date?: string | null;
91
+ description?: string | null;
92
+ image_url?: string | null;
93
+ views_count: number;
94
+ likes_count: number;
95
+ shares_count: number;
96
+ quotes_count?: number;
97
+ created_at: string;
98
+ updated_at: string;
99
+ }
100
+ export interface ListQuotesParams {
101
+ page?: number;
102
+ limit?: number;
103
+ language?: string;
104
+ author_id?: number;
105
+ reference_id?: number;
106
+ search?: string;
107
+ tag?: string;
108
+ sort_by?: string;
109
+ sort_order?: 'asc' | 'desc';
110
+ }
111
+ export interface ListAuthorsParams {
112
+ page?: number;
113
+ limit?: number;
114
+ search?: string;
115
+ }
116
+ export interface ListReferencesParams {
117
+ page?: number;
118
+ limit?: number;
119
+ search?: string;
120
+ type?: string;
121
+ }
122
+ export interface SearchParams {
123
+ q: string;
124
+ type?: 'quotes' | 'authors' | 'references';
125
+ page?: number;
126
+ limit?: number;
127
+ }
128
+ export interface CreateQuoteData {
129
+ name: string;
130
+ language?: string;
131
+ author_id?: number;
132
+ reference_id?: number;
133
+ new_author?: {
134
+ name: string;
135
+ is_fictional?: boolean;
136
+ job?: string | null;
137
+ description?: string | null;
138
+ };
139
+ new_reference?: {
140
+ name: string;
141
+ primary_type: string;
142
+ original_language?: string;
143
+ description?: string | null;
144
+ release_date?: string | null;
145
+ };
146
+ tags?: number[];
147
+ }
148
+ export interface UpdateQuoteData {
149
+ name?: string;
150
+ language?: string;
151
+ author_id?: number | null;
152
+ reference_id?: number | null;
153
+ }
154
+ export interface CreateAuthorData {
155
+ name: string;
156
+ is_fictional?: boolean;
157
+ job?: string | null;
158
+ description?: string | null;
159
+ birth_date?: string | null;
160
+ birth_location?: string | null;
161
+ death_date?: string | null;
162
+ death_location?: string | null;
163
+ image_url?: string | null;
164
+ socials?: Record<string, string> | null;
165
+ }
166
+ export interface UpdateAuthorData {
167
+ name?: string;
168
+ is_fictional?: boolean;
169
+ job?: string | null;
170
+ description?: string | null;
171
+ birth_date?: string | null;
172
+ birth_location?: string | null;
173
+ death_date?: string | null;
174
+ death_location?: string | null;
175
+ image_url?: string | null;
176
+ socials?: Record<string, string> | null;
177
+ }
178
+ export interface CreateReferenceData {
179
+ name: string;
180
+ primary_type: string;
181
+ secondary_type?: string | null;
182
+ description?: string | null;
183
+ release_date?: string | null;
184
+ original_language?: string;
185
+ image_url?: string | null;
186
+ urls?: Record<string, string> | null;
187
+ }
188
+ export interface UpdateReferenceData {
189
+ name?: string;
190
+ primary_type?: string;
191
+ secondary_type?: string | null;
192
+ description?: string | null;
193
+ release_date?: string | null;
194
+ original_language?: string;
195
+ image_url?: string | null;
196
+ urls?: Record<string, string> | null;
197
+ }
198
+ export interface CreateCollectionData {
199
+ name: string;
200
+ description?: string | null;
201
+ is_public?: boolean;
202
+ }
203
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod/v4';
2
+ // --- Zod schemas for response validation ---
3
+ export const paginationMetaSchema = z.object({
4
+ page: z.number(),
5
+ limit: z.number(),
6
+ total: z.number(),
7
+ totalPages: z.number(),
8
+ hasMore: z.boolean(),
9
+ });
10
+ export function apiResponseSchema(dataSchema) {
11
+ return z.object({
12
+ success: z.literal(true),
13
+ data: dataSchema.optional(),
14
+ message: z.string().optional(),
15
+ pagination: paginationMetaSchema.optional(),
16
+ });
17
+ }
18
+ export const errorResponseSchema = z.object({
19
+ success: z.literal(false),
20
+ message: z.string().optional(),
21
+ errors: z.array(z.string()).optional(),
22
+ });
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,8CAA8C;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAA;AAEF,MAAM,UAAU,iBAAiB,CAAyB,UAAa;IACrE,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,oBAAoB,CAAC,QAAQ,EAAE;KAC5C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { VerbatimsClient } from '../src/index'
2
+ import type { ListQuotesParams, SearchParams } from '../src/types'
3
+
4
+ let _client: VerbatimsClient | null = null
5
+
6
+ export function useVerbatimsClient(): VerbatimsClient {
7
+ if (_client) return _client
8
+
9
+ const config = useRuntimeConfig()
10
+ const apiKey = config.verbatimsApiKey as string
11
+ const baseUrl = (config.public as Record<string, unknown>)?.verbatimsApiBaseUrl as string ?? '/api/v1'
12
+
13
+ _client = new VerbatimsClient(apiKey, { baseUrl })
14
+ return _client
15
+ }
16
+
17
+ export async function useQuotes(filters?: ListQuotesParams) {
18
+ const client = useVerbatimsClient()
19
+ return client.quotes.list(filters)
20
+ }
21
+
22
+ export async function useSearchQuotes(params: SearchParams) {
23
+ const client = useVerbatimsClient()
24
+ return client.search.query(params)
25
+ }
26
+
27
+ if (import.meta.hot) {
28
+ import.meta.hot.on('vite:beforeFullReload', () => {
29
+ _client = null
30
+ })
31
+ }
package/nuxt/module.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { defineNuxtModule, addImportsSources } from 'nuxt/kit'
2
+ import { fileURLToPath } from 'node:url'
3
+
4
+ export default defineNuxtModule({
5
+ meta: {
6
+ name: '@verbatims/sdk/nuxt',
7
+ configKey: 'verbatims',
8
+ },
9
+ defaults: {
10
+ apiKey: '',
11
+ apiBaseUrl: '/api/v1',
12
+ },
13
+ setup(options, nuxt) {
14
+ nuxt.options.runtimeConfig.verbatimsApiKey = options.apiKey
15
+ nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {}
16
+ ;(nuxt.options.runtimeConfig.public as Record<string, unknown>).verbatimsApiBaseUrl = options.apiBaseUrl
17
+
18
+ const composablesPath = fileURLToPath(new URL('./composables.ts', import.meta.url))
19
+
20
+ addImportsSources([
21
+ {
22
+ from: composablesPath,
23
+ imports: [
24
+ 'useVerbatimsClient',
25
+ 'useQuotes',
26
+ 'useSearchQuotes',
27
+ ],
28
+ },
29
+ ])
30
+ },
31
+ })
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@verbatims/sdk",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript SDK for the Verbatims quotes API",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./src/index.ts",
9
+ "types": "./src/index.ts"
10
+ },
11
+ "./nuxt": {
12
+ "import": "./nuxt/module.ts",
13
+ "types": "./nuxt/module.ts"
14
+ },
15
+ "./nuxt/module": {
16
+ "import": "./nuxt/module.ts",
17
+ "types": "./nuxt/module.ts"
18
+ },
19
+ "./nuxt/composables": {
20
+ "import": "./nuxt/composables.ts",
21
+ "types": "./nuxt/composables.ts"
22
+ }
23
+ },
24
+ "files": [
25
+ "src",
26
+ "nuxt",
27
+ "dist",
28
+ "README.md",
29
+ "LICENSE"
30
+ ],
31
+ "scripts": {
32
+ "dev": "nuxt dev",
33
+ "build": "tsc",
34
+ "build:demo": "nuxt build",
35
+ "typecheck": "tsc --noEmit",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest",
38
+ "preview": "nuxt preview",
39
+ "prepublishOnly": "tsc"
40
+ },
41
+ "dependencies": {
42
+ "zod": "^4.4.3"
43
+ },
44
+ "peerDependencies": {
45
+ "nuxt": "^4.0.0"
46
+ },
47
+ "peerDependenciesMeta": {
48
+ "nuxt": {
49
+ "optional": true
50
+ }
51
+ },
52
+ "devDependencies": {
53
+ "@iconify-json/lucide": "^1.2.118",
54
+ "@iconify-json/radix-icons": "^1.2.6",
55
+ "@iconify-json/tabler": "^1.2.37",
56
+ "@nuxtjs/google-fonts": "^3.2.0",
57
+ "@semantic-release/changelog": "^6.0.3",
58
+ "@semantic-release/git": "^10.0.1",
59
+ "@una-ui/nuxt": "^1.0.0-alpha.22",
60
+ "@unocss/nuxt": "^66.7.5",
61
+ "conventional-changelog-conventionalcommits": "^10.2.1",
62
+ "nuxt": "^4.5.0",
63
+ "semantic-release": "^24.2.9",
64
+ "shiki": "^4.3.1",
65
+ "typescript": "^5.9.0",
66
+ "vitest": "^4.1.10"
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "git+https://github.com/rootasjey/verbatims-sdk.git"
71
+ },
72
+ "keywords": [
73
+ "verbatims",
74
+ "quotes",
75
+ "api",
76
+ "sdk"
77
+ ],
78
+ "overrides": {
79
+ "@semantic-release/npm": "^13.1.5"
80
+ },
81
+ "publishConfig": {
82
+ "access": "public"
83
+ },
84
+ "license": "MIT"
85
+ }