Skip to content

Commit c9081f5

Browse files
authored
Merge branch 'master' into refactor/docs
2 parents e12b6de + 52becfe commit c9081f5

30 files changed

+2265
-4199
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
* @contentful/team-tundra
1+
* @contentful/team-tundra @contentful/team-developer-experience
22

33
package.json
44
package-lock.json

catalog-info.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ metadata:
77
annotations:
88
circleci.com/project-slug: github/contentful/contentful-management.js
99
github.com/project-slug: contentful/contentful-management.js
10-
contentful.com/ci-alert-slack: prd-extensibility-bots
10+
contentful.com/ci-alert-slack: prd-ecosystem-dx-bots
11+
contentful.com/service-tier: "4"
12+
tags:
13+
- tier-4
1114
spec:
1215
type: library
1316
lifecycle: production
14-
owner: group:team-tundra
17+
owner: group:team-developer-experience
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { RawAxiosRequestHeaders } from 'axios'
2+
import type { AxiosInstance } from 'contentful-sdk-core'
3+
import type { GetSpaceEnvironmentParams } from '../../../common-types'
4+
import type { RestEndpoint } from '../types'
5+
import * as raw from './raw'
6+
7+
export const get: RestEndpoint<'AiActionInvocation', 'get'> = (
8+
http: AxiosInstance,
9+
params: GetSpaceEnvironmentParams & { aiActionId: string; invocationId: string },
10+
headers?: RawAxiosRequestHeaders
11+
) => {
12+
return raw.get(
13+
http,
14+
`/spaces/${params.spaceId}/environments/${params.environmentId}/ai/actions/${params.aiActionId}/invocations/${params.invocationId}`,
15+
{ headers }
16+
)
17+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import type { RawAxiosRequestHeaders } from 'axios'
2+
import type { AxiosInstance } from 'contentful-sdk-core'
3+
import copy from 'fast-copy'
4+
import type {
5+
CollectionProp,
6+
GetSpaceEnvironmentParams,
7+
GetSpaceParams,
8+
QueryParams,
9+
} from '../../../common-types'
10+
import type { RestEndpoint } from '../types'
11+
import * as raw from './raw'
12+
import type { AiActionProps, CreateAiActionProps } from '../../../entities/ai-action'
13+
import type { AiActionInvocationType } from '../../../entities/ai-action-invocation'
14+
15+
export const get: RestEndpoint<'AiAction', 'get'> = (
16+
http: AxiosInstance,
17+
params: GetSpaceParams & { aiActionId: string },
18+
headers?: RawAxiosRequestHeaders
19+
) => {
20+
return raw.get<AiActionProps>(http, `/spaces/${params.spaceId}/ai/actions/${params.aiActionId}`, {
21+
headers,
22+
})
23+
}
24+
25+
export const getMany: RestEndpoint<'AiAction', 'getMany'> = (
26+
http: AxiosInstance,
27+
params: GetSpaceParams & QueryParams,
28+
headers?: RawAxiosRequestHeaders
29+
) => {
30+
return raw.get<CollectionProp<AiActionProps>>(http, `/spaces/${params.spaceId}/ai/actions`, {
31+
params: params.query,
32+
headers,
33+
})
34+
}
35+
36+
export const create: RestEndpoint<'AiAction', 'create'> = (
37+
http: AxiosInstance,
38+
params: GetSpaceParams,
39+
data: CreateAiActionProps,
40+
headers?: RawAxiosRequestHeaders
41+
) => {
42+
return raw.post<AiActionProps>(http, `/spaces/${params.spaceId}/ai/actions`, data, { headers })
43+
}
44+
45+
export const update: RestEndpoint<'AiAction', 'update'> = (
46+
http: AxiosInstance,
47+
params: GetSpaceParams & { aiActionId: string },
48+
rawData: AiActionProps,
49+
headers?: RawAxiosRequestHeaders
50+
) => {
51+
const data = copy(rawData)
52+
const { sys, ...payload } = data
53+
return raw.put<AiActionProps>(
54+
http,
55+
`/spaces/${params.spaceId}/ai/actions/${params.aiActionId}`,
56+
payload,
57+
{
58+
headers: {
59+
'X-Contentful-Version': rawData.sys.version ?? 0,
60+
...headers,
61+
},
62+
}
63+
)
64+
}
65+
66+
export const del: RestEndpoint<'AiAction', 'delete'> = (
67+
http: AxiosInstance,
68+
params: GetSpaceParams & { aiActionId: string },
69+
headers?: RawAxiosRequestHeaders
70+
) => {
71+
return raw.del(http, `/spaces/${params.spaceId}/ai/actions/${params.aiActionId}`, { headers })
72+
}
73+
74+
export const publish: RestEndpoint<'AiAction', 'publish'> = (
75+
http: AxiosInstance,
76+
params: GetSpaceParams & { aiActionId: string; version: number },
77+
rawData?: unknown,
78+
headers?: RawAxiosRequestHeaders
79+
) => {
80+
return raw.put<AiActionProps>(
81+
http,
82+
`/spaces/${params.spaceId}/ai/actions/${params.aiActionId}/published`,
83+
null,
84+
{
85+
headers: {
86+
'X-Contentful-Version': params.version,
87+
...headers,
88+
},
89+
}
90+
)
91+
}
92+
93+
export const unpublish: RestEndpoint<'AiAction', 'unpublish'> = (
94+
http: AxiosInstance,
95+
params: GetSpaceParams & { aiActionId: string },
96+
headers?: RawAxiosRequestHeaders
97+
) => {
98+
return raw.del(http, `/spaces/${params.spaceId}/ai/actions/${params.aiActionId}/published`, {
99+
headers,
100+
})
101+
}
102+
103+
export const invoke: RestEndpoint<'AiAction', 'invoke'> = (
104+
http: AxiosInstance,
105+
params: GetSpaceEnvironmentParams & { aiActionId: string },
106+
data: AiActionInvocationType,
107+
headers?: RawAxiosRequestHeaders
108+
) => {
109+
return raw.post(
110+
http,
111+
`/spaces/${params.spaceId}/environments/${params.environmentId}/ai/actions/${params.aiActionId}/invoke`,
112+
data,
113+
{ headers }
114+
)
115+
}

lib/adapters/REST/endpoints/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import * as AiAction from './ai-action'
2+
import * as AiActionInvocation from './ai-action-invocation'
13
import * as AccessToken from './access-token'
24
import * as ApiKey from './api-key'
35
import * as AppAccessToken from './app-access-token'
@@ -64,6 +66,8 @@ import * as WorkflowDefinition from './workflow-definition'
6466
import * as WorkflowsChangelog from './workflows-changelog'
6567

6668
export default {
69+
AiAction,
70+
AiActionInvocation,
6771
ApiKey,
6872
AppAction,
6973
AppActionCall,

lib/common-types.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ import type {
180180
UpdateOAuthApplicationProps,
181181
} from './entities/oauth-application'
182182
import type { FunctionLogProps } from './entities/function-log'
183+
import type { AiActionProps, CreateAiActionProps } from './entities/ai-action'
184+
import type {
185+
AiActionInvocationProps,
186+
AiActionInvocationType,
187+
} from './entities/ai-action-invocation'
183188

184189
export interface DefaultElements<TPlainObject extends object = object> {
185190
toPlainObject(): TPlainObject
@@ -417,6 +422,17 @@ type MRInternal<UA extends boolean> = {
417422
(opts: MROpts<'Http', 'delete', UA>): MRReturn<'Http', 'delete'>
418423
(opts: MROpts<'Http', 'request', UA>): MRReturn<'Http', 'request'>
419424

425+
(opts: MROpts<'AiAction', 'get', UA>): MRReturn<'AiAction', 'get'>
426+
(opts: MROpts<'AiAction', 'getMany', UA>): MRReturn<'AiAction', 'getMany'>
427+
(opts: MROpts<'AiAction', 'create', UA>): MRReturn<'AiAction', 'create'>
428+
(opts: MROpts<'AiAction', 'update', UA>): MRReturn<'AiAction', 'update'>
429+
(opts: MROpts<'AiAction', 'delete', UA>): MRReturn<'AiAction', 'delete'>
430+
(opts: MROpts<'AiAction', 'publish', UA>): MRReturn<'AiAction', 'publish'>
431+
(opts: MROpts<'AiAction', 'unpublish', UA>): MRReturn<'AiAction', 'unpublish'>
432+
(opts: MROpts<'AiAction', 'invoke', UA>): MRReturn<'AiAction', 'invoke'>
433+
434+
(opts: MROpts<'AiActionInvocation', 'get', UA>): MRReturn<'AiActionInvocation', 'get'>
435+
420436
(opts: MROpts<'AppAction', 'get', UA>): MRReturn<'AppAction', 'get'>
421437
(opts: MROpts<'AppAction', 'getMany', UA>): MRReturn<'AppAction', 'getMany'>
422438
(opts: MROpts<'AppAction', 'delete', UA>): MRReturn<'AppAction', 'delete'>
@@ -929,6 +945,48 @@ export type MRActions = {
929945
delete: { params: { url: string; config?: RawAxiosRequestConfig }; return: any }
930946
request: { params: { url: string; config?: RawAxiosRequestConfig }; return: any }
931947
}
948+
AiAction: {
949+
get: { params: GetSpaceParams & { aiActionId: string }; return: AiActionProps }
950+
getMany: {
951+
params: GetSpaceParams & QueryParams
952+
return: CollectionProp<AiActionProps>
953+
}
954+
create: {
955+
params: GetSpaceParams
956+
payload: CreateAiActionProps
957+
headers?: RawAxiosRequestHeaders
958+
return: AiActionProps
959+
}
960+
update: {
961+
params: GetSpaceParams & { aiActionId: string }
962+
payload: AiActionProps
963+
headers?: RawAxiosRequestHeaders
964+
return: AiActionProps
965+
}
966+
delete: { params: GetSpaceParams & { aiActionId: string }; return: any }
967+
publish: {
968+
params: GetSpaceParams & { aiActionId: string; version: number }
969+
headers?: RawAxiosRequestHeaders
970+
return: AiActionProps
971+
}
972+
unpublish: {
973+
params: GetSpaceParams & { aiActionId: string }
974+
headers?: RawAxiosRequestHeaders
975+
return: AiActionProps
976+
}
977+
invoke: {
978+
params: GetSpaceEnvironmentParams & { aiActionId: string }
979+
payload: AiActionInvocationType
980+
headers?: RawAxiosRequestHeaders
981+
return: AiActionInvocationProps
982+
}
983+
}
984+
AiActionInvocation: {
985+
get: {
986+
params: GetSpaceEnvironmentParams & { aiActionId: string; invocationId: string }
987+
return: AiActionInvocationProps
988+
}
989+
}
932990
AppAction: {
933991
get: { params: GetAppActionParams; return: AppActionProps }
934992
getMany: {

lib/contentful-management.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ interface UserAgentParams {
4646
* @deprecated
4747
*/
4848
export type ClientParams = RestAdapterParams & UserAgentParams
49-
type ClientOptions = UserAgentParams & XOR<RestAdapterParams, AdapterParams>
49+
50+
export type ClientOptions = UserAgentParams & XOR<RestAdapterParams, AdapterParams>
5051

5152
/**
5253
* Create a client instance

lib/create-environment-api.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ import { wrapFunctionCollection } from './entities/function'
5656
import { wrapFunctionLog, wrapFunctionLogCollection } from './entities/function-log'
5757
import type { CreateAppAccessTokenProps } from './entities/app-access-token'
5858
import type { ResourceQueryOptions } from './entities/resource'
59+
import type { AiActionInvocationType } from './entities/ai-action-invocation'
60+
import { wrapAiActionInvocation } from './entities/ai-action-invocation'
5961

6062
/**
6163
* @private
@@ -2556,5 +2558,65 @@ export default function createEnvironmentApi(makeRequest: MakeRequest) {
25562558
},
25572559
}).then((data) => wrapResourceCollection(makeRequest, data))
25582560
},
2561+
/**
2562+
* Invokes an AI Action.
2563+
* @param aiActionId - The ID of the AI Action to invoke.
2564+
* @param payload - The invocation payload.
2565+
* @returns Promise for an AI Action Invocation.
2566+
* @example ```javascript
2567+
* client.getSpace('<space_id>')
2568+
* .then(space => space.getEnvironment('<environment_id>'))
2569+
* .then(environment => environment.invokeAiAction('<ai_action_id>', {
2570+
* variables: [ ... ],
2571+
* outputFormat: 'RichText'
2572+
* }))
2573+
* .then(invocation => console.log(invocation))
2574+
* .catch(console.error)
2575+
* ```
2576+
*/
2577+
invokeAiAction(aiActionId: string, payload: AiActionInvocationType) {
2578+
const raw = this.toPlainObject() as EnvironmentProps
2579+
return makeRequest({
2580+
entityType: 'AiAction',
2581+
action: 'invoke',
2582+
params: { spaceId: raw.sys.space.sys.id, environmentId: raw.sys.id, aiActionId },
2583+
payload,
2584+
}).then((data) => wrapAiActionInvocation(makeRequest, data))
2585+
},
2586+
2587+
/**
2588+
* Retrieves an AI Action Invocation.
2589+
* @param params - Object containing the AI Action ID and the Invocation ID.
2590+
* @returns Promise for an AI Action Invocation.
2591+
* @example ```javascript
2592+
* client.getSpace('<space_id>')
2593+
* .then(space => space.getEnvironment('<environment_id>'))
2594+
* .then(environment => environment.getAiActionInvocation({
2595+
* aiActionId: '<ai_action_id>',
2596+
* invocationId: '<invocation_id>'
2597+
* }))
2598+
* .then(invocation => console.log(invocation))
2599+
* .catch(console.error)
2600+
* ```
2601+
*/
2602+
getAiActionInvocation({
2603+
aiActionId,
2604+
invocationId,
2605+
}: {
2606+
aiActionId: string
2607+
invocationId: string
2608+
}) {
2609+
const raw = this.toPlainObject() as EnvironmentProps
2610+
return makeRequest({
2611+
entityType: 'AiActionInvocation',
2612+
action: 'get',
2613+
params: {
2614+
spaceId: raw.sys.space.sys.id,
2615+
environmentId: raw.sys.id,
2616+
aiActionId,
2617+
invocationId,
2618+
},
2619+
}).then((data) => wrapAiActionInvocation(makeRequest, data))
2620+
},
25592621
}
25602622
}

0 commit comments

Comments
 (0)