@automattic/jetpack-ai-client 0.14.6 → 0.15.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 (128) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/ask-question/sync.d.ts +2 -8
  3. package/build/ask-question/sync.js +20 -19
  4. package/build/hooks/use-image-generator/index.js +1 -1
  5. package/build/hooks/use-save-to-media-library/index.d.ts +12 -0
  6. package/build/hooks/use-save-to-media-library/index.js +74 -0
  7. package/build/index.d.ts +2 -0
  8. package/build/index.js +5 -0
  9. package/build/libs/index.d.ts +1 -1
  10. package/build/libs/index.js +1 -1
  11. package/build/libs/markdown/index.d.ts +2 -2
  12. package/build/libs/markdown/index.js +2 -2
  13. package/build/libs/markdown/markdown-to-html.d.ts +8 -1
  14. package/build/libs/markdown/markdown-to-html.js +10 -1
  15. package/build/logo-generator/assets/icons/ai.d.ts +6 -0
  16. package/build/logo-generator/assets/icons/ai.js +8 -0
  17. package/build/logo-generator/assets/icons/check.d.ts +6 -0
  18. package/build/logo-generator/assets/icons/check.js +8 -0
  19. package/build/logo-generator/assets/icons/logo.d.ts +6 -0
  20. package/build/logo-generator/assets/icons/logo.js +8 -0
  21. package/build/logo-generator/assets/icons/media.d.ts +6 -0
  22. package/build/logo-generator/assets/icons/media.js +8 -0
  23. package/build/logo-generator/components/feature-fetch-failure-screen.d.ts +8 -0
  24. package/build/logo-generator/components/feature-fetch-failure-screen.js +10 -0
  25. package/build/logo-generator/components/first-load-screen.d.ts +5 -0
  26. package/build/logo-generator/components/first-load-screen.js +16 -0
  27. package/build/logo-generator/components/generator-modal.d.ts +7 -0
  28. package/build/logo-generator/components/generator-modal.js +184 -0
  29. package/build/logo-generator/components/history-carousel.d.ts +6 -0
  30. package/build/logo-generator/components/history-carousel.js +36 -0
  31. package/build/logo-generator/components/image-loader.d.ts +7 -0
  32. package/build/logo-generator/components/image-loader.js +12 -0
  33. package/build/logo-generator/components/logo-presenter.d.ts +4 -0
  34. package/build/logo-generator/components/logo-presenter.js +106 -0
  35. package/build/logo-generator/components/prompt.d.ts +5 -0
  36. package/build/logo-generator/components/prompt.js +96 -0
  37. package/build/logo-generator/components/upgrade-nudge.d.ts +2 -0
  38. package/build/logo-generator/components/upgrade-nudge.js +30 -0
  39. package/build/logo-generator/components/upgrade-screen.d.ts +9 -0
  40. package/build/logo-generator/components/upgrade-screen.js +24 -0
  41. package/build/logo-generator/components/visit-site-banner.d.ts +10 -0
  42. package/build/logo-generator/components/visit-site-banner.js +16 -0
  43. package/build/logo-generator/constants.d.ts +16 -0
  44. package/build/logo-generator/constants.js +19 -0
  45. package/build/logo-generator/hooks/use-checkout.d.ts +4 -0
  46. package/build/logo-generator/hooks/use-checkout.js +26 -0
  47. package/build/logo-generator/hooks/use-logo-generator.d.ts +46 -0
  48. package/build/logo-generator/hooks/use-logo-generator.js +286 -0
  49. package/build/logo-generator/hooks/use-request-errors.d.ts +16 -0
  50. package/build/logo-generator/hooks/use-request-errors.js +46 -0
  51. package/build/logo-generator/index.d.ts +1 -0
  52. package/build/logo-generator/index.js +1 -0
  53. package/build/logo-generator/lib/logo-storage.d.ts +58 -0
  54. package/build/logo-generator/lib/logo-storage.js +123 -0
  55. package/build/logo-generator/lib/media-exists.d.ts +12 -0
  56. package/build/logo-generator/lib/media-exists.js +33 -0
  57. package/build/logo-generator/lib/set-site-logo.d.ts +13 -0
  58. package/build/logo-generator/lib/set-site-logo.js +26 -0
  59. package/build/logo-generator/lib/wpcom-limited-request.d.ts +7 -0
  60. package/build/logo-generator/lib/wpcom-limited-request.js +33 -0
  61. package/build/logo-generator/store/actions.d.ts +105 -0
  62. package/build/logo-generator/store/actions.js +193 -0
  63. package/build/logo-generator/store/constants.d.ts +44 -0
  64. package/build/logo-generator/store/constants.js +44 -0
  65. package/build/logo-generator/store/index.d.ts +1 -0
  66. package/build/logo-generator/store/index.js +19 -0
  67. package/build/logo-generator/store/initial-state.d.ts +3 -0
  68. package/build/logo-generator/store/initial-state.js +40 -0
  69. package/build/logo-generator/store/reducer.d.ts +347 -0
  70. package/build/logo-generator/store/reducer.js +293 -0
  71. package/build/logo-generator/store/selectors.d.ts +119 -0
  72. package/build/logo-generator/store/selectors.js +173 -0
  73. package/build/logo-generator/store/types.d.ts +164 -0
  74. package/build/logo-generator/store/types.js +1 -0
  75. package/build/logo-generator/types.d.ts +82 -0
  76. package/build/logo-generator/types.js +1 -0
  77. package/build/types.d.ts +6 -0
  78. package/package.json +5 -3
  79. package/src/ask-question/sync.ts +22 -27
  80. package/src/hooks/use-image-generator/index.ts +1 -1
  81. package/src/hooks/use-save-to-media-library/index.ts +95 -0
  82. package/src/index.ts +6 -0
  83. package/src/libs/index.ts +1 -0
  84. package/src/libs/markdown/index.ts +2 -2
  85. package/src/libs/markdown/markdown-to-html.ts +20 -3
  86. package/src/logo-generator/assets/icons/ai.tsx +21 -0
  87. package/src/logo-generator/assets/icons/check.tsx +23 -0
  88. package/src/logo-generator/assets/icons/icons.scss +5 -0
  89. package/src/logo-generator/assets/icons/logo.tsx +23 -0
  90. package/src/logo-generator/assets/icons/media.tsx +24 -0
  91. package/src/logo-generator/assets/images/jetpack-logo.svg +4 -0
  92. package/src/logo-generator/assets/images/loader.gif +0 -0
  93. package/src/logo-generator/assets/index.d.ts +3 -0
  94. package/src/logo-generator/components/feature-fetch-failure-screen.tsx +35 -0
  95. package/src/logo-generator/components/first-load-screen.scss +12 -0
  96. package/src/logo-generator/components/first-load-screen.tsx +32 -0
  97. package/src/logo-generator/components/generator-modal.scss +92 -0
  98. package/src/logo-generator/components/generator-modal.tsx +291 -0
  99. package/src/logo-generator/components/history-carousel.scss +36 -0
  100. package/src/logo-generator/components/history-carousel.tsx +57 -0
  101. package/src/logo-generator/components/image-loader.tsx +22 -0
  102. package/src/logo-generator/components/logo-presenter.scss +116 -0
  103. package/src/logo-generator/components/logo-presenter.tsx +234 -0
  104. package/src/logo-generator/components/prompt.scss +102 -0
  105. package/src/logo-generator/components/prompt.tsx +211 -0
  106. package/src/logo-generator/components/upgrade-nudge.scss +43 -0
  107. package/src/logo-generator/components/upgrade-nudge.tsx +58 -0
  108. package/src/logo-generator/components/upgrade-screen.tsx +67 -0
  109. package/src/logo-generator/components/visit-site-banner.scss +29 -0
  110. package/src/logo-generator/components/visit-site-banner.tsx +50 -0
  111. package/src/logo-generator/constants.ts +22 -0
  112. package/src/logo-generator/hooks/use-checkout.ts +37 -0
  113. package/src/logo-generator/hooks/use-logo-generator.ts +389 -0
  114. package/src/logo-generator/hooks/use-request-errors.ts +70 -0
  115. package/src/logo-generator/index.ts +1 -0
  116. package/src/logo-generator/lib/logo-storage.ts +166 -0
  117. package/src/logo-generator/lib/media-exists.ts +42 -0
  118. package/src/logo-generator/lib/set-site-logo.ts +32 -0
  119. package/src/logo-generator/lib/wpcom-limited-request.ts +41 -0
  120. package/src/logo-generator/store/actions.ts +251 -0
  121. package/src/logo-generator/store/constants.ts +49 -0
  122. package/src/logo-generator/store/index.ts +25 -0
  123. package/src/logo-generator/store/initial-state.ts +43 -0
  124. package/src/logo-generator/store/reducer.ts +387 -0
  125. package/src/logo-generator/store/selectors.ts +201 -0
  126. package/src/logo-generator/store/types.ts +207 -0
  127. package/src/logo-generator/types.ts +97 -0
  128. package/src/types.ts +8 -0
@@ -0,0 +1,207 @@
1
+ import type { SiteDetails } from '../types.js';
2
+
3
+ /**
4
+ * Types for the AI Assistant feature.
5
+ */
6
+ export type Plan = {
7
+ product_id: number;
8
+ product_name: string;
9
+ product_slug: string;
10
+ };
11
+ // AI Assistant feature props
12
+ export type UpgradeTypeProp = 'vip' | 'default';
13
+
14
+ export type TierUnlimitedProps = {
15
+ slug: 'ai-assistant-tier-unlimited';
16
+ limit: 999999999;
17
+ value: 1;
18
+ readableLimit: string;
19
+ };
20
+
21
+ export type TierFreeProps = {
22
+ slug: 'ai-assistant-tier-free';
23
+ limit: 20;
24
+ value: 0;
25
+ };
26
+
27
+ export type Tier100Props = {
28
+ slug: 'ai-assistant-tier-100';
29
+ limit: 100;
30
+ value: 100;
31
+ };
32
+
33
+ export type Tier200Props = {
34
+ slug: 'ai-assistant-tier-200';
35
+ limit: 200;
36
+ value: 200;
37
+ };
38
+
39
+ export type Tier500Props = {
40
+ slug: 'ai-assistant-tier-500';
41
+ limit: 500;
42
+ value: 500;
43
+ };
44
+
45
+ export type Tier750Props = {
46
+ slug: 'ai-assistant-tier-750';
47
+ limit: 750;
48
+ value: 750;
49
+ };
50
+
51
+ export type Tier1000Props = {
52
+ slug: 'ai-assistant-tier-1000';
53
+ limit: 1000;
54
+ value: 1000;
55
+ };
56
+
57
+ export type TierProp = {
58
+ slug: TierSlugProp;
59
+ limit: TierLimitProp;
60
+ value: TierValueProp;
61
+ readableLimit?: string;
62
+ };
63
+
64
+ export type TierLimitProp =
65
+ | TierUnlimitedProps[ 'limit' ]
66
+ | TierFreeProps[ 'limit' ]
67
+ | Tier100Props[ 'limit' ]
68
+ | Tier200Props[ 'limit' ]
69
+ | Tier500Props[ 'limit' ]
70
+ | Tier750Props[ 'limit' ]
71
+ | Tier1000Props[ 'limit' ];
72
+
73
+ export type TierSlugProp =
74
+ | TierUnlimitedProps[ 'slug' ]
75
+ | TierFreeProps[ 'slug' ]
76
+ | Tier100Props[ 'slug' ]
77
+ | Tier200Props[ 'slug' ]
78
+ | Tier500Props[ 'slug' ]
79
+ | Tier750Props[ 'slug' ]
80
+ | Tier1000Props[ 'slug' ];
81
+
82
+ export type TierValueProp =
83
+ | TierUnlimitedProps[ 'value' ]
84
+ | TierFreeProps[ 'value' ]
85
+ | Tier100Props[ 'value' ]
86
+ | Tier200Props[ 'value' ]
87
+ | Tier500Props[ 'value' ]
88
+ | Tier750Props[ 'value' ]
89
+ | Tier1000Props[ 'value' ];
90
+
91
+ export type AiFeatureProps = {
92
+ hasFeature: boolean;
93
+ isOverLimit: boolean;
94
+ requestsCount: number;
95
+ requestsLimit: number;
96
+ requireUpgrade: boolean;
97
+ errorMessage?: string;
98
+ errorCode?: string;
99
+ upgradeType: UpgradeTypeProp;
100
+ currentTier?: TierProp;
101
+ usagePeriod?: {
102
+ currentStart: string;
103
+ nextStart: string;
104
+ requestsCount: number;
105
+ };
106
+ nextTier?: TierProp | null;
107
+ tierPlansEnabled?: boolean;
108
+ costs?: {
109
+ 'jetpack-ai-logo-generator': {
110
+ logo: number;
111
+ };
112
+ };
113
+ };
114
+
115
+ // Type used in the `wordpress-com/plans` store.
116
+ export type AiFeatureStateProps = AiFeatureProps & {
117
+ _meta?: {
118
+ isRequesting: boolean;
119
+ asyncRequestCountdown: number;
120
+ asyncRequestTimerId: number;
121
+ isRequestingImage: boolean;
122
+ };
123
+ };
124
+
125
+ export type Logo = {
126
+ url: string;
127
+ description: string;
128
+ mediaId?: number;
129
+ };
130
+
131
+ export type RequestError = string | Error | null;
132
+
133
+ export type LogoGeneratorStateProp = {
134
+ _meta?: {
135
+ isSavingLogoToLibrary: boolean;
136
+ isApplyingLogo: boolean;
137
+ isRequestingImage: boolean;
138
+ isEnhancingPrompt: boolean;
139
+ featureFetchError?: RequestError;
140
+ firstLogoPromptFetchError?: RequestError;
141
+ enhancePromptFetchError?: RequestError;
142
+ logoFetchError?: RequestError;
143
+ saveToLibraryError?: RequestError;
144
+ logoUpdateError?: RequestError;
145
+ context: string;
146
+ };
147
+ siteDetails?: SiteDetails | Record< string, never >;
148
+ features: {
149
+ aiAssistantFeature?: AiFeatureStateProps;
150
+ };
151
+ history: Array< Logo >;
152
+ selectedLogoIndex: number;
153
+ };
154
+
155
+ export type Selectors = {
156
+ getAiAssistantFeature( siteId?: string ): Partial< AiFeatureProps >;
157
+ getIsRequestingAiAssistantFeature(): boolean;
158
+ getLogos(): Array< Logo >;
159
+ getSelectedLogoIndex(): number | null;
160
+ getSelectedLogo(): Logo;
161
+ getSiteDetails(): SiteDetails;
162
+ getIsSavingLogoToLibrary(): boolean;
163
+ getIsApplyingLogo(): boolean;
164
+ getIsRequestingImage(): boolean;
165
+ getIsEnhancingPrompt(): boolean;
166
+ getIsBusy(): boolean;
167
+ getRequireUpgrade(): boolean;
168
+ getFeatureFetchError(): RequestError;
169
+ getFirstLogoPromptFetchError(): RequestError;
170
+ getEnhancePromptFetchError(): RequestError;
171
+ getLogoFetchError(): RequestError;
172
+ getSaveToLibraryError(): RequestError;
173
+ getLogoUpdateError(): RequestError;
174
+ getContext(): string;
175
+ };
176
+
177
+ /*
178
+ * `sites/$site/ai-assistant-feature` endpoint response body props
179
+ */
180
+ export type AiAssistantFeatureEndpointResponseProps = {
181
+ 'is-enabled': boolean;
182
+ 'has-feature': boolean;
183
+ 'is-over-limit': boolean;
184
+ 'requests-count': number;
185
+ 'requests-limit': number;
186
+ 'usage-period': {
187
+ 'current-start': string;
188
+ 'next-start': string;
189
+ 'requests-count': number;
190
+ };
191
+ 'site-require-upgrade': boolean;
192
+ 'error-message'?: string;
193
+ 'error-code'?: string;
194
+ 'is-playground-visible'?: boolean;
195
+ 'upgrade-type': UpgradeTypeProp;
196
+ 'current-tier': TierProp;
197
+ 'tier-plans': Array< TierProp >;
198
+ 'next-tier'?: TierProp | null;
199
+ 'tier-plans-enabled': boolean;
200
+ costs: {
201
+ 'jetpack-ai-logo-generator': {
202
+ logo: number;
203
+ };
204
+ };
205
+ };
206
+
207
+ export type SaveLogo = ( logo: Logo ) => Promise< { mediaId: number; mediaURL: string } >;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Types
3
+ */
4
+ import type { Logo } from './store/types.js';
5
+
6
+ export type SiteDetails = {
7
+ ID: number;
8
+ URL: string;
9
+ domain: string;
10
+ name: string;
11
+ description: string;
12
+ };
13
+
14
+ export interface GeneratorModalProps {
15
+ siteDetails?: SiteDetails;
16
+ isOpen: boolean;
17
+ onClose: () => void;
18
+ context: string;
19
+ }
20
+
21
+ export interface LogoPresenterProps {
22
+ logo?: Logo;
23
+ loading?: boolean;
24
+ onApplyLogo: () => void;
25
+ logoAccepted?: boolean;
26
+ siteId: string | number;
27
+ }
28
+
29
+ export type SaveToMediaLibraryProps = {
30
+ siteId: string | number;
31
+ url: string;
32
+ attrs?: {
33
+ caption?: string;
34
+ description?: string;
35
+ title?: string;
36
+ alt?: string;
37
+ };
38
+ };
39
+
40
+ export type SaveToMediaLibraryResponseProps = {
41
+ code: number;
42
+ media: [
43
+ {
44
+ ID: number;
45
+ URL: string;
46
+ },
47
+ ];
48
+ };
49
+
50
+ export type CheckMediaProps = {
51
+ siteId: string | number;
52
+ mediaId: Logo[ 'mediaId' ];
53
+ };
54
+
55
+ export type SetSiteLogoProps = {
56
+ siteId: string | number;
57
+ imageId: string | number;
58
+ };
59
+
60
+ export type SetSiteLogoResponseProps = {
61
+ id: number;
62
+ url: string;
63
+ };
64
+
65
+ // Token
66
+ export type RequestTokenOptions = {
67
+ siteDetails?: SiteDetails;
68
+ isJetpackSite?: boolean;
69
+ expirationTime?: number;
70
+ };
71
+
72
+ export type TokenDataProps = {
73
+ token: string;
74
+ blogId: string | undefined;
75
+ expire: number;
76
+ };
77
+
78
+ export type TokenDataEndpointResponseProps = {
79
+ token: string;
80
+ blog_id: string;
81
+ };
82
+
83
+ export type SaveToStorageProps = Logo & {
84
+ siteId: string;
85
+ };
86
+
87
+ export type UpdateInStorageProps = {
88
+ siteId: string;
89
+ url: Logo[ 'url' ];
90
+ newUrl: Logo[ 'url' ];
91
+ mediaId: Logo[ 'mediaId' ];
92
+ };
93
+
94
+ export type RemoveFromStorageProps = {
95
+ mediaId: Logo[ 'mediaId' ];
96
+ siteId: string;
97
+ };
package/src/types.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type * as BlockEditorSelectors from '@wordpress/block-editor/store/selectors.js';
2
+
1
3
  export const ERROR_SERVICE_UNAVAILABLE = 'error_service_unavailable' as const;
2
4
  export const ERROR_QUOTA_EXCEEDED = 'error_quota_exceeded' as const;
3
5
  export const ERROR_MODERATION = 'error_moderation' as const;
@@ -113,3 +115,9 @@ export type TranscriptionState = RecordingState | 'validating' | 'processing' |
113
115
  * Lib types
114
116
  */
115
117
  export type { RenderHTMLRules } from './libs/index.js';
118
+
119
+ export interface BlockEditorStore {
120
+ selectors: {
121
+ [ key in keyof typeof BlockEditorSelectors ]: ( typeof BlockEditorSelectors )[ key ];
122
+ };
123
+ }