@chassdev/client-sdk 2.46.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/application-CMx2Si6C.mjs +58980 -0
  4. package/dist/application-DUpOI260.js +58 -0
  5. package/dist/chunk-Dqa2HsxW.mjs +20 -0
  6. package/dist/chunk-mLOUI7ql.js +1 -0
  7. package/dist/core/generated/index.d.ts +7 -0
  8. package/dist/core/generated/schema.d.ts +1 -0
  9. package/dist/core/index.d.ts +2 -0
  10. package/dist/core.cjs +1 -0
  11. package/dist/core.mjs +9 -0
  12. package/dist/generate/client-wrapper.d.ts +7 -0
  13. package/dist/generate/fs-utils.d.ts +4 -0
  14. package/dist/generate/generate-core-client.d.ts +10 -0
  15. package/dist/generate/generate-metadata-client.d.ts +5 -0
  16. package/dist/generate/genql/config.d.ts +9 -0
  17. package/dist/generate/genql/helpers/files.d.ts +2 -0
  18. package/dist/generate/genql/helpers/prettify.d.ts +2 -0
  19. package/dist/generate/genql/index.d.ts +2 -0
  20. package/dist/generate/genql/main.d.ts +2 -0
  21. package/dist/generate/genql/render/client/renderClient.d.ts +3 -0
  22. package/dist/generate/genql/render/common/RenderContext.d.ts +24 -0
  23. package/dist/generate/genql/render/common/comment.d.ts +8 -0
  24. package/dist/generate/genql/render/common/excludedTypes.d.ts +1 -0
  25. package/dist/generate/genql/render/common/relativeImportPath.d.ts +1 -0
  26. package/dist/generate/genql/render/common/renderTyping.d.ts +2 -0
  27. package/dist/generate/genql/render/common/support.d.ts +2 -0
  28. package/dist/generate/genql/render/requestTypes/inputObjectType.d.ts +3 -0
  29. package/dist/generate/genql/render/requestTypes/objectType.d.ts +4 -0
  30. package/dist/generate/genql/render/requestTypes/renderRequestTypes.d.ts +3 -0
  31. package/dist/generate/genql/render/requestTypes/requestTypeName.d.ts +2 -0
  32. package/dist/generate/genql/render/requestTypes/unionType.d.ts +3 -0
  33. package/dist/generate/genql/render/responseTypes/enumType.d.ts +3 -0
  34. package/dist/generate/genql/render/responseTypes/interfaceType.d.ts +3 -0
  35. package/dist/generate/genql/render/responseTypes/objectType.d.ts +3 -0
  36. package/dist/generate/genql/render/responseTypes/renderResponseTypes.d.ts +3 -0
  37. package/dist/generate/genql/render/responseTypes/scalarType.d.ts +3 -0
  38. package/dist/generate/genql/render/responseTypes/typeMappedAlias.d.ts +3 -0
  39. package/dist/generate/genql/render/responseTypes/unionType.d.ts +3 -0
  40. package/dist/generate/genql/render/schema/renderSchema.d.ts +3 -0
  41. package/dist/generate/genql/render/typeGuards/renderTypeGuards.d.ts +3 -0
  42. package/dist/generate/genql/render/typeMap/objectType.d.ts +4 -0
  43. package/dist/generate/genql/render/typeMap/renderTypeMap.d.ts +5 -0
  44. package/dist/generate/genql/render/typeMap/scalarType.d.ts +4 -0
  45. package/dist/generate/genql/render/typeMap/support.d.ts +1 -0
  46. package/dist/generate/genql/render/typeMap/unionType.d.ts +4 -0
  47. package/dist/generate/genql/runtime/batcher.d.ts +105 -0
  48. package/dist/generate/genql/runtime/createClient.d.ts +23 -0
  49. package/dist/generate/genql/runtime/error.d.ts +18 -0
  50. package/dist/generate/genql/runtime/fetcher.d.ts +10 -0
  51. package/dist/generate/genql/runtime/generateGraphqlOperation.d.ts +30 -0
  52. package/dist/generate/genql/runtime/index.d.ts +11 -0
  53. package/dist/generate/genql/runtime/linkTypeMap.d.ts +9 -0
  54. package/dist/generate/genql/runtime/typeSelection.d.ts +28 -0
  55. package/dist/generate/genql/runtime/types.d.ts +55 -0
  56. package/dist/generate/genql/tasks/clientTasks.d.ts +3 -0
  57. package/dist/generate/genql/tasks/schemaTask.d.ts +3 -0
  58. package/dist/generate/index.d.ts +2 -0
  59. package/dist/generate/runtime-templates.d.ts +4 -0
  60. package/dist/generate/twenty-client-template.d.ts +53 -0
  61. package/dist/generate.cjs +2082 -0
  62. package/dist/generate.mjs +595 -0
  63. package/dist/metadata/generated/index.d.ts +71 -0
  64. package/dist/metadata/generated/runtime/batcher.d.ts +105 -0
  65. package/dist/metadata/generated/runtime/createClient.d.ts +23 -0
  66. package/dist/metadata/generated/runtime/error.d.ts +18 -0
  67. package/dist/metadata/generated/runtime/fetcher.d.ts +10 -0
  68. package/dist/metadata/generated/runtime/generateGraphqlOperation.d.ts +30 -0
  69. package/dist/metadata/generated/runtime/index.d.ts +11 -0
  70. package/dist/metadata/generated/runtime/linkTypeMap.d.ts +9 -0
  71. package/dist/metadata/generated/runtime/typeSelection.d.ts +28 -0
  72. package/dist/metadata/generated/runtime/types.d.ts +55 -0
  73. package/dist/metadata/generated/schema.d.ts +11648 -0
  74. package/dist/metadata/generated/types.d.ts +5616 -0
  75. package/dist/metadata/index.d.ts +2 -0
  76. package/dist/metadata.cjs +6 -0
  77. package/dist/metadata.mjs +7653 -0
  78. package/dist/rest/index.d.ts +54 -0
  79. package/dist/rest.cjs +1 -0
  80. package/dist/rest.mjs +112 -0
  81. package/dist/shared/twenty-client-options.type.d.ts +9 -0
  82. package/dist/shared/twenty-client-run-as.type.d.ts +1 -0
  83. package/package.json +78 -0
@@ -0,0 +1,2082 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./chunk-mLOUI7ql.js"),t=require("./application-DUpOI260.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`),`
2
+ `),n=n.replace(RegExp(`\\s*${g(h)}\\n`),`
3
+ `)):n=n.replace(RegExp(`\\s*${g(m)}[\\s\\S]*?${g(h)}\\n?`),`
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`
5
+ function(options${t?`?`:``}: ClientOptions): Client {
6
+ return createClientOriginal({
7
+ url: ${t},
8
+ ${n?`fetch,`:``}
9
+ ...options,
10
+ queryRoot: typeMap.Query!,
11
+ mutationRoot: typeMap.Mutation!,
12
+ subscriptionRoot: typeMap.Subscription!,
13
+ }) as any
14
+ }`},E=(e,t)=>{let n=e.getQueryType(),r=e.getMutationType(),i=e.getSubscriptionType(),a=t.config?.fetchImport||``;t.addCodeBlock(`
15
+ ${a}
16
+ ${ae({mutationType:r,queryType:n,subscriptionType:i})}
17
+ import {
18
+ linkTypeMap,
19
+ createClient as createClientOriginal,
20
+ generateGraphqlOperation,
21
+ type FieldsSelection, type GraphqlOperation, type ClientOptions, GenqlError
22
+ } from '${w}'
23
+ export type { FieldsSelection } from '${w}'
24
+ export { GenqlError }
25
+
26
+ import types from './types'
27
+ export * from './schema'
28
+ const typeMap = linkTypeMap(types as any)
29
+
30
+ ${oe({mutationType:r,queryType:n,subscriptionType:i})}
31
+
32
+ export const createClient = ${ie(t)}
33
+
34
+ export const everything = {
35
+ __scalar: true
36
+ }
37
+ `),n&&t.addCodeBlock(`
38
+ export type QueryResult<fields extends ${T(n)}> = FieldsSelection<${n.name}, fields>
39
+ export const generateQueryOp: (fields: ${T(n)} & { __name?: string }) => GraphqlOperation = function(fields) {
40
+ return generateGraphqlOperation('query', typeMap.Query!, fields as any)
41
+ }
42
+ `),r&&t.addCodeBlock(`
43
+ export type MutationResult<fields extends ${T(r)}> = FieldsSelection<${r.name}, fields>
44
+ export const generateMutationOp: (fields: ${T(r)} & { __name?: string }) => GraphqlOperation = function(fields) {
45
+ return generateGraphqlOperation('mutation', typeMap.Mutation!, fields as any)
46
+ }
47
+ `),i&&t.addCodeBlock(`
48
+ export type SubscriptionResult<fields extends ${T(i)}> = FieldsSelection<${i.name}, fields>
49
+ export const generateSubscriptionOp: (fields: ${T(i)} & { __name?: string }) => GraphqlOperation = function(fields) {
50
+ return generateGraphqlOperation('subscription', typeMap.Subscription!, fields as any)
51
+ }
52
+ `)};function ae({queryType:e,mutationType:t,subscriptionType:n}){let r=[];return e&&r.push(T(e),e.name),t&&r.push(T(t),t.name),n&&r.push(T(n),n.name),r.length>0?`import type {${r.join(`,`)}} from './schema'`:``}function oe({queryType:e,mutationType:t,subscriptionType:n}){let r=``;return e&&(r+=`
53
+ query<R extends ${T(e)}>(
54
+ request: R & { __name?: string },
55
+ ): Promise<FieldsSelection<${e.name}, R>>
56
+ `),t&&(r+=`
57
+ mutation<R extends ${T(t)}>(
58
+ request: R & { __name?: string },
59
+ ): Promise<FieldsSelection<${t.name}, R>>
60
+ `),`
61
+ export interface Client {
62
+ ${r}
63
+ }
64
+ `}var D=[`__Schema`,`__Type`,`__TypeKind`,`__Field`,`__InputValue`,`__EnumValue`,`__Directive`,`__DirectiveLocation`],se=async(e,t)=>{try{return await l.default.format(e,{parser:t,plugins:[u,d,f],semi:!1,singleQuote:!0,trailingComma:`all`,printWidth:80})}catch{return e}},ce=(e,t)=>{let n=(0,r.relative)(e,t);return n[0]===`.`?n:`./${n}`},O=class{constructor(e,t){this.schema=e,this.config=t,this.codeBlocks=[],this.imports={},this.importAliasCounter=0}addCodeBlock(e){e&&this.codeBlocks.push(e)}addImport(e,t,n,r,i){this.config&&this.config.output&&(e=r?e:ce(this.config.output,e)),this.imports[e]||(this.imports[e]=[]);let a=this.imports[e],o=a.find(e=>t&&e.isDefault||!t&&e.module===n);if(o)return o.alias;this.importAliasCounter++;let s=i?void 0:`a${this.importAliasCounter}`;return a.push({isDefault:t,module:n,alias:s}),s}getImportBlock(){let e=[];if(Object.keys(this.imports).forEach(t=>{let n=this.imports[t].find(e=>e.isDefault),r=this.imports[t].filter(e=>!e.isDefault),i=[];n&&i.push(n.alias||``),r.length>0&&i.push(`{${r.map(e=>e.alias?`${e.module} as ${e.alias}`:e.module).join(`,`)}}`),e.push(`import ${i.join(`,`)} from '${t}'`)}),e.length>0)return e.join(`
65
+ `)}async toCode(e,t=!1){let n=[...this.codeBlocks];if(e&&(e===`typescript`||e===`babel`)){let e=this.getImportBlock();e&&n.unshift(e)}return e&&t?se(n.join(`
66
+
67
+ `),e):e?n.join(`
68
+
69
+ `):n.join(``)}},k=e=>{let t=[];return e.deprecated&&t.push(`@deprecated ${e.deprecated.replace(/\s/g,` `)}`),e.text&&t.push(...e.text.split(`
70
+ `)),t.length>0?t.length===1?`\n/** ${t[0]} */\n`:`\n/**\n${t.map(e=>` * ${e}`).join(`
71
+ `)}\n */\n`:``},A=e=>k({text:e.description}),j=e=>k({deprecated:e.deprecationReason,text:e.description}),M=e=>k({text:e.description}),N=(e,t,n,r,i,o=e=>e)=>{if(n)if(i){if((0,a.isNonNullType)(e))return`: ${N(e.ofType,!0,!1,r,i,o)}`;{let t=N(e,!0,!1,r,i,o);return r?`?: ${t}`:`?: (${t} | null)`}}else return`: ${N(e,!1,!1,r,i,o)}`;if((0,a.isNamedType)(e)){let n=e.name;(0,a.isScalarType)(e)&&(n=`Scalars['${n}']`);let i=o(n);return r?t?i:`(${i} | undefined)`:t?i:`(${i} | null)`}if((0,a.isListType)(e)){let n=`${N(e.ofType,!1,!1,r,i,o)}[]`;return r?t?n:`(${n} | undefined)`:t?n:`(${n} | null)`}return N(e.ofType,!0,!1,r,i,o)},P=(e,t,n,r=!0,i=void 0)=>N(e,!1,r,t,n,i);function F(e){e||={};let t={};return Object.keys(e).sort().forEach(function(n){t[n]=e[n]}),t}var I=(e,t)=>{let n=e.getFields();t.config?.sortProperties&&(n=F(n));let r=Object.keys(n).map(e=>{let t=n[e];return`${M(t)}${t.name}${P(t.type,!1,!0)}`});t.addCodeBlock(`${A(e)}export interface ${e.name} {${r.join(`,`)}}`)},L=` `,R=(e,t)=>{let n=e.getFields();t.config?.sortProperties&&(n=F(n));let r=Object.keys(n).map(e=>{let t=n[e],r=[],i=(0,a.getNamedType)(t.type),o=!((0,a.isEnumType)(i)||(0,a.isScalarType)(i)),s=t.args.length>0,c=z(t),l=!c.match(/[^?]:/);return s&&(o?r.push(`(${T(i)} & { __args${l?`?`:``}: ${c} })`):r.push(`{ __args: ${c} }`)),l&&!o&&r.push(`boolean | number`),!s&&o&&r.push(T(i)),`${j(t)}${t.name}?: ${r.join(` | `)}`});if((0,a.isInterfaceType)(e)&&t.schema){let n=t.schema.getPossibleTypes(e).map(e=>`on_${e.name}?: ${T(e)}`);t.config?.sortProperties&&(n=n.sort()),r=r.concat(n)}r.push(`__typename?: boolean | number`),r.push(`__scalar?: boolean | number`),r=r.map(e=>e.split(`
72
+ `).filter(Boolean).map(e=>L+e).join(`
73
+ `)),t.addCodeBlock(`${A(e)}export interface ${T(e)}{\n${r.join(`
74
+ `)}\n}`)},z=e=>`{${e.args.map(e=>`${M(e)}${e.name}${P(e.type,!1,!0)}`).join(`, `)}}`,B=(e,t)=>{let n=[...e.getTypes()];t.config?.sortProperties&&(n=n.sort());let r=n.map(e=>`on_${e.name}?:${T(e)}`),i=(0,p.default)(n.map(e=>e.getInterfaces()).flat());r.push(...i.map(e=>`on_${e.name}?: ${T(e)}`)),r.push(`__typename?: boolean | number`),t.addCodeBlock(`${A(e)}export interface ${T(e)}{\n${r.map(e=>` `+e).join(`,
75
+ `)}\n}`)},V=(e,t)=>{let n=e.getTypeMap();t.config?.sortProperties&&(n=F(n));for(let e in n){if(D.includes(e))continue;let r=n[e];((0,a.isObjectType)(r)||(0,a.isInterfaceType)(r))&&R(r,t),(0,a.isInputObjectType)(r)&&I(r,t),(0,a.isUnionType)(r)&&B(r,t)}let r=[{type:e.getQueryType(),name:`QueryGenqlSelection`},{type:e.getMutationType(),name:`MutationGenqlSelection`},{type:e.getSubscriptionType(),name:`SubscriptionGenqlSelection`}].map(H).filter(Boolean).join(`
76
+ `);t.addCodeBlock(r)};function H({type:e,name:t}){return e&&T(e)!==t?`export type ${t} = ${T(e)}`:``}var U=(e,t)=>{let n=e.getValues().map(e=>`'${e.name}'`);t.addCodeBlock(`${A(e)}export type ${e.name} = ${n.join(` | `)}`)},W=` `,G=(e,t)=>{let n=e.getFields();t.config?.sortProperties&&(n=F(n));let r=Object.keys(n).map(e=>n[e]);if(!t.schema)throw Error(`no schema provided`);let i=(0,a.isObjectType)(e)?[e.name]:t.schema.getPossibleTypes(e).map(e=>e.name),o=r.map(e=>`${j(e)}${e.name}${P(e.type,!0,!0)}`).concat([`__typename: ${i.length>0?i.map(e=>`'${e}'`).join(`|`):`string`}`]);o=o.map(e=>e.split(`
77
+ `).filter(Boolean).map(e=>W+e).join(`
78
+ `)),t.addCodeBlock(`${A(e)}export interface ${e.name} {\n${o.join(`
79
+ `)}\n}`)},le={Int:`number`,Float:`number`,String:`string`,Boolean:`boolean`,ID:`string`},ue=(e,t)=>({...le,...t?.config?.scalarTypes||{}})[e.name]||`any`;function de(e,t){let n=``;return t.forEach(t=>{n+=` ${t.name}: ${ue(t,e)},\n`}),`export type Scalars = {\n${n}}`}var fe=(e,t)=>{let n=e.getTypes().map(e=>e.name);t.config?.sortProperties&&(n=n.sort()),t.addCodeBlock(`${A(e)}export type ${e.name} = (${n.join(` | `)}) & { __isUnion?: true }`)},pe=(e,t)=>{if(!t.schema)throw Error(`schema is required to render unionType`);let n=t.schema.getPossibleTypes(e).map(e=>e.name);n.length?t.addCodeBlock(`${A(e)}export type ${e.name} = (${n.join(` | `)}) & { __isUnion?: true }`):G(e,t)},me=(e,t)=>{let n=e.getTypeMap();t.config?.sortProperties&&(n=F(n)),t.addCodeBlock(de(t,Object.values(n).filter(e=>(0,a.isScalarType)(e))));for(let e in n){if(D.includes(e))continue;let r=n[e];(0,a.isEnumType)(r)&&U(r,t),(0,a.isUnionType)(r)&&fe(r,t),(0,a.isObjectType)(r)&&G(r,t),(0,a.isInterfaceType)(r)&&pe(r,t)}let r=[{type:e.getQueryType(),name:`Query`},{type:e.getMutationType(),name:`Mutation`},{type:e.getSubscriptionType(),name:`Subscription`}].map(he).filter(Boolean).join(`
80
+ `);t.addCodeBlock(r)};function he({type:e,name:t}){return e&&e.name!==t?`export type ${t} = ${e.name}`:``}var ge=(e,t)=>{t.addCodeBlock((0,a.printSchema)(e))},K=(e,t)=>`
81
+ const ${e}_possibleTypes: string[] = [${t.map(e=>`'${e}'`).join(`,`)}]
82
+ export const is${e} = (obj?: { __typename?: any } | null): obj is ${e} => {
83
+ if (!obj?.__typename) throw new Error('__typename is missing in "is${e}"')
84
+ return ${e}_possibleTypes.includes(obj.__typename)
85
+ }
86
+ `,q=(e,t)=>{let n=e.getTypeMap();for(let r in n){if(D.includes(r))continue;let i=n[r];if((0,a.isUnionType)(i)){let e=i.getTypes().map(e=>e.name);t.addCodeBlock(K(i.name,e))}else if((0,a.isInterfaceType)(i)){let n=e.getPossibleTypes(i).map(e=>e.name);t.addCodeBlock(K(i.name,n))}else (0,a.isObjectType)(i)&&t.addCodeBlock(K(i.name,[i.name]))}};function J(e){return e?Object.keys(e).length===0:!0}var Y=(e,t)=>{let n=Object.keys(e.getFields()).reduce((t,n)=>{let r=e.getFields()[n],i={type:(0,a.getNamedType)(r.type).name};t[n]=i;let o=r.args||[];return o.length>0&&(i.args=o.reduce((e,t)=>{let n=t.type.toString(),r=(0,a.getNamedType)(t.type).name;return e[t.name]=[r],r!==n&&e[t.name]?.push(n),e},{})),t},{});return(0,a.isInterfaceType)(e)&&t.schema&&t.schema.getPossibleTypes(e).map(e=>{J(n)||(n[`on_${e.name}`]={type:e.name})}),J(n)||(n.__typename={type:`String`}),n},_e=(e,t)=>{let n=e.getTypes(),r=n.reduce((e,t)=>(e[`on_${t.name}`]={type:t.name},e),{});return(0,p.default)(n.map(e=>e.getInterfaces()).flat()).forEach(e=>{r[`on_${e.name}`]={type:e.name}}),r.__typename={type:`String`},r},ve=(e,t)=>{let n={scalars:[],types:{}};Object.keys(e.getTypeMap()).filter(e=>!D.includes(e)).map(t=>e.getTypeMap()[t]).map(e=>{(0,a.isObjectType)(e)||(0,a.isInterfaceType)(e)||(0,a.isInputObjectType)(e)?n.types[e.name]=Y(e,t):(0,a.isUnionType)(e)?n.types[e.name]=_e(e,t):((0,a.isScalarType)(e)||(0,a.isEnumType)(e))&&(n.scalars.push(e.name),n.types[e.name]={})});let r=e.getQueryType();r?.name&&r?.name!==`Query`&&(delete n.types[r.name],n.types.Query=Y(r,t));let i=e.getMutationType();i?.name&&i.name!==`Mutation`&&(delete n.types[i.name],n.types.Mutation=Y(i,t));let o=e.getSubscriptionType();o?.name&&o.name!==`Subscription`&&(delete n.types[o.name],n.types.Subscription=Y(o,t)),t.addCodeBlock(JSON.stringify(ye(n),null,4))};function ye(e){let t=Object.assign({},...Object.keys(e.types).map((e,t)=>({[e]:t})));return{scalars:e.scalars.map(e=>t[e]),types:Object.assign({},...Object.keys(e.types||{}).map(n=>{let r=e.types[n]||{},i=Object.assign({},...Object.keys(r).map(e=>{let n=r[e];if(!n)throw Error(`no content in field `+e);let[i,a]=[n.type,n.args],o=[i?t[i]:-1];return a&&(o[1]=Object.assign({},...Object.keys(a||{}).map(e=>{let n=a?.[e];if(!n)throw Error(`replaceTypeNamesWithIndexes: no arg for `+e);return{[e]:[t[n[0]],...n.slice(1)]}}))),{[e]:o}}));return{[n]:{...i}}}))}}var be=`import type { GraphqlOperation } from './generateGraphqlOperation'
87
+ import { GenqlError } from './error'
88
+
89
+ type Variables = Record<string, any>
90
+
91
+ type QueryError = Error & {
92
+ message: string
93
+
94
+ locations?: Array<{
95
+ line: number
96
+ column: number
97
+ }>
98
+ path?: any
99
+ rid: string
100
+ details?: Record<string, any>
101
+ }
102
+ type Result = {
103
+ data: Record<string, any>
104
+ errors: Array<QueryError>
105
+ }
106
+ type Fetcher = (
107
+ batchedQuery: GraphqlOperation | Array<GraphqlOperation>,
108
+ ) => Promise<Array<Result>>
109
+ type Options = {
110
+ batchInterval?: number
111
+ shouldBatch?: boolean
112
+ maxBatchSize?: number
113
+ }
114
+ type Queue = Array<{
115
+ request: GraphqlOperation
116
+ resolve: (...args: Array<any>) => any
117
+ reject: (...args: Array<any>) => any
118
+ }>
119
+
120
+ /**
121
+ * takes a list of requests (queue) and batches them into a single server request.
122
+ * It will then resolve each individual requests promise with the appropriate data.
123
+ * @private
124
+ * @param {QueryBatcher} client - the client to use
125
+ * @param {Queue} queue - the list of requests to batch
126
+ */
127
+ function dispatchQueueBatch(client: QueryBatcher, queue: Queue): void {
128
+ let batchedQuery: any = queue.map((item) => item.request)
129
+
130
+ if (batchedQuery.length === 1) {
131
+ batchedQuery = batchedQuery[0]
132
+ }
133
+
134
+ client.fetcher(batchedQuery).then((responses: any) => {
135
+ if (queue.length === 1 && !Array.isArray(responses)) {
136
+ if (responses.errors && responses.errors.length) {
137
+ queue[0].reject(
138
+ new GenqlError(responses.errors, responses.data),
139
+ )
140
+ return
141
+ }
142
+
143
+ queue[0].resolve(responses)
144
+ return
145
+ } else if (responses.length !== queue.length) {
146
+ throw new Error('response length did not match query length')
147
+ }
148
+
149
+ for (let i = 0; i < queue.length; i++) {
150
+ if (responses[i].errors && responses[i].errors.length) {
151
+ queue[i].reject(
152
+ new GenqlError(responses[i].errors, responses[i].data),
153
+ )
154
+ } else {
155
+ queue[i].resolve(responses[i])
156
+ }
157
+ }
158
+ }).catch((error: any) => {
159
+ // Reject every queued request if the batched fetch fails (e.g. network
160
+ // error), otherwise callers hang forever and the rejection is unhandled.
161
+ for (const item of queue) {
162
+ item.reject(error)
163
+ }
164
+ })
165
+ }
166
+
167
+ /**
168
+ * creates a list of requests to batch according to max batch size.
169
+ * @private
170
+ * @param {QueryBatcher} client - the client to create list of requests from from
171
+ * @param {Options} options - the options for the batch
172
+ */
173
+ function dispatchQueue(client: QueryBatcher, options: Options): void {
174
+ const queue = client._queue
175
+ const maxBatchSize = options.maxBatchSize || 0
176
+ client._queue = []
177
+
178
+ if (maxBatchSize > 0 && maxBatchSize < queue.length) {
179
+ for (let i = 0; i < queue.length / maxBatchSize; i++) {
180
+ dispatchQueueBatch(
181
+ client,
182
+ queue.slice(i * maxBatchSize, (i + 1) * maxBatchSize),
183
+ )
184
+ }
185
+ } else {
186
+ dispatchQueueBatch(client, queue)
187
+ }
188
+ }
189
+ /**
190
+ * Create a batcher client.
191
+ * @param {Fetcher} fetcher - A function that can handle the network requests to graphql endpoint
192
+ * @param {Options} options - the options to be used by client
193
+ * @param {boolean} options.shouldBatch - should the client batch requests. (default true)
194
+ * @param {integer} options.batchInterval - duration (in MS) of each batch window. (default 6)
195
+ * @param {integer} options.maxBatchSize - max number of requests in a batch. (default 0)
196
+ * @param {boolean} options.defaultHeaders - default headers to include with every request
197
+ *
198
+ * @example
199
+ * const fetcher = batchedQuery => fetch('path/to/graphql', {
200
+ * method: 'post',
201
+ * headers: {
202
+ * Accept: 'application/json',
203
+ * 'Content-Type': 'application/json',
204
+ * },
205
+ * body: JSON.stringify(batchedQuery),
206
+ * credentials: 'include',
207
+ * })
208
+ * .then(response => response.json())
209
+ *
210
+ * const client = new QueryBatcher(fetcher, { maxBatchSize: 10 })
211
+ */
212
+
213
+ export class QueryBatcher {
214
+ fetcher: Fetcher
215
+ _options: Options
216
+ _queue: Queue
217
+
218
+ constructor(
219
+ fetcher: Fetcher,
220
+ {
221
+ batchInterval = 6,
222
+ shouldBatch = true,
223
+ maxBatchSize = 0,
224
+ }: Options = {},
225
+ ) {
226
+ this.fetcher = fetcher
227
+ this._options = {
228
+ batchInterval,
229
+ shouldBatch,
230
+ maxBatchSize,
231
+ }
232
+ this._queue = []
233
+ }
234
+
235
+ /**
236
+ * Fetch will send a graphql request and return the parsed json.
237
+ * @param {string} query - the graphql query.
238
+ * @param {Variables} variables - any variables you wish to inject as key/value pairs.
239
+ * @param {[string]} operationName - the graphql operationName.
240
+ * @param {Options} overrides - the client options overrides.
241
+ *
242
+ * @return {promise} resolves to parsed json of server response
243
+ *
244
+ * @example
245
+ * client.fetch(\`
246
+ * query getHuman($id: ID!) {
247
+ * human(id: $id) {
248
+ * name
249
+ * height
250
+ * }
251
+ * }
252
+ * \`, { id: "1001" }, 'getHuman')
253
+ * .then(human => {
254
+ * // do something with human
255
+ * console.log(human);
256
+ * });
257
+ */
258
+ fetch(
259
+ query: string,
260
+ variables?: Variables,
261
+ operationName?: string,
262
+ overrides: Options = {},
263
+ ): Promise<Result> {
264
+ const request: GraphqlOperation = {
265
+ query,
266
+ }
267
+ const options = Object.assign({}, this._options, overrides)
268
+
269
+ if (variables) {
270
+ request.variables = variables
271
+ }
272
+
273
+ if (operationName) {
274
+ request.operationName = operationName
275
+ }
276
+
277
+ const promise = new Promise<Result>((resolve, reject) => {
278
+ this._queue.push({
279
+ request,
280
+ resolve,
281
+ reject,
282
+ })
283
+
284
+ if (this._queue.length === 1) {
285
+ if (options.shouldBatch) {
286
+ setTimeout(
287
+ () => dispatchQueue(this, options),
288
+ options.batchInterval,
289
+ )
290
+ } else {
291
+ dispatchQueue(this, options)
292
+ }
293
+ }
294
+ })
295
+ return promise
296
+ }
297
+
298
+ /**
299
+ * Fetch will send a graphql request and return the parsed json.
300
+ * @param {string} query - the graphql query.
301
+ * @param {Variables} variables - any variables you wish to inject as key/value pairs.
302
+ * @param {[string]} operationName - the graphql operationName.
303
+ * @param {Options} overrides - the client options overrides.
304
+ *
305
+ * @return {Promise<Array<Result>>} resolves to parsed json of server response
306
+ *
307
+ * @example
308
+ * client.forceFetch(\`
309
+ * query getHuman($id: ID!) {
310
+ * human(id: $id) {
311
+ * name
312
+ * height
313
+ * }
314
+ * }
315
+ * \`, { id: "1001" }, 'getHuman')
316
+ * .then(human => {
317
+ * // do something with human
318
+ * console.log(human);
319
+ * });
320
+ */
321
+ forceFetch(
322
+ query: string,
323
+ variables?: Variables,
324
+ operationName?: string,
325
+ overrides: Options = {},
326
+ ): Promise<Result> {
327
+ const request: GraphqlOperation = {
328
+ query,
329
+ }
330
+ const options = Object.assign({}, this._options, overrides, {
331
+ shouldBatch: false,
332
+ })
333
+
334
+ if (variables) {
335
+ request.variables = variables
336
+ }
337
+
338
+ if (operationName) {
339
+ request.operationName = operationName
340
+ }
341
+
342
+ const promise = new Promise<Result>((resolve, reject) => {
343
+ const client = new QueryBatcher(this.fetcher, this._options)
344
+ client._queue = [
345
+ {
346
+ request,
347
+ resolve,
348
+ reject,
349
+ },
350
+ ]
351
+ dispatchQueue(client, options)
352
+ })
353
+ return promise
354
+ }
355
+ }
356
+ `,xe=`
357
+ import { type BatchOptions, createFetcher } from './fetcher'
358
+ import type { ExecutionResult, LinkedType } from './types'
359
+ import {
360
+ generateGraphqlOperation,
361
+ type GraphqlOperation,
362
+ } from './generateGraphqlOperation'
363
+
364
+ export type Headers =
365
+ | HeadersInit
366
+ | (() => HeadersInit)
367
+ | (() => Promise<HeadersInit>)
368
+
369
+ export type BaseFetcher = (
370
+ operation: GraphqlOperation | GraphqlOperation[],
371
+ ) => Promise<ExecutionResult | ExecutionResult[]>
372
+
373
+ export type ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {
374
+ url?: string
375
+ batch?: BatchOptions | boolean
376
+ fetcher?: BaseFetcher
377
+ fetch?: Function
378
+ headers?: Headers
379
+ }
380
+
381
+ export const createClient = ({
382
+ queryRoot,
383
+ mutationRoot,
384
+ subscriptionRoot,
385
+ ...options
386
+ }: ClientOptions & {
387
+ queryRoot?: LinkedType
388
+ mutationRoot?: LinkedType
389
+ subscriptionRoot?: LinkedType
390
+ }) => {
391
+ const fetcher = createFetcher(options)
392
+ const client: {
393
+ query?: Function
394
+ mutation?: Function
395
+ } = {}
396
+
397
+ if (queryRoot) {
398
+ client.query = (request: any) => {
399
+ if (!queryRoot) throw new Error('queryRoot argument is missing')
400
+
401
+ const resultPromise = fetcher(
402
+ generateGraphqlOperation('query', queryRoot, request),
403
+ )
404
+
405
+ return resultPromise
406
+ }
407
+ }
408
+ if (mutationRoot) {
409
+ client.mutation = (request: any) => {
410
+ if (!mutationRoot)
411
+ throw new Error('mutationRoot argument is missing')
412
+
413
+ const resultPromise = fetcher(
414
+ generateGraphqlOperation('mutation', mutationRoot, request),
415
+ )
416
+
417
+ return resultPromise
418
+ }
419
+ }
420
+
421
+ return client as any
422
+ }
423
+ `,Se=`export class GenqlError extends Error {
424
+ errors: Array<GraphqlError> = []
425
+ /**
426
+ * Partial data returned by the server
427
+ */
428
+ data?: any
429
+ constructor(errors: any[], data: any) {
430
+ let message = Array.isArray(errors)
431
+ ? errors.map((x) => x?.message || '').join('\\n')
432
+ : ''
433
+ if (!message) {
434
+ message = 'GraphQL error'
435
+ }
436
+ super(message)
437
+ this.errors = errors
438
+ this.data = data
439
+ }
440
+ }
441
+
442
+ interface GraphqlError {
443
+ message: string
444
+ locations?: Array<{
445
+ line: number
446
+ column: number
447
+ }>
448
+ path?: string[]
449
+ extensions?: Record<string, any>
450
+ }
451
+ `,Ce=`import { QueryBatcher } from './batcher'
452
+
453
+ import type { ClientOptions } from './createClient'
454
+ import type { GraphqlOperation } from './generateGraphqlOperation'
455
+ import { GenqlError } from './error'
456
+
457
+ export interface Fetcher {
458
+ (gql: GraphqlOperation): Promise<any>
459
+ }
460
+
461
+ export type BatchOptions = {
462
+ batchInterval?: number // ms
463
+ maxBatchSize?: number
464
+ }
465
+
466
+ const DEFAULT_BATCH_OPTIONS = {
467
+ maxBatchSize: 10,
468
+ batchInterval: 40,
469
+ }
470
+
471
+ export const createFetcher = ({
472
+ url,
473
+ headers = {},
474
+ fetcher,
475
+ fetch: _fetch,
476
+ batch = false,
477
+ ...rest
478
+ }: ClientOptions): Fetcher => {
479
+ if (!url && !fetcher) {
480
+ throw new Error('url or fetcher is required')
481
+ }
482
+ if (!fetcher) {
483
+ fetcher = async (body) => {
484
+ let headersObject =
485
+ typeof headers == 'function' ? await headers() : headers
486
+ headersObject = headersObject || {}
487
+ if (typeof fetch === 'undefined' && !_fetch) {
488
+ throw new Error(
489
+ 'Global \`fetch\` function is not available, pass a fetch polyfill to Genql \`createClient\`',
490
+ )
491
+ }
492
+ let fetchImpl = _fetch || fetch
493
+ const res = await fetchImpl(url!, {
494
+ headers: {
495
+ 'Content-Type': 'application/json',
496
+ ...headersObject,
497
+ },
498
+ method: 'POST',
499
+ body: JSON.stringify(body),
500
+ ...rest,
501
+ })
502
+ if (!res.ok) {
503
+ throw new Error(\`\${res.statusText}: \${await res.text()}\`)
504
+ }
505
+ const json = await res.json()
506
+ return json
507
+ }
508
+ }
509
+
510
+ if (!batch) {
511
+ return async (body) => {
512
+ const json = await fetcher!(body)
513
+ if (Array.isArray(json)) {
514
+ return json.map((json) => {
515
+ if (json?.errors?.length) {
516
+ throw new GenqlError(json.errors || [], json.data)
517
+ }
518
+ return json.data
519
+ })
520
+ } else {
521
+ if (json?.errors?.length) {
522
+ throw new GenqlError(json.errors || [], json.data)
523
+ }
524
+ return json.data
525
+ }
526
+ }
527
+ }
528
+
529
+ const batcher = new QueryBatcher(
530
+ async (batchedQuery) => {
531
+ // console.log(batchedQuery) // [{ query: 'query{user{age}}', variables: {} }, ...]
532
+ const json = await fetcher!(batchedQuery)
533
+ return json as any
534
+ },
535
+ batch === true ? DEFAULT_BATCH_OPTIONS : batch,
536
+ )
537
+
538
+ return async ({ query, variables }) => {
539
+ const json = await batcher.fetch(query, variables)
540
+ if (json?.data) {
541
+ return json.data
542
+ }
543
+ throw new Error(
544
+ 'Genql batch fetcher returned unexpected result ' + JSON.stringify(json),
545
+ )
546
+ }
547
+ }
548
+ `,we=`import type { LinkedField, LinkedType } from './types'
549
+
550
+ export interface Args {
551
+ [arg: string]: any | undefined
552
+ }
553
+
554
+ export interface Fields {
555
+ [field: string]: Request
556
+ }
557
+
558
+ export type Request = boolean | number | Fields
559
+
560
+ export interface Variables {
561
+ [name: string]: {
562
+ value: any
563
+ typing: [LinkedType, string]
564
+ }
565
+ }
566
+
567
+ export interface Context {
568
+ root: LinkedType
569
+ varCounter: number
570
+ variables: Variables
571
+ fragmentCounter: number
572
+ fragments: string[]
573
+ }
574
+
575
+ export interface GraphqlOperation {
576
+ query: string
577
+ variables?: { [name: string]: any }
578
+ operationName?: string
579
+ }
580
+
581
+ const parseRequest = (
582
+ request: Request | undefined,
583
+ ctx: Context,
584
+ path: string[],
585
+ ): string => {
586
+ if (typeof request === 'object' && '__args' in request) {
587
+ const args: any = request.__args
588
+ let fields: Request | undefined = { ...request }
589
+ delete fields.__args
590
+ const argNames = Object.keys(args)
591
+
592
+ if (argNames.length === 0) {
593
+ return parseRequest(fields, ctx, path)
594
+ }
595
+
596
+ const field = getFieldFromPath(ctx.root, path)
597
+
598
+ const argStrings = argNames.map((argName) => {
599
+ ctx.varCounter++
600
+ const varName = \`v\${ctx.varCounter}\`
601
+
602
+ const typing = field.args && field.args[argName] // typeMap used here, .args
603
+
604
+ if (!typing) {
605
+ throw new Error(
606
+ \`no typing defined for argument \\\`\${argName}\\\` in path \\\`\${path.join(
607
+ '.',
608
+ )}\\\`\`,
609
+ )
610
+ }
611
+
612
+ ctx.variables[varName] = {
613
+ value: args[argName],
614
+ typing,
615
+ }
616
+
617
+ return \`\${argName}:$\${varName}\`
618
+ })
619
+ return \`(\${argStrings})\${parseRequest(fields, ctx, path)}\`
620
+ } else if (typeof request === 'object' && Object.keys(request).length > 0) {
621
+ const fields = request
622
+ const fieldNames = Object.keys(fields).filter((k) => Boolean(fields[k]))
623
+
624
+ if (fieldNames.length === 0) {
625
+ throw new Error(
626
+ \`field selection should not be empty: \${path.join('.')}\`,
627
+ )
628
+ }
629
+
630
+ const type =
631
+ path.length > 0 ? getFieldFromPath(ctx.root, path).type : ctx.root
632
+ const scalarFields = type.scalar
633
+
634
+ let scalarFieldsFragment: string | undefined
635
+
636
+ if (fieldNames.includes('__scalar')) {
637
+ const falsyFieldNames = new Set(
638
+ Object.keys(fields).filter((k) => !Boolean(fields[k])),
639
+ )
640
+ if (scalarFields?.length) {
641
+ ctx.fragmentCounter++
642
+ scalarFieldsFragment = \`f\${ctx.fragmentCounter}\`
643
+
644
+ ctx.fragments.push(
645
+ \`fragment \${scalarFieldsFragment} on \${
646
+ type.name
647
+ }{\${scalarFields
648
+ .filter((f) => !falsyFieldNames.has(f))
649
+ .join(',')}}\`,
650
+ )
651
+ }
652
+ }
653
+
654
+ const fieldsSelection = fieldNames
655
+ .filter((f) => !['__scalar', '__name'].includes(f))
656
+ .map((f) => {
657
+ const parsed = parseRequest(fields[f], ctx, [...path, f])
658
+
659
+ if (f.startsWith('on_')) {
660
+ ctx.fragmentCounter++
661
+ const implementationFragment = \`f\${ctx.fragmentCounter}\`
662
+
663
+ const typeMatch = f.match(/^on_(.+)/)
664
+
665
+ if (!typeMatch || !typeMatch[1])
666
+ throw new Error('match failed')
667
+
668
+ ctx.fragments.push(
669
+ \`fragment \${implementationFragment} on \${typeMatch[1]}\${parsed}\`,
670
+ )
671
+
672
+ return \`...\${implementationFragment}\`
673
+ } else {
674
+ return \`\${f}\${parsed}\`
675
+ }
676
+ })
677
+ .concat(scalarFieldsFragment ? [\`...\${scalarFieldsFragment}\`] : [])
678
+ .join(',')
679
+
680
+ return \`{\${fieldsSelection}}\`
681
+ } else {
682
+ return ''
683
+ }
684
+ }
685
+
686
+ export const generateGraphqlOperation = (
687
+ operation: 'query' | 'mutation' | 'subscription',
688
+ root: LinkedType,
689
+ fields?: Fields,
690
+ ): GraphqlOperation => {
691
+ const ctx: Context = {
692
+ root: root,
693
+ varCounter: 0,
694
+ variables: {},
695
+ fragmentCounter: 0,
696
+ fragments: [],
697
+ }
698
+ const result = parseRequest(fields, ctx, [])
699
+
700
+ const varNames = Object.keys(ctx.variables)
701
+
702
+ const varsString =
703
+ varNames.length > 0
704
+ ? \`(\${varNames.map((v) => {
705
+ const variableType = ctx.variables[v].typing[1]
706
+ return \`$\${v}:\${variableType}\`
707
+ })})\`
708
+ : ''
709
+
710
+ const operationName = fields?.__name || ''
711
+
712
+ return {
713
+ query: [
714
+ \`\${operation} \${operationName}\${varsString}\${result}\`,
715
+ ...ctx.fragments,
716
+ ].join(','),
717
+ variables: Object.keys(ctx.variables).reduce<{ [name: string]: any }>(
718
+ (r, v) => {
719
+ r[v] = ctx.variables[v].value
720
+ return r
721
+ },
722
+ {},
723
+ ),
724
+ ...(operationName ? { operationName: operationName.toString() } : {}),
725
+ }
726
+ }
727
+
728
+ export const getFieldFromPath = (
729
+ root: LinkedType | undefined,
730
+ path: string[],
731
+ ) => {
732
+ let current: LinkedField | undefined
733
+
734
+ if (!root) throw new Error('root type is not provided')
735
+
736
+ if (path.length === 0) throw new Error(\`path is empty\`)
737
+
738
+ path.forEach((f) => {
739
+ const type = current ? current.type : root
740
+
741
+ if (!type.fields)
742
+ throw new Error(\`type \\\`\${type.name}\\\` does not have fields\`)
743
+
744
+ const possibleTypes = Object.keys(type.fields)
745
+ .filter((i) => i.startsWith('on_'))
746
+ .reduce(
747
+ (types, fieldName) => {
748
+ const field = type.fields && type.fields[fieldName]
749
+ if (field) types.push(field.type)
750
+ return types
751
+ },
752
+ [type],
753
+ )
754
+
755
+ let field: LinkedField | null = null
756
+
757
+ possibleTypes.forEach((type) => {
758
+ const found = type.fields && type.fields[f]
759
+ if (found) field = found
760
+ })
761
+
762
+ if (!field)
763
+ throw new Error(
764
+ \`type \\\`\${type.name}\\\` does not have a field \\\`\${f}\\\`\`,
765
+ )
766
+
767
+ current = field
768
+ })
769
+
770
+ return current as LinkedField
771
+ }
772
+ `,Te=`export { createClient } from './createClient'
773
+ export type { ClientOptions } from './createClient'
774
+ export type { FieldsSelection } from './typeSelection'
775
+ export { generateGraphqlOperation } from './generateGraphqlOperation'
776
+ export type { GraphqlOperation } from './generateGraphqlOperation'
777
+ export { linkTypeMap } from './linkTypeMap'
778
+ // export { Observable } from 'zen-observable-ts'
779
+ export { createFetcher } from './fetcher'
780
+ export { GenqlError } from './error'
781
+ export const everything = {
782
+ __scalar: true,
783
+ }
784
+ `,Ee=`import type {
785
+ CompressedType,
786
+ CompressedTypeMap,
787
+ LinkedArgMap,
788
+ LinkedField,
789
+ LinkedType,
790
+ LinkedTypeMap,
791
+ } from './types'
792
+
793
+ export interface PartialLinkedFieldMap {
794
+ [field: string]: {
795
+ type: string
796
+ args?: LinkedArgMap
797
+ }
798
+ }
799
+
800
+ export const linkTypeMap = (
801
+ typeMap: CompressedTypeMap<number>,
802
+ ): LinkedTypeMap => {
803
+ const indexToName: Record<number, string> = Object.assign(
804
+ {},
805
+ ...Object.keys(typeMap.types).map((k, i) => ({ [i]: k })),
806
+ )
807
+
808
+ let intermediaryTypeMap = Object.assign(
809
+ {},
810
+ ...Object.keys(typeMap.types || {}).map(
811
+ (k): Record<string, LinkedType> => {
812
+ const type: CompressedType = typeMap.types[k]!
813
+ const fields = type || {}
814
+ return {
815
+ [k]: {
816
+ name: k,
817
+ // type scalar properties
818
+ scalar: Object.keys(fields).filter((f) => {
819
+ const [type] = fields[f] || []
820
+ return type && typeMap.scalars.includes(type)
821
+ }),
822
+ // fields with corresponding \`type\` and \`args\`
823
+ fields: Object.assign(
824
+ {},
825
+ ...Object.keys(fields).map(
826
+ (f): PartialLinkedFieldMap => {
827
+ const [typeIndex, args] = fields[f] || []
828
+ if (typeIndex == null) {
829
+ return {}
830
+ }
831
+ return {
832
+ [f]: {
833
+ // replace index with type name
834
+ type: indexToName[typeIndex],
835
+ args: Object.assign(
836
+ {},
837
+ ...Object.keys(args || {}).map(
838
+ (k) => {
839
+ // if argTypeString == argTypeName, argTypeString is missing, need to readd it
840
+ if (!args || !args[k]) {
841
+ return
842
+ }
843
+ const [
844
+ argTypeName,
845
+ argTypeString,
846
+ ] = args[k] as any
847
+ return {
848
+ [k]: [
849
+ indexToName[
850
+ argTypeName
851
+ ],
852
+ argTypeString ||
853
+ indexToName[
854
+ argTypeName
855
+ ],
856
+ ],
857
+ }
858
+ },
859
+ ),
860
+ ),
861
+ },
862
+ }
863
+ },
864
+ ),
865
+ ),
866
+ },
867
+ }
868
+ },
869
+ ),
870
+ )
871
+ const res = resolveConcreteTypes(intermediaryTypeMap)
872
+ return res
873
+ }
874
+
875
+ // replace typename with concrete type
876
+ export const resolveConcreteTypes = (linkedTypeMap: LinkedTypeMap) => {
877
+ Object.keys(linkedTypeMap).forEach((typeNameFromKey) => {
878
+ const type: LinkedType = linkedTypeMap[typeNameFromKey]!
879
+ // type.name = typeNameFromKey
880
+ if (!type.fields) {
881
+ return
882
+ }
883
+
884
+ const fields = type.fields
885
+
886
+ Object.keys(fields).forEach((f) => {
887
+ const field: LinkedField = fields[f]!
888
+
889
+ if (field.args) {
890
+ const args = field.args
891
+ Object.keys(args).forEach((key) => {
892
+ const arg = args[key]
893
+
894
+ if (arg) {
895
+ const [typeName] = arg
896
+
897
+ if (typeof typeName === 'string') {
898
+ if (!linkedTypeMap[typeName]) {
899
+ linkedTypeMap[typeName] = { name: typeName }
900
+ }
901
+
902
+ arg[0] = linkedTypeMap[typeName]!
903
+ }
904
+ }
905
+ })
906
+ }
907
+
908
+ const typeName = field.type as LinkedType | string
909
+
910
+ if (typeof typeName === 'string') {
911
+ if (!linkedTypeMap[typeName]) {
912
+ linkedTypeMap[typeName] = { name: typeName }
913
+ }
914
+
915
+ field.type = linkedTypeMap[typeName]!
916
+ }
917
+ })
918
+ })
919
+
920
+ return linkedTypeMap
921
+ }
922
+ `,De=`//////////////////////////////////////////////////
923
+
924
+ // SOME THINGS TO KNOW BEFORE DIVING IN
925
+ /*
926
+ 0. DST is the request type, SRC is the response type
927
+
928
+ 1. FieldsSelection uses an object because currently is impossible to make recursive types
929
+
930
+ 2. FieldsSelection is a recursive type that makes a type based on request type and fields
931
+
932
+ 3. HandleObject handles object types
933
+
934
+ 4. Handle__scalar adds all scalar properties excluding non scalar props
935
+ */
936
+
937
+ export type FieldsSelection<SRC extends Anify<DST> | undefined, DST> = {
938
+ scalar: SRC
939
+ union: Handle__isUnion<SRC, DST>
940
+ object: HandleObject<SRC, DST>
941
+ array: SRC extends Nil
942
+ ? never
943
+ : SRC extends (infer T)[]
944
+ ? Array<FieldsSelection<T, DST>>
945
+ : never
946
+ __scalar: Handle__scalar<SRC, DST>
947
+ never: never
948
+ }[DST extends Nil
949
+ ? 'never'
950
+ : SRC extends Nil
951
+ ? 'never'
952
+ : DST extends false | 0
953
+ ? 'never'
954
+ : SRC extends Scalar
955
+ ? 'scalar'
956
+ : SRC extends any[]
957
+ ? 'array'
958
+ : SRC extends { __isUnion?: any }
959
+ ? 'union'
960
+ : DST extends { __scalar?: any }
961
+ ? '__scalar'
962
+ : DST extends {}
963
+ ? 'object'
964
+ : 'never']
965
+
966
+ type HandleObject<SRC extends Anify<DST>, DST> = SRC extends Nil
967
+ ? never
968
+ : Pick<
969
+ {
970
+ // using keyof SRC to maintain ?: relations of SRC type
971
+ [Key in keyof SRC]: Key extends keyof DST
972
+ ? FieldsSelection<
973
+ NonNullable<SRC[Key]>,
974
+ NonNullable<DST[Key]>
975
+ >
976
+ : SRC[Key]
977
+ },
978
+ Exclude<keyof DST, FieldsToRemove>
979
+ // {
980
+ // // remove falsy values
981
+ // [Key in keyof DST]: DST[Key] extends false | 0 ? never : Key
982
+ // }[keyof DST]
983
+ >
984
+
985
+ type Handle__scalar<SRC extends Anify<DST>, DST> = SRC extends Nil
986
+ ? never
987
+ : Pick<
988
+ // continue processing fields that are in DST, directly pass SRC type if not in DST
989
+ {
990
+ [Key in keyof SRC]: Key extends keyof DST
991
+ ? FieldsSelection<SRC[Key], DST[Key]>
992
+ : SRC[Key]
993
+ },
994
+ // remove fields that are not scalars or are not in DST
995
+ {
996
+ [Key in keyof SRC]: SRC[Key] extends Nil
997
+ ? never
998
+ : Key extends FieldsToRemove
999
+ ? never
1000
+ : SRC[Key] extends Scalar
1001
+ ? Key
1002
+ : Key extends keyof DST
1003
+ ? Key
1004
+ : never
1005
+ }[keyof SRC]
1006
+ >
1007
+
1008
+ type Handle__isUnion<SRC extends Anify<DST>, DST> = SRC extends Nil
1009
+ ? never
1010
+ : Omit<SRC, FieldsToRemove> // just return the union type
1011
+
1012
+ type Scalar = string | number | Date | boolean | null | undefined
1013
+
1014
+ type Anify<T> = { [P in keyof T]?: any }
1015
+
1016
+ type FieldsToRemove = '__isUnion' | '__scalar' | '__name' | '__args'
1017
+
1018
+ type Nil = undefined | null
1019
+ `,Oe=`
1020
+ export interface ExecutionResult<TData = { [key: string]: any }> {
1021
+ errors?: Array<Error>
1022
+ data?: TData | null
1023
+ }
1024
+
1025
+ export interface ArgMap<keyType = number> {
1026
+ [arg: string]: [keyType, string] | [keyType] | undefined
1027
+ }
1028
+
1029
+ export type CompressedField<keyType = number> = [
1030
+ type: keyType,
1031
+ args?: ArgMap<keyType>,
1032
+ ]
1033
+
1034
+ export interface CompressedFieldMap<keyType = number> {
1035
+ [field: string]: CompressedField<keyType> | undefined
1036
+ }
1037
+
1038
+ export type CompressedType<keyType = number> = CompressedFieldMap<keyType>
1039
+
1040
+ export interface CompressedTypeMap<keyType = number> {
1041
+ scalars: Array<keyType>
1042
+ types: {
1043
+ [type: string]: CompressedType<keyType> | undefined
1044
+ }
1045
+ }
1046
+
1047
+ // normal types
1048
+ export type Field<keyType = number> = {
1049
+ type: keyType
1050
+ args?: ArgMap<keyType>
1051
+ }
1052
+
1053
+ export interface FieldMap<keyType = number> {
1054
+ [field: string]: Field<keyType> | undefined
1055
+ }
1056
+
1057
+ export type Type<keyType = number> = FieldMap<keyType>
1058
+
1059
+ export interface TypeMap<keyType = number> {
1060
+ scalars: Array<keyType>
1061
+ types: {
1062
+ [type: string]: Type<keyType> | undefined
1063
+ }
1064
+ }
1065
+
1066
+ export interface LinkedArgMap {
1067
+ [arg: string]: [LinkedType, string] | undefined
1068
+ }
1069
+ export interface LinkedField {
1070
+ type: LinkedType
1071
+ args?: LinkedArgMap
1072
+ }
1073
+
1074
+ export interface LinkedFieldMap {
1075
+ [field: string]: LinkedField | undefined
1076
+ }
1077
+
1078
+ export interface LinkedType {
1079
+ name: string
1080
+ fields?: LinkedFieldMap
1081
+ scalar?: string[]
1082
+ }
1083
+
1084
+ export interface LinkedTypeMap {
1085
+ [type: string]: LinkedType | undefined
1086
+ }
1087
+ `,X=(e,t)=>e===void 0?(0,s.readFileSync)((0,r.join)((0,r.join)((0,r.dirname)((0,ee.fileURLToPath)({}.url)),`genql`,`runtime`),t),`utf-8`):e,ke=[{name:`batcher.ts`,content:X(be,`batcher.ts`)},{name:`createClient.ts`,content:X(xe,`createClient.ts`)},{name:`error.ts`,content:X(Se,`error.ts`)},{name:`fetcher.ts`,content:X(Ce,`fetcher.ts`)},{name:`generateGraphqlOperation.ts`,content:X(we,`generateGraphqlOperation.ts`)},{name:`index.ts`,content:X(Te,`index.ts`)},{name:`linkTypeMap.ts`,content:X(Ee,`linkTypeMap.ts`)},{name:`typeSelection.ts`,content:X(De,`typeSelection.ts`)},{name:`types.ts`,content:X(Oe,`types.ts`)}],Ae=`schema.ts`,je=`schema.graphql`,Me=`types.ts`,Ne=`index.ts`,Pe=async(e,t)=>{if(!e.output)throw Error("`output` must be defined in the config");let n=e.output;await S([n],!0);let r=new O(t,e);ge(t,r),await C([n,je],await r.toCode(`graphql`)),await S([n,`runtime`]);for(let{name:e,content:t}of ke)await C([n,`runtime`,e],`// @ts-nocheck
1088
+ `+t);let i=new O(t,e);me(t,i),V(t,i),q(t,i),Fe(t,i),await C([n,Ae],`// @ts-nocheck
1089
+ `+await i.toCode(`typescript`));let a=new O(t,e);ve(t,a),await C([n,Me],`export default ${await a.toCode()}`);let o=new O(t,e);E(t,o),await C([n,Ne],`// @ts-nocheck
1090
+ `+await o.toCode(`typescript`,!0))};function Fe(e,t){let n=e.getTypeMap(),r=[];for(let e in n){if(D.includes(e))continue;let t=n[e];(0,a.isEnumType)(t)&&r.push(t)}r.length!==0&&t.addCodeBlock(r.map(e=>`export const ${(0,o.default)(`enum`+e.name)} = {\n`+e.getValues().map(e=>e?.name?` ${e.name}: '${e.name}' as const`:``).join(`,
1091
+ `)+`
1092
+ }
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';
1095
+
1096
+ // Ambient stubs for the genql-generated code this template is injected into.
1097
+ // __STRIPPED_DURING_INJECTION_START__
1098
+ type QueryGenqlSelection = Record<string, unknown>;
1099
+ type MutationGenqlSelection = Record<string, unknown>;
1100
+ type GraphqlOperation = Record<string, unknown>;
1101
+
1102
+ type ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {
1103
+ url?: string;
1104
+ headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
1105
+ fetcher?: (
1106
+ operation: GraphqlOperation | GraphqlOperation[],
1107
+ ) => Promise<unknown>;
1108
+ fetch?: typeof globalThis.fetch;
1109
+ batch?: unknown;
1110
+ };
1111
+
1112
+ type Client = {
1113
+ query: (
1114
+ request: QueryGenqlSelection & { __name?: string },
1115
+ ) => Promise<unknown>;
1116
+ mutation: (
1117
+ request: MutationGenqlSelection & { __name?: string },
1118
+ ) => Promise<unknown>;
1119
+ };
1120
+
1121
+ declare function createClient(options: ClientOptions): Client;
1122
+
1123
+ declare class GenqlError extends Error {
1124
+ constructor(errors: unknown, data: unknown);
1125
+ }
1126
+ // __STRIPPED_DURING_INJECTION_END__
1127
+
1128
+ const APP_ACCESS_TOKEN_ENV_KEY = 'TWENTY_APP_ACCESS_TOKEN';
1129
+ const APP_APPLICATION_ACCESS_TOKEN_ENV_KEY =
1130
+ 'TWENTY_APP_APPLICATION_ACCESS_TOKEN';
1131
+ const API_KEY_ENV_KEY = 'TWENTY_API_KEY';
1132
+
1133
+ export type TwentyGeneratedClientOptions = ClientOptions & {
1134
+ runAs?: TwentyClientRunAs;
1135
+ };
1136
+
1137
+ type ProcessEnvironment = Record<string, string | undefined>;
1138
+
1139
+ type GraphqlErrorPayloadEntry = {
1140
+ message?: string;
1141
+ extensions?: { code?: string };
1142
+ };
1143
+
1144
+ type GraphqlResponsePayload = {
1145
+ data?: Record<string, unknown>;
1146
+ errors?: GraphqlErrorPayloadEntry[];
1147
+ };
1148
+
1149
+ type GraphqlResponse = {
1150
+ status: number;
1151
+ statusText: string;
1152
+ payload: GraphqlResponsePayload | null;
1153
+ rawBody: string;
1154
+ };
1155
+
1156
+ type FilesFieldUploadTarget = {
1157
+ fileId: string;
1158
+ uploadUrl: string;
1159
+ contentType: string;
1160
+ };
1161
+
1162
+ type FilesFieldUploadedFile = {
1163
+ id: string;
1164
+ path: string;
1165
+ size: number;
1166
+ createdAt: string;
1167
+ url: string;
1168
+ };
1169
+
1170
+ const getProcessEnvironment = (): ProcessEnvironment => {
1171
+ const processObject = (
1172
+ globalThis as { process?: { env?: ProcessEnvironment } }
1173
+ ).process;
1174
+
1175
+ return processObject?.env ?? {};
1176
+ };
1177
+
1178
+ const getTokenFromAuthorizationHeader = (
1179
+ authorizationHeader: string | undefined,
1180
+ ): string | null => {
1181
+ if (typeof authorizationHeader !== 'string') {
1182
+ return null;
1183
+ }
1184
+
1185
+ const trimmedAuthorizationHeader = authorizationHeader.trim();
1186
+
1187
+ if (trimmedAuthorizationHeader.length === 0) {
1188
+ return null;
1189
+ }
1190
+
1191
+ if (trimmedAuthorizationHeader === 'Bearer') {
1192
+ return null;
1193
+ }
1194
+
1195
+ if (trimmedAuthorizationHeader.startsWith('Bearer ')) {
1196
+ return trimmedAuthorizationHeader.slice('Bearer '.length).trim();
1197
+ }
1198
+
1199
+ return trimmedAuthorizationHeader;
1200
+ };
1201
+
1202
+ const getTokenFromHeaders = (
1203
+ headers: HeadersInit | undefined,
1204
+ ): string | null => {
1205
+ if (!headers) {
1206
+ return null;
1207
+ }
1208
+
1209
+ if (headers instanceof Headers) {
1210
+ return getTokenFromAuthorizationHeader(
1211
+ headers.get('Authorization') ?? undefined,
1212
+ );
1213
+ }
1214
+
1215
+ if (Array.isArray(headers)) {
1216
+ const matchedAuthorizationHeader = headers.find(
1217
+ ([headerName]) => headerName.toLowerCase() === 'authorization',
1218
+ );
1219
+
1220
+ return getTokenFromAuthorizationHeader(matchedAuthorizationHeader?.[1]);
1221
+ }
1222
+
1223
+ const headersRecord = headers as Record<string, string | undefined>;
1224
+
1225
+ return getTokenFromAuthorizationHeader(
1226
+ headersRecord.Authorization ?? headersRecord.authorization,
1227
+ );
1228
+ };
1229
+
1230
+ const hasAuthenticationErrorInGraphqlPayload = (
1231
+ payload: GraphqlResponsePayload | null,
1232
+ ): boolean => {
1233
+ if (!payload?.errors) {
1234
+ return false;
1235
+ }
1236
+
1237
+ return payload.errors.some((graphqlError) => {
1238
+ return (
1239
+ graphqlError.extensions?.code === 'UNAUTHENTICATED' ||
1240
+ graphqlError.message?.toLowerCase() === 'unauthorized'
1241
+ );
1242
+ });
1243
+ };
1244
+
1245
+ const defaultOptions: TwentyGeneratedClientOptions = {
1246
+ url: '__TWENTY_DEFAULT_URL__',
1247
+ headers: {
1248
+ 'Content-Type': 'application/json',
1249
+ },
1250
+ };
1251
+
1252
+ export class TwentyGeneratedClient {
1253
+ private client: Client;
1254
+ private url: string;
1255
+ private requestOptions: RequestInit;
1256
+ private headers: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
1257
+ private fetchImplementation: typeof globalThis.fetch | null;
1258
+ private authorizationToken: string | null;
1259
+ private refreshAccessTokenPromise: Promise<string | null> | null = null;
1260
+
1261
+ constructor(options?: TwentyGeneratedClientOptions) {
1262
+ const merged: TwentyGeneratedClientOptions = {
1263
+ ...defaultOptions,
1264
+ ...options,
1265
+ };
1266
+
1267
+ const {
1268
+ url,
1269
+ headers,
1270
+ fetch: customFetchImplementation,
1271
+ fetcher: _fetcher,
1272
+ batch: _batch,
1273
+ runAs,
1274
+ ...requestOptions
1275
+ } = merged;
1276
+
1277
+ this.url = url ?? '';
1278
+ this.requestOptions = requestOptions;
1279
+ this.headers = headers ?? {};
1280
+ this.fetchImplementation =
1281
+ customFetchImplementation ?? globalThis.fetch ?? null;
1282
+
1283
+ const processEnvironment = getProcessEnvironment();
1284
+ const tokenFromHeaders = getTokenFromHeaders(
1285
+ typeof headers === 'function' ? undefined : headers,
1286
+ );
1287
+
1288
+ this.authorizationToken =
1289
+ tokenFromHeaders ??
1290
+ processEnvironment[
1291
+ runAs === 'application'
1292
+ ? APP_APPLICATION_ACCESS_TOKEN_ENV_KEY
1293
+ : APP_ACCESS_TOKEN_ENV_KEY
1294
+ ] ??
1295
+ processEnvironment[API_KEY_ENV_KEY] ??
1296
+ null;
1297
+
1298
+ this.client = createClient({
1299
+ ...merged,
1300
+ headers: undefined,
1301
+ fetcher: async (operation) =>
1302
+ this.executeGraphqlRequestWithOptionalRefresh({
1303
+ operation,
1304
+ }),
1305
+ });
1306
+ }
1307
+
1308
+ query<R extends QueryGenqlSelection>(request: R & { __name?: string }) {
1309
+ return this.client.query(request);
1310
+ }
1311
+
1312
+ mutation<R extends MutationGenqlSelection>(request: R & { __name?: string }) {
1313
+ return this.client.mutation(request);
1314
+ }
1315
+
1316
+ // __UPLOAD_FILE_START__
1317
+ async uploadFile({
1318
+ fileBuffer,
1319
+ filename,
1320
+ fieldMetadataUniversalIdentifier,
1321
+ }: {
1322
+ fileBuffer: Buffer;
1323
+ filename: string;
1324
+ fieldMetadataUniversalIdentifier: string;
1325
+ }): Promise<FilesFieldUploadedFile> {
1326
+ const { createFileUpload: uploadTarget } =
1327
+ await this.executeMutationOrThrow<{
1328
+ createFileUpload: FilesFieldUploadTarget;
1329
+ }>({
1330
+ query: \`mutation CreateFilesFieldFileUpload($filename: String!, $size: Float!, $fieldMetadataUniversalIdentifier: String!) {
1331
+ createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }
1332
+ }\`,
1333
+ variables: {
1334
+ filename,
1335
+ size: fileBuffer.byteLength,
1336
+ fieldMetadataUniversalIdentifier,
1337
+ },
1338
+ });
1339
+
1340
+ await this.putFileToUploadTargetOrThrow({ fileBuffer, uploadTarget });
1341
+
1342
+ const { completeFileUpload: uploadedFile } =
1343
+ await this.executeMutationOrThrow<{
1344
+ completeFileUpload: FilesFieldUploadedFile;
1345
+ }>({
1346
+ query: \`mutation CompleteFilesFieldFileUpload($fileId: String!) {
1347
+ completeFileUpload(fileId: $fileId) { id path size createdAt url }
1348
+ }\`,
1349
+ variables: { fileId: uploadTarget.fileId },
1350
+ });
1351
+
1352
+ return uploadedFile;
1353
+ }
1354
+
1355
+ private async putFileToUploadTargetOrThrow({
1356
+ fileBuffer,
1357
+ uploadTarget,
1358
+ }: {
1359
+ fileBuffer: Buffer;
1360
+ uploadTarget: FilesFieldUploadTarget;
1361
+ }): Promise<void> {
1362
+ const fetchImplementation = this.getFetchImplementationOrThrow();
1363
+
1364
+ const response = await fetchImplementation.call(
1365
+ globalThis,
1366
+ uploadTarget.uploadUrl,
1367
+ {
1368
+ method: 'PUT',
1369
+ headers: { 'Content-Type': uploadTarget.contentType },
1370
+ body: fileBuffer as BodyInit,
1371
+ credentials: 'omit',
1372
+ },
1373
+ );
1374
+
1375
+ if (!response.ok) {
1376
+ throw new Error(
1377
+ \`File upload failed (\${response.status} \${response.statusText}): \${await response.text()}\`,
1378
+ );
1379
+ }
1380
+ }
1381
+
1382
+ private async executeMutationOrThrow<TData>({
1383
+ query,
1384
+ variables,
1385
+ }: {
1386
+ query: string;
1387
+ variables: Record<string, unknown>;
1388
+ }): Promise<TData> {
1389
+ const result = await this.executeGraphqlRequestWithOptionalRefresh({
1390
+ operation: { query, variables },
1391
+ });
1392
+
1393
+ if (result.errors) {
1394
+ throw new GenqlError(result.errors, result.data);
1395
+ }
1396
+
1397
+ if (!result.data) {
1398
+ throw new Error('Empty GraphQL response');
1399
+ }
1400
+
1401
+ return result.data as TData;
1402
+ }
1403
+ // __UPLOAD_FILE_END__
1404
+
1405
+ private async executeGraphqlRequestWithOptionalRefresh({
1406
+ operation,
1407
+ headers,
1408
+ requestInit,
1409
+ }: {
1410
+ operation: GraphqlOperation | GraphqlOperation[] | FormData;
1411
+ headers?: HeadersInit;
1412
+ requestInit?: RequestInit;
1413
+ }) {
1414
+ const firstResponse = await this.executeGraphqlRequest({
1415
+ operation,
1416
+ headers,
1417
+ requestInit,
1418
+ token: this.authorizationToken,
1419
+ });
1420
+
1421
+ if (this.shouldRefreshToken(firstResponse)) {
1422
+ const refreshedAccessToken = await this.requestRefreshedAccessToken();
1423
+
1424
+ if (refreshedAccessToken) {
1425
+ const retryResponse = await this.executeGraphqlRequest({
1426
+ operation,
1427
+ headers,
1428
+ requestInit,
1429
+ token: refreshedAccessToken,
1430
+ });
1431
+
1432
+ return this.assertResponseIsSuccessful(retryResponse);
1433
+ }
1434
+ }
1435
+
1436
+ return this.assertResponseIsSuccessful(firstResponse);
1437
+ }
1438
+
1439
+ private async executeGraphqlRequest({
1440
+ operation,
1441
+ headers,
1442
+ requestInit,
1443
+ token,
1444
+ }: {
1445
+ operation: GraphqlOperation | GraphqlOperation[] | FormData;
1446
+ headers?: HeadersInit;
1447
+ requestInit?: RequestInit;
1448
+ token: string | null;
1449
+ }): Promise<GraphqlResponse> {
1450
+ const fetchImplementation = this.getFetchImplementationOrThrow();
1451
+
1452
+ const resolvedHeaders = await this.resolveHeaders();
1453
+ const requestHeaders = new Headers(resolvedHeaders);
1454
+
1455
+ if (headers) {
1456
+ new Headers(headers).forEach((value, key) =>
1457
+ requestHeaders.set(key, value),
1458
+ );
1459
+ }
1460
+
1461
+ if (operation instanceof FormData) {
1462
+ requestHeaders.delete('Content-Type');
1463
+ } else {
1464
+ requestHeaders.set('Content-Type', 'application/json');
1465
+ }
1466
+
1467
+ if (token) {
1468
+ requestHeaders.set('Authorization', \`Bearer \${token}\`);
1469
+ } else {
1470
+ requestHeaders.delete('Authorization');
1471
+ }
1472
+
1473
+ const response = await fetchImplementation.call(globalThis, this.url, {
1474
+ ...this.requestOptions,
1475
+ ...requestInit,
1476
+ method: requestInit?.method ?? 'POST',
1477
+ headers: requestHeaders,
1478
+ body:
1479
+ operation instanceof FormData ? operation : JSON.stringify(operation),
1480
+ });
1481
+
1482
+ const rawBody = await response.text();
1483
+ let payload: GraphqlResponsePayload | null = null;
1484
+
1485
+ if (rawBody.trim().length > 0) {
1486
+ try {
1487
+ payload = JSON.parse(rawBody) as GraphqlResponsePayload;
1488
+ } catch {
1489
+ payload = null;
1490
+ }
1491
+ }
1492
+
1493
+ return {
1494
+ status: response.status,
1495
+ statusText: response.statusText,
1496
+ payload,
1497
+ rawBody,
1498
+ };
1499
+ }
1500
+
1501
+ private getFetchImplementationOrThrow(): typeof globalThis.fetch {
1502
+ if (!this.fetchImplementation) {
1503
+ throw new Error(
1504
+ 'Global \`fetch\` function is not available, ' +
1505
+ 'pass a fetch implementation to the Chass client',
1506
+ );
1507
+ }
1508
+
1509
+ return this.fetchImplementation;
1510
+ }
1511
+
1512
+ private async resolveHeaders(): Promise<HeadersInit> {
1513
+ if (typeof this.headers === 'function') {
1514
+ return (await this.headers()) ?? {};
1515
+ }
1516
+
1517
+ return this.headers ?? {};
1518
+ }
1519
+
1520
+ private shouldRefreshToken(response: GraphqlResponse): boolean {
1521
+ if (response.status === 401) {
1522
+ return true;
1523
+ }
1524
+
1525
+ return hasAuthenticationErrorInGraphqlPayload(response.payload);
1526
+ }
1527
+
1528
+ private assertResponseIsSuccessful(response: GraphqlResponse) {
1529
+ if (response.status < 200 || response.status >= 300) {
1530
+ throw new Error(\`\${response.statusText}: \${response.rawBody}\`);
1531
+ }
1532
+
1533
+ if (response.payload === null) {
1534
+ throw new Error('Invalid JSON response');
1535
+ }
1536
+
1537
+ return response.payload;
1538
+ }
1539
+
1540
+ private async requestRefreshedAccessToken(): Promise<string | null> {
1541
+ const refreshAccessTokenFunction = (
1542
+ globalThis as {
1543
+ frontComponentHostCommunicationApi?: {
1544
+ requestAccessTokenRefresh?: () => Promise<string>;
1545
+ };
1546
+ }
1547
+ ).frontComponentHostCommunicationApi?.requestAccessTokenRefresh;
1548
+
1549
+ if (typeof refreshAccessTokenFunction !== 'function') {
1550
+ return null;
1551
+ }
1552
+
1553
+ if (!this.refreshAccessTokenPromise) {
1554
+ this.refreshAccessTokenPromise = refreshAccessTokenFunction()
1555
+ .then((refreshedAccessToken) => {
1556
+ if (
1557
+ typeof refreshedAccessToken !== 'string' ||
1558
+ refreshedAccessToken.length === 0
1559
+ ) {
1560
+ return null;
1561
+ }
1562
+
1563
+ this.setAuthorizationToken(refreshedAccessToken);
1564
+
1565
+ return refreshedAccessToken;
1566
+ })
1567
+ .catch((refreshError: unknown) => {
1568
+ console.error('Chass client: token refresh failed', refreshError);
1569
+
1570
+ return null;
1571
+ })
1572
+ .finally(() => {
1573
+ this.refreshAccessTokenPromise = null;
1574
+ });
1575
+ }
1576
+
1577
+ return this.refreshAccessTokenPromise;
1578
+ }
1579
+
1580
+ private setAuthorizationToken(token: string) {
1581
+ this.authorizationToken = token;
1582
+
1583
+ const processEnvironment = getProcessEnvironment();
1584
+
1585
+ processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;
1586
+ }
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.t}}/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
+
1590
+ // Ambient stubs for the genql-generated code this template is injected into.
1591
+ // __STRIPPED_DURING_INJECTION_START__
1592
+ type QueryGenqlSelection = Record<string, unknown>;
1593
+ type MutationGenqlSelection = Record<string, unknown>;
1594
+ type GraphqlOperation = Record<string, unknown>;
1595
+
1596
+ type ClientOptions = Omit<RequestInit, 'body' | 'headers'> & {
1597
+ url?: string;
1598
+ headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
1599
+ fetcher?: (
1600
+ operation: GraphqlOperation | GraphqlOperation[],
1601
+ ) => Promise<unknown>;
1602
+ fetch?: typeof globalThis.fetch;
1603
+ batch?: unknown;
1604
+ };
1605
+
1606
+ type Client = {
1607
+ query: (
1608
+ request: QueryGenqlSelection & { __name?: string },
1609
+ ) => Promise<unknown>;
1610
+ mutation: (
1611
+ request: MutationGenqlSelection & { __name?: string },
1612
+ ) => Promise<unknown>;
1613
+ };
1614
+
1615
+ declare function createClient(options: ClientOptions): Client;
1616
+
1617
+ declare class GenqlError extends Error {
1618
+ constructor(errors: unknown, data: unknown);
1619
+ }
1620
+ // __STRIPPED_DURING_INJECTION_END__
1621
+
1622
+ const APP_ACCESS_TOKEN_ENV_KEY = 'TWENTY_APP_ACCESS_TOKEN';
1623
+ const APP_APPLICATION_ACCESS_TOKEN_ENV_KEY =
1624
+ 'TWENTY_APP_APPLICATION_ACCESS_TOKEN';
1625
+ const API_KEY_ENV_KEY = 'TWENTY_API_KEY';
1626
+
1627
+ export type TwentyGeneratedClientOptions = ClientOptions & {
1628
+ runAs?: TwentyClientRunAs;
1629
+ };
1630
+
1631
+ type ProcessEnvironment = Record<string, string | undefined>;
1632
+
1633
+ type GraphqlErrorPayloadEntry = {
1634
+ message?: string;
1635
+ extensions?: { code?: string };
1636
+ };
1637
+
1638
+ type GraphqlResponsePayload = {
1639
+ data?: Record<string, unknown>;
1640
+ errors?: GraphqlErrorPayloadEntry[];
1641
+ };
1642
+
1643
+ type GraphqlResponse = {
1644
+ status: number;
1645
+ statusText: string;
1646
+ payload: GraphqlResponsePayload | null;
1647
+ rawBody: string;
1648
+ };
1649
+
1650
+ type FilesFieldUploadTarget = {
1651
+ fileId: string;
1652
+ uploadUrl: string;
1653
+ contentType: string;
1654
+ };
1655
+
1656
+ type FilesFieldUploadedFile = {
1657
+ id: string;
1658
+ path: string;
1659
+ size: number;
1660
+ createdAt: string;
1661
+ url: string;
1662
+ };
1663
+
1664
+ const getProcessEnvironment = (): ProcessEnvironment => {
1665
+ const processObject = (
1666
+ globalThis as { process?: { env?: ProcessEnvironment } }
1667
+ ).process;
1668
+
1669
+ return processObject?.env ?? {};
1670
+ };
1671
+
1672
+ const getTokenFromAuthorizationHeader = (
1673
+ authorizationHeader: string | undefined,
1674
+ ): string | null => {
1675
+ if (typeof authorizationHeader !== 'string') {
1676
+ return null;
1677
+ }
1678
+
1679
+ const trimmedAuthorizationHeader = authorizationHeader.trim();
1680
+
1681
+ if (trimmedAuthorizationHeader.length === 0) {
1682
+ return null;
1683
+ }
1684
+
1685
+ if (trimmedAuthorizationHeader === 'Bearer') {
1686
+ return null;
1687
+ }
1688
+
1689
+ if (trimmedAuthorizationHeader.startsWith('Bearer ')) {
1690
+ return trimmedAuthorizationHeader.slice('Bearer '.length).trim();
1691
+ }
1692
+
1693
+ return trimmedAuthorizationHeader;
1694
+ };
1695
+
1696
+ const getTokenFromHeaders = (
1697
+ headers: HeadersInit | undefined,
1698
+ ): string | null => {
1699
+ if (!headers) {
1700
+ return null;
1701
+ }
1702
+
1703
+ if (headers instanceof Headers) {
1704
+ return getTokenFromAuthorizationHeader(
1705
+ headers.get('Authorization') ?? undefined,
1706
+ );
1707
+ }
1708
+
1709
+ if (Array.isArray(headers)) {
1710
+ const matchedAuthorizationHeader = headers.find(
1711
+ ([headerName]) => headerName.toLowerCase() === 'authorization',
1712
+ );
1713
+
1714
+ return getTokenFromAuthorizationHeader(matchedAuthorizationHeader?.[1]);
1715
+ }
1716
+
1717
+ const headersRecord = headers as Record<string, string | undefined>;
1718
+
1719
+ return getTokenFromAuthorizationHeader(
1720
+ headersRecord.Authorization ?? headersRecord.authorization,
1721
+ );
1722
+ };
1723
+
1724
+ const hasAuthenticationErrorInGraphqlPayload = (
1725
+ payload: GraphqlResponsePayload | null,
1726
+ ): boolean => {
1727
+ if (!payload?.errors) {
1728
+ return false;
1729
+ }
1730
+
1731
+ return payload.errors.some((graphqlError) => {
1732
+ return (
1733
+ graphqlError.extensions?.code === 'UNAUTHENTICATED' ||
1734
+ graphqlError.message?.toLowerCase() === 'unauthorized'
1735
+ );
1736
+ });
1737
+ };
1738
+
1739
+ const defaultOptions: TwentyGeneratedClientOptions = {
1740
+ url: '__TWENTY_DEFAULT_URL__',
1741
+ headers: {
1742
+ 'Content-Type': 'application/json',
1743
+ },
1744
+ };
1745
+
1746
+ export class TwentyGeneratedClient {
1747
+ private client: Client;
1748
+ private url: string;
1749
+ private requestOptions: RequestInit;
1750
+ private headers: HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
1751
+ private fetchImplementation: typeof globalThis.fetch | null;
1752
+ private authorizationToken: string | null;
1753
+ private refreshAccessTokenPromise: Promise<string | null> | null = null;
1754
+
1755
+ constructor(options?: TwentyGeneratedClientOptions) {
1756
+ const merged: TwentyGeneratedClientOptions = {
1757
+ ...defaultOptions,
1758
+ ...options,
1759
+ };
1760
+
1761
+ const {
1762
+ url,
1763
+ headers,
1764
+ fetch: customFetchImplementation,
1765
+ fetcher: _fetcher,
1766
+ batch: _batch,
1767
+ runAs,
1768
+ ...requestOptions
1769
+ } = merged;
1770
+
1771
+ this.url = url ?? '';
1772
+ this.requestOptions = requestOptions;
1773
+ this.headers = headers ?? {};
1774
+ this.fetchImplementation =
1775
+ customFetchImplementation ?? globalThis.fetch ?? null;
1776
+
1777
+ const processEnvironment = getProcessEnvironment();
1778
+ const tokenFromHeaders = getTokenFromHeaders(
1779
+ typeof headers === 'function' ? undefined : headers,
1780
+ );
1781
+
1782
+ this.authorizationToken =
1783
+ tokenFromHeaders ??
1784
+ processEnvironment[
1785
+ runAs === 'application'
1786
+ ? APP_APPLICATION_ACCESS_TOKEN_ENV_KEY
1787
+ : APP_ACCESS_TOKEN_ENV_KEY
1788
+ ] ??
1789
+ processEnvironment[API_KEY_ENV_KEY] ??
1790
+ null;
1791
+
1792
+ this.client = createClient({
1793
+ ...merged,
1794
+ headers: undefined,
1795
+ fetcher: async (operation) =>
1796
+ this.executeGraphqlRequestWithOptionalRefresh({
1797
+ operation,
1798
+ }),
1799
+ });
1800
+ }
1801
+
1802
+ query<R extends QueryGenqlSelection>(request: R & { __name?: string }) {
1803
+ return this.client.query(request);
1804
+ }
1805
+
1806
+ mutation<R extends MutationGenqlSelection>(request: R & { __name?: string }) {
1807
+ return this.client.mutation(request);
1808
+ }
1809
+
1810
+ // __UPLOAD_FILE_START__
1811
+ async uploadFile({
1812
+ fileBuffer,
1813
+ filename,
1814
+ fieldMetadataUniversalIdentifier,
1815
+ }: {
1816
+ fileBuffer: Buffer;
1817
+ filename: string;
1818
+ fieldMetadataUniversalIdentifier: string;
1819
+ }): Promise<FilesFieldUploadedFile> {
1820
+ const { createFileUpload: uploadTarget } =
1821
+ await this.executeMutationOrThrow<{
1822
+ createFileUpload: FilesFieldUploadTarget;
1823
+ }>({
1824
+ query: \`mutation CreateFilesFieldFileUpload($filename: String!, $size: Float!, $fieldMetadataUniversalIdentifier: String!) {
1825
+ createFileUpload(filename: $filename, size: $size, fileFolder: FilesField, fieldMetadataUniversalIdentifier: $fieldMetadataUniversalIdentifier) { fileId uploadUrl contentType }
1826
+ }\`,
1827
+ variables: {
1828
+ filename,
1829
+ size: fileBuffer.byteLength,
1830
+ fieldMetadataUniversalIdentifier,
1831
+ },
1832
+ });
1833
+
1834
+ await this.putFileToUploadTargetOrThrow({ fileBuffer, uploadTarget });
1835
+
1836
+ const { completeFileUpload: uploadedFile } =
1837
+ await this.executeMutationOrThrow<{
1838
+ completeFileUpload: FilesFieldUploadedFile;
1839
+ }>({
1840
+ query: \`mutation CompleteFilesFieldFileUpload($fileId: String!) {
1841
+ completeFileUpload(fileId: $fileId) { id path size createdAt url }
1842
+ }\`,
1843
+ variables: { fileId: uploadTarget.fileId },
1844
+ });
1845
+
1846
+ return uploadedFile;
1847
+ }
1848
+
1849
+ private async putFileToUploadTargetOrThrow({
1850
+ fileBuffer,
1851
+ uploadTarget,
1852
+ }: {
1853
+ fileBuffer: Buffer;
1854
+ uploadTarget: FilesFieldUploadTarget;
1855
+ }): Promise<void> {
1856
+ const fetchImplementation = this.getFetchImplementationOrThrow();
1857
+
1858
+ const response = await fetchImplementation.call(
1859
+ globalThis,
1860
+ uploadTarget.uploadUrl,
1861
+ {
1862
+ method: 'PUT',
1863
+ headers: { 'Content-Type': uploadTarget.contentType },
1864
+ body: fileBuffer as BodyInit,
1865
+ credentials: 'omit',
1866
+ },
1867
+ );
1868
+
1869
+ if (!response.ok) {
1870
+ throw new Error(
1871
+ \`File upload failed (\${response.status} \${response.statusText}): \${await response.text()}\`,
1872
+ );
1873
+ }
1874
+ }
1875
+
1876
+ private async executeMutationOrThrow<TData>({
1877
+ query,
1878
+ variables,
1879
+ }: {
1880
+ query: string;
1881
+ variables: Record<string, unknown>;
1882
+ }): Promise<TData> {
1883
+ const result = await this.executeGraphqlRequestWithOptionalRefresh({
1884
+ operation: { query, variables },
1885
+ });
1886
+
1887
+ if (result.errors) {
1888
+ throw new GenqlError(result.errors, result.data);
1889
+ }
1890
+
1891
+ if (!result.data) {
1892
+ throw new Error('Empty GraphQL response');
1893
+ }
1894
+
1895
+ return result.data as TData;
1896
+ }
1897
+ // __UPLOAD_FILE_END__
1898
+
1899
+ private async executeGraphqlRequestWithOptionalRefresh({
1900
+ operation,
1901
+ headers,
1902
+ requestInit,
1903
+ }: {
1904
+ operation: GraphqlOperation | GraphqlOperation[] | FormData;
1905
+ headers?: HeadersInit;
1906
+ requestInit?: RequestInit;
1907
+ }) {
1908
+ const firstResponse = await this.executeGraphqlRequest({
1909
+ operation,
1910
+ headers,
1911
+ requestInit,
1912
+ token: this.authorizationToken,
1913
+ });
1914
+
1915
+ if (this.shouldRefreshToken(firstResponse)) {
1916
+ const refreshedAccessToken = await this.requestRefreshedAccessToken();
1917
+
1918
+ if (refreshedAccessToken) {
1919
+ const retryResponse = await this.executeGraphqlRequest({
1920
+ operation,
1921
+ headers,
1922
+ requestInit,
1923
+ token: refreshedAccessToken,
1924
+ });
1925
+
1926
+ return this.assertResponseIsSuccessful(retryResponse);
1927
+ }
1928
+ }
1929
+
1930
+ return this.assertResponseIsSuccessful(firstResponse);
1931
+ }
1932
+
1933
+ private async executeGraphqlRequest({
1934
+ operation,
1935
+ headers,
1936
+ requestInit,
1937
+ token,
1938
+ }: {
1939
+ operation: GraphqlOperation | GraphqlOperation[] | FormData;
1940
+ headers?: HeadersInit;
1941
+ requestInit?: RequestInit;
1942
+ token: string | null;
1943
+ }): Promise<GraphqlResponse> {
1944
+ const fetchImplementation = this.getFetchImplementationOrThrow();
1945
+
1946
+ const resolvedHeaders = await this.resolveHeaders();
1947
+ const requestHeaders = new Headers(resolvedHeaders);
1948
+
1949
+ if (headers) {
1950
+ new Headers(headers).forEach((value, key) =>
1951
+ requestHeaders.set(key, value),
1952
+ );
1953
+ }
1954
+
1955
+ if (operation instanceof FormData) {
1956
+ requestHeaders.delete('Content-Type');
1957
+ } else {
1958
+ requestHeaders.set('Content-Type', 'application/json');
1959
+ }
1960
+
1961
+ if (token) {
1962
+ requestHeaders.set('Authorization', \`Bearer \${token}\`);
1963
+ } else {
1964
+ requestHeaders.delete('Authorization');
1965
+ }
1966
+
1967
+ const response = await fetchImplementation.call(globalThis, this.url, {
1968
+ ...this.requestOptions,
1969
+ ...requestInit,
1970
+ method: requestInit?.method ?? 'POST',
1971
+ headers: requestHeaders,
1972
+ body:
1973
+ operation instanceof FormData ? operation : JSON.stringify(operation),
1974
+ });
1975
+
1976
+ const rawBody = await response.text();
1977
+ let payload: GraphqlResponsePayload | null = null;
1978
+
1979
+ if (rawBody.trim().length > 0) {
1980
+ try {
1981
+ payload = JSON.parse(rawBody) as GraphqlResponsePayload;
1982
+ } catch {
1983
+ payload = null;
1984
+ }
1985
+ }
1986
+
1987
+ return {
1988
+ status: response.status,
1989
+ statusText: response.statusText,
1990
+ payload,
1991
+ rawBody,
1992
+ };
1993
+ }
1994
+
1995
+ private getFetchImplementationOrThrow(): typeof globalThis.fetch {
1996
+ if (!this.fetchImplementation) {
1997
+ throw new Error(
1998
+ 'Global \`fetch\` function is not available, ' +
1999
+ 'pass a fetch implementation to the Chass client',
2000
+ );
2001
+ }
2002
+
2003
+ return this.fetchImplementation;
2004
+ }
2005
+
2006
+ private async resolveHeaders(): Promise<HeadersInit> {
2007
+ if (typeof this.headers === 'function') {
2008
+ return (await this.headers()) ?? {};
2009
+ }
2010
+
2011
+ return this.headers ?? {};
2012
+ }
2013
+
2014
+ private shouldRefreshToken(response: GraphqlResponse): boolean {
2015
+ if (response.status === 401) {
2016
+ return true;
2017
+ }
2018
+
2019
+ return hasAuthenticationErrorInGraphqlPayload(response.payload);
2020
+ }
2021
+
2022
+ private assertResponseIsSuccessful(response: GraphqlResponse) {
2023
+ if (response.status < 200 || response.status >= 300) {
2024
+ throw new Error(\`\${response.statusText}: \${response.rawBody}\`);
2025
+ }
2026
+
2027
+ if (response.payload === null) {
2028
+ throw new Error('Invalid JSON response');
2029
+ }
2030
+
2031
+ return response.payload;
2032
+ }
2033
+
2034
+ private async requestRefreshedAccessToken(): Promise<string | null> {
2035
+ const refreshAccessTokenFunction = (
2036
+ globalThis as {
2037
+ frontComponentHostCommunicationApi?: {
2038
+ requestAccessTokenRefresh?: () => Promise<string>;
2039
+ };
2040
+ }
2041
+ ).frontComponentHostCommunicationApi?.requestAccessTokenRefresh;
2042
+
2043
+ if (typeof refreshAccessTokenFunction !== 'function') {
2044
+ return null;
2045
+ }
2046
+
2047
+ if (!this.refreshAccessTokenPromise) {
2048
+ this.refreshAccessTokenPromise = refreshAccessTokenFunction()
2049
+ .then((refreshedAccessToken) => {
2050
+ if (
2051
+ typeof refreshedAccessToken !== 'string' ||
2052
+ refreshedAccessToken.length === 0
2053
+ ) {
2054
+ return null;
2055
+ }
2056
+
2057
+ this.setAuthorizationToken(refreshedAccessToken);
2058
+
2059
+ return refreshedAccessToken;
2060
+ })
2061
+ .catch((refreshError: unknown) => {
2062
+ console.error('Chass client: token refresh failed', refreshError);
2063
+
2064
+ return null;
2065
+ })
2066
+ .finally(() => {
2067
+ this.refreshAccessTokenPromise = null;
2068
+ });
2069
+ }
2070
+
2071
+ return this.refreshAccessTokenPromise;
2072
+ }
2073
+
2074
+ private setAuthorizationToken(token: string) {
2075
+ this.authorizationToken = token;
2076
+
2077
+ const processEnvironment = getProcessEnvironment();
2078
+
2079
+ processEnvironment[APP_ACCESS_TOKEN_ENV_KEY] = token;
2080
+ }
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.t}}/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;