twenty-client-sdk 2.49.0 → 2.50.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.
@@ -0,0 +1,4 @@
1
+ //#region ../twenty-shared/dist/application-runtime.mjs
2
+ var e = "TWENTY_API_KEY", t = "TWENTY_API_URL", n = "TWENTY_APP_ACCESS_TOKEN", r = "TWENTY_APP_APPLICATION_ACCESS_TOKEN", i = "TWENTY_FUNCTIONS_URL";
3
+ //#endregion
4
+ export { e as a, n as i, r as n, t as r, i as t };
@@ -0,0 +1 @@
1
+ var e=`TWENTY_API_KEY`,t=`TWENTY_API_URL`,n=`TWENTY_APP_ACCESS_TOKEN`,r=`TWENTY_APP_APPLICATION_ACCESS_TOKEN`,i=`TWENTY_FUNCTIONS_URL`;Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
package/dist/core.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./chunk-mLOUI7ql.js");var t=class{constructor(e){throw Error("CoreApiClient was not generated. Install this app on a Twenty instance or run `yarn twenty dev`.")}},n=e.n({});exports.CoreApiClient=t,Object.defineProperty(exports,"CoreSchema",{enumerable:!0,get:function(){return n}});
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./chunk-DWNI8pZO.js");var t=class{constructor(e){throw Error("CoreApiClient was not generated. Install this app on a Twenty instance or run `yarn twenty dev`.")}},n=e.t({});exports.CoreApiClient=t,Object.defineProperty(exports,"CoreSchema",{enumerable:!0,get:function(){return n}});
package/dist/core.mjs CHANGED
@@ -1,9 +1,15 @@
1
- import { n as e } from "./chunk-Dqa2HsxW.mjs";
2
- //#region src/core/generated/index.ts
3
- var t = class {
1
+ //#region \0rolldown/runtime.js
2
+ var e = Object.defineProperty, t = (t, n) => {
3
+ let r = {};
4
+ for (var i in t) e(r, i, {
5
+ get: t[i],
6
+ enumerable: !0
7
+ });
8
+ return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
9
+ }, n = class {
4
10
  constructor(e) {
5
11
  throw Error("CoreApiClient was not generated. Install this app on a Twenty instance or run `yarn twenty dev`.");
6
12
  }
7
- }, n = /* @__PURE__ */ e({});
13
+ }, r = /* @__PURE__ */ t({});
8
14
  //#endregion
9
- export { t as CoreApiClient, n as CoreSchema };
15
+ export { n as CoreApiClient, r as CoreSchema };
package/dist/generate.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./chunk-mLOUI7ql.js"),t=require("./application-k13CQDdV.js");let n=require("node:fs/promises"),r=require("node:path"),i=require("esbuild"),a=require("graphql"),o=require("lodash/camelCase.js");o=e.r(o);let s=require("node:fs"),c=require("node:os"),l=require("prettier/standalone");l=e.r(l);let u=require("prettier/plugins/graphql");u=e.r(u);let d=require("prettier/plugins/typescript");d=e.r(d);let f=require("prettier/plugins/estree");f=e.r(f);let p=require("lodash/uniq.js");p=e.r(p);let ee=require("node:url");var te=`// __STRIPPED_DURING_INJECTION_START__`,ne=`// __STRIPPED_DURING_INJECTION_END__`,m=`// __UPLOAD_FILE_START__`,h=`// __UPLOAD_FILE_END__`,g=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),_=(e,t)=>{let n=e;return n=n.replace(RegExp(`${g(te)}[\\s\\S]*?${g(ne)}\\n?`),``),n=n.replace(`'__TWENTY_DEFAULT_URL__'`,t.defaultUrl),n=n.replace(/TwentyGeneratedClient/g,t.apiClientName),t.includeUploadFile?(n=n.replace(RegExp(`\\s*${g(m)}\\n`),`
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./chunk-DWNI8pZO.js"),t=require("./application-runtime-D8WlTvVU.js");let n=require("node:fs/promises"),r=require("node:path"),i=require("esbuild"),a=require("graphql"),o=require("lodash/camelCase.js");o=e.n(o);let s=require("node:fs"),c=require("node:os"),l=require("prettier/standalone");l=e.n(l);let u=require("prettier/plugins/graphql");u=e.n(u);let d=require("prettier/plugins/typescript");d=e.n(d);let f=require("prettier/plugins/estree");f=e.n(f);let p=require("lodash/uniq.js");p=e.n(p);let ee=require("node:url");var te=`// __STRIPPED_DURING_INJECTION_START__`,ne=`// __STRIPPED_DURING_INJECTION_END__`,m=`// __UPLOAD_FILE_START__`,h=`// __UPLOAD_FILE_END__`,g=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),_=(e,t)=>{let n=e;return n=n.replace(RegExp(`${g(te)}[\\s\\S]*?${g(ne)}\\n?`),``),n=n.replace(`'__TWENTY_DEFAULT_URL__'`,t.defaultUrl),n=n.replace(/TwentyGeneratedClient/g,t.apiClientName),t.includeUploadFile?(n=n.replace(RegExp(`\\s*${g(m)}\\n`),`
2
2
  `),n=n.replace(RegExp(`\\s*${g(h)}\\n`),`
3
3
  `)):n=n.replace(RegExp(`\\s*${g(m)}[\\s\\S]*?${g(h)}\\n?`),`
4
4
  `),`\n// ${t.apiClientName} (auto-injected by twenty-client-sdk)\n${n}`},v=e=>(0,n.mkdir)(e,{recursive:!0}),y=async e=>{let t;try{t=await(0,n.readdir)(e)}catch(t){if(t instanceof Error&&`code`in t&&t.code===`ENOENT`){await(0,n.mkdir)(e,{recursive:!0});return}throw t}await Promise.all(t.map(t=>(0,n.rm)((0,r.join)(e,t),{recursive:!0,force:!0})))},b=async(e,t)=>{try{await(0,n.rename)(e,t)}catch(r){if(r instanceof Error&&`code`in r&&r.code===`EXDEV`)await(0,n.cp)(e,t,{recursive:!0}),await(0,n.rm)(e,{recursive:!0,force:!0});else throw r}},x=e=>(0,n.rm)(e,{recursive:!0,force:!0}),re=e=>{let{root:t}=(0,r.parse)(e),n=e.slice(t.length).split(/[\\/]/).filter(Boolean).length,i=(0,r.resolve)((0,c.homedir)()),a=e===i||i.startsWith(`${e}/`);if(e===t||n<2||a)throw Error(`Refusing to recursively clear unsafe path: ${e}`)},S=async(e,t=!1)=>{let n=(0,r.resolve)(...e);t&&(re(n),await s.promises.rm(n,{recursive:!0,force:!0})),await s.promises.mkdir(n,{recursive:!0})},C=async(e,t)=>{let n=(0,r.resolve)(...e,`..`);await s.promises.mkdir(n,{recursive:!0}),await s.promises.writeFile((0,r.resolve)(...e),t)},w=`./runtime`,T=e=>e?`${e.name}GenqlSelection`:``,ie=e=>{let t=e.config?.endpoint?`"${e.config.endpoint}"`:`undefined`,n=e.config?.fetchImport;return`
@@ -1091,7 +1091,7 @@ export interface LinkedTypeMap {
1091
1091
  `)+`
1092
1092
  }
1093
1093
  `).join(`
1094
- `))}var Ie=async e=>{if(!e.schema)throw Error("`schema` must be defined in the config");let t=(0,a.buildSchema)(e.schema,{assumeValidSDL:!0}),n=e.sortProperties?(0,a.lexicographicSortSchema)(t):t;return n.getQueryType()&&(0,a.assertValidSchema)(n),n},Z=async e=>{if(!e.output)throw Error("`output` must be defined in the config");await Pe(e,await Ie(e))},Le={DateTime:`string`,JSON:`Record<string, unknown>`,UUID:`string`},Q=`core/generated`,$=async({schema:e,outputPath:i,clientWrapperTemplateSource:a})=>{let o=a??`import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';
1094
+ `))}var Ie=async e=>{if(!e.schema)throw Error("`schema` must be defined in the config");let t=(0,a.buildSchema)(e.schema,{assumeValidSDL:!0}),n=e.sortProperties?(0,a.lexicographicSortSchema)(t):t;return n.getQueryType()&&(0,a.assertValidSchema)(n),n},Z=async e=>{if(!e.output)throw Error("`output` must be defined in the config");await Pe(e,await Ie(e))},Le={DateTime:`string`,JSON:`unknown`,UUID:`string`},Q=`core/generated`,$=async({schema:e,outputPath:i,clientWrapperTemplateSource:a})=>{let o=a??`import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';
1095
1095
 
1096
1096
  // Ambient stubs for the genql-generated code this template is injected into.
1097
1097
  // __STRIPPED_DURING_INJECTION_START__
@@ -1585,7 +1585,7 @@ export class TwentyGeneratedClient {
1585
1585
  processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;
1586
1586
  }
1587
1587
  }
1588
- `,s=`${i}.tmp`;await v(s),await y(s);try{await Z({schema:e,output:s,scalarTypes:Le});let a=_(o,{apiClientName:`CoreApiClient`,defaultUrl:`\`\${process.env.${t.a}}/graphql\``,includeUploadFile:!0});await(0,n.appendFile)((0,r.join)(s,`index.ts`),a),await x(i),await b(s,i),await ze(i)}catch(e){throw await x(s),e}},Re=async({packageRoot:e,schema:t})=>{let i=(0,r.join)(e,`dist`,Q);await $({schema:t,outputPath:i}),await(0,n.copyFile)((0,r.join)(i,`index.mjs`),(0,r.join)(e,`dist`,`core.mjs`)),await(0,n.copyFile)((0,r.join)(i,`index.cjs`),(0,r.join)(e,`dist`,`core.cjs`))},ze=async e=>{let t=(0,r.join)(e,`index.ts`),a=(0,r.join)(e,`index.mjs`);await(0,i.build)({entryPoints:[t],outfile:a,bundle:!0,format:`esm`,platform:`node`,target:`node18`,sourcemap:!1,minify:!1}),await(0,i.build)({entryPoints:[t],outfile:(0,r.join)(e,`index.cjs`),bundle:!0,format:`cjs`,platform:`node`,target:`node18`,sourcemap:!1,minify:!1}),await(0,n.writeFile)((0,r.join)(e,`package.json`),JSON.stringify({type:`module`,main:`index.mjs`,module:`index.mjs`},null,2))},Be={DateTime:`string`,JSON:`Record<string, unknown>`,UUID:`string`},Ve=async({schema:e,outputPath:i,clientWrapperTemplateSource:a})=>{let o=a??`import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';
1588
+ `,s=`${i}.tmp`;await v(s),await y(s);try{await Z({schema:e,output:s,scalarTypes:Le});let a=_(o,{apiClientName:`CoreApiClient`,defaultUrl:`\`\${process.env.${t.r}}/graphql\``,includeUploadFile:!0});await(0,n.appendFile)((0,r.join)(s,`index.ts`),a),await x(i),await b(s,i),await ze(i)}catch(e){throw await x(s),e}},Re=async({packageRoot:e,schema:t})=>{let i=(0,r.join)(e,`dist`,Q);await $({schema:t,outputPath:i}),await(0,n.copyFile)((0,r.join)(i,`index.mjs`),(0,r.join)(e,`dist`,`core.mjs`)),await(0,n.copyFile)((0,r.join)(i,`index.cjs`),(0,r.join)(e,`dist`,`core.cjs`))},ze=async e=>{let t=(0,r.join)(e,`index.ts`),a=(0,r.join)(e,`index.mjs`);await(0,i.build)({entryPoints:[t],outfile:a,bundle:!0,format:`esm`,platform:`node`,target:`node18`,sourcemap:!1,minify:!1}),await(0,i.build)({entryPoints:[t],outfile:(0,r.join)(e,`index.cjs`),bundle:!0,format:`cjs`,platform:`node`,target:`node18`,sourcemap:!1,minify:!1}),await(0,n.writeFile)((0,r.join)(e,`package.json`),JSON.stringify({type:`module`,main:`index.mjs`,module:`index.mjs`},null,2))},Be={DateTime:`string`,JSON:`Record<string, unknown>`,UUID:`string`},Ve=async({schema:e,outputPath:i,clientWrapperTemplateSource:a})=>{let o=a??`import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';
1589
1589
 
1590
1590
  // Ambient stubs for the genql-generated code this template is injected into.
1591
1591
  // __STRIPPED_DURING_INJECTION_START__
@@ -2079,4 +2079,4 @@ export class TwentyGeneratedClient {
2079
2079
  processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;
2080
2080
  }
2081
2081
  }
2082
- `;await v(i),await y(i),await Z({schema:e,output:i,scalarTypes:{...Be,Upload:`File`}});let s=_(o,{apiClientName:`MetadataApiClient`,defaultUrl:`\`\${process.env.${t.a}}/metadata\``,includeUploadFile:!0});await(0,n.appendFile)((0,r.join)(i,`index.ts`),s)};exports.GENERATED_CORE_DIR=Q,exports.generateCoreClientFromSchema=$,exports.generateMetadataClient=Ve,exports.replaceCoreClient=Re;
2082
+ `;await v(i),await y(i),await Z({schema:e,output:i,scalarTypes:{...Be,Upload:`File`}});let s=_(o,{apiClientName:`MetadataApiClient`,defaultUrl:`\`\${process.env.${t.r}}/metadata\``,includeUploadFile:!0});await(0,n.appendFile)((0,r.join)(i,`index.ts`),s)};exports.GENERATED_CORE_DIR=Q,exports.generateCoreClientFromSchema=$,exports.generateMetadataClient=Ve,exports.replaceCoreClient=Re;
package/dist/generate.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e } from "./application-BDz3e_S2.mjs";
1
+ import { r as e } from "./application-runtime-ChCYK0LL.mjs";
2
2
  import { appendFile as t, copyFile as n, cp as r, mkdir as i, readdir as a, rename as o, rm as s, writeFile as c } from "node:fs/promises";
3
3
  import { dirname as l, join as u, parse as ee, relative as d, resolve as f } from "node:path";
4
4
  import { build as p } from "esbuild";
@@ -519,7 +519,7 @@ var ot = async (e) => {
519
519
  await it(e, await ot(e));
520
520
  }, st = {
521
521
  DateTime: "string",
522
- JSON: "Record<string, unknown>",
522
+ JSON: "unknown",
523
523
  UUID: "string"
524
524
  }, Q = "core/generated", $ = async ({ schema: n, outputPath: r, clientWrapperTemplateSource: i }) => {
525
525
  let a = i ?? "import type { TwentyClientRunAs } from '../shared/twenty-client-run-as.type';\n\n// Ambient stubs for the genql-generated code this template is injected into.\n// __STRIPPED_DURING_INJECTION_START__\ntype QueryGenqlSelection = Record<string, unknown>;\ntype MutationGenqlSelection = Record<string, unknown>;\ntype GraphqlOperation = Record<string, unknown>;\n\ntype ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {\n url?: string;\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n fetcher?: (\n operation: GraphqlOperation | GraphqlOperation[],\n ) => Promise<unknown>;\n fetch?: typeof globalThis.fetch;\n batch?: unknown;\n};\n\ntype Client = {\n query: (\n request: QueryGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n mutation: (\n request: MutationGenqlSelection & { __name?: string },\n ) => Promise<unknown>;\n};\n\ndeclare function createClient(options: ClientOptions): Client;\n\ndeclare class GenqlError extends Error {\n constructor(errors: unknown, data: unknown);\n}\n// __STRIPPED_DURING_INJECTION_END__\n\nconst APP_ACCESS_TOKEN_ENV_KEY = 'TWENTY_APP_ACCESS_TOKEN';\nconst APP_APPLICATION_ACCESS_TOKEN_ENV_KEY =\n 'TWENTY_APP_APPLICATION_ACCESS_TOKEN';\nconst API_KEY_ENV_KEY = 'TWENTY_API_KEY';\n\nexport type TwentyGeneratedClientOptions = ClientOptions & {\n runAs?: TwentyClientRunAs;\n};\n\ntype ProcessEnvironment = Record<string, string | undefined>;\n\ntype GraphqlErrorPayloadEntry = {\n message?: string;\n extensions?: { code?: string };\n};\n\ntype GraphqlResponsePayload = {\n data?: Record<string, unknown>;\n errors?: GraphqlErrorPayloadEntry[];\n};\n\ntype GraphqlResponse = {\n status: number;\n statusText: string;\n payload: GraphqlResponsePayload | null;\n rawBody: string;\n};\n\ntype FilesFieldUploadTarget = {\n fileId: string;\n uploadUrl: string;\n contentType: string;\n};\n\ntype FilesFieldUploadedFile = {\n id: string;\n path: string;\n size: number;\n createdAt: string;\n url: string;\n};\n\nconst getProcessEnvironment = (): ProcessEnvironment => {\n const processObject = (\n globalThis as { process?: { env?: ProcessEnvironment } }\n ).process;\n\n return processObject?.env ?? {};\n};\n\nconst getTokenFromAuthorizationHeader = (\n authorizationHeader: string | undefined,\n): string | null => {\n if (typeof authorizationHeader !== 'string') {\n return null;\n }\n\n const trimmedAuthorizationHeader = authorizationHeader.trim();\n\n if (trimmedAuthorizationHeader.length === 0) {\n return null;\n }\n\n if (trimmedAuthorizationHeader === 'Bearer') {\n return null;\n }\n\n if (trimmedAuthorizationHeader.startsWith('Bearer ')) {\n return trimmedAuthorizationHeader.slice('Bearer '.length).trim();\n }\n\n return trimmedAuthorizationHeader;\n};\n\nconst getTokenFromHeaders = (\n headers: HeadersInit | undefined,\n): string | null => {\n if (!headers) {\n return null;\n }\n\n if (headers instanceof Headers) {\n return getTokenFromAuthorizationHeader(\n headers.get('Authorization') ?? undefined,\n );\n }\n\n if (Array.isArray(headers)) {\n const matchedAuthorizationHeader = headers.find(\n ([headerName]) => headerName.toLowerCase() === 'authorization',\n );\n\n return getTokenFromAuthorizationHeader(matchedAuthorizationHeader?.[1]);\n }\n\n const headersRecord = headers as Record<string, string | undefined>;\n\n return getTokenFromAuthorizationHeader(\n headersRecord.Authorization ?? headersRecord.authorization,\n );\n};\n\nconst hasAuthenticationErrorInGraphqlPayload = (\n payload: GraphqlResponsePayload | null,\n): boolean => {\n if (!payload?.errors) {\n return false;\n }\n\n return payload.errors.some((graphqlError) => {\n return (\n graphqlError.extensions?.code === 'UNAUTHENTICATED' ||\n graphqlError.message?.toLowerCase() === 'unauthorized'\n );\n });\n};\n\nconst defaultOptions: TwentyGeneratedClientOptions = {\n url: '__TWENTY_DEFAULT_URL__',\n headers: {\n 'Content-Type': 'application/json',\n },\n};\n\nexport class TwentyGeneratedClient {\n private client: Client;\n private url: string;\n private requestOptions: RequestInit;\n private headers: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);\n private fetchImplementation: typeof globalThis.fetch | null;\n private authorizationToken: string | null;\n private refreshAccessTokenPromise: Promise<string | null> | null = null;\n\n constructor(options?: TwentyGeneratedClientOptions) {\n const merged: TwentyGeneratedClientOptions = {\n ...defaultOptions,\n ...options,\n };\n\n const {\n url,\n headers,\n fetch: customFetchImplementation,\n fetcher: _fetcher,\n batch: _batch,\n runAs,\n ...requestOptions\n } = merged;\n\n this.url = url ?? '';\n this.requestOptions = requestOptions;\n this.headers = headers ?? {};\n this.fetchImplementation =\n customFetchImplementation ?? globalThis.fetch ?? null;\n\n const processEnvironment = getProcessEnvironment();\n const tokenFromHeaders = getTokenFromHeaders(\n typeof headers === 'function' ? undefined : headers,\n );\n\n this.authorizationToken =\n tokenFromHeaders ??\n processEnvironment[\n runAs === 'application'\n ? APP_APPLICATION_ACCESS_TOKEN_ENV_KEY\n : APP_ACCESS_TOKEN_ENV_KEY\n ] ??\n processEnvironment[API_KEY_ENV_KEY] ??\n null;\n\n this.client = createClient({\n ...merged,\n headers: undefined,\n fetcher: async (operation) =>\n this.executeGraphqlRequestWithOptionalRefresh({\n operation,\n }),\n });\n }\n\n query<R extends QueryGenqlSelection>(request: R & { __name?: string }) {\n return this.client.query(request);\n }\n\n mutation<R extends MutationGenqlSelection>(request: R & { __name?: string }) {\n return this.client.mutation(request);\n }\n\n // __UPLOAD_FILE_START__\n async uploadFile({\n fileBuffer,\n filename,\n fieldMetadataUniversalIdentifier,\n }: {\n fileBuffer: Buffer;\n filename: string;\n fieldMetadataUniversalIdentifier: string;\n }): Promise<FilesFieldUploadedFile> {\n const { createFileUpload: uploadTarget } =\n await this.executeMutationOrThrow<{\n createFileUpload: FilesFieldUploadTarget;\n }>({\n query: `mutation CreateFilesFieldFileUpload($filename: String!, $size: Float!, $fieldMetadataUniversalIdentifier: String!) {\n createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }\n }`,\n variables: {\n filename,\n size: fileBuffer.byteLength,\n fieldMetadataUniversalIdentifier,\n },\n });\n\n await this.putFileToUploadTargetOrThrow({ fileBuffer, uploadTarget });\n\n const { completeFileUpload: uploadedFile } =\n await this.executeMutationOrThrow<{\n completeFileUpload: FilesFieldUploadedFile;\n }>({\n query: `mutation CompleteFilesFieldFileUpload($fileId: String!) {\n completeFileUpload(fileId: $fileId) { id path size createdAt url }\n }`,\n variables: { fileId: uploadTarget.fileId },\n });\n\n return uploadedFile;\n }\n\n private async putFileToUploadTargetOrThrow({\n fileBuffer,\n uploadTarget,\n }: {\n fileBuffer: Buffer;\n uploadTarget: FilesFieldUploadTarget;\n }): Promise<void> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const response = await fetchImplementation.call(\n globalThis,\n uploadTarget.uploadUrl,\n {\n method: 'PUT',\n headers: { 'Content-Type': uploadTarget.contentType },\n body: fileBuffer as BodyInit,\n credentials: 'omit',\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `File upload failed (${response.status} ${response.statusText}): ${await response.text()}`,\n );\n }\n }\n\n private async executeMutationOrThrow<TData>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<TData> {\n const result = await this.executeGraphqlRequestWithOptionalRefresh({\n operation: { query, variables },\n });\n\n if (result.errors) {\n throw new GenqlError(result.errors, result.data);\n }\n\n if (!result.data) {\n throw new Error('Empty GraphQL response');\n }\n\n return result.data as TData;\n }\n // __UPLOAD_FILE_END__\n\n private async executeGraphqlRequestWithOptionalRefresh({\n operation,\n headers,\n requestInit,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n }) {\n const firstResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: this.authorizationToken,\n });\n\n if (this.shouldRefreshToken(firstResponse)) {\n const refreshedAccessToken = await this.requestRefreshedAccessToken();\n\n if (refreshedAccessToken) {\n const retryResponse = await this.executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token: refreshedAccessToken,\n });\n\n return this.assertResponseIsSuccessful(retryResponse);\n }\n }\n\n return this.assertResponseIsSuccessful(firstResponse);\n }\n\n private async executeGraphqlRequest({\n operation,\n headers,\n requestInit,\n token,\n }: {\n operation: GraphqlOperation | GraphqlOperation[] | FormData;\n headers?: HeadersInit;\n requestInit?: RequestInit;\n token: string | null;\n }): Promise<GraphqlResponse> {\n const fetchImplementation = this.getFetchImplementationOrThrow();\n\n const resolvedHeaders = await this.resolveHeaders();\n const requestHeaders = new Headers(resolvedHeaders);\n\n if (headers) {\n new Headers(headers).forEach((value, key) =>\n requestHeaders.set(key, value),\n );\n }\n\n if (operation instanceof FormData) {\n requestHeaders.delete('Content-Type');\n } else {\n requestHeaders.set('Content-Type', 'application/json');\n }\n\n if (token) {\n requestHeaders.set('Authorization', `Bearer ${token}`);\n } else {\n requestHeaders.delete('Authorization');\n }\n\n const response = await fetchImplementation.call(globalThis, this.url, {\n ...this.requestOptions,\n ...requestInit,\n method: requestInit?.method ?? 'POST',\n headers: requestHeaders,\n body:\n operation instanceof FormData ? operation : JSON.stringify(operation),\n });\n\n const rawBody = await response.text();\n let payload: GraphqlResponsePayload | null = null;\n\n if (rawBody.trim().length > 0) {\n try {\n payload = JSON.parse(rawBody) as GraphqlResponsePayload;\n } catch {\n payload = null;\n }\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n payload,\n rawBody,\n };\n }\n\n private getFetchImplementationOrThrow(): typeof globalThis.fetch {\n if (!this.fetchImplementation) {\n throw new Error(\n 'Global `fetch` function is not available, ' +\n 'pass a fetch implementation to the Twenty client',\n );\n }\n\n return this.fetchImplementation;\n }\n\n private async resolveHeaders(): Promise<HeadersInit> {\n if (typeof this.headers === 'function') {\n return (await this.headers()) ?? {};\n }\n\n return this.headers ?? {};\n }\n\n private shouldRefreshToken(response: GraphqlResponse): boolean {\n if (response.status === 401) {\n return true;\n }\n\n return hasAuthenticationErrorInGraphqlPayload(response.payload);\n }\n\n private assertResponseIsSuccessful(response: GraphqlResponse) {\n if (response.status < 200 || response.status >= 300) {\n throw new Error(`${response.statusText}: ${response.rawBody}`);\n }\n\n if (response.payload === null) {\n throw new Error('Invalid JSON response');\n }\n\n return response.payload;\n }\n\n private async requestRefreshedAccessToken(): Promise<string | null> {\n const refreshAccessTokenFunction = (\n globalThis as {\n frontComponentHostCommunicationApi?: {\n requestAccessTokenRefresh?: () => Promise<string>;\n };\n }\n ).frontComponentHostCommunicationApi?.requestAccessTokenRefresh;\n\n if (typeof refreshAccessTokenFunction !== 'function') {\n return null;\n }\n\n if (!this.refreshAccessTokenPromise) {\n this.refreshAccessTokenPromise = refreshAccessTokenFunction()\n .then((refreshedAccessToken) => {\n if (\n typeof refreshedAccessToken !== 'string' ||\n refreshedAccessToken.length === 0\n ) {\n return null;\n }\n\n this.setAuthorizationToken(refreshedAccessToken);\n\n return refreshedAccessToken;\n })\n .catch((refreshError: unknown) => {\n console.error('Twenty client: token refresh failed', refreshError);\n\n return null;\n })\n .finally(() => {\n this.refreshAccessTokenPromise = null;\n });\n }\n\n return this.refreshAccessTokenPromise;\n }\n\n private setAuthorizationToken(token: string) {\n this.authorizationToken = token;\n\n const processEnvironment = getProcessEnvironment();\n\n processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;\n }\n}\n", o = `${r}.tmp`;
@@ -386,6 +386,12 @@ export interface ApplicationHealthCheckResult {
386
386
  __typename: 'ApplicationHealthCheckResult';
387
387
  }
388
388
  export type ApplicationHealthStatus = 'ERROR' | 'INFO' | 'NEUTRAL' | 'OK' | 'SUCCESS' | 'UNKNOWN' | 'WARNING';
389
+ export interface ApplicationPreferences {
390
+ applicationId: Scalars['UUID'];
391
+ settingsMenuItems: SettingsMenuItem[];
392
+ variables: UserApplicationVariableValue[];
393
+ __typename: 'ApplicationPreferences';
394
+ }
389
395
  export interface ApplicationRegistration {
390
396
  createdAt: Scalars['DateTime'];
391
397
  galleryImagesUrls: Scalars['String'][];
@@ -614,7 +620,7 @@ export interface BillingEntitlement {
614
620
  value: Scalars['Boolean'];
615
621
  __typename: 'BillingEntitlement';
616
622
  }
617
- export type BillingEntitlementKey = 'AUDIT_LOGS' | 'CUSTOM_DOMAIN' | 'RECORD_SHARING' | 'RLS' | 'SSO' | 'USAGE_LIMIT' | 'VALIDATION_RULES';
623
+ export type BillingEntitlementKey = 'AUDIT_LOGS' | 'CUSTOM_DOMAIN' | 'CUSTOM_ROLES' | 'RECORD_SHARING' | 'RLS' | 'SSO' | 'USAGE_LIMIT' | 'VALIDATION_RULES';
618
624
  export interface BillingLicensedProduct {
619
625
  description: Scalars['String'];
620
626
  images?: Scalars['String'][];
@@ -697,6 +703,8 @@ export interface BillingResourceCreditUsage {
697
703
  userCreditsUsed: Scalars['Float'];
698
704
  workspaceCreditsExtraGranted: Scalars['Float'];
699
705
  workspaceCreditsGranted: Scalars['Float'];
706
+ workspaceCreditsGrantedForSeats: Scalars['Float'];
707
+ workspaceCreditsSeats: Scalars['Int'];
700
708
  workspaceCreditsTotalGranted: Scalars['Float'];
701
709
  workspaceCreditsUsed: Scalars['Float'];
702
710
  __typename: 'BillingResourceCreditUsage';
@@ -1204,7 +1212,7 @@ export interface FeatureFlag {
1204
1212
  value: Scalars['Boolean'];
1205
1213
  __typename: 'FeatureFlag';
1206
1214
  }
1207
- export type FeatureFlagKey = 'IS_AI_CHAT_INBOX_ENABLED' | 'IS_APP_PREFERENCES_ENABLED' | 'IS_ASYNC_CSV_EXPORT_ENABLED' | 'IS_CALENDAR_EVENT_SHARED_ACROSS_CHANNELS_ENABLED' | 'IS_CONFIGURABLE_SEARCH_FIELDS_ENABLED' | 'IS_DEFERRED_WORKSPACE_MIGRATION_ACTIONS_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_LOGS_SETTINGS_SECTION_ENABLED' | 'IS_MESSAGE_CAMPAIGN_ENABLED' | 'IS_RECORD_CREATION_FORM_ENABLED' | 'IS_RECORD_LEVEL_SHARING_ENABLED' | 'IS_RECORD_SHARE_VISIBILITY_GATING_ENABLED' | 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT';
1215
+ export type FeatureFlagKey = 'IS_AI_CHAT_INBOX_ENABLED' | 'IS_APP_PREFERENCES_ENABLED' | 'IS_ASYNC_CSV_EXPORT_ENABLED' | 'IS_CALENDAR_EVENT_SHARED_ACROSS_CHANNELS_ENABLED' | 'IS_CONFIGURABLE_SEARCH_FIELDS_ENABLED' | 'IS_DEFERRED_WORKSPACE_MIGRATION_ACTIONS_ENABLED' | 'IS_LOGS_SETTINGS_SECTION_ENABLED' | 'IS_MESSAGE_CAMPAIGN_ENABLED' | 'IS_RECORD_CREATION_FORM_ENABLED' | 'IS_RECORD_LEVEL_SHARING_ENABLED' | 'IS_REST_METADATA_API_NEW_FORMAT_DIRECT';
1208
1216
  export interface Field {
1209
1217
  applicationId: Scalars['UUID'];
1210
1218
  createdAt: Scalars['DateTime'];
@@ -1671,6 +1679,11 @@ export interface MessageCampaignDetailsConfiguration {
1671
1679
  configurationType: WidgetConfigurationType;
1672
1680
  __typename: 'MessageCampaignDetailsConfiguration';
1673
1681
  }
1682
+ export interface MessageCampaignSendBlockerDTO {
1683
+ code: Scalars['String'];
1684
+ message: Scalars['String'];
1685
+ __typename: 'MessageCampaignSendBlockerDTO';
1686
+ }
1674
1687
  export interface MessageChannel {
1675
1688
  connectedAccount?: ConnectedAccountPublicDTO;
1676
1689
  connectedAccountId: Scalars['UUID'];
@@ -2389,6 +2402,11 @@ export interface PlaceDetailsResult {
2389
2402
  street?: Scalars['String'];
2390
2403
  __typename: 'PlaceDetailsResult';
2391
2404
  }
2405
+ export interface PreviewMessageCampaignSendOutputDTO {
2406
+ audience?: CampaignAudiencePreviewDTO;
2407
+ blockers: MessageCampaignSendBlockerDTO[];
2408
+ __typename: 'PreviewMessageCampaignSendOutputDTO';
2409
+ }
2392
2410
  export interface PublicApplicationRegistration {
2393
2411
  id: Scalars['UUID'];
2394
2412
  logoUrl?: Scalars['String'];
@@ -2556,6 +2574,7 @@ export interface Query {
2556
2574
  metadataTranslations: MetadataTranslation[];
2557
2575
  minimalMetadata: MinimalMetadata;
2558
2576
  mostlyEmptyFieldMetadataIds: Scalars['UUID'][];
2577
+ myApplicationPreferences: ApplicationPreferences[];
2559
2578
  myCalendarChannels: CalendarChannel[];
2560
2579
  myConnectedAccounts: ConnectedAccountPublicDTO[];
2561
2580
  myMessageChannels: MessageChannel[];
@@ -2568,6 +2587,7 @@ export interface Query {
2568
2587
  objects: ObjectConnection;
2569
2588
  pieChartData: PieChartData;
2570
2589
  previewMessageCampaignAudience: CampaignAudiencePreviewDTO;
2590
+ previewMessageCampaignSend: PreviewMessageCampaignSendOutputDTO;
2571
2591
  publicMarketplaceAppDetail: MarketplaceAppDetail;
2572
2592
  publicMarketplaceApps: MarketplaceApp[];
2573
2593
  recordPermissions: RecordPermissionsResult[];
@@ -3972,6 +3992,13 @@ export interface ApplicationHealthCheckResultGenqlSelection {
3972
3992
  __typename?: boolean | number;
3973
3993
  __scalar?: boolean | number;
3974
3994
  }
3995
+ export interface ApplicationPreferencesGenqlSelection {
3996
+ applicationId?: boolean | number;
3997
+ settingsMenuItems?: SettingsMenuItemGenqlSelection;
3998
+ variables?: UserApplicationVariableValueGenqlSelection;
3999
+ __typename?: boolean | number;
4000
+ __scalar?: boolean | number;
4001
+ }
3975
4002
  export interface ApplicationRegistrationGenqlSelection {
3976
4003
  createdAt?: boolean | number;
3977
4004
  galleryImagesUrls?: boolean | number;
@@ -4314,6 +4341,8 @@ export interface BillingResourceCreditUsageGenqlSelection {
4314
4341
  userCreditsUsed?: boolean | number;
4315
4342
  workspaceCreditsExtraGranted?: boolean | number;
4316
4343
  workspaceCreditsGranted?: boolean | number;
4344
+ workspaceCreditsGrantedForSeats?: boolean | number;
4345
+ workspaceCreditsSeats?: boolean | number;
4317
4346
  workspaceCreditsTotalGranted?: boolean | number;
4318
4347
  workspaceCreditsUsed?: boolean | number;
4319
4348
  __typename?: boolean | number;
@@ -5902,6 +5931,12 @@ export interface MessageCampaignDetailsConfigurationGenqlSelection {
5902
5931
  __typename?: boolean | number;
5903
5932
  __scalar?: boolean | number;
5904
5933
  }
5934
+ export interface MessageCampaignSendBlockerDTOGenqlSelection {
5935
+ code?: boolean | number;
5936
+ message?: boolean | number;
5937
+ __typename?: boolean | number;
5938
+ __scalar?: boolean | number;
5939
+ }
5905
5940
  export interface MessageChannelGenqlSelection {
5906
5941
  connectedAccount?: ConnectedAccountPublicDTOGenqlSelection;
5907
5942
  connectedAccountId?: boolean | number;
@@ -7823,6 +7858,16 @@ export interface PreviewMessageCampaignAudienceInput {
7823
7858
  listId: Scalars['String'];
7824
7859
  unsubscribeTopicId?: (Scalars['String'] | null);
7825
7860
  }
7861
+ export interface PreviewMessageCampaignSendInput {
7862
+ campaignId: Scalars['String'];
7863
+ scheduledAt?: (Scalars['DateTime'] | null);
7864
+ }
7865
+ export interface PreviewMessageCampaignSendOutputDTOGenqlSelection {
7866
+ audience?: CampaignAudiencePreviewDTOGenqlSelection;
7867
+ blockers?: MessageCampaignSendBlockerDTOGenqlSelection;
7868
+ __typename?: boolean | number;
7869
+ __scalar?: boolean | number;
7870
+ }
7826
7871
  export interface PublicApplicationRegistrationGenqlSelection {
7827
7872
  id?: boolean | number;
7828
7873
  logoUrl?: boolean | number;
@@ -8339,6 +8384,7 @@ export interface QueryGenqlSelection {
8339
8384
  objectMetadataId: Scalars['UUID'];
8340
8385
  };
8341
8386
  };
8387
+ myApplicationPreferences?: ApplicationPreferencesGenqlSelection;
8342
8388
  myCalendarChannels?: (CalendarChannelGenqlSelection & {
8343
8389
  __args?: {
8344
8390
  connectedAccountId?: (Scalars['UUID'] | null);
@@ -8387,6 +8433,11 @@ export interface QueryGenqlSelection {
8387
8433
  input: PreviewMessageCampaignAudienceInput;
8388
8434
  };
8389
8435
  });
8436
+ previewMessageCampaignSend?: (PreviewMessageCampaignSendOutputDTOGenqlSelection & {
8437
+ __args: {
8438
+ input: PreviewMessageCampaignSendInput;
8439
+ };
8440
+ });
8390
8441
  publicMarketplaceAppDetail?: (MarketplaceAppDetailGenqlSelection & {
8391
8442
  __args: {
8392
8443
  universalIdentifier: Scalars['String'];
@@ -10334,6 +10385,9 @@ export declare const isApplicationHealthCheckAction: (obj?: {
10334
10385
  export declare const isApplicationHealthCheckResult: (obj?: {
10335
10386
  __typename?: any;
10336
10387
  } | null | undefined) => obj is ApplicationHealthCheckResult;
10388
+ export declare const isApplicationPreferences: (obj?: {
10389
+ __typename?: any;
10390
+ } | null | undefined) => obj is ApplicationPreferences;
10337
10391
  export declare const isApplicationRegistration: (obj?: {
10338
10392
  __typename?: any;
10339
10393
  } | null | undefined) => obj is ApplicationRegistration;
@@ -10766,6 +10820,9 @@ export declare const isMessageCampaignBodyConfiguration: (obj?: {
10766
10820
  export declare const isMessageCampaignDetailsConfiguration: (obj?: {
10767
10821
  __typename?: any;
10768
10822
  } | null | undefined) => obj is MessageCampaignDetailsConfiguration;
10823
+ export declare const isMessageCampaignSendBlockerDTO: (obj?: {
10824
+ __typename?: any;
10825
+ } | null | undefined) => obj is MessageCampaignSendBlockerDTO;
10769
10826
  export declare const isMessageChannel: (obj?: {
10770
10827
  __typename?: any;
10771
10828
  } | null | undefined) => obj is MessageChannel;
@@ -10886,6 +10943,9 @@ export declare const isPieChartDataItem: (obj?: {
10886
10943
  export declare const isPlaceDetailsResult: (obj?: {
10887
10944
  __typename?: any;
10888
10945
  } | null | undefined) => obj is PlaceDetailsResult;
10946
+ export declare const isPreviewMessageCampaignSendOutputDTO: (obj?: {
10947
+ __typename?: any;
10948
+ } | null | undefined) => obj is PreviewMessageCampaignSendOutputDTO;
10889
10949
  export declare const isPublicApplicationRegistration: (obj?: {
10890
10950
  __typename?: any;
10891
10951
  } | null | undefined) => obj is PublicApplicationRegistration;
@@ -11351,6 +11411,7 @@ export declare const enumBarChartLayout: {
11351
11411
  export declare const enumBillingEntitlementKey: {
11352
11412
  AUDIT_LOGS: "AUDIT_LOGS";
11353
11413
  CUSTOM_DOMAIN: "CUSTOM_DOMAIN";
11414
+ CUSTOM_ROLES: "CUSTOM_ROLES";
11354
11415
  RECORD_SHARING: "RECORD_SHARING";
11355
11416
  RLS: "RLS";
11356
11417
  SSO: "SSO";
@@ -11556,12 +11617,10 @@ export declare const enumFeatureFlagKey: {
11556
11617
  IS_CALENDAR_EVENT_SHARED_ACROSS_CHANNELS_ENABLED: "IS_CALENDAR_EVENT_SHARED_ACROSS_CHANNELS_ENABLED";
11557
11618
  IS_CONFIGURABLE_SEARCH_FIELDS_ENABLED: "IS_CONFIGURABLE_SEARCH_FIELDS_ENABLED";
11558
11619
  IS_DEFERRED_WORKSPACE_MIGRATION_ACTIONS_ENABLED: "IS_DEFERRED_WORKSPACE_MIGRATION_ACTIONS_ENABLED";
11559
- IS_JSON_FILTER_ENABLED: "IS_JSON_FILTER_ENABLED";
11560
11620
  IS_LOGS_SETTINGS_SECTION_ENABLED: "IS_LOGS_SETTINGS_SECTION_ENABLED";
11561
11621
  IS_MESSAGE_CAMPAIGN_ENABLED: "IS_MESSAGE_CAMPAIGN_ENABLED";
11562
11622
  IS_RECORD_CREATION_FORM_ENABLED: "IS_RECORD_CREATION_FORM_ENABLED";
11563
11623
  IS_RECORD_LEVEL_SHARING_ENABLED: "IS_RECORD_LEVEL_SHARING_ENABLED";
11564
- IS_RECORD_SHARE_VISIBILITY_GATING_ENABLED: "IS_RECORD_SHARE_VISIBILITY_GATING_ENABLED";
11565
11624
  IS_REST_METADATA_API_NEW_FORMAT_DIRECT: "IS_REST_METADATA_API_NEW_FORMAT_DIRECT";
11566
11625
  };
11567
11626
  export declare const enumFieldDisplayMode: {
@@ -412,6 +412,12 @@ declare const _default: {
412
412
  __typename: number[];
413
413
  };
414
414
  ApplicationHealthStatus: {};
415
+ ApplicationPreferences: {
416
+ applicationId: number[];
417
+ settingsMenuItems: number[];
418
+ variables: number[];
419
+ __typename: number[];
420
+ };
415
421
  ApplicationRegistration: {
416
422
  createdAt: number[];
417
423
  galleryImagesUrls: number[];
@@ -725,6 +731,8 @@ declare const _default: {
725
731
  userCreditsUsed: number[];
726
732
  workspaceCreditsExtraGranted: number[];
727
733
  workspaceCreditsGranted: number[];
734
+ workspaceCreditsGrantedForSeats: number[];
735
+ workspaceCreditsSeats: number[];
728
736
  workspaceCreditsTotalGranted: number[];
729
737
  workspaceCreditsUsed: number[];
730
738
  __typename: number[];
@@ -2270,6 +2278,11 @@ declare const _default: {
2270
2278
  configurationType: number[];
2271
2279
  __typename: number[];
2272
2280
  };
2281
+ MessageCampaignSendBlockerDTO: {
2282
+ code: number[];
2283
+ message: number[];
2284
+ __typename: number[];
2285
+ };
2273
2286
  MessageChannel: {
2274
2287
  connectedAccount: number[];
2275
2288
  connectedAccountId: number[];
@@ -3636,6 +3649,16 @@ declare const _default: {
3636
3649
  unsubscribeTopicId: number[];
3637
3650
  __typename: number[];
3638
3651
  };
3652
+ PreviewMessageCampaignSendInput: {
3653
+ campaignId: number[];
3654
+ scheduledAt: number[];
3655
+ __typename: number[];
3656
+ };
3657
+ PreviewMessageCampaignSendOutputDTO: {
3658
+ audience: number[];
3659
+ blockers: number[];
3660
+ __typename: number[];
3661
+ };
3639
3662
  PublicApplicationRegistration: {
3640
3663
  id: number[];
3641
3664
  logoUrl: number[];
@@ -3981,6 +4004,7 @@ declare const _default: {
3981
4004
  mostlyEmptyFieldMetadataIds: (number | {
3982
4005
  objectMetadataId: (string | number)[];
3983
4006
  })[];
4007
+ myApplicationPreferences: number[];
3984
4008
  myCalendarChannels: (number | {
3985
4009
  connectedAccountId: number[];
3986
4010
  })[];
@@ -4010,6 +4034,9 @@ declare const _default: {
4010
4034
  previewMessageCampaignAudience: (number | {
4011
4035
  input: (string | number)[];
4012
4036
  })[];
4037
+ previewMessageCampaignSend: (number | {
4038
+ input: (string | number)[];
4039
+ })[];
4013
4040
  publicMarketplaceAppDetail: (number | {
4014
4041
  universalIdentifier: (string | number)[];
4015
4042
  })[];