@thinkai/tai-api-contract 2.134.0 → 2.135.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.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.134.0
4
+ version: 2.135.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -4219,6 +4219,79 @@ paths:
4219
4219
  schema:
4220
4220
  $ref: "#/components/schemas/ErrorMessageDto"
4221
4221
 
4222
+ /workspaces/{workspaceId}/company-profile/logo:
4223
+ put:
4224
+ tags: [CompanyProfile]
4225
+ summary: Upload company logo
4226
+ operationId: putCompanyProfileLogo
4227
+ description: >
4228
+ Scales the uploaded PNG, JPEG, or WebP to a 128×128 WebP (the mark is fitted inside
4229
+ the square with transparent padding) and stores that image. Requires a saved company
4230
+ profile. Editor or admin only. Source images larger than 2 MB decoded are rejected.
4231
+ parameters:
4232
+ - $ref: "#/components/parameters/WorkspaceId"
4233
+ requestBody:
4234
+ required: true
4235
+ content:
4236
+ application/json:
4237
+ schema:
4238
+ $ref: "#/components/schemas/CompanyProfileLogoPutDto"
4239
+ responses:
4240
+ "200":
4241
+ description: Stored 128×128 WebP
4242
+ content:
4243
+ application/json:
4244
+ schema:
4245
+ $ref: "#/components/schemas/WorkspaceLogoDto"
4246
+ "400":
4247
+ description: Invalid image, unsupported type, or result still too large
4248
+ content:
4249
+ application/json:
4250
+ schema:
4251
+ $ref: "#/components/schemas/ErrorMessageDto"
4252
+ "401":
4253
+ $ref: "#/components/responses/Unauthorized"
4254
+ "403":
4255
+ $ref: "#/components/responses/Forbidden"
4256
+ "404":
4257
+ description: Workspace does not exist
4258
+ content:
4259
+ application/json:
4260
+ schema:
4261
+ $ref: "#/components/schemas/ErrorMessageDto"
4262
+ "409":
4263
+ description: No company profile saved yet (`company_profile_required`)
4264
+ content:
4265
+ application/json:
4266
+ schema:
4267
+ $ref: "#/components/schemas/ErrorMessageDto"
4268
+ delete:
4269
+ tags: [CompanyProfile]
4270
+ summary: Remove company logo
4271
+ operationId: deleteCompanyProfileLogo
4272
+ description: Clears the stored logo. Editor or admin only. Succeeds when no logo is stored.
4273
+ parameters:
4274
+ - $ref: "#/components/parameters/WorkspaceId"
4275
+ responses:
4276
+ "204":
4277
+ description: Logo cleared
4278
+ "401":
4279
+ $ref: "#/components/responses/Unauthorized"
4280
+ "403":
4281
+ $ref: "#/components/responses/Forbidden"
4282
+ "404":
4283
+ description: Workspace does not exist
4284
+ content:
4285
+ application/json:
4286
+ schema:
4287
+ $ref: "#/components/schemas/ErrorMessageDto"
4288
+ "409":
4289
+ description: No company profile saved yet (`company_profile_required`)
4290
+ content:
4291
+ application/json:
4292
+ schema:
4293
+ $ref: "#/components/schemas/ErrorMessageDto"
4294
+
4222
4295
  /workspaces/{workspaceId}/integrations/connectors-snapshot:
4223
4296
  get:
4224
4297
  tags: [Integrations]
@@ -14644,6 +14717,39 @@ components:
14644
14717
  type: string
14645
14718
  enum: [admin, editor, viewer]
14646
14719
  description: Caller's role in this workspace (from tai_workspace_members).
14720
+ logo:
14721
+ type: object
14722
+ nullable: true
14723
+ description: >
14724
+ Square 128px WebP for the workspace switcher. Omitted or null when no logo is stored.
14725
+ allOf:
14726
+ - $ref: "#/components/schemas/WorkspaceLogoDto"
14727
+
14728
+ WorkspaceLogoDto:
14729
+ type: object
14730
+ required: [contentType, data]
14731
+ properties:
14732
+ contentType:
14733
+ type: string
14734
+ enum: [image/webp]
14735
+ data:
14736
+ type: string
14737
+ minLength: 1
14738
+ maxLength: 48000
14739
+ description: Base64-encoded 128×128 WebP. No data-URL prefix.
14740
+
14741
+ CompanyProfileLogoPutDto:
14742
+ type: object
14743
+ required: [contentType, data]
14744
+ properties:
14745
+ contentType:
14746
+ type: string
14747
+ enum: [image/png, image/jpeg, image/webp]
14748
+ data:
14749
+ type: string
14750
+ minLength: 1
14751
+ maxLength: 2800000
14752
+ description: Base64-encoded source image, at most 2 MB after decoding.
14647
14753
 
14648
14754
  WorkspacesForUserDto:
14649
14755
  type: object
@@ -14680,6 +14786,14 @@ components:
14680
14786
  type: string
14681
14787
  headquarters:
14682
14788
  type: string
14789
+ logo:
14790
+ type: object
14791
+ nullable: true
14792
+ description: >
14793
+ Present on GET when a logo is stored. Ignored by PUT /company-profile.
14794
+ Upload and delete use the /company-profile/logo routes.
14795
+ allOf:
14796
+ - $ref: "#/components/schemas/WorkspaceLogoDto"
14683
14797
 
14684
14798
  GithubAccountDto:
14685
14799
  type: object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.134.0",
3
+ "version": "2.135.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1515,6 +1515,30 @@ export interface paths {
1515
1515
  patch?: never;
1516
1516
  trace?: never;
1517
1517
  };
1518
+ "/workspaces/{workspaceId}/company-profile/logo": {
1519
+ parameters: {
1520
+ query?: never;
1521
+ header?: never;
1522
+ path?: never;
1523
+ cookie?: never;
1524
+ };
1525
+ get?: never;
1526
+ /**
1527
+ * Upload company logo
1528
+ * @description Scales the uploaded PNG, JPEG, or WebP to a 128×128 WebP (the mark is fitted inside the square with transparent padding) and stores that image. Requires a saved company profile. Editor or admin only. Source images larger than 2 MB decoded are rejected.
1529
+ */
1530
+ put: operations["putCompanyProfileLogo"];
1531
+ post?: never;
1532
+ /**
1533
+ * Remove company logo
1534
+ * @description Clears the stored logo. Editor or admin only. Succeeds when no logo is stored.
1535
+ */
1536
+ delete: operations["deleteCompanyProfileLogo"];
1537
+ options?: never;
1538
+ head?: never;
1539
+ patch?: never;
1540
+ trace?: never;
1541
+ };
1518
1542
  "/workspaces/{workspaceId}/integrations/connectors-snapshot": {
1519
1543
  parameters: {
1520
1544
  query?: never;
@@ -6211,6 +6235,20 @@ export interface components {
6211
6235
  * @enum {string}
6212
6236
  */
6213
6237
  role: "admin" | "editor" | "viewer";
6238
+ /** @description Square 128px WebP for the workspace switcher. Omitted or null when no logo is stored. */
6239
+ logo?: components["schemas"]["WorkspaceLogoDto"] | null;
6240
+ };
6241
+ WorkspaceLogoDto: {
6242
+ /** @enum {string} */
6243
+ contentType: "image/webp";
6244
+ /** @description Base64-encoded 128×128 WebP. No data-URL prefix. */
6245
+ data: string;
6246
+ };
6247
+ CompanyProfileLogoPutDto: {
6248
+ /** @enum {string} */
6249
+ contentType: "image/png" | "image/jpeg" | "image/webp";
6250
+ /** @description Base64-encoded source image, at most 2 MB after decoding. */
6251
+ data: string;
6214
6252
  };
6215
6253
  WorkspacesForUserDto: {
6216
6254
  workspaces: components["schemas"]["WorkspaceSummaryDto"][];
@@ -6227,6 +6265,8 @@ export interface components {
6227
6265
  companySize: string;
6228
6266
  engineeringHC: string;
6229
6267
  headquarters: string;
6268
+ /** @description Present on GET when a logo is stored. Ignored by PUT /company-profile. Upload and delete use the /company-profile/logo routes. */
6269
+ logo?: components["schemas"]["WorkspaceLogoDto"] | null;
6230
6270
  };
6231
6271
  GithubAccountDto: {
6232
6272
  login: string;
@@ -10242,6 +10282,8 @@ export type FulfillPersonErasureBodyDto = components['schemas']['FulfillPersonEr
10242
10282
  export type PrivacyRequestPersonErasureResultDto = components['schemas']['PrivacyRequestPersonErasureResultDto'];
10243
10283
  export type PrivacyRequestExportDto = components['schemas']['PrivacyRequestExportDto'];
10244
10284
  export type WorkspaceSummaryDto = components['schemas']['WorkspaceSummaryDto'];
10285
+ export type WorkspaceLogoDto = components['schemas']['WorkspaceLogoDto'];
10286
+ export type CompanyProfileLogoPutDto = components['schemas']['CompanyProfileLogoPutDto'];
10245
10287
  export type WorkspacesForUserDto = components['schemas']['WorkspacesForUserDto'];
10246
10288
  export type CreateWorkspaceBodyDto = components['schemas']['CreateWorkspaceBodyDto'];
10247
10289
  export type CompanyProfileDto = components['schemas']['CompanyProfileDto'];
@@ -14901,6 +14943,101 @@ export interface operations {
14901
14943
  };
14902
14944
  };
14903
14945
  };
14946
+ putCompanyProfileLogo: {
14947
+ parameters: {
14948
+ query?: never;
14949
+ header?: never;
14950
+ path: {
14951
+ workspaceId: components["parameters"]["WorkspaceId"];
14952
+ };
14953
+ cookie?: never;
14954
+ };
14955
+ requestBody: {
14956
+ content: {
14957
+ "application/json": components["schemas"]["CompanyProfileLogoPutDto"];
14958
+ };
14959
+ };
14960
+ responses: {
14961
+ /** @description Stored 128×128 WebP */
14962
+ 200: {
14963
+ headers: {
14964
+ [name: string]: unknown;
14965
+ };
14966
+ content: {
14967
+ "application/json": components["schemas"]["WorkspaceLogoDto"];
14968
+ };
14969
+ };
14970
+ /** @description Invalid image, unsupported type, or result still too large */
14971
+ 400: {
14972
+ headers: {
14973
+ [name: string]: unknown;
14974
+ };
14975
+ content: {
14976
+ "application/json": components["schemas"]["ErrorMessageDto"];
14977
+ };
14978
+ };
14979
+ 401: components["responses"]["Unauthorized"];
14980
+ 403: components["responses"]["Forbidden"];
14981
+ /** @description Workspace does not exist */
14982
+ 404: {
14983
+ headers: {
14984
+ [name: string]: unknown;
14985
+ };
14986
+ content: {
14987
+ "application/json": components["schemas"]["ErrorMessageDto"];
14988
+ };
14989
+ };
14990
+ /** @description No company profile saved yet (`company_profile_required`) */
14991
+ 409: {
14992
+ headers: {
14993
+ [name: string]: unknown;
14994
+ };
14995
+ content: {
14996
+ "application/json": components["schemas"]["ErrorMessageDto"];
14997
+ };
14998
+ };
14999
+ };
15000
+ };
15001
+ deleteCompanyProfileLogo: {
15002
+ parameters: {
15003
+ query?: never;
15004
+ header?: never;
15005
+ path: {
15006
+ workspaceId: components["parameters"]["WorkspaceId"];
15007
+ };
15008
+ cookie?: never;
15009
+ };
15010
+ requestBody?: never;
15011
+ responses: {
15012
+ /** @description Logo cleared */
15013
+ 204: {
15014
+ headers: {
15015
+ [name: string]: unknown;
15016
+ };
15017
+ content?: never;
15018
+ };
15019
+ 401: components["responses"]["Unauthorized"];
15020
+ 403: components["responses"]["Forbidden"];
15021
+ /** @description Workspace does not exist */
15022
+ 404: {
15023
+ headers: {
15024
+ [name: string]: unknown;
15025
+ };
15026
+ content: {
15027
+ "application/json": components["schemas"]["ErrorMessageDto"];
15028
+ };
15029
+ };
15030
+ /** @description No company profile saved yet (`company_profile_required`) */
15031
+ 409: {
15032
+ headers: {
15033
+ [name: string]: unknown;
15034
+ };
15035
+ content: {
15036
+ "application/json": components["schemas"]["ErrorMessageDto"];
15037
+ };
15038
+ };
15039
+ };
15040
+ };
14904
15041
  getWorkspaceConnectorsSnapshot: {
14905
15042
  parameters: {
14906
15043
  query?: never;