@snokam/mcp-api 0.41.0 → 0.42.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snokam/mcp-api",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "description": "MCP server exposing Snokam backend APIs as tools for Claude Code and other MCP clients",
5
5
  "type": "module",
6
6
  "bin": {
@@ -861,6 +861,127 @@
861
861
  ]
862
862
  }
863
863
  },
864
+ "/v1.0/protected/candidates/{id}/generate-contract-pdf": {
865
+ "post": {
866
+ "tags": [
867
+ "Candidates"
868
+ ],
869
+ "summary": "Generate the 'Ansettelseskontrakt' PDF and store it on the candidate",
870
+ "description": "Renders the Snøkam employment contract template, uploads it as a Sanity file asset, and patches candidate.contractPdf to point at it. The unsigned contract is what the candidate downloads, signs and the admin then uploads back as candidate.signedContract on the SIGNED status flip. Re-running overwrites the previous PDF. Returns the updated candidate so the caller can read contractPdf.asset.url without an extra refetch.",
871
+ "operationId": "GenerateContractPdf",
872
+ "parameters": [
873
+ {
874
+ "name": "id",
875
+ "in": "path",
876
+ "required": true,
877
+ "schema": {
878
+ "type": "string"
879
+ },
880
+ "x-ms-summary": "Candidate Sanity id"
881
+ }
882
+ ],
883
+ "responses": {
884
+ "200": {
885
+ "description": "Payload of SanityCandidate",
886
+ "content": {
887
+ "application/json": {
888
+ "schema": {
889
+ "$ref": "#/components/schemas/sanityCandidate"
890
+ }
891
+ }
892
+ },
893
+ "x-ms-summary": "Success"
894
+ },
895
+ "401": {
896
+ "description": "No description",
897
+ "x-ms-summary": "Unauthorized"
898
+ },
899
+ "404": {
900
+ "description": "No description",
901
+ "x-ms-summary": "Not Found"
902
+ }
903
+ },
904
+ "security": [
905
+ {
906
+ "Implicit": [
907
+ "api://b9f9de6f-132f-4a9a-a583-e9054a46f2fa/.default"
908
+ ]
909
+ }
910
+ ]
911
+ }
912
+ },
913
+ "/v1.0/protected/candidates/{id}/upload-signed-contract": {
914
+ "post": {
915
+ "tags": [
916
+ "Candidates"
917
+ ],
918
+ "summary": "Upload the candidate's signed employment contract",
919
+ "description": "Stores the admin-uploaded signed contract PDF as a Sanity file asset and patches candidate.signedContract. Used by the SIGNED status modal — the candidate-facing /prosess/{id}/signert page renders the resulting PDF inline. Send the file as multipart/form-data under the 'file' field, OR send the raw bytes as the request body with the appropriate Content-Type.",
920
+ "operationId": "UploadSignedContract",
921
+ "parameters": [
922
+ {
923
+ "name": "id",
924
+ "in": "path",
925
+ "required": true,
926
+ "schema": {
927
+ "type": "string"
928
+ },
929
+ "x-ms-summary": "Candidate Sanity id"
930
+ }
931
+ ],
932
+ "requestBody": {
933
+ "description": "Signed contract PDF bytes. Multipart 'file' field is also accepted.",
934
+ "content": {
935
+ "application/pdf": {
936
+ "schema": {
937
+ "type": "string",
938
+ "format": "binary"
939
+ }
940
+ }
941
+ },
942
+ "required": true
943
+ },
944
+ "responses": {
945
+ "200": {
946
+ "description": "Payload of SanityCandidate",
947
+ "content": {
948
+ "application/json": {
949
+ "schema": {
950
+ "$ref": "#/components/schemas/sanityCandidate"
951
+ }
952
+ }
953
+ },
954
+ "x-ms-summary": "Success"
955
+ },
956
+ "400": {
957
+ "description": "Payload of Object",
958
+ "content": {
959
+ "application/json": {
960
+ "schema": {
961
+ "type": "object"
962
+ }
963
+ }
964
+ },
965
+ "x-ms-summary": "Bad Request"
966
+ },
967
+ "401": {
968
+ "description": "No description",
969
+ "x-ms-summary": "Unauthorized"
970
+ },
971
+ "404": {
972
+ "description": "No description",
973
+ "x-ms-summary": "Not Found"
974
+ }
975
+ },
976
+ "security": [
977
+ {
978
+ "Implicit": [
979
+ "api://b9f9de6f-132f-4a9a-a583-e9054a46f2fa/.default"
980
+ ]
981
+ }
982
+ ]
983
+ }
984
+ },
864
985
  "/v1.0/protected/candidates/{id}/rejection-suggestion": {
865
986
  "post": {
866
987
  "tags": [
@@ -1891,7 +2012,7 @@
1891
2012
  "$ref": "#/components/schemas/sanityCandidateAddress"
1892
2013
  },
1893
2014
  "applicationLetter": {
1894
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2015
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1895
2016
  },
1896
2017
  "applicationOther": {
1897
2018
  "type": "string"
@@ -1905,8 +2026,11 @@
1905
2026
  "candidate": {
1906
2027
  "type": "string"
1907
2028
  },
2029
+ "contractPdf": {
2030
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
2031
+ },
1908
2032
  "cv": {
1909
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2033
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1910
2034
  },
1911
2035
  "email": {
1912
2036
  "type": "string"
@@ -1921,7 +2045,7 @@
1921
2045
  "type": "string"
1922
2046
  },
1923
2047
  "grades": {
1924
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2048
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1925
2049
  },
1926
2050
  "jobPosition": {
1927
2051
  "$ref": "#/components/schemas/sanityCandidateJobPosition"
@@ -1933,7 +2057,7 @@
1933
2057
  }
1934
2058
  },
1935
2059
  "offerPdf": {
1936
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2060
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1937
2061
  },
1938
2062
  "onboardingChecklist": {
1939
2063
  "type": "array",
@@ -1978,6 +2102,9 @@
1978
2102
  "shortUrl": {
1979
2103
  "type": "string"
1980
2104
  },
2105
+ "signedContract": {
2106
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
2107
+ },
1981
2108
  "snapchatUsername": {
1982
2109
  "type": "string"
1983
2110
  },
@@ -2081,24 +2208,6 @@
2081
2208
  }
2082
2209
  }
2083
2210
  },
2084
- "sanityCandidateOfferPdf": {
2085
- "type": "object",
2086
- "properties": {
2087
- "sanityType": {
2088
- "enum": [
2089
- "file"
2090
- ],
2091
- "type": "string",
2092
- "default": "file"
2093
- },
2094
- "asset": {
2095
- "$ref": "#/components/schemas/sanityDocFileAsset"
2096
- },
2097
- "media": {
2098
- "type": "object"
2099
- }
2100
- }
2101
- },
2102
2211
  "sanityCandidateReferencesInner": {
2103
2212
  "type": "object",
2104
2213
  "properties": {
@@ -2126,6 +2235,24 @@
2126
2235
  }
2127
2236
  }
2128
2237
  },
2238
+ "sanityCandidateSignedContract": {
2239
+ "type": "object",
2240
+ "properties": {
2241
+ "sanityType": {
2242
+ "enum": [
2243
+ "file"
2244
+ ],
2245
+ "type": "string",
2246
+ "default": "file"
2247
+ },
2248
+ "asset": {
2249
+ "$ref": "#/components/schemas/sanityDocFileAsset"
2250
+ },
2251
+ "media": {
2252
+ "type": "object"
2253
+ }
2254
+ }
2255
+ },
2129
2256
  "sanityCreateSystem": {
2130
2257
  "type": "object",
2131
2258
  "properties": {
@@ -2515,6 +2642,9 @@
2515
2642
  "candidate": {
2516
2643
  "type": "string"
2517
2644
  },
2645
+ "contractPdf": {
2646
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2647
+ },
2518
2648
  "cv": {
2519
2649
  "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2520
2650
  },
@@ -2578,6 +2708,9 @@
2578
2708
  "shortUrl": {
2579
2709
  "type": "string"
2580
2710
  },
2711
+ "signedContract": {
2712
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2713
+ },
2581
2714
  "snapchatUsername": {
2582
2715
  "type": "string"
2583
2716
  },
@@ -30735,6 +30735,206 @@
30735
30735
  "applicationOther": {
30736
30736
  "type": "string"
30737
30737
  },
30738
+ "signedContract": {
30739
+ "properties": {
30740
+ "sanityType": {
30741
+ "type": "string",
30742
+ "enum": [
30743
+ "file"
30744
+ ],
30745
+ "nullable": false
30746
+ },
30747
+ "media": {},
30748
+ "asset": {
30749
+ "properties": {
30750
+ "source": {
30751
+ "$ref": "#/components/schemas/SanityAssetSourceData"
30752
+ },
30753
+ "url": {
30754
+ "type": "string"
30755
+ },
30756
+ "path": {
30757
+ "type": "string"
30758
+ },
30759
+ "uploadId": {
30760
+ "type": "string"
30761
+ },
30762
+ "assetId": {
30763
+ "type": "string"
30764
+ },
30765
+ "size": {
30766
+ "type": "number",
30767
+ "format": "double"
30768
+ },
30769
+ "mimeType": {
30770
+ "type": "string"
30771
+ },
30772
+ "extension": {
30773
+ "type": "string"
30774
+ },
30775
+ "sha1hash": {
30776
+ "type": "string"
30777
+ },
30778
+ "altText": {
30779
+ "type": "string"
30780
+ },
30781
+ "description": {
30782
+ "type": "string"
30783
+ },
30784
+ "title": {
30785
+ "type": "string"
30786
+ },
30787
+ "label": {
30788
+ "type": "string"
30789
+ },
30790
+ "originalFilename": {
30791
+ "type": "string"
30792
+ },
30793
+ "sanityRev": {
30794
+ "type": "string"
30795
+ },
30796
+ "sanityUpdatedAt": {
30797
+ "type": "string"
30798
+ },
30799
+ "sanityCreatedAt": {
30800
+ "type": "string"
30801
+ },
30802
+ "sanityType": {
30803
+ "type": "string",
30804
+ "enum": [
30805
+ "sanity.fileAsset"
30806
+ ],
30807
+ "nullable": false
30808
+ },
30809
+ "sanityId": {
30810
+ "type": "string"
30811
+ }
30812
+ },
30813
+ "required": [
30814
+ "url",
30815
+ "path",
30816
+ "assetId",
30817
+ "size",
30818
+ "mimeType",
30819
+ "extension",
30820
+ "sha1hash",
30821
+ "sanityRev",
30822
+ "sanityUpdatedAt",
30823
+ "sanityCreatedAt",
30824
+ "sanityType",
30825
+ "sanityId"
30826
+ ],
30827
+ "type": "object",
30828
+ "nullable": true
30829
+ }
30830
+ },
30831
+ "required": [
30832
+ "sanityType",
30833
+ "asset"
30834
+ ],
30835
+ "type": "object",
30836
+ "nullable": true
30837
+ },
30838
+ "contractPdf": {
30839
+ "properties": {
30840
+ "sanityType": {
30841
+ "type": "string",
30842
+ "enum": [
30843
+ "file"
30844
+ ],
30845
+ "nullable": false
30846
+ },
30847
+ "media": {},
30848
+ "asset": {
30849
+ "properties": {
30850
+ "source": {
30851
+ "$ref": "#/components/schemas/SanityAssetSourceData"
30852
+ },
30853
+ "url": {
30854
+ "type": "string"
30855
+ },
30856
+ "path": {
30857
+ "type": "string"
30858
+ },
30859
+ "uploadId": {
30860
+ "type": "string"
30861
+ },
30862
+ "assetId": {
30863
+ "type": "string"
30864
+ },
30865
+ "size": {
30866
+ "type": "number",
30867
+ "format": "double"
30868
+ },
30869
+ "mimeType": {
30870
+ "type": "string"
30871
+ },
30872
+ "extension": {
30873
+ "type": "string"
30874
+ },
30875
+ "sha1hash": {
30876
+ "type": "string"
30877
+ },
30878
+ "altText": {
30879
+ "type": "string"
30880
+ },
30881
+ "description": {
30882
+ "type": "string"
30883
+ },
30884
+ "title": {
30885
+ "type": "string"
30886
+ },
30887
+ "label": {
30888
+ "type": "string"
30889
+ },
30890
+ "originalFilename": {
30891
+ "type": "string"
30892
+ },
30893
+ "sanityRev": {
30894
+ "type": "string"
30895
+ },
30896
+ "sanityUpdatedAt": {
30897
+ "type": "string"
30898
+ },
30899
+ "sanityCreatedAt": {
30900
+ "type": "string"
30901
+ },
30902
+ "sanityType": {
30903
+ "type": "string",
30904
+ "enum": [
30905
+ "sanity.fileAsset"
30906
+ ],
30907
+ "nullable": false
30908
+ },
30909
+ "sanityId": {
30910
+ "type": "string"
30911
+ }
30912
+ },
30913
+ "required": [
30914
+ "url",
30915
+ "path",
30916
+ "assetId",
30917
+ "size",
30918
+ "mimeType",
30919
+ "extension",
30920
+ "sha1hash",
30921
+ "sanityRev",
30922
+ "sanityUpdatedAt",
30923
+ "sanityCreatedAt",
30924
+ "sanityType",
30925
+ "sanityId"
30926
+ ],
30927
+ "type": "object",
30928
+ "nullable": true
30929
+ }
30930
+ },
30931
+ "required": [
30932
+ "sanityType",
30933
+ "asset"
30934
+ ],
30935
+ "type": "object",
30936
+ "nullable": true
30937
+ },
30738
30938
  "offerPdf": {
30739
30939
  "properties": {
30740
30940
  "sanityType": {
@@ -31190,6 +31390,8 @@
31190
31390
  "buddy",
31191
31391
  "recruiter",
31192
31392
  "jobPosition",
31393
+ "signedContract",
31394
+ "contractPdf",
31193
31395
  "offerPdf",
31194
31396
  "grades",
31195
31397
  "cv",
@@ -31493,6 +31695,46 @@
31493
31695
  "type": "object",
31494
31696
  "nullable": true
31495
31697
  },
31698
+ "contractPdf": {
31699
+ "properties": {
31700
+ "sanityType": {
31701
+ "type": "string",
31702
+ "enum": [
31703
+ "file"
31704
+ ],
31705
+ "nullable": false
31706
+ },
31707
+ "media": {},
31708
+ "asset": {
31709
+ "$ref": "#/components/schemas/SanityFileAssetReference"
31710
+ }
31711
+ },
31712
+ "required": [
31713
+ "sanityType"
31714
+ ],
31715
+ "type": "object",
31716
+ "nullable": true
31717
+ },
31718
+ "signedContract": {
31719
+ "properties": {
31720
+ "sanityType": {
31721
+ "type": "string",
31722
+ "enum": [
31723
+ "file"
31724
+ ],
31725
+ "nullable": false
31726
+ },
31727
+ "media": {},
31728
+ "asset": {
31729
+ "$ref": "#/components/schemas/SanityFileAssetReference"
31730
+ }
31731
+ },
31732
+ "required": [
31733
+ "sanityType"
31734
+ ],
31735
+ "type": "object",
31736
+ "nullable": true
31737
+ },
31496
31738
  "applicationOther": {
31497
31739
  "type": "string",
31498
31740
  "nullable": true
@@ -861,6 +861,127 @@
861
861
  ]
862
862
  }
863
863
  },
864
+ "/v1.0/protected/candidates/{id}/generate-contract-pdf": {
865
+ "post": {
866
+ "tags": [
867
+ "Candidates"
868
+ ],
869
+ "summary": "Generate the 'Ansettelseskontrakt' PDF and store it on the candidate",
870
+ "description": "Renders the Snøkam employment contract template, uploads it as a Sanity file asset, and patches candidate.contractPdf to point at it. The unsigned contract is what the candidate downloads, signs and the admin then uploads back as candidate.signedContract on the SIGNED status flip. Re-running overwrites the previous PDF. Returns the updated candidate so the caller can read contractPdf.asset.url without an extra refetch.",
871
+ "operationId": "GenerateContractPdf",
872
+ "parameters": [
873
+ {
874
+ "name": "id",
875
+ "in": "path",
876
+ "required": true,
877
+ "schema": {
878
+ "type": "string"
879
+ },
880
+ "x-ms-summary": "Candidate Sanity id"
881
+ }
882
+ ],
883
+ "responses": {
884
+ "200": {
885
+ "description": "Payload of SanityCandidate",
886
+ "content": {
887
+ "application/json": {
888
+ "schema": {
889
+ "$ref": "#/components/schemas/sanityCandidate"
890
+ }
891
+ }
892
+ },
893
+ "x-ms-summary": "Success"
894
+ },
895
+ "401": {
896
+ "description": "No description",
897
+ "x-ms-summary": "Unauthorized"
898
+ },
899
+ "404": {
900
+ "description": "No description",
901
+ "x-ms-summary": "Not Found"
902
+ }
903
+ },
904
+ "security": [
905
+ {
906
+ "Implicit": [
907
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
908
+ ]
909
+ }
910
+ ]
911
+ }
912
+ },
913
+ "/v1.0/protected/candidates/{id}/upload-signed-contract": {
914
+ "post": {
915
+ "tags": [
916
+ "Candidates"
917
+ ],
918
+ "summary": "Upload the candidate's signed employment contract",
919
+ "description": "Stores the admin-uploaded signed contract PDF as a Sanity file asset and patches candidate.signedContract. Used by the SIGNED status modal — the candidate-facing /prosess/{id}/signert page renders the resulting PDF inline. Send the file as multipart/form-data under the 'file' field, OR send the raw bytes as the request body with the appropriate Content-Type.",
920
+ "operationId": "UploadSignedContract",
921
+ "parameters": [
922
+ {
923
+ "name": "id",
924
+ "in": "path",
925
+ "required": true,
926
+ "schema": {
927
+ "type": "string"
928
+ },
929
+ "x-ms-summary": "Candidate Sanity id"
930
+ }
931
+ ],
932
+ "requestBody": {
933
+ "description": "Signed contract PDF bytes. Multipart 'file' field is also accepted.",
934
+ "content": {
935
+ "application/pdf": {
936
+ "schema": {
937
+ "type": "string",
938
+ "format": "binary"
939
+ }
940
+ }
941
+ },
942
+ "required": true
943
+ },
944
+ "responses": {
945
+ "200": {
946
+ "description": "Payload of SanityCandidate",
947
+ "content": {
948
+ "application/json": {
949
+ "schema": {
950
+ "$ref": "#/components/schemas/sanityCandidate"
951
+ }
952
+ }
953
+ },
954
+ "x-ms-summary": "Success"
955
+ },
956
+ "400": {
957
+ "description": "Payload of Object",
958
+ "content": {
959
+ "application/json": {
960
+ "schema": {
961
+ "type": "object"
962
+ }
963
+ }
964
+ },
965
+ "x-ms-summary": "Bad Request"
966
+ },
967
+ "401": {
968
+ "description": "No description",
969
+ "x-ms-summary": "Unauthorized"
970
+ },
971
+ "404": {
972
+ "description": "No description",
973
+ "x-ms-summary": "Not Found"
974
+ }
975
+ },
976
+ "security": [
977
+ {
978
+ "Implicit": [
979
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
980
+ ]
981
+ }
982
+ ]
983
+ }
984
+ },
864
985
  "/v1.0/protected/candidates/{id}/rejection-suggestion": {
865
986
  "post": {
866
987
  "tags": [
@@ -1891,7 +2012,7 @@
1891
2012
  "$ref": "#/components/schemas/sanityCandidateAddress"
1892
2013
  },
1893
2014
  "applicationLetter": {
1894
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2015
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1895
2016
  },
1896
2017
  "applicationOther": {
1897
2018
  "type": "string"
@@ -1905,8 +2026,11 @@
1905
2026
  "candidate": {
1906
2027
  "type": "string"
1907
2028
  },
2029
+ "contractPdf": {
2030
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
2031
+ },
1908
2032
  "cv": {
1909
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2033
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1910
2034
  },
1911
2035
  "email": {
1912
2036
  "type": "string"
@@ -1921,7 +2045,7 @@
1921
2045
  "type": "string"
1922
2046
  },
1923
2047
  "grades": {
1924
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2048
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1925
2049
  },
1926
2050
  "jobPosition": {
1927
2051
  "$ref": "#/components/schemas/sanityCandidateJobPosition"
@@ -1933,7 +2057,7 @@
1933
2057
  }
1934
2058
  },
1935
2059
  "offerPdf": {
1936
- "$ref": "#/components/schemas/sanityCandidateOfferPdf"
2060
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
1937
2061
  },
1938
2062
  "onboardingChecklist": {
1939
2063
  "type": "array",
@@ -1978,6 +2102,9 @@
1978
2102
  "shortUrl": {
1979
2103
  "type": "string"
1980
2104
  },
2105
+ "signedContract": {
2106
+ "$ref": "#/components/schemas/sanityCandidateSignedContract"
2107
+ },
1981
2108
  "snapchatUsername": {
1982
2109
  "type": "string"
1983
2110
  },
@@ -2081,24 +2208,6 @@
2081
2208
  }
2082
2209
  }
2083
2210
  },
2084
- "sanityCandidateOfferPdf": {
2085
- "type": "object",
2086
- "properties": {
2087
- "sanityType": {
2088
- "enum": [
2089
- "file"
2090
- ],
2091
- "type": "string",
2092
- "default": "file"
2093
- },
2094
- "asset": {
2095
- "$ref": "#/components/schemas/sanityDocFileAsset"
2096
- },
2097
- "media": {
2098
- "type": "object"
2099
- }
2100
- }
2101
- },
2102
2211
  "sanityCandidateReferencesInner": {
2103
2212
  "type": "object",
2104
2213
  "properties": {
@@ -2126,6 +2235,24 @@
2126
2235
  }
2127
2236
  }
2128
2237
  },
2238
+ "sanityCandidateSignedContract": {
2239
+ "type": "object",
2240
+ "properties": {
2241
+ "sanityType": {
2242
+ "enum": [
2243
+ "file"
2244
+ ],
2245
+ "type": "string",
2246
+ "default": "file"
2247
+ },
2248
+ "asset": {
2249
+ "$ref": "#/components/schemas/sanityDocFileAsset"
2250
+ },
2251
+ "media": {
2252
+ "type": "object"
2253
+ }
2254
+ }
2255
+ },
2129
2256
  "sanityCreateSystem": {
2130
2257
  "type": "object",
2131
2258
  "properties": {
@@ -2515,6 +2642,9 @@
2515
2642
  "candidate": {
2516
2643
  "type": "string"
2517
2644
  },
2645
+ "contractPdf": {
2646
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2647
+ },
2518
2648
  "cv": {
2519
2649
  "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2520
2650
  },
@@ -2578,6 +2708,9 @@
2578
2708
  "shortUrl": {
2579
2709
  "type": "string"
2580
2710
  },
2711
+ "signedContract": {
2712
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2713
+ },
2581
2714
  "snapchatUsername": {
2582
2715
  "type": "string"
2583
2716
  },
@@ -30735,6 +30735,206 @@
30735
30735
  "applicationOther": {
30736
30736
  "type": "string"
30737
30737
  },
30738
+ "signedContract": {
30739
+ "properties": {
30740
+ "sanityType": {
30741
+ "type": "string",
30742
+ "enum": [
30743
+ "file"
30744
+ ],
30745
+ "nullable": false
30746
+ },
30747
+ "media": {},
30748
+ "asset": {
30749
+ "properties": {
30750
+ "source": {
30751
+ "$ref": "#/components/schemas/SanityAssetSourceData"
30752
+ },
30753
+ "url": {
30754
+ "type": "string"
30755
+ },
30756
+ "path": {
30757
+ "type": "string"
30758
+ },
30759
+ "uploadId": {
30760
+ "type": "string"
30761
+ },
30762
+ "assetId": {
30763
+ "type": "string"
30764
+ },
30765
+ "size": {
30766
+ "type": "number",
30767
+ "format": "double"
30768
+ },
30769
+ "mimeType": {
30770
+ "type": "string"
30771
+ },
30772
+ "extension": {
30773
+ "type": "string"
30774
+ },
30775
+ "sha1hash": {
30776
+ "type": "string"
30777
+ },
30778
+ "altText": {
30779
+ "type": "string"
30780
+ },
30781
+ "description": {
30782
+ "type": "string"
30783
+ },
30784
+ "title": {
30785
+ "type": "string"
30786
+ },
30787
+ "label": {
30788
+ "type": "string"
30789
+ },
30790
+ "originalFilename": {
30791
+ "type": "string"
30792
+ },
30793
+ "sanityRev": {
30794
+ "type": "string"
30795
+ },
30796
+ "sanityUpdatedAt": {
30797
+ "type": "string"
30798
+ },
30799
+ "sanityCreatedAt": {
30800
+ "type": "string"
30801
+ },
30802
+ "sanityType": {
30803
+ "type": "string",
30804
+ "enum": [
30805
+ "sanity.fileAsset"
30806
+ ],
30807
+ "nullable": false
30808
+ },
30809
+ "sanityId": {
30810
+ "type": "string"
30811
+ }
30812
+ },
30813
+ "required": [
30814
+ "url",
30815
+ "path",
30816
+ "assetId",
30817
+ "size",
30818
+ "mimeType",
30819
+ "extension",
30820
+ "sha1hash",
30821
+ "sanityRev",
30822
+ "sanityUpdatedAt",
30823
+ "sanityCreatedAt",
30824
+ "sanityType",
30825
+ "sanityId"
30826
+ ],
30827
+ "type": "object",
30828
+ "nullable": true
30829
+ }
30830
+ },
30831
+ "required": [
30832
+ "sanityType",
30833
+ "asset"
30834
+ ],
30835
+ "type": "object",
30836
+ "nullable": true
30837
+ },
30838
+ "contractPdf": {
30839
+ "properties": {
30840
+ "sanityType": {
30841
+ "type": "string",
30842
+ "enum": [
30843
+ "file"
30844
+ ],
30845
+ "nullable": false
30846
+ },
30847
+ "media": {},
30848
+ "asset": {
30849
+ "properties": {
30850
+ "source": {
30851
+ "$ref": "#/components/schemas/SanityAssetSourceData"
30852
+ },
30853
+ "url": {
30854
+ "type": "string"
30855
+ },
30856
+ "path": {
30857
+ "type": "string"
30858
+ },
30859
+ "uploadId": {
30860
+ "type": "string"
30861
+ },
30862
+ "assetId": {
30863
+ "type": "string"
30864
+ },
30865
+ "size": {
30866
+ "type": "number",
30867
+ "format": "double"
30868
+ },
30869
+ "mimeType": {
30870
+ "type": "string"
30871
+ },
30872
+ "extension": {
30873
+ "type": "string"
30874
+ },
30875
+ "sha1hash": {
30876
+ "type": "string"
30877
+ },
30878
+ "altText": {
30879
+ "type": "string"
30880
+ },
30881
+ "description": {
30882
+ "type": "string"
30883
+ },
30884
+ "title": {
30885
+ "type": "string"
30886
+ },
30887
+ "label": {
30888
+ "type": "string"
30889
+ },
30890
+ "originalFilename": {
30891
+ "type": "string"
30892
+ },
30893
+ "sanityRev": {
30894
+ "type": "string"
30895
+ },
30896
+ "sanityUpdatedAt": {
30897
+ "type": "string"
30898
+ },
30899
+ "sanityCreatedAt": {
30900
+ "type": "string"
30901
+ },
30902
+ "sanityType": {
30903
+ "type": "string",
30904
+ "enum": [
30905
+ "sanity.fileAsset"
30906
+ ],
30907
+ "nullable": false
30908
+ },
30909
+ "sanityId": {
30910
+ "type": "string"
30911
+ }
30912
+ },
30913
+ "required": [
30914
+ "url",
30915
+ "path",
30916
+ "assetId",
30917
+ "size",
30918
+ "mimeType",
30919
+ "extension",
30920
+ "sha1hash",
30921
+ "sanityRev",
30922
+ "sanityUpdatedAt",
30923
+ "sanityCreatedAt",
30924
+ "sanityType",
30925
+ "sanityId"
30926
+ ],
30927
+ "type": "object",
30928
+ "nullable": true
30929
+ }
30930
+ },
30931
+ "required": [
30932
+ "sanityType",
30933
+ "asset"
30934
+ ],
30935
+ "type": "object",
30936
+ "nullable": true
30937
+ },
30738
30938
  "offerPdf": {
30739
30939
  "properties": {
30740
30940
  "sanityType": {
@@ -31190,6 +31390,8 @@
31190
31390
  "buddy",
31191
31391
  "recruiter",
31192
31392
  "jobPosition",
31393
+ "signedContract",
31394
+ "contractPdf",
31193
31395
  "offerPdf",
31194
31396
  "grades",
31195
31397
  "cv",
@@ -31493,6 +31695,46 @@
31493
31695
  "type": "object",
31494
31696
  "nullable": true
31495
31697
  },
31698
+ "contractPdf": {
31699
+ "properties": {
31700
+ "sanityType": {
31701
+ "type": "string",
31702
+ "enum": [
31703
+ "file"
31704
+ ],
31705
+ "nullable": false
31706
+ },
31707
+ "media": {},
31708
+ "asset": {
31709
+ "$ref": "#/components/schemas/SanityFileAssetReference"
31710
+ }
31711
+ },
31712
+ "required": [
31713
+ "sanityType"
31714
+ ],
31715
+ "type": "object",
31716
+ "nullable": true
31717
+ },
31718
+ "signedContract": {
31719
+ "properties": {
31720
+ "sanityType": {
31721
+ "type": "string",
31722
+ "enum": [
31723
+ "file"
31724
+ ],
31725
+ "nullable": false
31726
+ },
31727
+ "media": {},
31728
+ "asset": {
31729
+ "$ref": "#/components/schemas/SanityFileAssetReference"
31730
+ }
31731
+ },
31732
+ "required": [
31733
+ "sanityType"
31734
+ ],
31735
+ "type": "object",
31736
+ "nullable": true
31737
+ },
31496
31738
  "applicationOther": {
31497
31739
  "type": "string",
31498
31740
  "nullable": true