diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 0ca5d13..19689aa 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,25 +1,25 @@ lockVersion: 2.0.0 id: 5ca2c9b7-aea6-4a23-a631-998fcc6c18a8 management: - docChecksum: 7c9c30f8058276233b08fe81ccdc75d2 - docVersion: 1.0.50 - speakeasyVersion: 1.678.0 - generationVersion: 2.787.2 - releaseVersion: 0.12.0 - configChecksum: 7af14704425b06ab1b3ff269e16949ef + docChecksum: af783375874560e279e961f29910ef46 + docVersion: 1.0.59 + speakeasyVersion: 1.682.0 + generationVersion: 2.791.1 + releaseVersion: 0.12.1 + configChecksum: 08d7b8fe958bf4dc56eab9cbd8f0b73d repoURL: https://github.com/censys/censys-sdk-python.git installationURL: https://github.com/censys/censys-sdk-python.git published: true persistentEdits: - generation_id: 0e0f4d63-65aa-4da0-a88c-78be88fd4d4b - pristine_commit_hash: 0487972a08af2ec3d62581fa882cbc08de39ed61 - pristine_tree_hash: 40a7df79bee2cea69d03b9f7d9964e859e596b75 + generation_id: 5772c516-a57d-4ed9-9816-02cd0c2320b1 + pristine_commit_hash: 3e42f01e83b4de44cbabfaf482c01462c31ab1f7 + pristine_tree_hash: 1d500941ffcbb80c39c7f641b43cb299a4ee95be features: python: acceptHeaders: 3.0.0 additionalDependencies: 1.0.0 constsAndDefaults: 1.0.5 - core: 5.23.14 + core: 5.23.16 defaultEnabledRetries: 0.2.0 downloadStreams: 1.0.1 enumUnions: 0.1.0 @@ -278,8 +278,8 @@ trackedFiles: pristine_git_object: f86ff4b0e415849e5931cec95d39f246562bbb6c docs/models/collection.md: id: 33e46ebd8c53 - last_write_checksum: sha1:41cc5388768518a1a7ea8b903dc79986d649f690 - pristine_git_object: 73d9d58d003fb393162c631686ed6d8bbbfd7f13 + last_write_checksum: sha1:ac92930f9399f8887198a25546b371ce8b9c32ba + pristine_git_object: 3e137620b61006d758135bbbeb88e49cb9ad82f4 docs/models/collectionevent.md: id: 74a7c4169c7d last_write_checksum: sha1:14afdc41b88546da984b5139c607eaf604329c89 @@ -326,8 +326,8 @@ trackedFiles: pristine_git_object: 67226b1f5df004277f8fa88c52adb17af6ebf212 docs/models/creditexpiration.md: id: cbad309d632a - last_write_checksum: sha1:38b793e3d3e09367378f462509d06d433936ca52 - pristine_git_object: f71daaade2257e04ad37d13c94765eb3058b2d50 + last_write_checksum: sha1:a5eab81fdb9f82581b3dfd08309f1784a1ed7174 + pristine_git_object: 266a30835016e6c819908bcaf17fb681f36d76e1 docs/models/creditusagereport.md: id: fa4adb4db7c6 last_write_checksum: sha1:3adf11f061e94a9dfcfcbfc561d69971889ce894 @@ -630,8 +630,8 @@ trackedFiles: pristine_git_object: 329a0199b23767a9ae036c09997ed2899f9ddda7 docs/models/endpointscanstate.md: id: e2ee34e6abd2 - last_write_checksum: sha1:ecb717a684137d8ab018ee370df10136d67f27af - pristine_git_object: eb8b5c89e0420532fb4d7168b452e7266e6b81d2 + last_write_checksum: sha1:9ff154620ffc9153b88a9bc98ec098d9c8abf1c7 + pristine_git_object: 849fd97db6cbcf282c8ed7724f9b07127d8f8232 docs/models/endpointscanstatetransportprotocol.md: id: 70cde6881504 last_write_checksum: sha1:fa09a0c6c84444cc7d3f2af041801fad7a0e2043 @@ -712,6 +712,18 @@ trackedFiles: id: 6461b3463672 last_write_checksum: sha1:d9fa968454a28bea3470825372a5b3d5b5097e90 pristine_git_object: 95c80ef62f48ce28c7fdff388f4fa95ec9d80abf + docs/models/extractedendpointdata.md: + id: 145f53a9473a + last_write_checksum: sha1:86b5bcd764b42e02cf109fe891db60cf026a38b0 + pristine_git_object: addfa2ac4204890e23517e696039f4ca55d811a8 + docs/models/extractedendpointdataanalyticsservice.md: + id: 4e4ba10452f8 + last_write_checksum: sha1:923bbe8a0c40aa1e89a08bb6f5d72797b18183d4 + pristine_git_object: 579100253e701e564987697c262ef8788d53afe7 + docs/models/extractedendpointdatacopyright.md: + id: 6c9aa07acfd8 + last_write_checksum: sha1:50ea9d636ad5460a2fdfcebd3a692acdddd55966 + pristine_git_object: 540dd6137598af2620c61961117f19e927010b25 docs/models/fielddiff.md: id: edbc61bb53ec last_write_checksum: sha1:1f517c2dff38defe2574b627144ac43bc52ed130 @@ -826,12 +838,20 @@ trackedFiles: pristine_git_object: 63ede98e15cc5f639931a13cdeb887c0ee54e7f6 docs/models/http.md: id: d0a492ecfe27 - last_write_checksum: sha1:e967a6fcb72d239631f60cf7c1b888521029e9e4 - pristine_git_object: 61c6925914443e8cf87398cf3a28f52aa2bc0366 + last_write_checksum: sha1:f817f9d3f73dd1c52fae21441799ce25bca4bdfa + pristine_git_object: 2581050aa058c7db570ade06d3967a30ac254c51 docs/models/httpfavicon.md: id: b842befcc593 last_write_checksum: sha1:fe8ff54d68baec3e0b3f035432ebabd6b202698a pristine_git_object: 6a9461229a2b87161635b073e6007d66044070d6 + docs/models/httpredirectchainlink.md: + id: 181e28b37e66 + last_write_checksum: sha1:5effe255f64eb7bc761b3bc792e9d58d45f35aef + pristine_git_object: d9e696f278db9c4cf537024c6d66ce0589913f99 + docs/models/httpredirectchainlinktransportprotocol.md: + id: 49a3925246e8 + last_write_checksum: sha1:404fbd830807b808d459d1a678198639a4a5216d + pristine_git_object: 26d19bb4d00c715948c5c73c33f50cf31645c174 docs/models/httprepeatedheaders.md: id: 5fa67590aaef last_write_checksum: sha1:8c3c3f916a9b3f4df4d509f6405e49c17ca36e91 @@ -1066,8 +1086,8 @@ trackedFiles: pristine_git_object: 2a86b68f11d68f778d91a9b8fa293022a3fa1fed docs/models/labelsource.md: id: 456cc4c6ddd3 - last_write_checksum: sha1:26720b8e7855297161f1e69a8c34ccc9acf00052 - pristine_git_object: 2b618046de533a19719e881fbfc44d8ef3cafa5e + last_write_checksum: sha1:21393a37f84d43d83ef266224ac4b5fd016b9728 + pristine_git_object: 6ffd6a3874c8386777698ccd517ba4ac0854038d docs/models/ldap.md: id: 8e22bbe4fe85 last_write_checksum: sha1:3361de28c0990c4008670ec4ed34f110214a28b8 @@ -1418,8 +1438,8 @@ trackedFiles: pristine_git_object: ea6cfb5dcc9c12164ad0cd3546dd21f53e4e2c70 docs/models/paginationinfo.md: id: 3d2b61cbbf88 - last_write_checksum: sha1:c2a057d07bb5afcf01be05781236096d9ca3f77d - pristine_git_object: 0dca7fbd2017833a78a5e50c41af1c08dbbd6834 + last_write_checksum: sha1:b59004c0cd15d70a065dd5c6213d4699c5c3a73c + pristine_git_object: 93326c2ec57529f8abfb39f22295a4176e7e8752 docs/models/pantiltzoomcapabilities.md: id: 8c0b068b97fd last_write_checksum: sha1:91da92736287276c30d4c2d797408cba0e9eb9d5 @@ -1798,8 +1818,8 @@ trackedFiles: pristine_git_object: 1842ecbd681f9a37415abc831862df43668c26e3 docs/models/risksource1.md: id: a4d856dc575a - last_write_checksum: sha1:3f07d29fcce2e59eff417f158a18d4907a3eeaa8 - pristine_git_object: 275161b24e6ad2673512be3e41a4b7fce1de3a6b + last_write_checksum: sha1:72aa2f2d816acde7690a835f58f69ecd3e77f24f + pristine_git_object: 72b9f59c89180d37aaa0317a5f8ddffd8b27726d docs/models/rlogin.md: id: a574bb05f576 last_write_checksum: sha1:36ddaacd774b2f94c1fd85774fe7be6248f0bf2b @@ -2094,8 +2114,8 @@ trackedFiles: pristine_git_object: a0f6cd44c55af0e11087b463ebc00223100fb6e2 docs/models/source.md: id: 6541ef7b41e7 - last_write_checksum: sha1:63b2f619946177b6ccca1dfd22f77266ca9a4247 - pristine_git_object: df0ea28719718365b294b5eeaacf1a171ae4ed96 + last_write_checksum: sha1:60bba441817874dd3737898dbcfd955a9d29aa7f + pristine_git_object: 55a63dfde858a88bae6197cd3e4bdc5eb7346c6b docs/models/sourceusagebreakdown.md: id: 6944ff211185 last_write_checksum: sha1:5746d52cc9bdc390a6a348ae1e3075f2581e145d @@ -2230,8 +2250,8 @@ trackedFiles: pristine_git_object: fa2335c701e84e958ba26a1cdca5c6bb16501b5a docs/models/threatsource.md: id: d7e74e8e31bb - last_write_checksum: sha1:03d6c2e1f27b22c8e88a2f7d54495937e50bc385 - pristine_git_object: 04b69aeffb93488d79f48edec4efc336217d486b + last_write_checksum: sha1:bf681ce2691a2010c67c21a477a6f048b28b2eb6 + pristine_git_object: 217435f1874db1a7869f8f89bec85983d47d9665 docs/models/tibia.md: id: c9b17d9e288b last_write_checksum: sha1:b9d5159c028141c03dfde9a4239f2f07e4ff37b9 @@ -2798,8 +2818,8 @@ trackedFiles: pristine_git_object: 3ac417db38d3c2342fa12f2dcb07b0171951eae7 docs/models/vulnsource.md: id: 7dad87e4c93f - last_write_checksum: sha1:157d098cf7fc2e035854872ce6f8f4c94c8ea64a - pristine_git_object: a4c5d4d6f7504f45af89e55ebacc1c6e9c054bfb + last_write_checksum: sha1:6326bc1b86b199c0c01771f9397c8fcb25cb8762 + pristine_git_object: 3902ec1670f0ba885ae661ce0667868b732c707e docs/models/weblogict3.md: id: 2a270977109b last_write_checksum: sha1:17ac9b2d84aae5c038dcc475136402b2316f89af @@ -2870,8 +2890,8 @@ trackedFiles: pristine_git_object: b2ef5cc921ea4f2c406809dce4743a9211ae0fde docs/sdks/threathunting/README.md: id: 9d697938ee45 - last_write_checksum: sha1:52e03c957f2dc0975670eb65c2b708337e314f41 - pristine_git_object: b7a3ddbd454864f873bc42a1d7f450e15396629c + last_write_checksum: sha1:a691e078e534286de3ed1955554e6e00d8a8cda2 + pristine_git_object: 4d1b4e7b731d408808c7f86e2725d0ed9919adaa poetry.toml: id: a81ade82122a last_write_checksum: sha1:2242305e29dc6921bdf5b200aea5d4bf67830230 @@ -2886,8 +2906,8 @@ trackedFiles: pristine_git_object: 451f601a6382e06ed064d9e37bb0d2581bd472e9 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:f6f97bf89e35599525723069bf9d1140bfcacb0d - pristine_git_object: b08a8c4b1de51ce31b1cbfa4ecb4e0ba3c68ce19 + last_write_checksum: sha1:0bb56872caa90099ad12f07010b3bdf0d0fbce04 + pristine_git_object: 09157cde8c5274bc509474b055efe14ec31c0b45 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:10d6ae008b24c68e99d7e8ba9c2e747070685ead @@ -2914,8 +2934,8 @@ trackedFiles: pristine_git_object: 352d3691d91c2d0ba0f05b48b56d4df5ce520098 src/censys_platform/_version.py: id: d2dc39704c23 - last_write_checksum: sha1:031fd4d5dd101b163b314fb506484112d1808325 - pristine_git_object: 0d6ff0e74d7a8f3895934f21e8ca94d1dde89364 + last_write_checksum: sha1:c28de111411fa765176b607c1602139d1f626eae + pristine_git_object: a170f7d955d2a03c44c5dcb75714ca939526885e src/censys_platform/account_management.py: id: 09993862b047 last_write_checksum: sha1:f1cc6965fa5daa0bf162ef2c0cdc5c9b0d00642f @@ -2938,8 +2958,8 @@ trackedFiles: pristine_git_object: 89560b566073785535643e694c112bedbd3db13d src/censys_platform/models/__init__.py: id: 4c65ae1e4fed - last_write_checksum: sha1:2eaf3c7450f0024927961dd58ccbdbc17473c009 - pristine_git_object: 85a42aeb8a66fc2f467117c8253f7a18967a1f48 + last_write_checksum: sha1:f67ffa65086c6ed21bae318a0fe720587d91bdf5 + pristine_git_object: 3219d2155158654be8a64708ce572759f9edb009 src/censys_platform/models/activemq.py: id: c852b87bc559 last_write_checksum: sha1:ea4bcd2277ebf843759f611fc7d192caef23e86c @@ -2986,8 +3006,8 @@ trackedFiles: pristine_git_object: b33f779dbd77ee97d1cd50d4ab3f44841f05e62d src/censys_platform/models/attribute.py: id: 4cfb472595bf - last_write_checksum: sha1:b6ba60d375071c8c88a4e377c9ea920b00d61479 - pristine_git_object: b19d569cb9ad79b8b000844604fcb66e9ed1cedb + last_write_checksum: sha1:8a92e1d55def5f9a3def60b4451829d270d89f0a + pristine_git_object: c89d38740c9de68ff3e3dc42bf8989a869e47f93 src/censys_platform/models/auth.py: id: 55cb26736ab0 last_write_checksum: sha1:041b2173f982184a18680f6588902fbac7f6c603 @@ -3130,8 +3150,8 @@ trackedFiles: pristine_git_object: 94cde111f269b6ea1a271095d5adfe02b7f3befe src/censys_platform/models/collection.py: id: 85cf87546205 - last_write_checksum: sha1:2542cdd04c6069672b60af731f115a515d140d5f - pristine_git_object: 293666e05c0c15a50dda46cb9dacff7c65d75542 + last_write_checksum: sha1:737e271d53a5b52565324bcc055fe46a02516777 + pristine_git_object: 85884ded75ccd423f0e7d4328317ee9359a5c6a4 src/censys_platform/models/collectionevent.py: id: 8e4536c271ed last_write_checksum: sha1:d1dd71b4e866152f0fe55a697b495f16202d1097 @@ -3170,8 +3190,8 @@ trackedFiles: pristine_git_object: 69e586521a1efb00a38583c3569aaf1435ca51da src/censys_platform/models/creditexpiration.py: id: c19168102b97 - last_write_checksum: sha1:c7d404080678f2361195a3da57336b6d603754c6 - pristine_git_object: ffe5e77315360ed5bc5d90c1fd173b0f6385dd8b + last_write_checksum: sha1:f15a06598528c982c22cc3e337d719e37ac75508 + pristine_git_object: f7fdb8e038947d985bb47c23d5fbd38432cc7305 src/censys_platform/models/creditusagereport.py: id: 30edd208be3c last_write_checksum: sha1:9339670b89cf93b028f099cd8d2fbf556ff1131c @@ -3442,8 +3462,8 @@ trackedFiles: pristine_git_object: b883ba83b9f0d70790b3c18e6f564e46a2d5c35d src/censys_platform/models/endpointscanstate.py: id: 7b8f1fb78573 - last_write_checksum: sha1:ce2e31e64ecef6613b699fe2eeb21a8debdedfb2 - pristine_git_object: 77aa95a5ee8d51fdbf1bd288404e7c7c08e3b158 + last_write_checksum: sha1:dd8bbc9ed540eb0cddd6299eb59e4b184b695ebe + pristine_git_object: 6215ed7c1cfce1daee8a49ba986e6a7f2683cb9d src/censys_platform/models/epmd.py: id: 8088ccd12b02 last_write_checksum: sha1:4d206cf32cc171d963569d18a388d289e5668351 @@ -3516,6 +3536,18 @@ trackedFiles: id: d405e11222a7 last_write_checksum: sha1:af88fb10dfc69cf17c959fe430d52cd185d6d4aa pristine_git_object: 829af7e35283250b71cbb0fda3f86ebb66564d42 + src/censys_platform/models/extractedendpointdata.py: + id: 304ee28a3bc8 + last_write_checksum: sha1:c3cd4efe3a77fbdc0efad753dbfbf22a0db25a33 + pristine_git_object: d45ffe64e8b48f210e0c58c7e680953ac6c4b441 + src/censys_platform/models/extractedendpointdata_analyticsservice.py: + id: e05004cc1647 + last_write_checksum: sha1:fd5f34f5b1f28c4f10ce7a9fcb034ed165d60ac2 + pristine_git_object: 2899472eab9f1ee031ff9886c77f972478880f6d + src/censys_platform/models/extractedendpointdata_copyright.py: + id: 281c17d560a7 + last_write_checksum: sha1:debd3b21e5ce0a07446a4001380ccd2b20d47eec + pristine_git_object: f56eaeb3629a47d160cb140c9b49c36c6d405e9d src/censys_platform/models/fielddiff.py: id: 1f85227e2a22 last_write_checksum: sha1:e5836e3182fe43c7715c0110a4e3fa1fe7ecdf39 @@ -3622,12 +3654,16 @@ trackedFiles: pristine_git_object: 211ab328216652abdb52dac45b75b2d3419567fc src/censys_platform/models/http.py: id: 7012123f903d - last_write_checksum: sha1:ee987456547fc6c37981e6e3f67930d99e181e2c - pristine_git_object: b99a0ef669de4d1ff6af027774a354aec0051805 + last_write_checksum: sha1:697e6f4b50c6b3fe513fa9573599bd362ffb6029 + pristine_git_object: a95f5003ff8ef2ca0030d98b23a18d71c9d7962e src/censys_platform/models/http_favicon.py: id: 37a2247b162b last_write_checksum: sha1:05343d7246bd47f18e78349d5cf087a484656a3f pristine_git_object: c82312bcc605520d5ae110e842c3dcdbafd1d3ea + src/censys_platform/models/http_redirectchainlink.py: + id: f3cdca0b5525 + last_write_checksum: sha1:5b7152aab916e1a2fde2da9415a55aafc6266d5b + pristine_git_object: d68ce979c60b01674b0b694bea36da267269eda9 src/censys_platform/models/http_repeatedheaders.py: id: ab701e3cdc54 last_write_checksum: sha1:423141d4c254237d56ee2ad725b3b1bebd09fa2a @@ -3850,8 +3886,8 @@ trackedFiles: pristine_git_object: 501b49104bc270f9def3d5ecd8d283e5e4badb1d src/censys_platform/models/label.py: id: becad33cc37f - last_write_checksum: sha1:8b223779ff8b26263dee3c326c9888018eec0956 - pristine_git_object: 17008588632b449e98d73bdfcf0d34b1c8bf74f6 + last_write_checksum: sha1:df0ff6640f425b91e541cb126bc253e1fb6bba1d + pristine_git_object: 5cec4df8a038a31217e6b4e7be6488f550091685 src/censys_platform/models/ldap.py: id: b451a3030a09 last_write_checksum: sha1:a2f87f28a1dbfed8d9e06c1415198c1360bbaa27 @@ -4194,8 +4230,8 @@ trackedFiles: pristine_git_object: 0242c34b5189d11de732f2766de080c986b9ed50 src/censys_platform/models/paginationinfo.py: id: bf87766bfa32 - last_write_checksum: sha1:450a10cc3ffbb6491dc594e90590b2440234cda5 - pristine_git_object: 6a9e7c4c01f2d37c06ad4e6503bf9c988b087942 + last_write_checksum: sha1:c68b26a2e373ed0a9d18bf2ca68881cb90cabedf + pristine_git_object: 7c959ca58ea6d3890f9e74bb3cc133aeb2295e88 src/censys_platform/models/pantiltzoomcapabilities.py: id: 4a16113a544b last_write_checksum: sha1:7459b0b5751df0ba3509ed74eac4e6cb6dd25e72 @@ -4534,8 +4570,8 @@ trackedFiles: pristine_git_object: 02944d8c68208122cc925108489c9b69af4aa6b4 src/censys_platform/models/risk.py: id: 0b47bdbe2e69 - last_write_checksum: sha1:776af36677d9b4fbab12582d9e44206b3c34bac6 - pristine_git_object: f1bd2f9ae7975c71f02a8f3aadd7737380612f05 + last_write_checksum: sha1:0de59c90fd077b1fc5b4176e6227f99efae097ec + pristine_git_object: 4a35ff6fd4e2ea14f73962938a805723c23d72b0 src/censys_platform/models/rlogin.py: id: 32fb1187dfbb last_write_checksum: sha1:f7b38e65647d2efd6330d5724a7973c7a0e8337a @@ -4866,8 +4902,8 @@ trackedFiles: pristine_git_object: f82429d437ffe2c1ec7fe8a62967ff6f7f2fc6ba src/censys_platform/models/threat.py: id: 6e8ab6e20796 - last_write_checksum: sha1:cad9fe6983ccf6963231788f0f77f2aba6b13fcb - pristine_git_object: 849a75afd2e07e06da0b5d105d347e9c8a68268c + last_write_checksum: sha1:784683065c0d5ca0a5868c39030a63d160b74dce + pristine_git_object: 2f5a2dc1d9b0df946a70076ce5b8f48c8df52e03 src/censys_platform/models/threat_actor.py: id: c826b9893395 last_write_checksum: sha1:03b4fab01a1ae07134199321d5a5561b0ba3a134 @@ -5154,8 +5190,8 @@ trackedFiles: pristine_git_object: dc1f320f315c654385d52a996dd48d0229567e51 src/censys_platform/models/vuln.py: id: f51f970c072b - last_write_checksum: sha1:e0c7264c3db28a6ceb070499231ea8880f1c9a2d - pristine_git_object: f2c9fb381d0c8ee5b047de11b7ab8205f45630b3 + last_write_checksum: sha1:2befc5022a0410ba3242c3868b1590aba1bc3b84 + pristine_git_object: b828518483363e885e4785770a4ddc409caad9b2 src/censys_platform/models/weblogict3.py: id: 3b51cf2919e4 last_write_checksum: sha1:de6ba4ba842a3d7674bef2bdfb1a02f3f74405ea @@ -5226,16 +5262,16 @@ trackedFiles: pristine_git_object: 5db48844a430af6402eb7ffaba0d9fcd30cf0724 src/censys_platform/threat_hunting.py: id: 970de984d111 - last_write_checksum: sha1:287cfee020339240e616dff5f56ac235d702b3ef - pristine_git_object: 5c71b69c3d280b7a243c3aaa5656d4df186900a9 + last_write_checksum: sha1:b0115f835efac61827a5c737ea11110d739571af + pristine_git_object: 510c0e4fb757bed2a3170e666b504554af6c3dae src/censys_platform/types/__init__.py: id: 40a6abbc737a last_write_checksum: sha1:140ebdd01a46f92ffc710c52c958c4eba3cf68ed pristine_git_object: fc76fe0c5505e29859b5d2bb707d48fd27661b8c src/censys_platform/types/basemodel.py: id: 0cf83f7ce28c - last_write_checksum: sha1:615d0b364fa924b0fef719958df34596cc7c1ae2 - pristine_git_object: 231c2e37283a76082f1a064c7aae47f8ee4ee694 + last_write_checksum: sha1:10d84aedeb9d35edfdadf2c3020caa1d24d8b584 + pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee src/censys_platform/utils/__init__.py: id: 76ac94c422c2 last_write_checksum: sha1:81e0385b93362e0f3f6911b65bd4cc601ebc11e1 diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 94afc66..50f733b 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -26,7 +26,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 0.12.0 + version: 0.12.1 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 3fac617..07fb347 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.678.0 +speakeasyVersion: 1.682.0 sources: converge-source: sourceNamespace: converge-source - sourceRevisionDigest: sha256:94f388f3d1883cdbe8be73e7a6628cba1b674d43e5a64cbaea0bf0ef2a5a0136 - sourceBlobDigest: sha256:c0bbb1684a71f5fa9380f3035b7c397340d5e782f61ca15c0714f5cf53b13047 + sourceRevisionDigest: sha256:29a147b1c7849375f4c0dd3cf042e586f46088af68462dfc73c562595229c7f1 + sourceBlobDigest: sha256:c007b3011b46fd017ac8c3a964db9c819515de1d130b401c9d9ef127e2f433c7 tags: - latest - - speakeasy-sdk-regen-1763080053 - - 1.0.50 + - speakeasy-sdk-regen-1766104176 + - 1.0.59 targets: censys-sdk-python: source: converge-source sourceNamespace: converge-source - sourceRevisionDigest: sha256:94f388f3d1883cdbe8be73e7a6628cba1b674d43e5a64cbaea0bf0ef2a5a0136 - sourceBlobDigest: sha256:c0bbb1684a71f5fa9380f3035b7c397340d5e782f61ca15c0714f5cf53b13047 + sourceRevisionDigest: sha256:29a147b1c7849375f4c0dd3cf042e586f46088af68462dfc73c562595229c7f1 + sourceBlobDigest: sha256:c007b3011b46fd017ac8c3a964db9c819515de1d130b401c9d9ef127e2f433c7 codeSamplesNamespace: converge-source-python-code-samples - codeSamplesRevisionDigest: sha256:9479fa05c26bb668637c78e54bd04bdea50886bf7d4873b272a8be0f85575f0a + codeSamplesRevisionDigest: sha256:f25d55cdef67c3b748888eb41940f7ec0ffd17699b36eb6156681b069a478fec workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 2a30bda..a36189a 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -166,4 +166,14 @@ Based on: ### Generated - [python v0.12.0] . ### Releases -- [PyPI v0.12.0] https://pypi.org/project/censys-platform/0.12.0 - . \ No newline at end of file +- [PyPI v0.12.0] https://pypi.org/project/censys-platform/0.12.0 - . + +## 2026-01-07 00:28:35 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.682.0 (2.791.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.12.1] . +### Releases +- [PyPI v0.12.1] https://pypi.org/project/censys-platform/0.12.1 - . \ No newline at end of file diff --git a/docs/models/collection.md b/docs/models/collection.md index 73d9d58..3e13762 100644 --- a/docs/models/collection.md +++ b/docs/models/collection.md @@ -7,6 +7,7 @@ | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | | `added_assets_24_hours` | *int* | :heavy_check_mark: | N/A | | `create_time` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | +| `created_by` | *Optional[str]* | :heavy_minus_sign: | The ID of a Censys user who created the collection. | | `description` | *str* | :heavy_check_mark: | N/A | | `id` | *str* | :heavy_check_mark: | N/A | | `name` | *str* | :heavy_check_mark: | N/A | diff --git a/docs/models/creditexpiration.md b/docs/models/creditexpiration.md index f71daaa..266a308 100644 --- a/docs/models/creditexpiration.md +++ b/docs/models/creditexpiration.md @@ -3,8 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `balance` | *int* | :heavy_check_mark: | The current balance of the credit expiration. | -| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The date and time the credit expiration was created. | -| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The date and time the credit expiration will expire. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `balance` | *int* | :heavy_check_mark: | The current balance of the credit expiration. | +| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The date and time the credit expiration was created. | +| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The date and time the credit expiration will expire. | +| `initial_balance` | *int* | :heavy_check_mark: | The initial balance of the credit expiration (i.e. how much was purchased). | \ No newline at end of file diff --git a/docs/models/endpointscanstate.md b/docs/models/endpointscanstate.md index eb8b5c8..849fd97 100644 --- a/docs/models/endpointscanstate.md +++ b/docs/models/endpointscanstate.md @@ -11,6 +11,7 @@ | `cobalt_strike` | [Optional[models.CobaltStrike]](../models/cobaltstrike.md) | :heavy_minus_sign: | N/A | | `elasticsearch` | [Optional[models.ElasticSearch]](../models/elasticsearch.md) | :heavy_minus_sign: | N/A | | `endpoint_type` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `extracted` | [Optional[models.ExtractedEndpointData]](../models/extractedendpointdata.md) | :heavy_minus_sign: | N/A | | `fortigate` | [Optional[models.Fortigate]](../models/fortigate.md) | :heavy_minus_sign: | N/A | | `graphql` | [Optional[models.Graphql]](../models/graphql.md) | :heavy_minus_sign: | N/A | | `hostname` | *Optional[str]* | :heavy_minus_sign: | N/A | diff --git a/docs/models/extractedendpointdata.md b/docs/models/extractedendpointdata.md new file mode 100644 index 0000000..addfa2a --- /dev/null +++ b/docs/models/extractedendpointdata.md @@ -0,0 +1,13 @@ +# ExtractedEndpointData + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `analytics_services` | List[[models.ExtractedEndpointDataAnalyticsService](../models/extractedendpointdataanalyticsservice.md)] | :heavy_minus_sign: | N/A | +| `copyrights` | List[[models.ExtractedEndpointDataCopyright](../models/extractedendpointdatacopyright.md)] | :heavy_minus_sign: | N/A | +| `ip_addresses` | List[*str*] | :heavy_minus_sign: | N/A | +| `languages` | List[*str*] | :heavy_minus_sign: | N/A | +| `links` | List[*str*] | :heavy_minus_sign: | N/A | +| `mac_addresses` | List[*str*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/extractedendpointdataanalyticsservice.md b/docs/models/extractedendpointdataanalyticsservice.md new file mode 100644 index 0000000..5791002 --- /dev/null +++ b/docs/models/extractedendpointdataanalyticsservice.md @@ -0,0 +1,9 @@ +# ExtractedEndpointDataAnalyticsService + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `ids` | List[*str*] | :heavy_minus_sign: | N/A | +| `provider` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/extractedendpointdatacopyright.md b/docs/models/extractedendpointdatacopyright.md new file mode 100644 index 0000000..540dd61 --- /dev/null +++ b/docs/models/extractedendpointdatacopyright.md @@ -0,0 +1,11 @@ +# ExtractedEndpointDataCopyright + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `end_year` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `holder` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `start_year` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `text` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/http.md b/docs/models/http.md index 61c6925..2581050 100644 --- a/docs/models/http.md +++ b/docs/models/http.md @@ -15,6 +15,7 @@ | `html_tags` | List[*str*] | :heavy_minus_sign: | A list of the and <meta> tags from services.http.response.body. | | `html_title` | *Optional[str]* | :heavy_minus_sign: | The title of the HTML page: the inner contents of the <title> tag in the response body, if present. | | `protocol` | *Optional[str]* | :heavy_minus_sign: | The protocol field of the response, which includes the claimed HTTP version number. | +| `redirect_chain` | List[[models.HTTPRedirectChainLink](../models/httpredirectchainlink.md)] | :heavy_minus_sign: | If the scan redirects, the list of followup scans performed | | `status_code` | *Optional[int]* | :heavy_minus_sign: | A 3-digit integer result code indicating the result of the services.http.request. | | `status_reason` | *Optional[str]* | :heavy_minus_sign: | A human-readable phrase describing the status code. | | `supported_versions` | List[*str*] | :heavy_minus_sign: | N/A | diff --git a/docs/models/httpredirectchainlink.md b/docs/models/httpredirectchainlink.md new file mode 100644 index 0000000..d9e696f --- /dev/null +++ b/docs/models/httpredirectchainlink.md @@ -0,0 +1,12 @@ +# HTTPRedirectChainLink + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `hostname` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `path` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `port` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `reason` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `transport_protocol` | [Optional[models.HTTPRedirectChainLinkTransportProtocol]](../models/httpredirectchainlinktransportprotocol.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/httpredirectchainlinktransportprotocol.md b/docs/models/httpredirectchainlinktransportprotocol.md new file mode 100644 index 0000000..26d19bb --- /dev/null +++ b/docs/models/httpredirectchainlinktransportprotocol.md @@ -0,0 +1,12 @@ +# HTTPRedirectChainLinkTransportProtocol + + +## Values + +| Name | Value | +| --------- | --------- | +| `UNKNOWN` | | +| `TCP` | tcp | +| `UDP` | udp | +| `ICMP` | icmp | +| `QUIC` | quic | \ No newline at end of file diff --git a/docs/models/labelsource.md b/docs/models/labelsource.md index 2b61804..6ffd6a3 100644 --- a/docs/models/labelsource.md +++ b/docs/models/labelsource.md @@ -3,10 +3,11 @@ ## Values -| Name | Value | -| ------------- | ------------- | -| `UNKNOWN` | | -| `CENSYS` | censys | -| `RECOG` | recog | -| `WAPPALYZER` | wappalyzer | -| `THIRD_PARTY` | third_party | \ No newline at end of file +| Name | Value | +| --------------------- | --------------------- | +| `UNKNOWN` | | +| `CENSYS` | censys | +| `RECOG` | recog | +| `WAPPALYZER` | wappalyzer | +| `THIRD_PARTY` | third_party | +| `HTML_META_EXTRACTOR` | html_meta_extractor | \ No newline at end of file diff --git a/docs/models/paginationinfo.md b/docs/models/paginationinfo.md index 0dca7fb..93326c2 100644 --- a/docs/models/paginationinfo.md +++ b/docs/models/paginationinfo.md @@ -6,4 +6,4 @@ | Field | Type | Required | Description | | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | | `next_page_token` | *Optional[str]* | :heavy_minus_sign: | The token to use to retrieve the next page of results. | -| `page_size` | *int* | :heavy_check_mark: | The number of members requested per page. | \ No newline at end of file +| `page_size` | *int* | :heavy_check_mark: | The number of results requested per page. | \ No newline at end of file diff --git a/docs/models/risksource1.md b/docs/models/risksource1.md index 275161b..72b9f59 100644 --- a/docs/models/risksource1.md +++ b/docs/models/risksource1.md @@ -3,10 +3,11 @@ ## Values -| Name | Value | -| ------------- | ------------- | -| `UNKNOWN` | | -| `CENSYS` | censys | -| `RECOG` | recog | -| `WAPPALYZER` | wappalyzer | -| `THIRD_PARTY` | third_party | \ No newline at end of file +| Name | Value | +| --------------------- | --------------------- | +| `UNKNOWN` | | +| `CENSYS` | censys | +| `RECOG` | recog | +| `WAPPALYZER` | wappalyzer | +| `THIRD_PARTY` | third_party | +| `HTML_META_EXTRACTOR` | html_meta_extractor | \ No newline at end of file diff --git a/docs/models/source.md b/docs/models/source.md index df0ea28..55a63df 100644 --- a/docs/models/source.md +++ b/docs/models/source.md @@ -3,10 +3,11 @@ ## Values -| Name | Value | -| ------------- | ------------- | -| `UNKNOWN` | | -| `CENSYS` | censys | -| `RECOG` | recog | -| `WAPPALYZER` | wappalyzer | -| `THIRD_PARTY` | third_party | \ No newline at end of file +| Name | Value | +| --------------------- | --------------------- | +| `UNKNOWN` | | +| `CENSYS` | censys | +| `RECOG` | recog | +| `WAPPALYZER` | wappalyzer | +| `THIRD_PARTY` | third_party | +| `HTML_META_EXTRACTOR` | html_meta_extractor | \ No newline at end of file diff --git a/docs/models/threatsource.md b/docs/models/threatsource.md index 04b69ae..217435f 100644 --- a/docs/models/threatsource.md +++ b/docs/models/threatsource.md @@ -3,10 +3,11 @@ ## Values -| Name | Value | -| ------------- | ------------- | -| `UNKNOWN` | | -| `CENSYS` | censys | -| `RECOG` | recog | -| `WAPPALYZER` | wappalyzer | -| `THIRD_PARTY` | third_party | \ No newline at end of file +| Name | Value | +| --------------------- | --------------------- | +| `UNKNOWN` | | +| `CENSYS` | censys | +| `RECOG` | recog | +| `WAPPALYZER` | wappalyzer | +| `THIRD_PARTY` | third_party | +| `HTML_META_EXTRACTOR` | html_meta_extractor | \ No newline at end of file diff --git a/docs/models/vulnsource.md b/docs/models/vulnsource.md index a4c5d4d..3902ec1 100644 --- a/docs/models/vulnsource.md +++ b/docs/models/vulnsource.md @@ -3,10 +3,11 @@ ## Values -| Name | Value | -| ------------- | ------------- | -| `UNKNOWN` | | -| `CENSYS` | censys | -| `RECOG` | recog | -| `WAPPALYZER` | wappalyzer | -| `THIRD_PARTY` | third_party | \ No newline at end of file +| Name | Value | +| --------------------- | --------------------- | +| `UNKNOWN` | | +| `CENSYS` | censys | +| `RECOG` | recog | +| `WAPPALYZER` | wappalyzer | +| `THIRD_PARTY` | third_party | +| `HTML_META_EXTRACTOR` | html_meta_extractor | \ No newline at end of file diff --git a/docs/sdks/threathunting/README.md b/docs/sdks/threathunting/README.md index b7a3ddb..4d1b4e7 100644 --- a/docs/sdks/threathunting/README.md +++ b/docs/sdks/threathunting/README.md @@ -156,7 +156,7 @@ with SDK( ## list_threats -Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats). +Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats).<br><br>This endpoint is available to organizations that have access to the Threat Hunting module. ### Example Usage diff --git a/pyproject.toml b/pyproject.toml index b08a8c4..09157cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "censys-platform" -version = "0.12.0" +version = "0.12.1" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/src/censys_platform/_version.py b/src/censys_platform/_version.py index 0d6ff0e..a170f7d 100644 --- a/src/censys_platform/_version.py +++ b/src/censys_platform/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "censys-platform" -__version__: str = "0.12.0" -__openapi_doc_version__: str = "1.0.50" -__gen_version__: str = "2.787.2" -__user_agent__: str = "speakeasy-sdk/python 0.12.0 2.787.2 1.0.50 censys-platform" +__version__: str = "0.12.1" +__openapi_doc_version__: str = "1.0.59" +__gen_version__: str = "2.791.1" +__user_agent__: str = "speakeasy-sdk/python 0.12.1 2.791.1 1.0.59 censys-platform" try: if __package__ is not None: diff --git a/src/censys_platform/models/__init__.py b/src/censys_platform/models/__init__.py index 85a42ae..3219d21 100644 --- a/src/censys_platform/models/__init__.py +++ b/src/censys_platform/models/__init__.py @@ -337,6 +337,18 @@ from .exportlist import ExportList, ExportListTypedDict from .extendedkeyusage import ExtendedKeyUsage, ExtendedKeyUsageTypedDict from .extension import Extension, ExtensionTypedDict + from .extractedendpointdata import ( + ExtractedEndpointData, + ExtractedEndpointDataTypedDict, + ) + from .extractedendpointdata_analyticsservice import ( + ExtractedEndpointDataAnalyticsService, + ExtractedEndpointDataAnalyticsServiceTypedDict, + ) + from .extractedendpointdata_copyright import ( + ExtractedEndpointDataCopyright, + ExtractedEndpointDataCopyrightTypedDict, + ) from .fielddiff import FieldDiff, FieldDiffTypedDict from .fieldvaluepair import FieldValuePair, FieldValuePairTypedDict from .floatvalue import FloatValue, FloatValueTypedDict @@ -387,6 +399,11 @@ ) from .http import HTTP, HTTPTypedDict from .http_favicon import HTTPFavicon, HTTPFaviconTypedDict + from .http_redirectchainlink import ( + HTTPRedirectChainLink, + HTTPRedirectChainLinkTransportProtocol, + HTTPRedirectChainLinkTypedDict, + ) from .http_repeatedheaders import HTTPRepeatedHeaders, HTTPRepeatedHeadersTypedDict from .ibmnje import Ibmnje, IbmnjeTypedDict from .ike import Ike, IkeTypedDict @@ -1644,6 +1661,12 @@ "ExtendedKeyUsageTypedDict", "Extension", "ExtensionTypedDict", + "ExtractedEndpointData", + "ExtractedEndpointDataAnalyticsService", + "ExtractedEndpointDataAnalyticsServiceTypedDict", + "ExtractedEndpointDataCopyright", + "ExtractedEndpointDataCopyrightTypedDict", + "ExtractedEndpointDataTypedDict", "FieldDiff", "FieldDiffTypedDict", "FieldValuePair", @@ -1669,6 +1692,9 @@ "HTTP", "HTTPFavicon", "HTTPFaviconTypedDict", + "HTTPRedirectChainLink", + "HTTPRedirectChainLinkTransportProtocol", + "HTTPRedirectChainLinkTypedDict", "HTTPRepeatedHeaders", "HTTPRepeatedHeadersTypedDict", "HTTPTypedDict", @@ -3000,6 +3026,12 @@ "ExtendedKeyUsageTypedDict": ".extendedkeyusage", "Extension": ".extension", "ExtensionTypedDict": ".extension", + "ExtractedEndpointData": ".extractedendpointdata", + "ExtractedEndpointDataTypedDict": ".extractedendpointdata", + "ExtractedEndpointDataAnalyticsService": ".extractedendpointdata_analyticsservice", + "ExtractedEndpointDataAnalyticsServiceTypedDict": ".extractedendpointdata_analyticsservice", + "ExtractedEndpointDataCopyright": ".extractedendpointdata_copyright", + "ExtractedEndpointDataCopyrightTypedDict": ".extractedendpointdata_copyright", "FieldDiff": ".fielddiff", "FieldDiffTypedDict": ".fielddiff", "FieldValuePair": ".fieldvaluepair", @@ -3057,6 +3089,9 @@ "HTTPTypedDict": ".http", "HTTPFavicon": ".http_favicon", "HTTPFaviconTypedDict": ".http_favicon", + "HTTPRedirectChainLink": ".http_redirectchainlink", + "HTTPRedirectChainLinkTransportProtocol": ".http_redirectchainlink", + "HTTPRedirectChainLinkTypedDict": ".http_redirectchainlink", "HTTPRepeatedHeaders": ".http_repeatedheaders", "HTTPRepeatedHeadersTypedDict": ".http_repeatedheaders", "Ibmnje": ".ibmnje", diff --git a/src/censys_platform/models/attribute.py b/src/censys_platform/models/attribute.py index b19d569..c89d387 100644 --- a/src/censys_platform/models/attribute.py +++ b/src/censys_platform/models/attribute.py @@ -23,6 +23,7 @@ class Source(str, Enum): RECOG = "recog" WAPPALYZER = "wappalyzer" THIRD_PARTY = "third_party" + HTML_META_EXTRACTOR = "html_meta_extractor" class AttributeTypedDict(TypedDict): diff --git a/src/censys_platform/models/collection.py b/src/censys_platform/models/collection.py index 293666e..85884de 100644 --- a/src/censys_platform/models/collection.py +++ b/src/censys_platform/models/collection.py @@ -5,7 +5,8 @@ from datetime import datetime from enum import Enum from pydantic import model_serializer -from typing_extensions import TypedDict +from typing import Optional +from typing_extensions import NotRequired, TypedDict class CollectionStatus(str, Enum): @@ -37,6 +38,8 @@ class CollectionTypedDict(TypedDict): status: CollectionStatus status_reason: Nullable[StatusReason] total_assets: int + created_by: NotRequired[str] + r"""The ID of a Censys user who created the collection.""" class Collection(BaseModel): @@ -60,9 +63,12 @@ class Collection(BaseModel): total_assets: int + created_by: Optional[str] = None + r"""The ID of a Censys user who created the collection.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [] + optional_fields = ["created_by"] nullable_fields = ["status_reason"] null_default_fields = [] diff --git a/src/censys_platform/models/creditexpiration.py b/src/censys_platform/models/creditexpiration.py index ffe5e77..f7fdb8e 100644 --- a/src/censys_platform/models/creditexpiration.py +++ b/src/censys_platform/models/creditexpiration.py @@ -10,6 +10,8 @@ class CreditExpirationTypedDict(TypedDict): balance: int r"""The current balance of the credit expiration.""" + initial_balance: int + r"""The initial balance of the credit expiration (i.e. how much was purchased).""" created_at: NotRequired[datetime] r"""The date and time the credit expiration was created.""" expires_at: NotRequired[datetime] @@ -20,6 +22,9 @@ class CreditExpiration(BaseModel): balance: int r"""The current balance of the credit expiration.""" + initial_balance: int + r"""The initial balance of the credit expiration (i.e. how much was purchased).""" + created_at: Optional[datetime] = None r"""The date and time the credit expiration was created.""" diff --git a/src/censys_platform/models/endpointscanstate.py b/src/censys_platform/models/endpointscanstate.py index 77aa95a..6215ed7 100644 --- a/src/censys_platform/models/endpointscanstate.py +++ b/src/censys_platform/models/endpointscanstate.py @@ -4,6 +4,7 @@ from .chromedevtools import ChromeDevtools, ChromeDevtoolsTypedDict from .cobaltstrike import CobaltStrike, CobaltStrikeTypedDict from .elasticsearch import ElasticSearch, ElasticSearchTypedDict +from .extractedendpointdata import ExtractedEndpointData, ExtractedEndpointDataTypedDict from .fortigate import Fortigate, FortigateTypedDict from .graphql import Graphql, GraphqlTypedDict from .http import HTTP, HTTPTypedDict @@ -47,6 +48,7 @@ class EndpointScanStateTypedDict(TypedDict): cobalt_strike: NotRequired[CobaltStrikeTypedDict] elasticsearch: NotRequired[ElasticSearchTypedDict] endpoint_type: NotRequired[str] + extracted: NotRequired[ExtractedEndpointDataTypedDict] fortigate: NotRequired[FortigateTypedDict] graphql: NotRequired[GraphqlTypedDict] hostname: NotRequired[str] @@ -83,6 +85,8 @@ class EndpointScanState(BaseModel): endpoint_type: Optional[str] = None + extracted: Optional[ExtractedEndpointData] = None + fortigate: Optional[Fortigate] = None graphql: Optional[Graphql] = None @@ -134,6 +138,7 @@ def serialize_model(self, handler): "cobalt_strike", "elasticsearch", "endpoint_type", + "extracted", "fortigate", "graphql", "hostname", diff --git a/src/censys_platform/models/extractedendpointdata.py b/src/censys_platform/models/extractedendpointdata.py new file mode 100644 index 0000000..d45ffe6 --- /dev/null +++ b/src/censys_platform/models/extractedendpointdata.py @@ -0,0 +1,92 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .extractedendpointdata_analyticsservice import ( + ExtractedEndpointDataAnalyticsService, + ExtractedEndpointDataAnalyticsServiceTypedDict, +) +from .extractedendpointdata_copyright import ( + ExtractedEndpointDataCopyright, + ExtractedEndpointDataCopyrightTypedDict, +) +from censys_platform.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ExtractedEndpointDataTypedDict(TypedDict): + analytics_services: NotRequired[ + Nullable[List[ExtractedEndpointDataAnalyticsServiceTypedDict]] + ] + copyrights: NotRequired[Nullable[List[ExtractedEndpointDataCopyrightTypedDict]]] + ip_addresses: NotRequired[Nullable[List[str]]] + languages: NotRequired[Nullable[List[str]]] + links: NotRequired[Nullable[List[str]]] + mac_addresses: NotRequired[Nullable[List[str]]] + + +class ExtractedEndpointData(BaseModel): + analytics_services: OptionalNullable[ + List[ExtractedEndpointDataAnalyticsService] + ] = UNSET + + copyrights: OptionalNullable[List[ExtractedEndpointDataCopyright]] = UNSET + + ip_addresses: OptionalNullable[List[str]] = UNSET + + languages: OptionalNullable[List[str]] = UNSET + + links: OptionalNullable[List[str]] = UNSET + + mac_addresses: OptionalNullable[List[str]] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "analytics_services", + "copyrights", + "ip_addresses", + "languages", + "links", + "mac_addresses", + ] + nullable_fields = [ + "analytics_services", + "copyrights", + "ip_addresses", + "languages", + "links", + "mac_addresses", + ] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/censys_platform/models/extractedendpointdata_analyticsservice.py b/src/censys_platform/models/extractedendpointdata_analyticsservice.py new file mode 100644 index 0000000..2899472 --- /dev/null +++ b/src/censys_platform/models/extractedendpointdata_analyticsservice.py @@ -0,0 +1,54 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from censys_platform.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class ExtractedEndpointDataAnalyticsServiceTypedDict(TypedDict): + ids: NotRequired[Nullable[List[str]]] + provider: NotRequired[str] + + +class ExtractedEndpointDataAnalyticsService(BaseModel): + ids: OptionalNullable[List[str]] = UNSET + + provider: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["ids", "provider"] + nullable_fields = ["ids"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/censys_platform/models/extractedendpointdata_copyright.py b/src/censys_platform/models/extractedendpointdata_copyright.py new file mode 100644 index 0000000..f56eaeb --- /dev/null +++ b/src/censys_platform/models/extractedendpointdata_copyright.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from censys_platform.types import BaseModel +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class ExtractedEndpointDataCopyrightTypedDict(TypedDict): + end_year: NotRequired[int] + holder: NotRequired[str] + start_year: NotRequired[int] + text: NotRequired[str] + + +class ExtractedEndpointDataCopyright(BaseModel): + end_year: Optional[int] = None + + holder: Optional[str] = None + + start_year: Optional[int] = None + + text: Optional[str] = None diff --git a/src/censys_platform/models/http.py b/src/censys_platform/models/http.py index b99a0ef..a95f500 100644 --- a/src/censys_platform/models/http.py +++ b/src/censys_platform/models/http.py @@ -2,6 +2,10 @@ from __future__ import annotations from .http_favicon import HTTPFavicon, HTTPFaviconTypedDict +from .http_redirectchainlink import ( + HTTPRedirectChainLink, + HTTPRedirectChainLinkTypedDict, +) from .http_repeatedheaders import HTTPRepeatedHeaders, HTTPRepeatedHeadersTypedDict from censys_platform.types import ( BaseModel, @@ -32,6 +36,8 @@ class HTTPTypedDict(TypedDict): r"""The title of the HTML page: the inner contents of the <title> tag in the response body, if present.""" protocol: NotRequired[str] r"""The protocol field of the response, which includes the claimed HTTP version number.""" + redirect_chain: NotRequired[Nullable[List[HTTPRedirectChainLinkTypedDict]]] + r"""If the scan redirects, the list of followup scans performed""" status_code: NotRequired[int] r"""A 3-digit integer result code indicating the result of the services.http.request.""" status_reason: NotRequired[str] @@ -68,6 +74,9 @@ class HTTP(BaseModel): protocol: Optional[str] = None r"""The protocol field of the response, which includes the claimed HTTP version number.""" + redirect_chain: OptionalNullable[List[HTTPRedirectChainLink]] = UNSET + r"""If the scan redirects, the list of followup scans performed""" + status_code: Optional[int] = None r"""A 3-digit integer result code indicating the result of the services.http.request.""" @@ -92,12 +101,18 @@ def serialize_model(self, handler): "html_tags", "html_title", "protocol", + "redirect_chain", "status_code", "status_reason", "supported_versions", "uri", ] - nullable_fields = ["favicons", "html_tags", "supported_versions"] + nullable_fields = [ + "favicons", + "html_tags", + "redirect_chain", + "supported_versions", + ] null_default_fields = [] serialized = handler(self) diff --git a/src/censys_platform/models/http_redirectchainlink.py b/src/censys_platform/models/http_redirectchainlink.py new file mode 100644 index 0000000..d68ce97 --- /dev/null +++ b/src/censys_platform/models/http_redirectchainlink.py @@ -0,0 +1,35 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from censys_platform.types import BaseModel +from enum import Enum +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class HTTPRedirectChainLinkTransportProtocol(str, Enum): + UNKNOWN = "" + TCP = "tcp" + UDP = "udp" + ICMP = "icmp" + QUIC = "quic" + + +class HTTPRedirectChainLinkTypedDict(TypedDict): + hostname: NotRequired[str] + path: NotRequired[str] + port: NotRequired[int] + reason: NotRequired[str] + transport_protocol: NotRequired[HTTPRedirectChainLinkTransportProtocol] + + +class HTTPRedirectChainLink(BaseModel): + hostname: Optional[str] = None + + path: Optional[str] = None + + port: Optional[int] = None + + reason: Optional[str] = None + + transport_protocol: Optional[HTTPRedirectChainLinkTransportProtocol] = None diff --git a/src/censys_platform/models/label.py b/src/censys_platform/models/label.py index 1700858..5cec4df 100644 --- a/src/censys_platform/models/label.py +++ b/src/censys_platform/models/label.py @@ -21,6 +21,7 @@ class LabelSource(str, Enum): RECOG = "recog" WAPPALYZER = "wappalyzer" THIRD_PARTY = "third_party" + HTML_META_EXTRACTOR = "html_meta_extractor" class LabelTypedDict(TypedDict): diff --git a/src/censys_platform/models/paginationinfo.py b/src/censys_platform/models/paginationinfo.py index 6a9e7c4..7c959ca 100644 --- a/src/censys_platform/models/paginationinfo.py +++ b/src/censys_platform/models/paginationinfo.py @@ -8,14 +8,14 @@ class PaginationInfoTypedDict(TypedDict): page_size: int - r"""The number of members requested per page.""" + r"""The number of results requested per page.""" next_page_token: NotRequired[str] r"""The token to use to retrieve the next page of results.""" class PaginationInfo(BaseModel): page_size: int - r"""The number of members requested per page.""" + r"""The number of results requested per page.""" next_page_token: Optional[str] = None r"""The token to use to retrieve the next page of results.""" diff --git a/src/censys_platform/models/risk.py b/src/censys_platform/models/risk.py index f1bd2f9..4a35ff6 100644 --- a/src/censys_platform/models/risk.py +++ b/src/censys_platform/models/risk.py @@ -37,6 +37,7 @@ class RiskSource1(str, Enum): RECOG = "recog" WAPPALYZER = "wappalyzer" THIRD_PARTY = "third_party" + HTML_META_EXTRACTOR = "html_meta_extractor" class RiskTypedDict(TypedDict): diff --git a/src/censys_platform/models/threat.py b/src/censys_platform/models/threat.py index 849a75a..2f5a2dc 100644 --- a/src/censys_platform/models/threat.py +++ b/src/censys_platform/models/threat.py @@ -24,6 +24,7 @@ class ThreatSource(str, Enum): RECOG = "recog" WAPPALYZER = "wappalyzer" THIRD_PARTY = "third_party" + HTML_META_EXTRACTOR = "html_meta_extractor" class ThreatTypedDict(TypedDict): diff --git a/src/censys_platform/models/vuln.py b/src/censys_platform/models/vuln.py index f2c9fb3..b828518 100644 --- a/src/censys_platform/models/vuln.py +++ b/src/censys_platform/models/vuln.py @@ -38,6 +38,7 @@ class VulnSource(str, Enum): RECOG = "recog" WAPPALYZER = "wappalyzer" THIRD_PARTY = "third_party" + HTML_META_EXTRACTOR = "html_meta_extractor" class VulnTypedDict(TypedDict): diff --git a/src/censys_platform/threat_hunting.py b/src/censys_platform/threat_hunting.py index 5c71b69..510c0e4 100644 --- a/src/censys_platform/threat_hunting.py +++ b/src/censys_platform/threat_hunting.py @@ -669,7 +669,7 @@ def list_threats( ) -> models.V3ThreathuntingThreatsListResponse: r"""List active threats - Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats). + Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats).<br><br>This endpoint is available to organizations that have access to the Threat Hunting module. :param organization_id: The ID of a Censys organization to associate the request with. See the [Getting Started docs](https://docs.censys.com/reference/get-started#step-3-find-and-use-your-organization-id-optional) for more information. :param query: Optional CenQL filter to constrain threats list @@ -771,7 +771,7 @@ async def list_threats_async( ) -> models.V3ThreathuntingThreatsListResponse: r"""List active threats - Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats). + Retrieve a list of active threats observed by Censys by aggregating threat IDs across hosts and web properties. Threats are active if their fingerprint has been identified on hosts or web properties by Censys scans. This information is also available on the [Explore Threats page in the Platform web UI](https://platform.censys.io/threats).<br><br>This endpoint is available to organizations that have access to the Threat Hunting module. :param organization_id: The ID of a Censys organization to associate the request with. See the [Getting Started docs](https://docs.censys.com/reference/get-started#step-3-find-and-use-your-organization-id-optional) for more information. :param query: Optional CenQL filter to constrain threats list diff --git a/src/censys_platform/types/basemodel.py b/src/censys_platform/types/basemodel.py index 231c2e3..a9a640a 100644 --- a/src/censys_platform/types/basemodel.py +++ b/src/censys_platform/types/basemodel.py @@ -2,7 +2,8 @@ from pydantic import ConfigDict, model_serializer from pydantic import BaseModel as PydanticBaseModel -from typing import TYPE_CHECKING, Literal, Optional, TypeVar, Union +from pydantic_core import core_schema +from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, Union from typing_extensions import TypeAliasType, TypeAlias @@ -35,5 +36,42 @@ def __bool__(self) -> Literal[False]: "OptionalNullable", Union[Optional[Nullable[T]], Unset], type_params=(T,) ) -UnrecognizedInt: TypeAlias = int -UnrecognizedStr: TypeAlias = str + +class UnrecognizedStr(str): + @classmethod + def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema: + # Make UnrecognizedStr only work in lax mode, not strict mode + # This makes it a "fallback" option when more specific types (like Literals) don't match + def validate_lax(v: Any) -> 'UnrecognizedStr': + if isinstance(v, cls): + return v + return cls(str(v)) + + # Use lax_or_strict_schema where strict always fails + # This forces Pydantic to prefer other union members in strict mode + # and only fall back to UnrecognizedStr in lax mode + return core_schema.lax_or_strict_schema( + lax_schema=core_schema.chain_schema([ + core_schema.str_schema(), + core_schema.no_info_plain_validator_function(validate_lax) + ]), + strict_schema=core_schema.none_schema(), # Always fails in strict mode + ) + + +class UnrecognizedInt(int): + @classmethod + def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema: + # Make UnrecognizedInt only work in lax mode, not strict mode + # This makes it a "fallback" option when more specific types (like Literals) don't match + def validate_lax(v: Any) -> 'UnrecognizedInt': + if isinstance(v, cls): + return v + return cls(int(v)) + return core_schema.lax_or_strict_schema( + lax_schema=core_schema.chain_schema([ + core_schema.int_schema(), + core_schema.no_info_plain_validator_function(validate_lax) + ]), + strict_schema=core_schema.none_schema(), # Always fails in strict mode + )