@timbenniks/contentstack-platform-sdk 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.
- package/dist/auth/index.cjs +607 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.d.cts +108 -0
- package/dist/auth/index.d.ts +108 -0
- package/dist/auth/index.mjs +25 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/brandkit/index.cjs +525 -0
- package/dist/brandkit/index.cjs.map +1 -0
- package/dist/brandkit/index.d.cts +95 -0
- package/dist/brandkit/index.d.ts +95 -0
- package/dist/brandkit/index.mjs +11 -0
- package/dist/brandkit/index.mjs.map +1 -0
- package/dist/chunk-3C6J2BDB.mjs +84 -0
- package/dist/chunk-3C6J2BDB.mjs.map +1 -0
- package/dist/chunk-3KE63N3I.mjs +64 -0
- package/dist/chunk-3KE63N3I.mjs.map +1 -0
- package/dist/chunk-4CJ4IVPJ.mjs +212 -0
- package/dist/chunk-4CJ4IVPJ.mjs.map +1 -0
- package/dist/chunk-4JFUI7MJ.mjs +368 -0
- package/dist/chunk-4JFUI7MJ.mjs.map +1 -0
- package/dist/chunk-7VFGD32I.mjs +26 -0
- package/dist/chunk-7VFGD32I.mjs.map +1 -0
- package/dist/chunk-ARPJDW3A.mjs +44 -0
- package/dist/chunk-ARPJDW3A.mjs.map +1 -0
- package/dist/chunk-AVJHCFRK.mjs +52 -0
- package/dist/chunk-AVJHCFRK.mjs.map +1 -0
- package/dist/chunk-BK2IBTQS.mjs +131 -0
- package/dist/chunk-BK2IBTQS.mjs.map +1 -0
- package/dist/chunk-BUZ6CQHE.mjs +75 -0
- package/dist/chunk-BUZ6CQHE.mjs.map +1 -0
- package/dist/chunk-CKMAOWBQ.mjs +379 -0
- package/dist/chunk-CKMAOWBQ.mjs.map +1 -0
- package/dist/chunk-DJQLN4TR.mjs +1 -0
- package/dist/chunk-DJQLN4TR.mjs.map +1 -0
- package/dist/chunk-DMERADWM.mjs +67 -0
- package/dist/chunk-DMERADWM.mjs.map +1 -0
- package/dist/chunk-EREPKWTW.mjs +926 -0
- package/dist/chunk-EREPKWTW.mjs.map +1 -0
- package/dist/chunk-FQP4PB5X.mjs +88 -0
- package/dist/chunk-FQP4PB5X.mjs.map +1 -0
- package/dist/chunk-GNPQJBFX.mjs +144 -0
- package/dist/chunk-GNPQJBFX.mjs.map +1 -0
- package/dist/chunk-GOSB24M6.mjs +87 -0
- package/dist/chunk-GOSB24M6.mjs.map +1 -0
- package/dist/chunk-JL2E3EOT.mjs +255 -0
- package/dist/chunk-JL2E3EOT.mjs.map +1 -0
- package/dist/chunk-JYGZBKTH.mjs +222 -0
- package/dist/chunk-JYGZBKTH.mjs.map +1 -0
- package/dist/chunk-JZE2W7VW.mjs +52 -0
- package/dist/chunk-JZE2W7VW.mjs.map +1 -0
- package/dist/chunk-K76DKSHJ.mjs +18 -0
- package/dist/chunk-K76DKSHJ.mjs.map +1 -0
- package/dist/chunk-KLVIROVU.mjs +232 -0
- package/dist/chunk-KLVIROVU.mjs.map +1 -0
- package/dist/chunk-LPVVA5J3.mjs +18 -0
- package/dist/chunk-LPVVA5J3.mjs.map +1 -0
- package/dist/chunk-NKLOZ5VI.mjs +112 -0
- package/dist/chunk-NKLOZ5VI.mjs.map +1 -0
- package/dist/chunk-QGA4WBDC.mjs +7 -0
- package/dist/chunk-QGA4WBDC.mjs.map +1 -0
- package/dist/chunk-QW7TVYOA.mjs +56 -0
- package/dist/chunk-QW7TVYOA.mjs.map +1 -0
- package/dist/chunk-SU5QEKYW.mjs +83 -0
- package/dist/chunk-SU5QEKYW.mjs.map +1 -0
- package/dist/chunk-T5A2E2RI.mjs +654 -0
- package/dist/chunk-T5A2E2RI.mjs.map +1 -0
- package/dist/chunk-T5OIJQK7.mjs +116 -0
- package/dist/chunk-T5OIJQK7.mjs.map +1 -0
- package/dist/chunk-VW7DD6HV.mjs +253 -0
- package/dist/chunk-VW7DD6HV.mjs.map +1 -0
- package/dist/chunk-XH7NLHGW.mjs +133 -0
- package/dist/chunk-XH7NLHGW.mjs.map +1 -0
- package/dist/client-DJ5haQGd.d.cts +22 -0
- package/dist/client-DwVGVSQz.d.ts +22 -0
- package/dist/cma/index.cjs +1349 -0
- package/dist/cma/index.cjs.map +1 -0
- package/dist/cma/index.d.cts +22 -0
- package/dist/cma/index.d.ts +22 -0
- package/dist/cma/index.mjs +70 -0
- package/dist/cma/index.mjs.map +1 -0
- package/dist/errors-CAw-IRCP.d.cts +65 -0
- package/dist/errors-CAw-IRCP.d.ts +65 -0
- package/dist/generative-ai/index.cjs +401 -0
- package/dist/generative-ai/index.cjs.map +1 -0
- package/dist/generative-ai/index.d.cts +31 -0
- package/dist/generative-ai/index.d.ts +31 -0
- package/dist/generative-ai/index.mjs +10 -0
- package/dist/generative-ai/index.mjs.map +1 -0
- package/dist/images/index.cjs +185 -0
- package/dist/images/index.cjs.map +1 -0
- package/dist/images/index.d.cts +27 -0
- package/dist/images/index.d.ts +27 -0
- package/dist/images/index.mjs +8 -0
- package/dist/images/index.mjs.map +1 -0
- package/dist/index.cjs +2909 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +30 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.mjs +153 -0
- package/dist/index.mjs.map +1 -0
- package/dist/knowledge-vault/index.cjs +413 -0
- package/dist/knowledge-vault/index.cjs.map +1 -0
- package/dist/knowledge-vault/index.d.cts +49 -0
- package/dist/knowledge-vault/index.d.ts +49 -0
- package/dist/knowledge-vault/index.mjs +10 -0
- package/dist/knowledge-vault/index.mjs.map +1 -0
- package/dist/launch/index.cjs +624 -0
- package/dist/launch/index.cjs.map +1 -0
- package/dist/launch/index.d.cts +169 -0
- package/dist/launch/index.d.ts +169 -0
- package/dist/launch/index.mjs +11 -0
- package/dist/launch/index.mjs.map +1 -0
- package/dist/react/auth/index.cjs +113 -0
- package/dist/react/auth/index.cjs.map +1 -0
- package/dist/react/auth/index.d.cts +33 -0
- package/dist/react/auth/index.d.ts +33 -0
- package/dist/react/auth/index.mjs +13 -0
- package/dist/react/auth/index.mjs.map +1 -0
- package/dist/react/content/index.cjs +113 -0
- package/dist/react/content/index.cjs.map +1 -0
- package/dist/react/content/index.d.cts +25 -0
- package/dist/react/content/index.d.ts +25 -0
- package/dist/react/content/index.mjs +7 -0
- package/dist/react/content/index.mjs.map +1 -0
- package/dist/react/hooks/index.cjs +2097 -0
- package/dist/react/hooks/index.cjs.map +1 -0
- package/dist/react/hooks/index.d.cts +77 -0
- package/dist/react/hooks/index.d.ts +77 -0
- package/dist/react/hooks/index.mjs +46 -0
- package/dist/react/hooks/index.mjs.map +1 -0
- package/dist/react/index.cjs +2307 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +16 -0
- package/dist/react/index.d.ts +16 -0
- package/dist/react/index.mjs +67 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/react/provider/index.cjs +83 -0
- package/dist/react/provider/index.cjs.map +1 -0
- package/dist/react/provider/index.d.cts +30 -0
- package/dist/react/provider/index.d.ts +30 -0
- package/dist/react/provider/index.mjs +11 -0
- package/dist/react/provider/index.mjs.map +1 -0
- package/dist/regions/index.cjs +171 -0
- package/dist/regions/index.cjs.map +1 -0
- package/dist/regions/index.d.cts +55 -0
- package/dist/regions/index.d.ts +55 -0
- package/dist/regions/index.mjs +13 -0
- package/dist/regions/index.mjs.map +1 -0
- package/dist/request-builders-BxeolQIw.d.ts +735 -0
- package/dist/request-builders-C2IG1LUo.d.cts +735 -0
- package/dist/rte/index.cjs +683 -0
- package/dist/rte/index.cjs.map +1 -0
- package/dist/rte/index.d.cts +33 -0
- package/dist/rte/index.d.ts +33 -0
- package/dist/rte/index.mjs +17 -0
- package/dist/rte/index.mjs.map +1 -0
- package/dist/server/index.cjs +917 -0
- package/dist/server/index.cjs.map +1 -0
- package/dist/server/index.d.cts +6 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.mjs +45 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/server/middleware/index.cjs +614 -0
- package/dist/server/middleware/index.cjs.map +1 -0
- package/dist/server/middleware/index.d.cts +77 -0
- package/dist/server/middleware/index.d.ts +77 -0
- package/dist/server/middleware/index.mjs +27 -0
- package/dist/server/middleware/index.mjs.map +1 -0
- package/dist/server/proxy/index.cjs +329 -0
- package/dist/server/proxy/index.cjs.map +1 -0
- package/dist/server/proxy/index.d.cts +143 -0
- package/dist/server/proxy/index.d.ts +143 -0
- package/dist/server/proxy/index.mjs +29 -0
- package/dist/server/proxy/index.mjs.map +1 -0
- package/dist/server/webhooks/index.cjs +131 -0
- package/dist/server/webhooks/index.cjs.map +1 -0
- package/dist/server/webhooks/index.d.cts +230 -0
- package/dist/server/webhooks/index.d.ts +230 -0
- package/dist/server/webhooks/index.mjs +23 -0
- package/dist/server/webhooks/index.mjs.map +1 -0
- package/dist/types-6D9VR7pT.d.cts +26 -0
- package/dist/types-AelT0rFJ.d.cts +21 -0
- package/dist/types-AelT0rFJ.d.ts +21 -0
- package/dist/types-Bu5yCgmw.d.ts +26 -0
- package/dist/types-DgixK-ll.d.cts +23 -0
- package/dist/types-DgixK-ll.d.ts +23 -0
- package/dist/types-DrMwdlH9.d.cts +245 -0
- package/dist/types-DrMwdlH9.d.ts +245 -0
- package/dist/ui/css/index.cjs +31 -0
- package/dist/ui/css/index.cjs.map +1 -0
- package/dist/ui/css/index.d.cts +15 -0
- package/dist/ui/css/index.d.ts +15 -0
- package/dist/ui/css/index.mjs +7 -0
- package/dist/ui/css/index.mjs.map +1 -0
- package/dist/ui/index.cjs +368 -0
- package/dist/ui/index.cjs.map +1 -0
- package/dist/ui/index.d.cts +4 -0
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.mjs +33 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/ui/theme/index.cjs +105 -0
- package/dist/ui/theme/index.cjs.map +1 -0
- package/dist/ui/theme/index.d.cts +33 -0
- package/dist/ui/theme/index.d.ts +33 -0
- package/dist/ui/theme/index.mjs +15 -0
- package/dist/ui/theme/index.mjs.map +1 -0
- package/dist/ui/tokens/index.cjs +286 -0
- package/dist/ui/tokens/index.cjs.map +1 -0
- package/dist/ui/tokens/index.d.cts +54 -0
- package/dist/ui/tokens/index.d.ts +54 -0
- package/dist/ui/tokens/index.mjs +17 -0
- package/dist/ui/tokens/index.mjs.map +1 -0
- package/dist/ui/tokens.css +408 -0
- package/dist/vue/auth/index.cjs +141 -0
- package/dist/vue/auth/index.cjs.map +1 -0
- package/dist/vue/auth/index.d.cts +78 -0
- package/dist/vue/auth/index.d.ts +78 -0
- package/dist/vue/auth/index.mjs +13 -0
- package/dist/vue/auth/index.mjs.map +1 -0
- package/dist/vue/composables/index.cjs +2108 -0
- package/dist/vue/composables/index.cjs.map +1 -0
- package/dist/vue/composables/index.d.cts +78 -0
- package/dist/vue/composables/index.d.ts +78 -0
- package/dist/vue/composables/index.mjs +46 -0
- package/dist/vue/composables/index.mjs.map +1 -0
- package/dist/vue/content/index.cjs +142 -0
- package/dist/vue/content/index.cjs.map +1 -0
- package/dist/vue/content/index.d.cts +47 -0
- package/dist/vue/content/index.d.ts +47 -0
- package/dist/vue/content/index.mjs +7 -0
- package/dist/vue/content/index.mjs.map +1 -0
- package/dist/vue/index.cjs +2389 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +16 -0
- package/dist/vue/index.d.ts +16 -0
- package/dist/vue/index.mjs +69 -0
- package/dist/vue/index.mjs.map +1 -0
- package/dist/vue/provider/index.cjs +97 -0
- package/dist/vue/provider/index.cjs.map +1 -0
- package/dist/vue/provider/index.d.cts +90 -0
- package/dist/vue/provider/index.d.ts +90 -0
- package/dist/vue/provider/index.mjs +13 -0
- package/dist/vue/provider/index.mjs.map +1 -0
- package/package.json +195 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { H as HttpClientConfig } from '../types-DgixK-ll.cjs';
|
|
2
|
+
import { ContentstackRegion } from '../regions/index.cjs';
|
|
3
|
+
import { C as ContentstackHttpClient } from '../client-DJ5haQGd.cjs';
|
|
4
|
+
|
|
5
|
+
interface BrandKit {
|
|
6
|
+
uid: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
created_at: string;
|
|
10
|
+
updated_at: string;
|
|
11
|
+
}
|
|
12
|
+
interface VoiceProfileSettings {
|
|
13
|
+
formality: number;
|
|
14
|
+
tone: number;
|
|
15
|
+
humor: number;
|
|
16
|
+
complexity: number;
|
|
17
|
+
}
|
|
18
|
+
interface VoiceProfile {
|
|
19
|
+
uid: string;
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
settings: VoiceProfileSettings;
|
|
23
|
+
sample_content?: string;
|
|
24
|
+
insights?: string;
|
|
25
|
+
created_at: string;
|
|
26
|
+
updated_at: string;
|
|
27
|
+
}
|
|
28
|
+
interface CreateBrandKitData {
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
}
|
|
32
|
+
interface UpdateBrandKitData {
|
|
33
|
+
name?: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
}
|
|
36
|
+
interface CreateVoiceProfileData {
|
|
37
|
+
name: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
settings: VoiceProfileSettings;
|
|
40
|
+
sample_content?: string;
|
|
41
|
+
}
|
|
42
|
+
interface UpdateVoiceProfileData {
|
|
43
|
+
name?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
settings?: VoiceProfileSettings;
|
|
46
|
+
sample_content?: string;
|
|
47
|
+
}
|
|
48
|
+
interface ListBrandKitsOptions {
|
|
49
|
+
limit?: number;
|
|
50
|
+
}
|
|
51
|
+
interface ListVoiceProfilesOptions {
|
|
52
|
+
limit?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare class BrandKitsSubClient {
|
|
56
|
+
private readonly http;
|
|
57
|
+
constructor(http: ContentstackHttpClient);
|
|
58
|
+
list(options?: ListBrandKitsOptions): AsyncIterable<BrandKit>;
|
|
59
|
+
listAll(options?: ListBrandKitsOptions): Promise<BrandKit[]>;
|
|
60
|
+
get(brandKitUid: string): Promise<BrandKit>;
|
|
61
|
+
create(data: CreateBrandKitData): Promise<BrandKit>;
|
|
62
|
+
update(brandKitUid: string, data: UpdateBrandKitData): Promise<BrandKit>;
|
|
63
|
+
delete(brandKitUid: string): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare class VoiceProfilesSubClient {
|
|
67
|
+
private readonly http;
|
|
68
|
+
constructor(http: ContentstackHttpClient);
|
|
69
|
+
list(brandKitUid: string, options?: ListVoiceProfilesOptions): AsyncIterable<VoiceProfile>;
|
|
70
|
+
listAll(brandKitUid: string, options?: ListVoiceProfilesOptions): Promise<VoiceProfile[]>;
|
|
71
|
+
get(brandKitUid: string, voiceProfileUid: string): Promise<VoiceProfile>;
|
|
72
|
+
create(brandKitUid: string, data: CreateVoiceProfileData): Promise<VoiceProfile>;
|
|
73
|
+
update(brandKitUid: string, voiceProfileUid: string, data: UpdateVoiceProfileData): Promise<VoiceProfile>;
|
|
74
|
+
delete(brandKitUid: string, voiceProfileUid: string): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
interface BrandKitClientConfig {
|
|
78
|
+
region: ContentstackRegion;
|
|
79
|
+
organizationUid: string;
|
|
80
|
+
auth: {
|
|
81
|
+
type: "oauth";
|
|
82
|
+
accessToken: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: "authtoken";
|
|
85
|
+
token: string;
|
|
86
|
+
};
|
|
87
|
+
httpOptions?: Partial<HttpClientConfig>;
|
|
88
|
+
}
|
|
89
|
+
interface BrandKitClient {
|
|
90
|
+
brandKits: BrandKitsSubClient;
|
|
91
|
+
voiceProfiles: VoiceProfilesSubClient;
|
|
92
|
+
}
|
|
93
|
+
declare function createBrandKitClient(config: BrandKitClientConfig): BrandKitClient;
|
|
94
|
+
|
|
95
|
+
export { type BrandKit, type BrandKitClient, type BrandKitClientConfig, type CreateBrandKitData, type CreateVoiceProfileData, type ListBrandKitsOptions, type ListVoiceProfilesOptions, type UpdateBrandKitData, type UpdateVoiceProfileData, type VoiceProfile, type VoiceProfileSettings, createBrandKitClient };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { H as HttpClientConfig } from '../types-DgixK-ll.js';
|
|
2
|
+
import { ContentstackRegion } from '../regions/index.js';
|
|
3
|
+
import { C as ContentstackHttpClient } from '../client-DwVGVSQz.js';
|
|
4
|
+
|
|
5
|
+
interface BrandKit {
|
|
6
|
+
uid: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
created_at: string;
|
|
10
|
+
updated_at: string;
|
|
11
|
+
}
|
|
12
|
+
interface VoiceProfileSettings {
|
|
13
|
+
formality: number;
|
|
14
|
+
tone: number;
|
|
15
|
+
humor: number;
|
|
16
|
+
complexity: number;
|
|
17
|
+
}
|
|
18
|
+
interface VoiceProfile {
|
|
19
|
+
uid: string;
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
settings: VoiceProfileSettings;
|
|
23
|
+
sample_content?: string;
|
|
24
|
+
insights?: string;
|
|
25
|
+
created_at: string;
|
|
26
|
+
updated_at: string;
|
|
27
|
+
}
|
|
28
|
+
interface CreateBrandKitData {
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
}
|
|
32
|
+
interface UpdateBrandKitData {
|
|
33
|
+
name?: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
}
|
|
36
|
+
interface CreateVoiceProfileData {
|
|
37
|
+
name: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
settings: VoiceProfileSettings;
|
|
40
|
+
sample_content?: string;
|
|
41
|
+
}
|
|
42
|
+
interface UpdateVoiceProfileData {
|
|
43
|
+
name?: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
settings?: VoiceProfileSettings;
|
|
46
|
+
sample_content?: string;
|
|
47
|
+
}
|
|
48
|
+
interface ListBrandKitsOptions {
|
|
49
|
+
limit?: number;
|
|
50
|
+
}
|
|
51
|
+
interface ListVoiceProfilesOptions {
|
|
52
|
+
limit?: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare class BrandKitsSubClient {
|
|
56
|
+
private readonly http;
|
|
57
|
+
constructor(http: ContentstackHttpClient);
|
|
58
|
+
list(options?: ListBrandKitsOptions): AsyncIterable<BrandKit>;
|
|
59
|
+
listAll(options?: ListBrandKitsOptions): Promise<BrandKit[]>;
|
|
60
|
+
get(brandKitUid: string): Promise<BrandKit>;
|
|
61
|
+
create(data: CreateBrandKitData): Promise<BrandKit>;
|
|
62
|
+
update(brandKitUid: string, data: UpdateBrandKitData): Promise<BrandKit>;
|
|
63
|
+
delete(brandKitUid: string): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare class VoiceProfilesSubClient {
|
|
67
|
+
private readonly http;
|
|
68
|
+
constructor(http: ContentstackHttpClient);
|
|
69
|
+
list(brandKitUid: string, options?: ListVoiceProfilesOptions): AsyncIterable<VoiceProfile>;
|
|
70
|
+
listAll(brandKitUid: string, options?: ListVoiceProfilesOptions): Promise<VoiceProfile[]>;
|
|
71
|
+
get(brandKitUid: string, voiceProfileUid: string): Promise<VoiceProfile>;
|
|
72
|
+
create(brandKitUid: string, data: CreateVoiceProfileData): Promise<VoiceProfile>;
|
|
73
|
+
update(brandKitUid: string, voiceProfileUid: string, data: UpdateVoiceProfileData): Promise<VoiceProfile>;
|
|
74
|
+
delete(brandKitUid: string, voiceProfileUid: string): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
interface BrandKitClientConfig {
|
|
78
|
+
region: ContentstackRegion;
|
|
79
|
+
organizationUid: string;
|
|
80
|
+
auth: {
|
|
81
|
+
type: "oauth";
|
|
82
|
+
accessToken: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: "authtoken";
|
|
85
|
+
token: string;
|
|
86
|
+
};
|
|
87
|
+
httpOptions?: Partial<HttpClientConfig>;
|
|
88
|
+
}
|
|
89
|
+
interface BrandKitClient {
|
|
90
|
+
brandKits: BrandKitsSubClient;
|
|
91
|
+
voiceProfiles: VoiceProfilesSubClient;
|
|
92
|
+
}
|
|
93
|
+
declare function createBrandKitClient(config: BrandKitClientConfig): BrandKitClient;
|
|
94
|
+
|
|
95
|
+
export { type BrandKit, type BrandKitClient, type BrandKitClientConfig, type CreateBrandKitData, type CreateVoiceProfileData, type ListBrandKitsOptions, type ListVoiceProfilesOptions, type UpdateBrandKitData, type UpdateVoiceProfileData, type VoiceProfile, type VoiceProfileSettings, createBrandKitClient };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createBrandKitClient
|
|
3
|
+
} from "../chunk-XH7NLHGW.mjs";
|
|
4
|
+
import "../chunk-JZE2W7VW.mjs";
|
|
5
|
+
import "../chunk-4CJ4IVPJ.mjs";
|
|
6
|
+
import "../chunk-BK2IBTQS.mjs";
|
|
7
|
+
import "../chunk-DMERADWM.mjs";
|
|
8
|
+
export {
|
|
9
|
+
createBrandKitClient
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// src/react/auth/useContentstackUser.ts
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
function useContentstackUser() {
|
|
4
|
+
const [user, setUser] = useState(null);
|
|
5
|
+
const [loading, setLoading] = useState(true);
|
|
6
|
+
const fetchSession = useCallback(async () => {
|
|
7
|
+
setLoading(true);
|
|
8
|
+
try {
|
|
9
|
+
const res = await fetch("/api/auth/session");
|
|
10
|
+
if (!res.ok) {
|
|
11
|
+
setUser(null);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const data = await res.json();
|
|
15
|
+
if (data?.user) {
|
|
16
|
+
setUser({
|
|
17
|
+
uid: data.user.uid ?? data.user.id ?? "",
|
|
18
|
+
email: data.user.email ?? "",
|
|
19
|
+
firstName: data.user.firstName ?? data.user.name?.split(" ")[0],
|
|
20
|
+
lastName: data.user.lastName ?? data.user.name?.split(" ").slice(1).join(" "),
|
|
21
|
+
username: data.user.username,
|
|
22
|
+
profileImage: data.user.profileImage ?? data.user.image
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
setUser(null);
|
|
26
|
+
}
|
|
27
|
+
} catch {
|
|
28
|
+
setUser(null);
|
|
29
|
+
} finally {
|
|
30
|
+
setLoading(false);
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
fetchSession();
|
|
35
|
+
}, [fetchSession]);
|
|
36
|
+
return { user, loading, isAuthenticated: user !== null };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/react/auth/ContentstackLoginButton.tsx
|
|
40
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
41
|
+
function ContentstackLoginButton({
|
|
42
|
+
redirectTo,
|
|
43
|
+
className,
|
|
44
|
+
children = "Sign in with Contentstack"
|
|
45
|
+
}) {
|
|
46
|
+
return /* @__PURE__ */ jsxs("form", { action: "/api/auth/signin/contentstack", method: "POST", children: [
|
|
47
|
+
redirectTo && /* @__PURE__ */ jsx("input", { type: "hidden", name: "callbackUrl", value: redirectTo }),
|
|
48
|
+
/* @__PURE__ */ jsx("button", { type: "submit", className, children })
|
|
49
|
+
] });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/react/auth/ContentstackLogoutButton.tsx
|
|
53
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
54
|
+
function ContentstackLogoutButton({
|
|
55
|
+
redirectTo,
|
|
56
|
+
className,
|
|
57
|
+
children = "Sign out"
|
|
58
|
+
}) {
|
|
59
|
+
return /* @__PURE__ */ jsxs2("form", { action: "/api/auth/signout", method: "POST", children: [
|
|
60
|
+
redirectTo && /* @__PURE__ */ jsx2("input", { type: "hidden", name: "callbackUrl", value: redirectTo }),
|
|
61
|
+
/* @__PURE__ */ jsx2("button", { type: "submit", className, children })
|
|
62
|
+
] });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/react/auth/ContentstackAuthGuard.tsx
|
|
66
|
+
import { Fragment, jsx as jsx3 } from "react/jsx-runtime";
|
|
67
|
+
function ContentstackAuthGuard({
|
|
68
|
+
children,
|
|
69
|
+
fallback,
|
|
70
|
+
loadingFallback = null
|
|
71
|
+
}) {
|
|
72
|
+
const { isAuthenticated, loading } = useContentstackUser();
|
|
73
|
+
if (loading) return /* @__PURE__ */ jsx3(Fragment, { children: loadingFallback });
|
|
74
|
+
if (isAuthenticated) return /* @__PURE__ */ jsx3(Fragment, { children });
|
|
75
|
+
return /* @__PURE__ */ jsx3(Fragment, { children: fallback ?? /* @__PURE__ */ jsx3(ContentstackLoginButton, {}) });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export {
|
|
79
|
+
useContentstackUser,
|
|
80
|
+
ContentstackLoginButton,
|
|
81
|
+
ContentstackLogoutButton,
|
|
82
|
+
ContentstackAuthGuard
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=chunk-3C6J2BDB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/auth/useContentstackUser.ts","../src/react/auth/ContentstackLoginButton.tsx","../src/react/auth/ContentstackLogoutButton.tsx","../src/react/auth/ContentstackAuthGuard.tsx"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useEffect, useState } from \"react\"\nimport type { ContentstackUser } from \"../../index.js\"\n\nexport interface UseContentstackUserReturn {\n user: ContentstackUser | null\n loading: boolean\n isAuthenticated: boolean\n}\n\nexport function useContentstackUser(): UseContentstackUserReturn {\n const [user, setUser] = useState<ContentstackUser | null>(null)\n const [loading, setLoading] = useState(true)\n\n const fetchSession = useCallback(async () => {\n setLoading(true)\n try {\n const res = await fetch(\"/api/auth/session\")\n if (!res.ok) {\n setUser(null)\n return\n }\n const data = await res.json()\n if (data?.user) {\n setUser({\n uid: data.user.uid ?? data.user.id ?? \"\",\n email: data.user.email ?? \"\",\n firstName: data.user.firstName ?? data.user.name?.split(\" \")[0],\n lastName: data.user.lastName ?? data.user.name?.split(\" \").slice(1).join(\" \"),\n username: data.user.username,\n profileImage: data.user.profileImage ?? data.user.image,\n })\n } else {\n setUser(null)\n }\n } catch {\n setUser(null)\n } finally {\n setLoading(false)\n }\n }, [])\n\n useEffect(() => {\n fetchSession()\n }, [fetchSession])\n\n return { user, loading, isAuthenticated: user !== null }\n}\n","export interface ContentstackLoginButtonProps {\n scopes?: string[]\n redirectTo?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport function ContentstackLoginButton({\n redirectTo,\n className,\n children = \"Sign in with Contentstack\",\n}: ContentstackLoginButtonProps): React.JSX.Element {\n return (\n <form action=\"/api/auth/signin/contentstack\" method=\"POST\">\n {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n <button type=\"submit\" className={className}>\n {children}\n </button>\n </form>\n )\n}\n","export interface ContentstackLogoutButtonProps {\n redirectTo?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport function ContentstackLogoutButton({\n redirectTo,\n className,\n children = \"Sign out\",\n}: ContentstackLogoutButtonProps): React.JSX.Element {\n return (\n <form action=\"/api/auth/signout\" method=\"POST\">\n {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n <button type=\"submit\" className={className}>\n {children}\n </button>\n </form>\n )\n}\n","\"use client\"\n\nimport { ContentstackLoginButton } from \"./ContentstackLoginButton\"\nimport { useContentstackUser } from \"./useContentstackUser\"\n\nexport interface ContentstackAuthGuardProps {\n children: React.ReactNode\n fallback?: React.ReactNode\n loadingFallback?: React.ReactNode\n}\n\nexport function ContentstackAuthGuard({\n children,\n fallback,\n loadingFallback = null,\n}: ContentstackAuthGuardProps): React.JSX.Element | null {\n const { isAuthenticated, loading } = useContentstackUser()\n\n if (loading) return <>{loadingFallback}</>\n if (isAuthenticated) return <>{children}</>\n return <>{fallback ?? <ContentstackLoginButton />}</>\n}\n"],"mappings":";AAEA,SAAS,aAAa,WAAW,gBAAgB;AAS1C,SAAS,sBAAiD;AAC/D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAkC,IAAI;AAC9D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAE3C,QAAM,eAAe,YAAY,YAAY;AAC3C,eAAW,IAAI;AACf,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,mBAAmB;AAC3C,UAAI,CAAC,IAAI,IAAI;AACX,gBAAQ,IAAI;AACZ;AAAA,MACF;AACA,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,MAAM,MAAM;AACd,gBAAQ;AAAA,UACN,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM;AAAA,UACtC,OAAO,KAAK,KAAK,SAAS;AAAA,UAC1B,WAAW,KAAK,KAAK,aAAa,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAC9D,UAAU,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,UAC5E,UAAU,KAAK,KAAK;AAAA,UACpB,cAAc,KAAK,KAAK,gBAAgB,KAAK,KAAK;AAAA,QACpD,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF,QAAQ;AACN,cAAQ,IAAI;AAAA,IACd,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,iBAAa;AAAA,EACf,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO,EAAE,MAAM,SAAS,iBAAiB,SAAS,KAAK;AACzD;;;ACnCI,SACiB,KADjB;AANG,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAoD;AAClD,SACE,qBAAC,UAAK,QAAO,iCAAgC,QAAO,QACjD;AAAA,kBAAc,oBAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,oBAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACRI,SACiB,OAAAA,MADjB,QAAAC,aAAA;AANG,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAqD;AACnD,SACE,gBAAAA,MAAC,UAAK,QAAO,qBAAoB,QAAO,QACrC;AAAA,kBAAc,gBAAAD,KAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,gBAAAA,KAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACDsB,0BAAAE,YAAA;AAPf,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAyD;AACvD,QAAM,EAAE,iBAAiB,QAAQ,IAAI,oBAAoB;AAEzD,MAAI,QAAS,QAAO,gBAAAA,KAAA,YAAG,2BAAgB;AACvC,MAAI,gBAAiB,QAAO,gBAAAA,KAAA,YAAG,UAAS;AACxC,SAAO,gBAAAA,KAAA,YAAG,sBAAY,gBAAAA,KAAC,2BAAwB,GAAG;AACpD;","names":["jsx","jsxs","jsx"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ContentstackHttpClient
|
|
3
|
+
} from "./chunk-4CJ4IVPJ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
resolveEndpoints
|
|
6
|
+
} from "./chunk-BK2IBTQS.mjs";
|
|
7
|
+
|
|
8
|
+
// src/knowledge-vault/items.ts
|
|
9
|
+
var KnowledgeVaultItemsClient = class {
|
|
10
|
+
constructor(http) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
}
|
|
13
|
+
async ingest(data) {
|
|
14
|
+
const response = await this.http.post("/v1/knowledge-vault", data);
|
|
15
|
+
return response.data.data;
|
|
16
|
+
}
|
|
17
|
+
async update(itemUid, data) {
|
|
18
|
+
const response = await this.http.put(
|
|
19
|
+
`/v1/knowledge-vault/${itemUid}`,
|
|
20
|
+
data
|
|
21
|
+
);
|
|
22
|
+
return response.data.data;
|
|
23
|
+
}
|
|
24
|
+
async delete(itemUid) {
|
|
25
|
+
await this.http.delete(`/v1/knowledge-vault/${itemUid}`);
|
|
26
|
+
}
|
|
27
|
+
async getUsage() {
|
|
28
|
+
const response = await this.http.get("/v1/knowledge-vault/usage");
|
|
29
|
+
return response.data.data;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// src/knowledge-vault/client.ts
|
|
34
|
+
function createKnowledgeVaultClient(config) {
|
|
35
|
+
const endpoints = resolveEndpoints(config.region);
|
|
36
|
+
const headers = {
|
|
37
|
+
organization_uid: config.organizationUid,
|
|
38
|
+
brand_kit_uid: config.brandKitUid
|
|
39
|
+
};
|
|
40
|
+
switch (config.auth.type) {
|
|
41
|
+
case "oauth":
|
|
42
|
+
headers.authorization = `Bearer ${config.auth.accessToken}`;
|
|
43
|
+
break;
|
|
44
|
+
case "authtoken":
|
|
45
|
+
headers.authtoken = config.auth.token;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
const http = new ContentstackHttpClient({
|
|
49
|
+
...config.httpOptions,
|
|
50
|
+
baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,
|
|
51
|
+
headers: {
|
|
52
|
+
...config.httpOptions?.headers,
|
|
53
|
+
...headers
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
items: new KnowledgeVaultItemsClient(http)
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
createKnowledgeVaultClient
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=chunk-3KE63N3I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/knowledge-vault/items.ts","../src/knowledge-vault/client.ts"],"sourcesContent":["import type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n IngestContentData,\n KnowledgeVaultItem,\n KnowledgeVaultUsage,\n UpdateContentData,\n} from \"./types.js\"\n\nexport class KnowledgeVaultItemsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async ingest(data: IngestContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.post<{ data: KnowledgeVaultItem }>(\"/v1/knowledge-vault\", data)\n return response.data.data\n }\n\n async update(itemUid: string, data: UpdateContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.put<{ data: KnowledgeVaultItem }>(\n `/v1/knowledge-vault/${itemUid}`,\n data,\n )\n return response.data.data\n }\n\n async delete(itemUid: string): Promise<void> {\n await this.http.delete(`/v1/knowledge-vault/${itemUid}`)\n }\n\n async getUsage(): Promise<KnowledgeVaultUsage> {\n const response = await this.http.get<{ data: KnowledgeVaultUsage }>(\"/v1/knowledge-vault/usage\")\n return response.data.data\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { KnowledgeVaultItemsClient } from \"./items.js\"\n\nexport interface KnowledgeVaultClientConfig {\n region: ContentstackRegion\n organizationUid: string\n brandKitUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface KnowledgeVaultClient {\n items: KnowledgeVaultItemsClient\n}\n\nexport function createKnowledgeVaultClient(\n config: KnowledgeVaultClientConfig,\n): KnowledgeVaultClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n brand_kit_uid: config.brandKitUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n items: new KnowledgeVaultItemsClient(http),\n }\n}\n"],"mappings":";;;;;;;;AAQO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAA6B,MAA8B;AAA9B;AAAA,EAA+B;AAAA,EAE5D,MAAM,OAAO,MAAsD;AACjE,UAAM,WAAW,MAAM,KAAK,KAAK,KAAmC,uBAAuB,IAAI;AAC/F,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,SAAiB,MAAsD;AAClF,UAAM,WAAW,MAAM,KAAK,KAAK;AAAA,MAC/B,uBAAuB,OAAO;AAAA,MAC9B;AAAA,IACF;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,OAAO,SAAgC;AAC3C,UAAM,KAAK,KAAK,OAAO,uBAAuB,OAAO,EAAE;AAAA,EACzD;AAAA,EAEA,MAAM,WAAyC;AAC7C,UAAM,WAAW,MAAM,KAAK,KAAK,IAAmC,2BAA2B;AAC/F,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;;;ACdO,SAAS,2BACd,QACsB;AACtB,QAAM,YAAY,iBAAiB,OAAO,MAAM;AAEhD,QAAM,UAAkC;AAAA,IACtC,kBAAkB,OAAO;AAAA,IACzB,eAAe,OAAO;AAAA,EACxB;AAEA,UAAQ,OAAO,KAAK,MAAM;AAAA,IACxB,KAAK;AACH,cAAQ,gBAAgB,UAAU,OAAO,KAAK,WAAW;AACzD;AAAA,IACF,KAAK;AACH,cAAQ,YAAY,OAAO,KAAK;AAChC;AAAA,EACJ;AAEA,QAAM,OAAO,IAAI,uBAAuB;AAAA,IACtC,GAAG,OAAO;AAAA,IACV,SAAS,OAAO,aAAa,WAAW,UAAU;AAAA,IAClD,SAAS;AAAA,MACP,GAAG,OAAO,aAAa;AAAA,MACvB,GAAG;AAAA,IACL;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,OAAO,IAAI,0BAA0B,IAAI;AAAA,EAC3C;AACF;","names":[]}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ContentstackAuthError,
|
|
3
|
+
ContentstackError,
|
|
4
|
+
ContentstackForbiddenError,
|
|
5
|
+
ContentstackInvalidApiKeyError,
|
|
6
|
+
ContentstackNotFoundError,
|
|
7
|
+
ContentstackRateLimitError,
|
|
8
|
+
ContentstackServerError,
|
|
9
|
+
ContentstackValidationError
|
|
10
|
+
} from "./chunk-DMERADWM.mjs";
|
|
11
|
+
|
|
12
|
+
// src/http/client.ts
|
|
13
|
+
var DEFAULT_TIMEOUT = 3e4;
|
|
14
|
+
var DEFAULT_RETRY_LIMIT = 5;
|
|
15
|
+
var DEFAULT_RETRY_DELAY = 300;
|
|
16
|
+
var MAX_JITTER = 100;
|
|
17
|
+
var ContentstackHttpClient = class _ContentstackHttpClient {
|
|
18
|
+
config;
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.config = {
|
|
21
|
+
baseUrl: config.baseUrl,
|
|
22
|
+
headers: config.headers ?? {},
|
|
23
|
+
timeout: config.timeout ?? DEFAULT_TIMEOUT,
|
|
24
|
+
retryOnError: config.retryOnError ?? true,
|
|
25
|
+
retryLimit: config.retryLimit ?? DEFAULT_RETRY_LIMIT,
|
|
26
|
+
retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,
|
|
27
|
+
fetch: config.fetch ?? globalThis.fetch.bind(globalThis)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async get(path, params) {
|
|
31
|
+
let url = `${this.config.baseUrl}${path}`;
|
|
32
|
+
if (params) {
|
|
33
|
+
const searchParams = new URLSearchParams(params);
|
|
34
|
+
url += `?${searchParams.toString()}`;
|
|
35
|
+
}
|
|
36
|
+
return this.request(url, { method: "GET" }, path);
|
|
37
|
+
}
|
|
38
|
+
async post(path, body) {
|
|
39
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
40
|
+
return this.request(
|
|
41
|
+
url,
|
|
42
|
+
{
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers: { "Content-Type": "application/json" },
|
|
45
|
+
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
46
|
+
},
|
|
47
|
+
path
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
async put(path, body) {
|
|
51
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
52
|
+
return this.request(
|
|
53
|
+
url,
|
|
54
|
+
{
|
|
55
|
+
method: "PUT",
|
|
56
|
+
headers: { "Content-Type": "application/json" },
|
|
57
|
+
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
58
|
+
},
|
|
59
|
+
path
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
async patch(path, body) {
|
|
63
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
64
|
+
return this.request(
|
|
65
|
+
url,
|
|
66
|
+
{
|
|
67
|
+
method: "PATCH",
|
|
68
|
+
headers: { "Content-Type": "application/json" },
|
|
69
|
+
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
70
|
+
},
|
|
71
|
+
path
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
async delete(path) {
|
|
75
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
76
|
+
return this.request(url, { method: "DELETE" }, path);
|
|
77
|
+
}
|
|
78
|
+
async postForm(path, params) {
|
|
79
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
80
|
+
return this.request(
|
|
81
|
+
url,
|
|
82
|
+
{
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
85
|
+
body: params.toString()
|
|
86
|
+
},
|
|
87
|
+
path
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
async upload(path, form) {
|
|
91
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
92
|
+
return this.request(url, { method: "POST", body: form }, path);
|
|
93
|
+
}
|
|
94
|
+
/** Return a new client with additional headers merged */
|
|
95
|
+
withHeaders(headers) {
|
|
96
|
+
return new _ContentstackHttpClient({
|
|
97
|
+
...this.config,
|
|
98
|
+
headers: { ...this.config.headers, ...headers }
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Return a new client with a different base URL */
|
|
102
|
+
withBaseUrl(baseUrl) {
|
|
103
|
+
return new _ContentstackHttpClient({
|
|
104
|
+
...this.config,
|
|
105
|
+
baseUrl
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async request(url, init, path) {
|
|
109
|
+
const headers = new Headers(this.config.headers);
|
|
110
|
+
if (init.headers) {
|
|
111
|
+
const initHeaders = init.headers instanceof Headers ? init.headers : new Headers(init.headers);
|
|
112
|
+
initHeaders.forEach((value, key) => headers.set(key, value));
|
|
113
|
+
}
|
|
114
|
+
let lastError;
|
|
115
|
+
const maxAttempts = this.config.retryOnError ? this.config.retryLimit + 1 : 1;
|
|
116
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
117
|
+
const controller = new AbortController();
|
|
118
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
119
|
+
try {
|
|
120
|
+
const response = await this.config.fetch(url, {
|
|
121
|
+
...init,
|
|
122
|
+
headers,
|
|
123
|
+
signal: controller.signal
|
|
124
|
+
});
|
|
125
|
+
if (response.ok) {
|
|
126
|
+
const data = await response.json().catch(() => ({}));
|
|
127
|
+
return { data, status: response.status, headers: response.headers };
|
|
128
|
+
}
|
|
129
|
+
const isRetryable = response.status === 429 || response.status >= 500;
|
|
130
|
+
if (isRetryable && this.config.retryOnError && attempt < maxAttempts - 1) {
|
|
131
|
+
const delay = this.calculateDelay(response, attempt);
|
|
132
|
+
await sleep(delay);
|
|
133
|
+
lastError = await this.createError(response, path);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
throw await this.createError(response, path);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
if (error instanceof ContentstackError) {
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
142
|
+
throw new ContentstackError(`Request timed out after ${this.config.timeout}ms`, {
|
|
143
|
+
requestPath: path,
|
|
144
|
+
cause: error
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
throw new ContentstackError("Network request failed", {
|
|
148
|
+
requestPath: path,
|
|
149
|
+
cause: error instanceof Error ? error : new Error(String(error))
|
|
150
|
+
});
|
|
151
|
+
} finally {
|
|
152
|
+
clearTimeout(timeoutId);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
throw lastError ?? new ContentstackError("Request failed after retries", { requestPath: path });
|
|
156
|
+
}
|
|
157
|
+
calculateDelay(response, attempt) {
|
|
158
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
159
|
+
if (retryAfter) {
|
|
160
|
+
const seconds = Number.parseFloat(retryAfter);
|
|
161
|
+
if (!Number.isNaN(seconds)) {
|
|
162
|
+
return seconds * 1e3;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const jitter = Math.random() * MAX_JITTER;
|
|
166
|
+
return this.config.retryDelay * 2 ** attempt + jitter;
|
|
167
|
+
}
|
|
168
|
+
async createError(response, path) {
|
|
169
|
+
let body = {};
|
|
170
|
+
try {
|
|
171
|
+
body = await response.json();
|
|
172
|
+
} catch {
|
|
173
|
+
}
|
|
174
|
+
const message = body.error_message ?? body.error_description ?? body.message ?? `HTTP ${response.status} error`;
|
|
175
|
+
const errorCode = body.error_code;
|
|
176
|
+
const errors = body.errors;
|
|
177
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
178
|
+
const opts = { status: response.status, errorCode, errors, requestPath: path };
|
|
179
|
+
switch (response.status) {
|
|
180
|
+
case 400:
|
|
181
|
+
return new ContentstackValidationError(message, { ...opts, status: 400 });
|
|
182
|
+
case 401:
|
|
183
|
+
return new ContentstackAuthError(message, opts);
|
|
184
|
+
case 403:
|
|
185
|
+
return new ContentstackForbiddenError(message, opts);
|
|
186
|
+
case 404:
|
|
187
|
+
return new ContentstackNotFoundError(message, opts);
|
|
188
|
+
case 412:
|
|
189
|
+
return new ContentstackInvalidApiKeyError(message, opts);
|
|
190
|
+
case 422:
|
|
191
|
+
return new ContentstackValidationError(message, { ...opts, status: 422 });
|
|
192
|
+
case 429:
|
|
193
|
+
return new ContentstackRateLimitError(message, {
|
|
194
|
+
...opts,
|
|
195
|
+
retryAfter: retryAfter ? Number.parseFloat(retryAfter) : void 0
|
|
196
|
+
});
|
|
197
|
+
default:
|
|
198
|
+
if (response.status >= 500) {
|
|
199
|
+
return new ContentstackServerError(message, opts);
|
|
200
|
+
}
|
|
201
|
+
return new ContentstackError(message, opts);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
function sleep(ms) {
|
|
206
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export {
|
|
210
|
+
ContentstackHttpClient
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=chunk-4CJ4IVPJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http/client.ts"],"sourcesContent":["import {\n ContentstackAuthError,\n ContentstackError,\n ContentstackForbiddenError,\n ContentstackInvalidApiKeyError,\n ContentstackNotFoundError,\n ContentstackRateLimitError,\n ContentstackServerError,\n ContentstackValidationError,\n} from \"./errors.js\"\nimport type { HttpClientConfig, HttpResponse } from \"./types.js\"\n\nconst DEFAULT_TIMEOUT = 30_000\nconst DEFAULT_RETRY_LIMIT = 5\nconst DEFAULT_RETRY_DELAY = 300\nconst MAX_JITTER = 100\n\nexport class ContentstackHttpClient {\n private readonly config: Required<\n Pick<HttpClientConfig, \"baseUrl\" | \"timeout\" | \"retryOnError\" | \"retryLimit\" | \"retryDelay\">\n > & {\n headers: Record<string, string>\n fetch: typeof globalThis.fetch\n }\n\n constructor(config: HttpClientConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n headers: config.headers ?? {},\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n retryOnError: config.retryOnError ?? true,\n retryLimit: config.retryLimit ?? DEFAULT_RETRY_LIMIT,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<HttpResponse<T>> {\n let url = `${this.config.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams(params)\n url += `?${searchParams.toString()}`\n }\n return this.request<T>(url, { method: \"GET\" }, path)\n }\n\n async post<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async put<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async patch<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async delete<T>(path: string): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"DELETE\" }, path)\n }\n\n async postForm<T>(path: string, params: URLSearchParams): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n },\n path,\n )\n }\n\n async upload<T>(path: string, form: FormData): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"POST\", body: form }, path)\n }\n\n /** Return a new client with additional headers merged */\n withHeaders(headers: Record<string, string>): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n headers: { ...this.config.headers, ...headers },\n })\n }\n\n /** Return a new client with a different base URL */\n withBaseUrl(baseUrl: string): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n baseUrl,\n })\n }\n\n private async request<T>(url: string, init: RequestInit, path: string): Promise<HttpResponse<T>> {\n const headers = new Headers(this.config.headers)\n\n if (init.headers) {\n const initHeaders =\n init.headers instanceof Headers\n ? init.headers\n : new Headers(init.headers as Record<string, string>)\n initHeaders.forEach((value, key) => headers.set(key, value))\n }\n\n let lastError: Error | undefined\n const maxAttempts = this.config.retryOnError ? this.config.retryLimit + 1 : 1\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n try {\n const response = await this.config.fetch(url, {\n ...init,\n headers,\n signal: controller.signal,\n })\n\n if (response.ok) {\n const data = (await response.json().catch(() => ({}))) as T\n return { data, status: response.status, headers: response.headers }\n }\n\n // Check if retryable\n const isRetryable = response.status === 429 || response.status >= 500\n if (isRetryable && this.config.retryOnError && attempt < maxAttempts - 1) {\n const delay = this.calculateDelay(response, attempt)\n await sleep(delay)\n lastError = await this.createError(response, path)\n continue\n }\n\n throw await this.createError(response, path)\n } catch (error) {\n if (error instanceof ContentstackError) {\n throw error\n }\n\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ContentstackError(`Request timed out after ${this.config.timeout}ms`, {\n requestPath: path,\n cause: error,\n })\n }\n\n throw new ContentstackError(\"Network request failed\", {\n requestPath: path,\n cause: error instanceof Error ? error : new Error(String(error)),\n })\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n // Should not reach here, but just in case\n throw lastError ?? new ContentstackError(\"Request failed after retries\", { requestPath: path })\n }\n\n private calculateDelay(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\")\n if (retryAfter) {\n const seconds = Number.parseFloat(retryAfter)\n if (!Number.isNaN(seconds)) {\n return seconds * 1000\n }\n }\n\n const jitter = Math.random() * MAX_JITTER\n return this.config.retryDelay * 2 ** attempt + jitter\n }\n\n private async createError(response: Response, path: string): Promise<ContentstackError> {\n let body: Record<string, unknown> = {}\n try {\n body = (await response.json()) as Record<string, unknown>\n } catch {\n // Response body may not be JSON\n }\n\n const message =\n (body.error_message as string | undefined) ??\n (body.error_description as string | undefined) ??\n (body.message as string | undefined) ??\n `HTTP ${response.status} error`\n const errorCode = body.error_code as number | undefined\n const errors = body.errors as Record<string, string[]> | undefined\n const retryAfter = response.headers.get(\"Retry-After\")\n\n const opts = { status: response.status, errorCode, errors, requestPath: path }\n\n switch (response.status) {\n case 400:\n return new ContentstackValidationError(message, { ...opts, status: 400 })\n case 401:\n return new ContentstackAuthError(message, opts)\n case 403:\n return new ContentstackForbiddenError(message, opts)\n case 404:\n return new ContentstackNotFoundError(message, opts)\n case 412:\n return new ContentstackInvalidApiKeyError(message, opts)\n case 422:\n return new ContentstackValidationError(message, { ...opts, status: 422 })\n case 429:\n return new ContentstackRateLimitError(message, {\n ...opts,\n retryAfter: retryAfter ? Number.parseFloat(retryAfter) : undefined,\n })\n default:\n if (response.status >= 500) {\n return new ContentstackServerError(message, opts)\n }\n return new ContentstackError(message, opts)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n"],"mappings":"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","names":[]}
|