Compare commits
782 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6fcfe6b62b | |||
| c593132663 | |||
| ff7bdd7619 | |||
| c229fa31fc | |||
| 632f76cbb9 | |||
| 5dae509aa9 | |||
| 1b902dabfa | |||
| a1043a3b28 | |||
| 22c682bf4c | |||
| 0b67b51ae4 | |||
| 1673d4527a | |||
| 5e762a9cbf | |||
| 406be0107e | |||
| 4ab4174cb2 | |||
| 78e6ed9bfc | |||
| f813e59b0c | |||
| 2992a855f9 | |||
| f172a0ee1a | |||
| 3c74e4f5f6 | |||
| bf4eefe4fd | |||
| 2e81d6fe20 | |||
| 77f243a14a | |||
| 4245c21248 | |||
| e6d276de03 | |||
| 0e3c3a78d7 | |||
| fa28005f40 | |||
| c109a9f31c | |||
| c1dd5e92fe | |||
| 441183975c | |||
| 0f9c0a8d06 | |||
| 5beba8f12e | |||
| 9b7102605f | |||
| 0618cd0d7a | |||
| bc7f11fb57 | |||
| 19d731eebb | |||
| e2b183bd96 | |||
| 80709c5415 | |||
| 22e3c7f5f2 | |||
| 843231c410 | |||
| 1a33bdd3ae | |||
| c0300c6bec | |||
| bffa5ef0e2 | |||
| 4e95232d59 | |||
| ca64356f12 | |||
| c2c1b0feb4 | |||
| 57afaf1995 | |||
| 4c965ed5a2 | |||
| 0462141e1b | |||
| ce39397c57 | |||
| 55cb81f7af | |||
| f7a4e69025 | |||
| 55ac0019b7 | |||
| b87a3dd2ba | |||
| 41c751c081 | |||
| 1f34a22bd8 | |||
| 10ef03eee0 | |||
| bef6de13db | |||
| bd356663cc | |||
| 1670c3e19b | |||
| aa35555356 | |||
| 1520be20c4 | |||
| 9cd49a40d5 | |||
| d27f11e26c | |||
| 9aff64183b | |||
| 5e32c8498b | |||
| bd2f2d442d | |||
| 328ff206d7 | |||
| 774a0fe9e3 | |||
| 3eb76739cc | |||
| f00f6ae1bd | |||
| 7798c0166d | |||
| 9c63687d56 | |||
| 28cad34c5f | |||
| 86d345bffc | |||
| 9cdab61eaf | |||
| 48b35c47b4 | |||
| 349d7f38cc | |||
| 7cbc279407 | |||
| 301d500c3d | |||
| 4150ba8786 | |||
| f39bc44eec | |||
| 4fabd481e6 | |||
| a374338ac5 | |||
| a7337478d0 | |||
| a7b37e9f7b | |||
| 48e0cff123 | |||
| 8a4cc312a1 | |||
| f008f803b8 | |||
| b43224c353 | |||
| 8bb9798ff4 | |||
| 86ae6f927a | |||
| c0693ac508 | |||
| ab512157a5 | |||
| 86475d4e3c | |||
| c5084209eb | |||
| eada69040c | |||
| 6deabb21ba | |||
| 2bb324752e | |||
| 174954511e | |||
| 408bd6ddc8 | |||
| 1789d9d215 | |||
| f3ac17ad91 | |||
| 71d78805e7 | |||
| 3012771a21 | |||
| 5ec7198046 | |||
| 60cb8d54c4 | |||
| 9d7186eba5 | |||
| 5401fa1acb | |||
| 79f21fd94e | |||
| fa7ec12434 | |||
| c6a668a5f6 | |||
| dd786845b7 | |||
| fee24168aa | |||
| b344dfaaf8 | |||
| ce019c7b96 | |||
| 9a52afe1e2 | |||
| 628726459a | |||
| 603c3953c6 | |||
| 8a7795bd4d | |||
| 9202d3458a | |||
| fb98a4708f | |||
| b29039735b | |||
| 4d5303b0ad | |||
| c3f292a320 | |||
| cb414b448e | |||
| 5ad6330868 | |||
| e8ee088f85 | |||
| 167b1d1db9 | |||
| a365b81915 | |||
| 697e8f930a | |||
| 0e0baa8af8 | |||
| a82088c243 | |||
| e4fc05924e | |||
| b3a46212ee | |||
| dec790e4a3 | |||
| a146469d63 | |||
| e5a3bb8903 | |||
| b61b5054dc | |||
| b613f3bbfc | |||
| 800ae1d834 | |||
| d5d3786a97 | |||
| b90eeea1e8 | |||
| aa30013e05 | |||
| eaf06638c3 | |||
| 4834eabb9d | |||
| 8aceb6418a | |||
| da6062a20c | |||
| b57241951b | |||
| 6a1823b242 | |||
| 2ad039f867 | |||
| 634ec6c1e3 | |||
| a73ddb2dad | |||
| 0504667334 | |||
| 6d85eee0cd | |||
| 1f43988ad9 | |||
| 0129cbb162 | |||
| 0121e1b50d | |||
| 63b1c2237a | |||
| c72120eab0 | |||
| 313b7163e8 | |||
| b0e64937a0 | |||
| 3a2cf0ddb7 | |||
| 0f90ea9455 | |||
| 6d2217bd18 | |||
| 1579cdbfb2 | |||
| f1e81137b7 | |||
| 0f51328979 | |||
| aea812f621 | |||
| 45b2bea39f | |||
| 4f47d03114 | |||
| 618cca3304 | |||
| 4fe573b397 | |||
| d338b95e7e | |||
| 2d9bdb26d4 | |||
| b660a4c07f | |||
| 5706c3ab52 | |||
| e8c81cafb8 | |||
| a0d062c977 | |||
| 87a3bbee8e | |||
| 65aa6e4e4c | |||
| 0432a64357 | |||
| a5ff50f737 | |||
| 763dd8b55a | |||
| c2eea6c2b6 | |||
| 81bbae977f | |||
| 37bd8f4952 | |||
| 20d6c6fdfb | |||
| ebc45b7f8d | |||
| 77f146210a | |||
| 18cb9c6bec | |||
| dfd4966cb0 | |||
| d7384bf481 | |||
| 9e5c687174 | |||
| dcbb0f5287 | |||
| d64cfe5add | |||
| 1fa52f1c8c | |||
| f7dfc712b5 | |||
| 1cfb93ada9 | |||
| ea28f3dd47 | |||
| 2c563ce998 | |||
| 7437d9fbd6 | |||
| 7dd0102579 | |||
| 16c152ec26 | |||
| 01bc7df3e2 | |||
| 92d4008cc2 | |||
| 6d4f71d22c | |||
| 2770df644b | |||
| cc002ef707 | |||
| f552af517b | |||
| 8aff958bd3 | |||
| ad189b1f4b | |||
| 7bebf919e2 | |||
| e54ba7cbed | |||
| 4b6e21d6d4 | |||
| 21d70821de | |||
| a4d3f1b61c | |||
| 42e297474c | |||
| a40afd55d2 | |||
| 621254d0ab | |||
| 0ff568843d | |||
| 1d056b5328 | |||
| cf7c413c87 | |||
| ac87a634a3 | |||
| 1bc9bc9244 | |||
| 2fea9e5a6c | |||
| 2756bfe073 | |||
| 165ca9cb0f | |||
| c9e411be9b | |||
| ee4e181fc3 | |||
| f51f8f3ece | |||
| 840435284b | |||
| 12f4f3bc68 | |||
| 894a5dcb5d | |||
| d65ef5eb87 | |||
| 71007b5f60 | |||
| 3af9b63a9c | |||
| 0932ae7d89 | |||
| 43250c444e | |||
| 12056d888b | |||
| 63e004594c | |||
| ec3e98ca9f | |||
| 0ccc6d3729 | |||
| f3ffffd50b | |||
| e6550d156e | |||
| ae550df37d | |||
| 26ac1fa57c | |||
| 14031a8c6e | |||
| 719ef2a3a9 | |||
| e779cff42a | |||
| 0b3c3758a7 | |||
| ab351cbc8e | |||
| dd4fc8c262 | |||
| a55acb6296 | |||
| aa295134ff | |||
| b2f14cbea3 | |||
| 26e69cb659 | |||
| 51f9bc9d72 | |||
| 74a6a21c35 | |||
| 4cae6fed63 | |||
| b69058bfcb | |||
| 1c5d8a4c0b | |||
| 28c70ab9d1 | |||
| 15ab35c816 | |||
| 1218320492 | |||
| 9d65a1a2c3 | |||
| fc3e85f93e | |||
| 80373c6874 | |||
| 590dd688a9 | |||
| f739f49209 | |||
| dabf26c2c9 | |||
| 8252f3ef86 | |||
| 7d78089275 | |||
| 5ae21f28c3 | |||
| 173f88dcad | |||
| c2d8934820 | |||
| 2edff18a59 | |||
| fc94c78109 | |||
| ee20f9212f | |||
| 77a99c226d | |||
| 50921f1307 | |||
| 566fb54615 | |||
| 100edb8abd | |||
| 160ab22f70 | |||
| 0cf3ebfae3 | |||
| 8cb08b63d2 | |||
| 8767403a44 | |||
| 5f1ac75044 | |||
| 4f21aaef97 | |||
| 8272363069 | |||
| 3e32802fdf | |||
| 3e1c1138e5 | |||
| 7d1e64cb01 | |||
| 08abf25fd9 | |||
| 9c9a4caa20 | |||
| 352b7f75ce | |||
| f0378fa874 | |||
| 8de37d47bf | |||
| 23376457e6 | |||
| 75589d3bae | |||
| 96c4f319e4 | |||
| 8587841ee4 | |||
| 058afb40ce | |||
| dc058c8835 | |||
| f80253ed1d | |||
| 3e384ff18a | |||
| db9b03ca05 | |||
| cc6adecfb4 | |||
| 841421bf76 | |||
| f5ebde8ddb | |||
| da9e357b6d | |||
| cde0b7fcfe | |||
| 43f913e796 | |||
| 26ae66ad2a | |||
| 88fe24ad67 | |||
| da0ee481b8 | |||
| ff57a70a53 | |||
| 22ae2131a5 | |||
| 5880d966ac | |||
| 9eeacee7c2 | |||
| 6ced99fb02 | |||
| 28fb5d066f | |||
| 0d72b8e0c4 | |||
| 547aab667d | |||
| d744efdb26 | |||
| 727a492e45 | |||
| 384752d36c | |||
| d699d38981 | |||
| 6b53aeb8c2 | |||
| b7ee8fd432 | |||
| 8836aeae81 | |||
| 2748d9e9a6 | |||
| f2a0f304af | |||
| 7659835541 | |||
| 8862b563dd | |||
| ed1c2da660 | |||
| 9e739a50b2 | |||
| e4efed07e5 | |||
| 55644577ea | |||
| 5df5e30a7d | |||
| 43ceb44db9 | |||
| 154294f86e | |||
| e20f7ba16a | |||
| be6954abf2 | |||
| 810996f26f | |||
| a7044511bb | |||
| 0efbbece9e | |||
| a38945ebcd | |||
| a63ebd73fb | |||
| b34018eb17 | |||
| a6f9e1e35d | |||
| c7c5d407ef | |||
| 0c6d98d353 | |||
| f6ed5517c2 | |||
| 4aae45ede2 | |||
| f969f03197 | |||
| cd8e85f85f | |||
| 3c27b3c40b | |||
| 0a3b12d135 | |||
| aca332fffc | |||
| 350a60590d | |||
| ad8a2f170a | |||
| 67f6971601 | |||
| 695e4ca3f0 | |||
| 4243b10683 | |||
| c9bd1812f4 | |||
| a117a3b534 | |||
| 9e64f9d570 | |||
| 823da44fb7 | |||
| a5a5dcbccb | |||
| e2693eb539 | |||
| 036ffa7e5f | |||
| 679ac99fad | |||
| 9f6886c55b | |||
| ad9089da57 | |||
| 9313adee12 | |||
| 9bb8363643 | |||
| 4e2fe3dcac | |||
| 092b139d71 | |||
| ab92e9515b | |||
| d4939c4e11 | |||
| ef3f075042 | |||
| c76d930f08 | |||
| 06f2fc3aeb | |||
| 3cd4f2fb9f | |||
| 8f011a5da3 | |||
| 067dbfc0cf | |||
| 8dfdfdb2fa | |||
| 3b76574ef8 | |||
| 3a0a6e491c | |||
| 24203d1b8d | |||
| 8da0f9ac01 | |||
| 011264865b | |||
| 889d9910e2 | |||
| 679239d9fc | |||
| 20d8493c3e | |||
| fe598ff713 | |||
| ac1354b71a | |||
| 55f04d5d12 | |||
| 3796ba5b07 | |||
| 86e1e7143f | |||
| d32aa49020 | |||
| 08338d15a5 | |||
| 4b3c9b7230 | |||
| e84e43e4e1 | |||
| 584b12451d | |||
| 0913a34174 | |||
| e6d6bfced4 | |||
| c7e926a8a9 | |||
| 3ad8a0a5de | |||
| 0d918e7bf6 | |||
| 444996533f | |||
| 1b53ccbbac | |||
| dbd4e9a68c | |||
| 0c36c3e16f | |||
| 05af0ba2b5 | |||
| f2e341e753 | |||
| 6e337eb144 | |||
| fd90e3c3d8 | |||
| b969653f7c | |||
| b5128abee0 | |||
| 1f5053bcdb | |||
| 232b58daf1 | |||
| d07a54f09b | |||
| 2adea4cd9b | |||
| 27e1d134f7 | |||
| 92ca01f3c7 | |||
| c75181f10d | |||
| a26002c525 | |||
| 5a3fdc470f | |||
| 781a208c07 | |||
| 67eb592ecc | |||
| efc35c6c79 | |||
| 65649c1fc7 | |||
| 0fa59d9387 | |||
| aa8cd86041 | |||
| 165bd68d2d | |||
| 9b664a1af2 | |||
| 3d174f5aeb | |||
| b341e7bb71 | |||
| 1dc11a39ea | |||
| 970cfcb094 | |||
| c33e228b26 | |||
| 6ba6e20026 | |||
| 81b2742577 | |||
| ccadf08bd2 | |||
| cea1291496 | |||
| 3e6b0c747b | |||
| affcabc36f | |||
| 6732015b5c | |||
| cbb50a05ad | |||
| 142fa85b14 | |||
| 857ecf1de7 | |||
| df6fe919c2 | |||
| 579e98c7af | |||
| 4724ef00fc | |||
| 77e3769dbd | |||
| 70a547a5c5 | |||
| 3c8a3c421b | |||
| 842ab0cdcc | |||
| 64e0445acb | |||
| 213d86cb1f | |||
| 66805f67fa | |||
| 3defbcc0ed | |||
| 942e695782 | |||
| 4a8b977a99 | |||
| 2e9875c4c6 | |||
| ed775706a0 | |||
| 89abb57e44 | |||
| f264aaa16f | |||
| 2f7caab661 | |||
| c92fec9787 | |||
| 9211cce807 | |||
| 26c4f5d23c | |||
| 4c9891de90 | |||
| 3c706723a2 | |||
| 6e3778d74e | |||
| 8a10431766 | |||
| 825983db77 | |||
| a79ded125e | |||
| e05b3d633d | |||
| f659d9aec6 | |||
| 1772b0664c | |||
| eca961a30f | |||
| c500155d60 | |||
| f8957423e5 | |||
| 9da448a21b | |||
| 8468db0a83 | |||
| f0d3b12d84 | |||
| ce5a42ccd7 | |||
| fc962f50c9 | |||
| 171d16ef41 | |||
| bec76a3704 | |||
| 3c403c4212 | |||
| 97e432462d | |||
| 4a2e0b28f4 | |||
| fb496b1efa | |||
| 6c299072cd | |||
| 25f70c4574 | |||
| 7f0ad4c18a | |||
| 6c50ce078a | |||
| e8d018ef9d | |||
| 9dc2ec4dca | |||
| 694df6ee38 | |||
| c27987c191 | |||
| 19aedf8f73 | |||
| 4c219a8bf8 | |||
| f30037da15 | |||
| df405aa740 | |||
| 7465d31e28 | |||
| 2876946792 | |||
| ae7c1c2cec | |||
| 10b5558dbc | |||
| 570683446c | |||
| 29f3504a23 | |||
| 4bc156ce04 | |||
| c055c97209 | |||
| bc767516b6 | |||
| 7a19bb8381 | |||
| e742486677 | |||
| 821af448f3 | |||
| 9db2e483ef | |||
| 277108d90c | |||
| 49068d8db1 | |||
| 3558a76e27 | |||
| fde3fec37f | |||
| dabb17cf51 | |||
| 7a8ad5f254 | |||
| ab1d283217 | |||
| 7e80c5e7f6 | |||
| c5a5cef9f3 | |||
| f51aa7b792 | |||
| 9175d1e541 | |||
| 38fbf41e79 | |||
| 4bd3cabad4 | |||
| 6c9d31fe1c | |||
| c13c52aa05 | |||
| 260bd5f007 | |||
| 25cf0245a4 | |||
| 98cac166b3 | |||
| c2e9accade | |||
| dc86fc2998 | |||
| 7a6968d0ac | |||
| 2c780c976e | |||
| fbc1b86ea0 | |||
| f20b29519a | |||
| 3c7f6cf9ec | |||
| 1410688499 | |||
| d583e2a8f2 | |||
| a94c8e4576 | |||
| 5fc1236d2e | |||
| 3b67a5ce10 | |||
| 016cf05aba | |||
| 22c8a16758 | |||
| 0955a51333 | |||
| 8dc5bba8ca | |||
| 3538754a76 | |||
| 8ef434eb13 | |||
| 78ecfb60dc | |||
| 2acd79fb36 | |||
| 8d15e9a2b9 | |||
| d99446a1b2 | |||
| 7b24248b80 | |||
| feafa69068 | |||
| 91ed853747 | |||
| 76737caa47 | |||
| b480fa242a | |||
| 192a1d2119 | |||
| 2261a769e4 | |||
| 7e92e8cc75 | |||
| 5a312dec55 | |||
| a1535dff70 | |||
| 4a00abed46 | |||
| 15316a7504 | |||
| 039f652a41 | |||
| fa80ca07b7 | |||
| f2cfa17b62 | |||
| 77124bba78 | |||
| 7530400a38 | |||
| bfd8a4f6b8 | |||
| 4a72aff4ef | |||
| 544b9b94c1 | |||
| 6b05b84342 | |||
| 2ede12c2f3 | |||
| b142c55fc5 | |||
| 454bfcc58e | |||
| eb98f50fca | |||
| 81ddf597ed | |||
| 75d6471c9e | |||
| 68544359f1 | |||
| 187c0279b2 | |||
| 98cf9afd8e | |||
| 3ce5d5bf1a | |||
| f8ac05500a | |||
| 23dbeff1c6 | |||
| ba0a4727d3 | |||
| 54c5c82f22 | |||
| 6a3f26427b | |||
| 9db77b6478 | |||
| 08ecd288e1 | |||
| 10ae5601f8 | |||
| 9386e19620 | |||
| 1df18b386a | |||
| 83201312b2 | |||
| bfa096dc4a | |||
| 81debee7aa | |||
| 02499a0e63 | |||
| 558b705ace | |||
| 803b279133 | |||
| 4874288db0 | |||
| 30c0984623 | |||
| 1b675968f6 | |||
| e58b7ada83 | |||
| a96bfd3528 | |||
| a47a9b4fd6 | |||
| 727ec22fee | |||
| c359962b3a | |||
| 7bc11fe41f | |||
| 7af88c33da | |||
| 108bb6281e | |||
| 88ff526b87 | |||
| b88eaa2c40 | |||
| a46b93e29d | |||
| 1f672d9612 | |||
| d489311371 | |||
| af29669003 | |||
| 8f32446170 | |||
| 7f6e03b776 | |||
| 140d02f462 | |||
| 6a3ffa6395 | |||
| f6363ab5b6 | |||
| 60ac029220 | |||
| 1f3eb459c4 | |||
| 9388b5bbed | |||
| 047b011fdd | |||
| fa470462c4 | |||
| d807421b40 | |||
| b2bd170a2c | |||
| e013c6faa9 | |||
| d60e9ae939 | |||
| 8039f326a9 | |||
| 259e28e13a | |||
| 103f77215c | |||
| 967b8b0053 | |||
| 974033d5d2 | |||
| 84bd5a63a2 | |||
| f0a05ab4e3 | |||
| 805f675264 | |||
| dfab30c901 | |||
| 8f5474072f | |||
| 056bab7233 | |||
| 08c7a04b61 | |||
| f2a96a1535 | |||
| abc113701c | |||
| fb6953bc1d | |||
| 8a6467f4c8 | |||
| 581068362f | |||
| 011d7d5611 | |||
| caac573a64 | |||
| 39d02e6d00 | |||
| 1e1da62b32 | |||
| d67ab54d55 | |||
| 8e5938cd0c | |||
| 16d89c4b79 | |||
| bf9e269ff3 | |||
| a5190693c8 | |||
| de5b2ca3d8 | |||
| 5c8fc8188a | |||
| 5949c98748 | |||
| 4f7a8f6ae0 | |||
| c01bc15622 | |||
| 027f0210dc | |||
| da155d1378 | |||
| 38f32f405f | |||
| 0fee3ceae5 | |||
| 710003ebdf | |||
| 76a2c82d9f | |||
| 1be2af9309 | |||
| cdbae933b2 | |||
| 7f2c9687b7 | |||
| 721a32a379 | |||
| 2424de07ac | |||
| 179afbbcb3 | |||
| 4d6963f0e7 | |||
| 73fb0f3c0d | |||
| 4ed486ef93 | |||
| 9751531cc1 | |||
| 313a8c59cf | |||
| 76c660f167 | |||
| 3d5bbf899e | |||
| 460e8aa4a7 | |||
| 62ab7e098d | |||
| c4a441129b | |||
| 63486d21c4 | |||
| fbdc3c799d | |||
| fc1dd44f39 | |||
| 8a1517bc7f | |||
| fb0ecb8c34 | |||
| c091bc3326 | |||
| c27bdf6308 | |||
| 007dc2d713 | |||
| ba868cbd40 | |||
| 030844d905 | |||
| 36e25a85f8 | |||
| 4b0d03f9cc | |||
| d6c6c71268 | |||
| 6117bcf7eb | |||
| e1fb69fe44 | |||
| bf5621b716 | |||
| 1c9be1ee1d | |||
| a020dfa036 | |||
| 2e28bd09ca | |||
| 6595535b40 | |||
| a7eac27b98 | |||
| b98bae8588 | |||
| 90a582f6ad | |||
| c41c2e8725 | |||
| ed4d6846f7 | |||
| 952e584d68 | |||
| f178629b9d | |||
| eb2741708a | |||
| fce24cc7fa | |||
| 1ca8760868 | |||
| ffcdc763eb | |||
| bacd76c8e5 | |||
| cf04c3902f | |||
| c4ba591df0 | |||
| ef8431b292 | |||
| b2290e3bc0 | |||
| 1bb2ebc7bc | |||
| 0193327f5d | |||
| 431079c894 | |||
| cc6a37bdf6 | |||
| 9539138992 | |||
| dee2db231a | |||
| 5e99b28ea5 | |||
| 038d53c7c5 | |||
| ad1f9346b8 | |||
| ddfce4e3c7 | |||
| 8a73e559e8 | |||
| ad26302925 | |||
| 2a20546e7b | |||
| 137db98176 | |||
| 94154bd96c | |||
| c34a28b2d5 | |||
| 79622b6123 | |||
| d329aca7e5 | |||
| a347e5526f | |||
| 5328ba1556 | |||
| 7d12d3242e | |||
| 706024841a | |||
| 6e5695f873 | |||
| 565aba4021 | |||
| 5a10e53de6 | |||
| c927342da3 | |||
| 862eeb89d5 | |||
| b88ad37b92 | |||
| 5ff4b68bae | |||
| a7107cf1b1 | |||
| 6132cdf8c0 | |||
| d39fb33c70 | |||
| 5e7ff78f23 | |||
| 05289d0cb1 | |||
| 7dbc634388 | |||
| d58add78bf | |||
| 0c8448c65d | |||
| eed039319e | |||
| 3542c0ed87 | |||
| 162c0f5db5 | |||
| 5f649d1b2e | |||
| e261149065 | |||
| 5f3d985b64 | |||
| 283f6d6be6 | |||
| 7d1b4e71a5 | |||
| 29b4ba4c78 | |||
| ccd89d08d9 | |||
| bf57430b66 | |||
| ad70dbc5dd | |||
| a5d8290663 | |||
| 4fa967b2b1 | |||
| cd11246d9a | |||
| f377aba208 | |||
| 55a9031526 |
@@ -7,5 +7,12 @@
|
||||
"access": "public",
|
||||
"baseBranch": "main",
|
||||
"updateInternalDependencies": "patch",
|
||||
"ignore": ["wss", "webapp"]
|
||||
"ignore": [
|
||||
"wss",
|
||||
"webapp",
|
||||
"integrations",
|
||||
"emails",
|
||||
"internal-cli",
|
||||
"integration-catalog"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/sdk": patch
|
||||
---
|
||||
|
||||
Fixed an error message
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/sdk": patch
|
||||
---
|
||||
|
||||
Added kv storage to persist data in between runs and between workflows
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/sdk": patch
|
||||
---
|
||||
|
||||
Fix ESM error by dynamically importing ESM packages (chalk, terminal-link, etc.)
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"mode": "pre",
|
||||
"tag": "next",
|
||||
"initialVersions": {
|
||||
"integrations": "1.0.0",
|
||||
"webapp": "1.0.0",
|
||||
"wss": "1.0.0",
|
||||
"@trigger.dev/airtable": "0.1.27",
|
||||
"@trigger.dev/notion": "0.1.26",
|
||||
"@trigger.dev/sendgrid": "0.1.27",
|
||||
"@trigger.dev/github": "0.1.27",
|
||||
"@trigger.dev/resend": "0.1.27",
|
||||
"@trigger.dev/shopify": "0.1.27",
|
||||
"@trigger.dev/slack": "0.1.27",
|
||||
"@trigger.dev/whatsapp": "0.1.25",
|
||||
"@trigger.dev/common-schemas": "0.1.1",
|
||||
"create-trigger": "0.2.0",
|
||||
"emails": "1.0.0",
|
||||
"integration-catalog": "0.1.16",
|
||||
"@trigger.dev/integration-sdk": "0.1.17",
|
||||
"internal-bridge": "0.0.1",
|
||||
"internal-cli": "0.0.1",
|
||||
"internal-platform": "0.0.3",
|
||||
"internal-pulsar": "0.0.1",
|
||||
"@trigger.dev/sdk": "0.2.21"
|
||||
},
|
||||
"changesets": [
|
||||
"eleven-gorillas-obey",
|
||||
"little-lizards-joke",
|
||||
"moody-ligers-arrive",
|
||||
"shaggy-hounds-appear"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/sdk": patch
|
||||
---
|
||||
|
||||
SDK now passes through the project ID from the env var
|
||||
+2
-1
@@ -45,4 +45,5 @@ yarn-error.log*
|
||||
.output
|
||||
apps/**/public/build
|
||||
.tests-container-id.txt
|
||||
.sentryclirc
|
||||
.sentryclirc
|
||||
.buildt
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
{"workspaceId":"63e5e42daf9a537ba8d9503c"}
|
||||
Vendored
+19
-1
@@ -5,18 +5,36 @@
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "pnpm run dev --filter webapp",
|
||||
"command": "pnpm run idev --filter webapp",
|
||||
"name": "Run webapp",
|
||||
"request": "launch",
|
||||
"type": "node-terminal",
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"command": "pnpm run dev --filter integrations",
|
||||
"name": "Run integrations",
|
||||
"request": "launch",
|
||||
"type": "node-terminal",
|
||||
"cwd": "${workspaceFolder}"
|
||||
},
|
||||
{
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"name": "Chrome webapp",
|
||||
"url": "http://localhost:3000",
|
||||
"webRoot": "${workspaceFolder}/apps/webapp/app"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Debug Current Test File",
|
||||
"autoAttachChildProcesses": true,
|
||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
||||
"program": "${workspaceRoot}/node_modules/vitest/vitest.mjs",
|
||||
"args": ["run", "${relativeFile}"],
|
||||
"smartStep": true,
|
||||
"console": "integratedTerminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"name": "trigger.dev",
|
||||
"path": "../"
|
||||
},
|
||||
{
|
||||
"name": "Webapp",
|
||||
"path": "../apps/webapp"
|
||||
},
|
||||
{
|
||||
"name": "Integrations",
|
||||
"path": "../apps/integrations"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"vitest.commandLine": "pnpm exec vitest"
|
||||
}
|
||||
}
|
||||
@@ -31,8 +31,17 @@ windows:
|
||||
panes:
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev
|
||||
commands:
|
||||
- exec: pnpm run dev --filter webapp
|
||||
- exec: pnpm run build --filter webapp
|
||||
- exec: pnpm run i-dev --filter webapp
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev/apps/webapp
|
||||
- title: integrations
|
||||
layout:
|
||||
split_direction: vertical
|
||||
panes:
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev
|
||||
commands:
|
||||
- exec: pnpm run dev --filter integrations
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev/apps/integrations
|
||||
- title: ngrok
|
||||
layout:
|
||||
split_direction: horizontal
|
||||
@@ -43,6 +52,9 @@ windows:
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev
|
||||
commands:
|
||||
- exec: ./scripts/proxy-pizzly.sh <your-pizzly-dev>
|
||||
- cwd: /Users/eric/code/triggerdotdev/trigger.dev
|
||||
commands:
|
||||
- exec: ./scripts/proxy-wss.sh <your-wss-dev>
|
||||
- title: wss and examples
|
||||
layout:
|
||||
split_direction: horizontal
|
||||
|
||||
+6
-2
@@ -9,6 +9,7 @@ To add a changeset, use `pnpm run changeset:add` and follow the instructions [he
|
||||
- `@trigger.dev/sdk`
|
||||
- `@trigger.dev/integration-sdk`
|
||||
- `@trigger.dev/github`
|
||||
- `@trigger.dev/notion`
|
||||
- `@trigger.dev/slack`
|
||||
- `@trigger.dev/shopify`
|
||||
- `@trigger.dev/resend`
|
||||
@@ -22,5 +23,8 @@ Based on the instructions [here](https://github.com/changesets/changesets/blob/m
|
||||
|
||||
## Pre-release instructions
|
||||
|
||||
- Switch into pre-release mode by running `pnpm run changeset:next`.
|
||||
- Switch back into normal mode by running `pnpm run changeset:normal`.
|
||||
1. Add changesets as usual `pnpm run changeset:add`
|
||||
2. Switch to pre-release mode by running `pnpm run changeset:next`
|
||||
3. Create version `pnpm run changeset:version`
|
||||
4. Release `pnpm run changeset:release`
|
||||
5. Switch back to normal mode by running `pnpm run changeset:normal`
|
||||
|
||||
+5
-3
@@ -68,10 +68,11 @@ export PULSAR_CPP_DIR=/opt/homebrew/Cellar/libpulsar/3.1.0
|
||||
|
||||
If you are proxying the webapp according to step 2 then in `webapp/.env`, set the `APP_ORIGIN` to the `NGROK_SUBDOMAIN` provided to the `./scripts/proxy-webapp.sh` command, e.g. `APP_ORIGIN=https://dan-trigger-dev.eu.ngrok.io`
|
||||
|
||||
4. Start postgresql, pulsar, and pizzly server
|
||||
4. Start postgresql, redis, pizzly server, followed by pulsar standalone
|
||||
|
||||
```bash
|
||||
pnpm run docker:db
|
||||
pnpm run docker:services
|
||||
pnpm run docker:pulsar
|
||||
```
|
||||
|
||||
> **Note:** The npm script will complete while Docker sets up the container in the background. Ensure that Docker has finished and your container is running before proceeding.
|
||||
@@ -173,7 +174,8 @@ pnpm install
|
||||
1. Ensure the docker containers are running
|
||||
|
||||
```bash
|
||||
pnpm run docker:db
|
||||
pnpm run docker:services
|
||||
pnpm run docker:pulsar
|
||||
```
|
||||
|
||||
2. Run the webapp
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
# **⚡️ Trigger.dev**
|
||||
# **✨ Trigger.dev**
|
||||
### **The developer-first open source Zapier alternative.**
|
||||
|
||||
|
||||
@@ -172,8 +172,7 @@ new Trigger({
|
||||
|
||||
One of the most powerful features of Trigger.dev is the [runs page](https://docs.trigger.dev/viewing-runs). All of the steps in a workflow, including the initial event, can be viewed in detail. See the status / output of each step, the logs, rich previews, errors and much more.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"prettier"
|
||||
],
|
||||
"env": {
|
||||
"node": true,
|
||||
"commonjs": true
|
||||
},
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"plugins": ["@typescript-eslint"],
|
||||
"root": true,
|
||||
"rules": {
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"no-console": "off"
|
||||
},
|
||||
"ignorePatterns": ["**/dist/*.js"]
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
.env.test
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and *not* Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
.DS_Store
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
{ "workspaceId": "63ea6cff29733e58db1e6b80" }
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
|
||||
/build
|
||||
.env
|
||||
@@ -0,0 +1,55 @@
|
||||
FROM node:16-bullseye AS pruner
|
||||
RUN apt-get update && apt-get install openssl -y
|
||||
WORKDIR /app
|
||||
RUN npm install turbo@1.7.0 -g
|
||||
COPY . .
|
||||
RUN turbo prune --scope=integrations --docker
|
||||
RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
|
||||
|
||||
# Base strategy to have layer caching
|
||||
FROM node:16-bullseye AS base
|
||||
RUN apt-get update && apt-get install openssl -y
|
||||
WORKDIR /app
|
||||
COPY .gitignore .gitignore
|
||||
COPY --from=pruner /app/out/json/ .
|
||||
COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
|
||||
COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
|
||||
|
||||
FROM base AS production-deps
|
||||
WORKDIR /app
|
||||
RUN npm install turbo@1.7.0 -g
|
||||
RUN corepack enable
|
||||
ENV NODE_ENV production
|
||||
COPY --from=pruner /app/out/full/apps/integrations/prisma/schema.prisma /app/apps/integrations/prisma/schema.prisma
|
||||
RUN pnpm install --prod --frozen-lockfile
|
||||
RUN pnpx prisma generate --schema /app/apps/integrations/prisma/schema.prisma
|
||||
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
RUN npm install turbo@1.7.0 -g
|
||||
COPY turbo.json turbo.json
|
||||
RUN corepack enable
|
||||
COPY --from=pruner /app/out/full/ .
|
||||
ENV NODE_ENV development
|
||||
RUN pnpm install --ignore-scripts --frozen-lockfile
|
||||
ENV NODE_ENV production
|
||||
RUN pnpm run generate
|
||||
RUN pnpm run build --filter=integrations...
|
||||
RUN pnpx prisma migrate deploy --schema apps/integrations/prisma/schema.prisma
|
||||
|
||||
# Runner
|
||||
FROM node:16-bullseye AS runner
|
||||
RUN apt-get update && apt-get install openssl -y
|
||||
WORKDIR /app
|
||||
RUN corepack enable
|
||||
ENV NODE_ENV production
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 expressjs
|
||||
RUN chown -R expressjs:nodejs /app
|
||||
USER expressjs
|
||||
|
||||
COPY --from=pruner --chown=expressjs:nodejs /app/out/full/ .
|
||||
COPY --from=production-deps --chown=expressjs:nodejs /app .
|
||||
COPY --from=builder --chown=expressjs:nodejs /app/apps/integrations/dist/index.js ./apps/integrations/dist/index.js
|
||||
|
||||
ENTRYPOINT ["pnpm", "--filter", "integrations", "run", "start"]
|
||||
@@ -0,0 +1,2 @@
|
||||
# trigger-integrations
|
||||
You can create API integrations using this data and system
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "integrations",
|
||||
"version": "1.0.0",
|
||||
"description": "API integrations in a format that can be used to generate clients",
|
||||
"main": "./dist/index.js",
|
||||
"scripts": {
|
||||
"build": "tsup",
|
||||
"start": "node dist/index.js",
|
||||
"dev": "node -r dotenv/config dist/index.js",
|
||||
"test": "vitest",
|
||||
"typecheck": "tsc -b",
|
||||
"lint": "eslint --no-error-on-unmatched-pattern src/**",
|
||||
"lint-fix": "eslint --no-error-on-unmatched-pattern --fix src/**",
|
||||
"generate-integrations": "NODE_OPTIONS=--max-old-space-size=16384 tsx src/trigger/sdk/generate.ts generate",
|
||||
"generate": "prisma generate",
|
||||
"convert": "tsx src/tools/schemas/typescript-to-json-schema.ts convert",
|
||||
"db:migrate:deploy": "prisma migrate deploy",
|
||||
"db:migrate:dev": "prisma migrate dev"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cfworker/json-schema": "^1.12.5",
|
||||
"@prisma/client": "^4.3.0",
|
||||
"@sentry/node": "^7.38.0",
|
||||
"ajv": "^8.12.0",
|
||||
"express": "^4.18.1",
|
||||
"express-async-errors": "^3.1.1",
|
||||
"json-pointer": "^0.6.2",
|
||||
"json-schema-deref-sync": "^0.14.0",
|
||||
"json-schema-to-typescript": "^11.0.3",
|
||||
"loglevel": "^1.8.1",
|
||||
"morgan": "^1.10.0",
|
||||
"node-fetch": "^3.3.0",
|
||||
"node-object-hash": "^2.3.10",
|
||||
"zod": "^3.20.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/json-schema-ref-parser": "^10.1.0",
|
||||
"@types/eslint": "^8.4.6",
|
||||
"@types/express": "^4.17.13",
|
||||
"@types/json-pointer": "^1.0.31",
|
||||
"@types/morgan": "^1.9.3",
|
||||
"@types/node": "^18.13.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.51.0",
|
||||
"commander": "^9.4.1",
|
||||
"concurrently": "^7.6.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"eslint": "^8.34.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-config-standard-with-typescript": "^34.0.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^15.6.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"nock": "^13.3.0",
|
||||
"nodemon": "^2.0.19",
|
||||
"prisma": "^4.3.0",
|
||||
"rimraf": "^4.1.2",
|
||||
"tiny-invariant": "^1.2.0",
|
||||
"ts-json-schema-generator": "^1.2.0",
|
||||
"ts-morph": "^17.0.1",
|
||||
"tsup": "^6.6.2",
|
||||
"tsx": "^3.12.3",
|
||||
"typescript": "^4.9.5",
|
||||
"vite": "^4.1.1",
|
||||
"vite-tsconfig-paths": "^4.0.5",
|
||||
"vitest": "^0.28.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Cache" (
|
||||
"id" TEXT NOT NULL,
|
||||
"namespace" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"value" TEXT NOT NULL,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Cache_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Cache_key_key" ON "Cache"("key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Cache_namespace_key_idx" ON "Cache"("namespace", "key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Cache_namespace_key_key" ON "Cache"("namespace", "key");
|
||||
@@ -0,0 +1,5 @@
|
||||
-- DropIndex
|
||||
DROP INDEX "Cache_key_key";
|
||||
|
||||
-- DropIndex
|
||||
DROP INDEX "Cache_namespace_key_idx";
|
||||
@@ -0,0 +1,2 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Cache" ALTER COLUMN "expiresAt" DROP NOT NULL;
|
||||
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (i.e. Git)
|
||||
provider = "postgresql"
|
||||
@@ -0,0 +1,22 @@
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
output = "../node_modules/.prisma/client"
|
||||
binaryTargets = ["native", "debian-openssl-1.1.x"]
|
||||
previewFeatures = ["orderByNulls"]
|
||||
}
|
||||
|
||||
model Cache {
|
||||
id String @id @default(cuid())
|
||||
namespace String
|
||||
key String
|
||||
value String
|
||||
expiresAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@unique([namespace, key])
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import { InputSpec } from "core/action/types";
|
||||
|
||||
export function createParametersBody(
|
||||
inputSpec: InputSpec,
|
||||
params?: Record<string | number, any> | undefined
|
||||
) {
|
||||
//separate the parameters and body by looking at the spec and pulling properties out
|
||||
let parameters: Record<string, any> | undefined = undefined;
|
||||
let body: any = undefined;
|
||||
|
||||
if (params) {
|
||||
inputSpec.parameters?.forEach((p) => {
|
||||
if (!parameters) {
|
||||
parameters = {};
|
||||
}
|
||||
parameters[p.name] = params[p.name];
|
||||
});
|
||||
|
||||
//everything left should go in the body
|
||||
if (inputSpec.body) {
|
||||
body = {};
|
||||
Object.keys(params).forEach((name) => {
|
||||
if (!inputSpec.parameters?.find((p) => p.name === name)) {
|
||||
body[name] = params[name];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
parameters,
|
||||
body,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
import { DisplayProperties } from "core/action/types";
|
||||
import { Request, Response } from "express";
|
||||
import { catalog } from "integrations/catalog";
|
||||
import { z } from "zod";
|
||||
import { createParametersBody } from "./createParametersBody";
|
||||
import { getServiceAction } from "./validation";
|
||||
|
||||
const requestBodySchema = z.object({
|
||||
params: z.record(z.string().or(z.number()), z.any()).optional(),
|
||||
});
|
||||
|
||||
export async function handleActionDisplay(req: Request, res: Response) {
|
||||
const serviceActionResult = getServiceAction(req.params);
|
||||
|
||||
if (!serviceActionResult.success) {
|
||||
res
|
||||
.status(404)
|
||||
.send(
|
||||
JSON.stringify({ success: false, error: serviceActionResult.error })
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const { service, action } = serviceActionResult;
|
||||
|
||||
const parsedRequestBody = requestBodySchema.safeParse(req.body);
|
||||
if (!parsedRequestBody.success) {
|
||||
res.status(400).send(
|
||||
JSON.stringify({
|
||||
success: false,
|
||||
error: {
|
||||
type: "invalid_body",
|
||||
message: "Action not found",
|
||||
service,
|
||||
action,
|
||||
issues: parsedRequestBody.error.issues,
|
||||
},
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const requestData = createParametersBody(
|
||||
action.spec.input,
|
||||
parsedRequestBody.data.params
|
||||
);
|
||||
|
||||
const displayProperties = await action.displayProperties(requestData);
|
||||
res.send(JSON.stringify({ success: true, properties: displayProperties }));
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
import { PostgresCacheService } from "cache/postgresCache";
|
||||
import { AuthCredentials } from "core/authentication/types";
|
||||
import { Service } from "core/service/types";
|
||||
import { validateInputs } from "core/validation/inputs";
|
||||
import { Request, Response } from "express";
|
||||
import { z } from "zod";
|
||||
import { error, ReturnResponse } from "../requestUtilities";
|
||||
import { createParametersBody } from "./createParametersBody";
|
||||
import { getServiceAction } from "./validation";
|
||||
|
||||
const requestBodySchema = z.object({
|
||||
credentials: z.object({ accessToken: z.string() }).optional(),
|
||||
params: z.record(z.string().or(z.number()), z.any()).optional(),
|
||||
metadata: z.object({
|
||||
requestId: z.string(),
|
||||
workflowId: z.string(),
|
||||
connectionId: z.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
export async function handleAction(req: Request, res: Response) {
|
||||
const serviceActionResult = getServiceAction(req.params);
|
||||
|
||||
if (!serviceActionResult.success) {
|
||||
res
|
||||
.status(404)
|
||||
.send(JSON.stringify(error(404, false, serviceActionResult.error)));
|
||||
return;
|
||||
}
|
||||
|
||||
const { service, action } = serviceActionResult;
|
||||
|
||||
const parsedRequestBody = requestBodySchema.safeParse(req.body);
|
||||
|
||||
if (!parsedRequestBody.success) {
|
||||
res.status(400).send(
|
||||
JSON.stringify(
|
||||
error(400, false, {
|
||||
type: "invalid_body",
|
||||
message: "Action not found",
|
||||
service,
|
||||
action,
|
||||
issues: parsedRequestBody.error.issues,
|
||||
})
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
//for v1 of this API we're building the credentials from the action
|
||||
//this is fine for now but we'll want to use the connection in future to cover complex cases
|
||||
let credentials: AuthCredentials | undefined = undefined;
|
||||
if (parsedRequestBody.data.credentials && action.spec.input.security) {
|
||||
const firstSecurityMethod = Object.entries(action.spec.input.security)[0];
|
||||
if (firstSecurityMethod) {
|
||||
const [name, scopes] = firstSecurityMethod;
|
||||
//get the full info from the service
|
||||
const securityMethod = service.authentication[name];
|
||||
|
||||
switch (securityMethod.type) {
|
||||
case "oauth2":
|
||||
credentials = {
|
||||
type: "oauth2",
|
||||
name,
|
||||
accessToken: parsedRequestBody.data.credentials.accessToken,
|
||||
scopes,
|
||||
};
|
||||
break;
|
||||
case "api_key":
|
||||
credentials = {
|
||||
type: "api_key",
|
||||
name,
|
||||
api_key: parsedRequestBody.data.credentials.accessToken,
|
||||
scopes,
|
||||
};
|
||||
break;
|
||||
default:
|
||||
throw new Error(
|
||||
`Not implemented credentials for: ${JSON.stringify(securityMethod)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const { parameters, body } = createParametersBody(
|
||||
action.spec.input,
|
||||
parsedRequestBody.data.params
|
||||
);
|
||||
|
||||
const inputValidationResult = await validateInputs(action.spec.input, {
|
||||
parameters,
|
||||
body,
|
||||
credentials,
|
||||
});
|
||||
if (!inputValidationResult.success) {
|
||||
res
|
||||
.status(400)
|
||||
.send(JSON.stringify(error(400, false, inputValidationResult.error)));
|
||||
return;
|
||||
}
|
||||
|
||||
const { metadata } = parsedRequestBody.data;
|
||||
const cache = new PostgresCacheService(`${metadata.connectionId}-${service}`);
|
||||
|
||||
try {
|
||||
const data = await action.action(
|
||||
{ credentials, parameters, body },
|
||||
cache,
|
||||
metadata
|
||||
);
|
||||
|
||||
//convert into the format for the webapp
|
||||
const response: ReturnResponse = {
|
||||
ok: true,
|
||||
isRetryable: isRetryable(service, data.status),
|
||||
response: {
|
||||
output: data.body ?? {},
|
||||
context: {
|
||||
statusCode: data.status,
|
||||
headers: data.headers,
|
||||
},
|
||||
},
|
||||
};
|
||||
res.send(JSON.stringify(response));
|
||||
} catch (e: any) {
|
||||
console.error(e);
|
||||
|
||||
if (e instanceof Error) {
|
||||
res
|
||||
.status(500)
|
||||
.send(JSON.stringify(error(500, false, { error: JSON.stringify(e) })));
|
||||
return;
|
||||
}
|
||||
|
||||
if ("error" in e) {
|
||||
res.status(500).send(JSON.stringify(error(500, false, e.error)));
|
||||
return;
|
||||
}
|
||||
|
||||
res
|
||||
.status(500)
|
||||
.send(JSON.stringify(error(500, false, { error: JSON.stringify(e) })));
|
||||
}
|
||||
}
|
||||
|
||||
function isRetryable(service: Service, status: number): boolean {
|
||||
return service.retryableStatusCodes.includes(status);
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
import { Action } from "core/action/types";
|
||||
import { Service } from "core/service/types";
|
||||
import { Request } from "express";
|
||||
import { catalog } from "integrations/catalog";
|
||||
|
||||
type ServiceActionResult =
|
||||
| {
|
||||
success: true;
|
||||
service: Service;
|
||||
action: Action;
|
||||
}
|
||||
| {
|
||||
success: false;
|
||||
error: Record<string, any>;
|
||||
};
|
||||
|
||||
export function getServiceAction(
|
||||
params: Request["params"]
|
||||
): ServiceActionResult {
|
||||
const { service, action } = params;
|
||||
|
||||
const matchingService = Object.values(catalog.services).find(
|
||||
(s) => s.service === service
|
||||
);
|
||||
|
||||
if (!matchingService) {
|
||||
return {
|
||||
success: false,
|
||||
error: { type: "missing_service", message: "Service not found", service },
|
||||
};
|
||||
}
|
||||
|
||||
const matchingAction = Object.values(matchingService.actions).find(
|
||||
(a) => a.name === action
|
||||
);
|
||||
|
||||
if (!matchingAction) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "missing_action",
|
||||
message: "Action not found",
|
||||
service,
|
||||
action,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return { success: true, service: matchingService, action: matchingAction };
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
import { AuthCredentials } from "core/authentication/types";
|
||||
import { HTTPMethodSchema } from "core/endpoint/types";
|
||||
import { serviceFetch } from "core/fetch/serviceFetch";
|
||||
import { Request, Response } from "express";
|
||||
import { catalog } from "integrations/catalog";
|
||||
import { z } from "zod";
|
||||
import { error } from "./requestUtilities";
|
||||
|
||||
const requestBodySchema = z.object({
|
||||
credentials: z.object({ accessToken: z.string() }).optional(),
|
||||
path: z.string(),
|
||||
method: HTTPMethodSchema,
|
||||
headers: z.record(z.string(), z.string()).optional(),
|
||||
body: z.any(),
|
||||
});
|
||||
|
||||
type ReturnResponse = {
|
||||
response: NormalizedResponse;
|
||||
isRetryable: boolean;
|
||||
ok: boolean;
|
||||
};
|
||||
|
||||
type NormalizedResponse = {
|
||||
output: NonNullable<any>;
|
||||
context: any;
|
||||
};
|
||||
|
||||
export async function handleAction(req: Request, res: Response) {
|
||||
const { service } = req.params;
|
||||
|
||||
const matchingService = Object.values(catalog.services).find(
|
||||
(s) => s.service === service
|
||||
);
|
||||
|
||||
if (!matchingService) {
|
||||
return {
|
||||
success: false,
|
||||
error: { type: "missing_service", message: "Service not found", service },
|
||||
};
|
||||
}
|
||||
|
||||
const parsedRequestBody = requestBodySchema.safeParse(req.body);
|
||||
|
||||
if (!parsedRequestBody.success) {
|
||||
res.status(400).send(
|
||||
JSON.stringify(
|
||||
error(400, false, {
|
||||
type: "invalid_body",
|
||||
message: "Invalid input",
|
||||
issues: parsedRequestBody.error.issues,
|
||||
})
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
//v1 build credentials from the service authentication info
|
||||
let credentials: AuthCredentials | undefined = undefined;
|
||||
if (parsedRequestBody.data.credentials) {
|
||||
//just get the first security method
|
||||
const [name, securityMethod] = Object.entries(
|
||||
matchingService.authentication
|
||||
)[0];
|
||||
|
||||
switch (securityMethod.type) {
|
||||
case "oauth2":
|
||||
credentials = {
|
||||
type: "oauth2",
|
||||
name,
|
||||
accessToken: parsedRequestBody.data.credentials.accessToken,
|
||||
scopes: Object.keys(securityMethod.scopes),
|
||||
};
|
||||
break;
|
||||
case "api_key":
|
||||
credentials = {
|
||||
type: "api_key",
|
||||
name,
|
||||
api_key: parsedRequestBody.data.credentials.accessToken,
|
||||
scopes: Object.keys(securityMethod.scopes),
|
||||
};
|
||||
break;
|
||||
default:
|
||||
throw new Error(
|
||||
`Not implemented credentials for: ${JSON.stringify(securityMethod)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const url = matchingService.baseUrl + parsedRequestBody.data.path;
|
||||
|
||||
const data = await serviceFetch({
|
||||
url,
|
||||
method: parsedRequestBody.data.method,
|
||||
headers: parsedRequestBody.data.headers,
|
||||
body: parsedRequestBody.data.body,
|
||||
authentication: matchingService.authentication,
|
||||
credentials,
|
||||
});
|
||||
|
||||
const response: ReturnResponse = {
|
||||
ok: true,
|
||||
isRetryable: isRetryable(data.status),
|
||||
response: {
|
||||
output: data.body ?? {},
|
||||
context: {
|
||||
statusCode: data.status,
|
||||
headers: data.headers,
|
||||
},
|
||||
},
|
||||
};
|
||||
res.send(JSON.stringify(response));
|
||||
}
|
||||
|
||||
function isRetryable(statusCode: number) {
|
||||
return [408, 429, 500, 502, 503, 504].includes(statusCode);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
export type ReturnResponse = {
|
||||
response: NormalizedResponse;
|
||||
isRetryable: boolean;
|
||||
ok: boolean;
|
||||
};
|
||||
|
||||
export type NormalizedResponse = {
|
||||
output: NonNullable<any>;
|
||||
context: any;
|
||||
};
|
||||
|
||||
export function error(
|
||||
status: number,
|
||||
isRetryable: boolean,
|
||||
error: Record<string, any>
|
||||
): ReturnResponse {
|
||||
const response: ReturnResponse = {
|
||||
ok: false,
|
||||
isRetryable,
|
||||
response: {
|
||||
output: error,
|
||||
context: {
|
||||
statusCode: status,
|
||||
headers: {},
|
||||
},
|
||||
},
|
||||
};
|
||||
return response;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { IntegrationAuthentication } from "core/authentication/types";
|
||||
import { Service } from "core/service/types";
|
||||
import { Request, Response } from "express";
|
||||
import { catalog } from "integrations/catalog";
|
||||
|
||||
type ServiceMetadata = {
|
||||
name: string;
|
||||
service: string;
|
||||
version: string;
|
||||
icon: string;
|
||||
live: boolean;
|
||||
authentication: IntegrationAuthentication;
|
||||
};
|
||||
|
||||
export async function handleServices(_req: Request, res: Response) {
|
||||
const servicesMetadata: Record<string, ServiceMetadata> = {};
|
||||
Object.entries(catalog.services).forEach(([key, service]) => {
|
||||
if (service.live === false) return;
|
||||
const metadata = omitExtraInfo(service);
|
||||
servicesMetadata[key] = {
|
||||
...metadata,
|
||||
icon: `/integrations/${metadata.service}.png`,
|
||||
};
|
||||
});
|
||||
|
||||
res.send(
|
||||
JSON.stringify({
|
||||
services: servicesMetadata,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function omitExtraInfo(
|
||||
service: Service
|
||||
): Omit<Service, "actions" | "retryableStatusCodes"> {
|
||||
const { actions, retryableStatusCodes, ...rest } = service;
|
||||
return rest;
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
import { PrismaClient, Prisma } from ".prisma/client";
|
||||
import invariant from "tiny-invariant";
|
||||
|
||||
export { Prisma };
|
||||
|
||||
let prisma: PrismaClient;
|
||||
|
||||
declare global {
|
||||
// eslint-disable-next-line no-var
|
||||
var __db__: PrismaClient;
|
||||
}
|
||||
|
||||
// this is needed because in development we don't want to restart
|
||||
// the server with every change, but we want to make sure we don't
|
||||
// create a new connection to the DB with every change either.
|
||||
// in production we'll have a single connection to the DB.
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
prisma = getClient();
|
||||
} else {
|
||||
if (!global.__db__) {
|
||||
global.__db__ = getClient();
|
||||
}
|
||||
prisma = global.__db__;
|
||||
}
|
||||
|
||||
function getClient() {
|
||||
const { DATABASE_URL } = process.env;
|
||||
invariant(typeof DATABASE_URL === "string", "DATABASE_URL env var not set");
|
||||
|
||||
// Remove the username:password in the url and print that to the console
|
||||
const urlWithoutCredentials = new URL(DATABASE_URL);
|
||||
urlWithoutCredentials.password = "";
|
||||
|
||||
console.log(
|
||||
`1. 🔌 setting up prisma client to ${urlWithoutCredentials.toString()}`
|
||||
);
|
||||
|
||||
const client = new PrismaClient({
|
||||
datasources: {
|
||||
db: {
|
||||
url: DATABASE_URL,
|
||||
},
|
||||
},
|
||||
log: ["warn", "error"],
|
||||
});
|
||||
|
||||
console.log(`2.0 🔌 prisma client connecting`);
|
||||
|
||||
// connect eagerly
|
||||
client.$connect();
|
||||
|
||||
console.log(`3.0 🔌 prisma client connected`);
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
export { prisma };
|
||||
export type { PrismaClient } from ".prisma/client";
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
import type { Prisma, Cache } from ".prisma/client";
|
||||
import { prisma } from "./db.server";
|
||||
import { CacheService } from "core/cache/types";
|
||||
|
||||
export class PostgresCacheService implements CacheService {
|
||||
constructor(private readonly namespace: string) {}
|
||||
|
||||
async get(key: string) {
|
||||
const cachedRow = await prisma.cache.findFirst({
|
||||
where: {
|
||||
namespace: this.namespace,
|
||||
key,
|
||||
OR: [
|
||||
{ expiresAt: null },
|
||||
{
|
||||
expiresAt: {
|
||||
gt: new Date(),
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
if (cachedRow) {
|
||||
return cachedRow.value;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async set(key: string, value: string, ttl?: number): Promise<void> {
|
||||
const expiresAt = ttl ? new Date(Date.now() + ttl * 1000) : null;
|
||||
|
||||
await prisma.cache.upsert({
|
||||
where: {
|
||||
namespace_key: {
|
||||
namespace: this.namespace,
|
||||
key,
|
||||
},
|
||||
},
|
||||
update: {
|
||||
value,
|
||||
expiresAt,
|
||||
},
|
||||
create: {
|
||||
namespace: this.namespace,
|
||||
key,
|
||||
value,
|
||||
expiresAt,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import { EndpointSpecMetadata } from "core/endpoint/types";
|
||||
import { RequestData } from "core/request/types";
|
||||
|
||||
export async function getDisplayProperties(
|
||||
data: RequestData,
|
||||
displayProperties: EndpointSpecMetadata["displayProperties"]
|
||||
) {
|
||||
return {
|
||||
title: interpolateString(displayProperties.title, {
|
||||
parameters: data.parameters,
|
||||
body: data.body,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
function interpolateString(
|
||||
template: string,
|
||||
data: Record<string | number, any>
|
||||
) {
|
||||
return template.replace(/\${([^}]+)}/g, (_, key) => {
|
||||
return key
|
||||
.split(".")
|
||||
.reduce((obj: Record<string | number, any>, prop: string | number) => {
|
||||
return obj[prop];
|
||||
}, data);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
import { CacheService } from "core/cache/types";
|
||||
import { Endpoint } from "core/endpoint/types";
|
||||
import { RequestData, RequestResponse } from "core/request/types";
|
||||
import { getDisplayProperties } from "./getDisplayProperties";
|
||||
import { Action, InputSpec, Metadata, OutputSpec } from "./types";
|
||||
import { makeInputSpec, makeOutputSpec } from "./utilities";
|
||||
|
||||
/** Create an action where you specify the spec and action */
|
||||
export const makeAdvancedAction = ({
|
||||
endpoint,
|
||||
spec,
|
||||
action,
|
||||
}: {
|
||||
endpoint: Endpoint;
|
||||
spec: Action["spec"];
|
||||
action: (
|
||||
data: RequestData,
|
||||
cache?: CacheService,
|
||||
metadata?: Metadata
|
||||
) => Promise<RequestResponse>;
|
||||
}) => {
|
||||
const displayProperties = async (data: RequestData) => {
|
||||
return getDisplayProperties(
|
||||
data,
|
||||
endpoint.spec.endpointSpec.metadata.displayProperties
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
name: endpoint.spec.endpointSpec.metadata.name,
|
||||
description: endpoint.spec.endpointSpec.metadata.description,
|
||||
path: endpoint.spec.endpointSpec.path,
|
||||
method: endpoint.spec.endpointSpec.method,
|
||||
spec,
|
||||
action,
|
||||
displayProperties,
|
||||
};
|
||||
};
|
||||
|
||||
/** Creates an action where the spec and data is manipulated */
|
||||
export const makeSimpleAction = (
|
||||
endpoint: Endpoint,
|
||||
processSpec?: (specs: Action["spec"]) => Action["spec"],
|
||||
preRequest?: (data: RequestData) => RequestData
|
||||
) => {
|
||||
let specs = {
|
||||
input: makeInputSpec(endpoint),
|
||||
output: makeOutputSpec(endpoint),
|
||||
};
|
||||
|
||||
if (processSpec) {
|
||||
specs = processSpec(specs);
|
||||
}
|
||||
|
||||
const action = async (
|
||||
data: RequestData,
|
||||
cache?: CacheService,
|
||||
metadata?: Metadata
|
||||
) => {
|
||||
if (preRequest) {
|
||||
data = preRequest(data);
|
||||
}
|
||||
//a simple request doesn't use the cache or metadata
|
||||
return await endpoint.request(data);
|
||||
};
|
||||
|
||||
return makeAdvancedAction({
|
||||
endpoint,
|
||||
spec: specs,
|
||||
action,
|
||||
});
|
||||
};
|
||||
|
||||
export const makeSimpleActions = <
|
||||
TEndpoints extends Record<string, Endpoint>,
|
||||
K extends keyof TEndpoints
|
||||
>(
|
||||
endpoints: TEndpoints,
|
||||
processSpec?: (specs: Action["spec"]) => Action["spec"],
|
||||
preRequest?: (data: RequestData) => RequestData
|
||||
): Record<K, Action> => {
|
||||
const actions: any = {};
|
||||
|
||||
Object.entries(endpoints).forEach(([name, endpoint]) => {
|
||||
actions[name as K] = makeSimpleAction(endpoint, processSpec, preRequest);
|
||||
});
|
||||
|
||||
return actions;
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
import { CacheService } from "core/cache/types";
|
||||
import { EndpointSpec, HTTPMethod } from "core/endpoint/types";
|
||||
import { RequestData, RequestResponse } from "core/request/types";
|
||||
|
||||
export type InputSpec = {
|
||||
security?: EndpointSpec["security"];
|
||||
parameters?: EndpointSpec["parameters"];
|
||||
body?: NonNullable<EndpointSpec["request"]["body"]>["schema"];
|
||||
};
|
||||
|
||||
export type OutputSpec = {
|
||||
responses: EndpointSpec["responses"];
|
||||
};
|
||||
|
||||
export type Metadata = Record<string, any>;
|
||||
|
||||
export type DisplayProperties = {
|
||||
title: string;
|
||||
};
|
||||
|
||||
export type Action = {
|
||||
name: string;
|
||||
description: string;
|
||||
path: string;
|
||||
method: HTTPMethod;
|
||||
spec: {
|
||||
input: InputSpec;
|
||||
output: OutputSpec;
|
||||
};
|
||||
action: (
|
||||
/** The data to be sent to the endpoint */
|
||||
data: RequestData,
|
||||
/** The cache service to use for caching */
|
||||
cache?: CacheService,
|
||||
/** Additional metadata that can be used to modify the request */
|
||||
metadata?: Metadata
|
||||
) => Promise<RequestResponse>;
|
||||
displayProperties: (
|
||||
/** The data to be sent to the endpoint */
|
||||
data: RequestData
|
||||
) => Promise<DisplayProperties>;
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
import { Endpoint } from "core/endpoint/types";
|
||||
import { InputSpec, OutputSpec } from "./types";
|
||||
|
||||
export function makeInputSpec(endpoint: Endpoint): InputSpec {
|
||||
return {
|
||||
security: endpoint.spec.endpointSpec.security,
|
||||
parameters: endpoint.spec.endpointSpec.parameters,
|
||||
body: endpoint.spec.endpointSpec.request.body?.schema,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeOutputSpec(endpoint: Endpoint): OutputSpec {
|
||||
return {
|
||||
responses: endpoint.spec.endpointSpec.responses,
|
||||
};
|
||||
}
|
||||
|
||||
export function combineSecurityScopes(
|
||||
securities: (Record<string, string[]> | undefined)[]
|
||||
): Record<string, string[]> | undefined {
|
||||
const securityA = securities[0];
|
||||
const securityB = securities[1];
|
||||
|
||||
//where a key already exists, concatenate the scope arrays together
|
||||
//where a key does not exist, add it to the object
|
||||
let combined: Record<string, string[]> = {};
|
||||
|
||||
if (securityA) {
|
||||
combined = {
|
||||
...securityA,
|
||||
};
|
||||
}
|
||||
|
||||
if (securityB) {
|
||||
for (const key in securityB) {
|
||||
if (combined[key]) {
|
||||
combined[key] = [...combined[key], ...securityB[key]];
|
||||
} else {
|
||||
combined[key] = securityB[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (securities.length > 2) {
|
||||
return combineSecurityScopes([combined, ...securities.slice(2)]);
|
||||
}
|
||||
|
||||
return combined;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
import { EndpointSpec } from "core/endpoint/types";
|
||||
import { FetchConfig } from "core/request/types";
|
||||
import { expect, test } from "vitest";
|
||||
import { checkRequiredScopes, applyCredentials } from "./credentials";
|
||||
import { AuthCredentials, IntegrationAuthentication } from "./types";
|
||||
|
||||
test("Required scopes present", async () => {
|
||||
const credentials: AuthCredentials = {
|
||||
type: "oauth2",
|
||||
name: "authName",
|
||||
accessToken: "token",
|
||||
scopes: ["scope1", "scope2"],
|
||||
};
|
||||
|
||||
const requiredScopes = ["scope1", "scope2"];
|
||||
|
||||
const result = checkRequiredScopes(requiredScopes, credentials);
|
||||
expect(result.success).toEqual(true);
|
||||
});
|
||||
|
||||
test("Required scopes missing", async () => {
|
||||
const credentials: AuthCredentials = {
|
||||
type: "oauth2",
|
||||
name: "authName",
|
||||
accessToken: "token",
|
||||
scopes: ["scope1", "scope2"],
|
||||
};
|
||||
|
||||
const requiredScopes = ["scope1", "scope2", "scope3"];
|
||||
|
||||
const result = checkRequiredScopes(requiredScopes, credentials);
|
||||
expect(result.success).toEqual(false);
|
||||
if (result.success) throw new Error("Should not be success");
|
||||
expect(result.missingScopes).toEqual(["scope3"]);
|
||||
});
|
||||
|
||||
test("Applied credentials", async () => {
|
||||
const credentials: AuthCredentials = {
|
||||
type: "oauth2",
|
||||
name: "authName",
|
||||
accessToken: "123456",
|
||||
scopes: ["scope1", "scope2"],
|
||||
};
|
||||
const endpointSecurity: EndpointSpec["security"] = {
|
||||
authName: ["scope1", "scope2"],
|
||||
};
|
||||
|
||||
const integrationAuthentication: IntegrationAuthentication = {
|
||||
authName: {
|
||||
type: "oauth2",
|
||||
placement: {
|
||||
in: "header",
|
||||
type: "bearer",
|
||||
key: "Authorization",
|
||||
},
|
||||
authorizationUrl: "https://example.com",
|
||||
tokenUrl: "https://example.com",
|
||||
flow: "accessCode",
|
||||
scopes: {
|
||||
scope1: "scope1",
|
||||
scope2: "scope2",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const existingFetch: FetchConfig = {
|
||||
url: "https://example.com",
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
};
|
||||
|
||||
const fetchConfig = applyCredentials(existingFetch, {
|
||||
endpointSecurity,
|
||||
authentication: integrationAuthentication,
|
||||
credentials,
|
||||
});
|
||||
|
||||
expect(fetchConfig.headers.Authorization).toEqual("Bearer 123456");
|
||||
expect(fetchConfig.headers["Content-Type"]).toEqual("application/json");
|
||||
});
|
||||
@@ -0,0 +1,107 @@
|
||||
import { EndpointSpec } from "core/endpoint/types";
|
||||
import { InsufficientScopesError } from "core/request/errors";
|
||||
import { FetchConfig } from "core/request/types";
|
||||
import { IntegrationAuthentication, AuthCredentials } from "./types";
|
||||
|
||||
/** Apply the given credentials to the given fetch config */
|
||||
export function applyCredentials(
|
||||
fetch: FetchConfig,
|
||||
{
|
||||
endpointSecurity,
|
||||
authentication,
|
||||
credentials,
|
||||
}: {
|
||||
endpointSecurity: EndpointSpec["security"];
|
||||
authentication: IntegrationAuthentication;
|
||||
credentials: AuthCredentials;
|
||||
}
|
||||
): FetchConfig {
|
||||
if (endpointSecurity === undefined) return fetch;
|
||||
// check if the credentials have the required scopes
|
||||
const requiredScopes = endpointSecurity[credentials.name] ?? [];
|
||||
const scopesCheckResult = checkRequiredScopes(requiredScopes, credentials);
|
||||
if (!scopesCheckResult.success) {
|
||||
const error: InsufficientScopesError = {
|
||||
type: "insufficient_scopes",
|
||||
missingScopes: scopesCheckResult.missingScopes,
|
||||
};
|
||||
throw error;
|
||||
}
|
||||
|
||||
return addCredentialsToConfig(fetch, { authentication, credentials });
|
||||
}
|
||||
|
||||
export function addCredentialsToConfig(
|
||||
fetch: FetchConfig,
|
||||
{
|
||||
authentication,
|
||||
credentials,
|
||||
}: {
|
||||
authentication: IntegrationAuthentication;
|
||||
credentials: AuthCredentials;
|
||||
}
|
||||
) {
|
||||
// apply the credentials
|
||||
switch (credentials.type) {
|
||||
case "oauth2": {
|
||||
const authConfig = authentication[credentials.name];
|
||||
switch (authConfig.placement.in) {
|
||||
case "header": {
|
||||
fetch.headers[
|
||||
authConfig.placement.key
|
||||
] = `Bearer ${credentials.accessToken}`;
|
||||
return fetch;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "api_key": {
|
||||
const authConfig = authentication[credentials.name];
|
||||
if (authConfig.placement.in === "header") {
|
||||
let value = "";
|
||||
switch (authConfig.placement.type) {
|
||||
case "basic":
|
||||
value = `Basic ${credentials.api_key}`;
|
||||
break;
|
||||
case "bearer":
|
||||
value = `Bearer ${credentials.api_key}`;
|
||||
break;
|
||||
}
|
||||
fetch.headers[authConfig.placement.key] = value;
|
||||
}
|
||||
return fetch;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error("Invalid credentials");
|
||||
}
|
||||
|
||||
type ScopesCheckResult =
|
||||
| {
|
||||
success: true;
|
||||
}
|
||||
| {
|
||||
success: false;
|
||||
missingScopes: string[];
|
||||
};
|
||||
|
||||
/** Check if the given credentials have the required scopes */
|
||||
export function checkRequiredScopes(
|
||||
requiredScopes: string[],
|
||||
credentials: AuthCredentials
|
||||
): ScopesCheckResult {
|
||||
const missingScopes = requiredScopes.filter(
|
||||
(scope) => !credentials.scopes.includes(scope)
|
||||
);
|
||||
|
||||
if (missingScopes.length > 0) {
|
||||
return {
|
||||
success: false,
|
||||
missingScopes,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import { z } from "zod";
|
||||
|
||||
export type IntegrationAuthentication = Record<
|
||||
string,
|
||||
AuthenticationDefinition
|
||||
>;
|
||||
|
||||
type AuthenticationDefinition = OAuth2Authentication | APIKeyAuthentication;
|
||||
|
||||
type OAuth2Authentication = {
|
||||
type: "oauth2";
|
||||
placement: AuthenticationPlacement;
|
||||
authorizationUrl: string;
|
||||
tokenUrl: string;
|
||||
flow: "accessCode" | "implicit" | "password" | "application";
|
||||
scopes: Record<string, string>;
|
||||
};
|
||||
|
||||
type APIKeyAuthentication = {
|
||||
type: "api_key";
|
||||
placement: AuthenticationPlacement;
|
||||
documentation: string;
|
||||
scopes: Record<string, string>;
|
||||
additionalFields?: {
|
||||
key: string;
|
||||
fieldType: "text";
|
||||
name: string;
|
||||
placeholder?: string;
|
||||
description: string;
|
||||
}[];
|
||||
};
|
||||
|
||||
type AuthenticationPlacement = HeaderAuthentication;
|
||||
|
||||
interface HeaderAuthentication {
|
||||
in: "header";
|
||||
type: "basic" | "bearer";
|
||||
key: string;
|
||||
}
|
||||
|
||||
const OAuth2CredentialsSchema = z.object({
|
||||
type: z.literal("oauth2"),
|
||||
name: z.string(),
|
||||
accessToken: z.string(),
|
||||
scopes: z.array(z.string()),
|
||||
});
|
||||
|
||||
const APIKeyCredentialsSchema = z.object({
|
||||
type: z.literal("api_key"),
|
||||
name: z.string(),
|
||||
api_key: z.string(),
|
||||
additionalFields: z.record(z.string(), z.string()).optional(),
|
||||
scopes: z.array(z.string()),
|
||||
});
|
||||
|
||||
export const AuthCredentialsSchema = z.discriminatedUnion("type", [
|
||||
OAuth2CredentialsSchema,
|
||||
APIKeyCredentialsSchema,
|
||||
]);
|
||||
|
||||
export type AuthCredentials = z.infer<typeof AuthCredentialsSchema>;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
export interface CacheService {
|
||||
get: (key: string) => Promise<string | null>;
|
||||
set: (key: string, value: string, ttl?: number) => Promise<void>;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { Service } from "./service/types";
|
||||
|
||||
export type Catalog = {
|
||||
services: Record<string, Service>;
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
import { IntegrationAuthentication } from "core/authentication/types";
|
||||
import { requestEndpoint } from "core/request/requestEndpoint";
|
||||
import { RequestData, RequestResponse, RequestSpec } from "core/request/types";
|
||||
import { Endpoint, EndpointSpec } from "./types";
|
||||
|
||||
export const makeEndpoint = (spec: RequestSpec) => {
|
||||
const request = async (data: RequestData) => {
|
||||
return await requestEndpoint(spec, data);
|
||||
};
|
||||
|
||||
return {
|
||||
spec,
|
||||
request,
|
||||
};
|
||||
};
|
||||
|
||||
export const makeEndpoints = <
|
||||
TSpecs extends Record<string, EndpointSpec>,
|
||||
K extends keyof TSpecs
|
||||
>(
|
||||
baseUrl: string,
|
||||
authentication: IntegrationAuthentication,
|
||||
specs: TSpecs
|
||||
): Record<K, Endpoint> => {
|
||||
const endpoints: any = {};
|
||||
|
||||
Object.entries(specs).forEach(([name, spec]) => {
|
||||
endpoints[name as K] = makeEndpoint({
|
||||
baseUrl,
|
||||
endpointSpec: spec,
|
||||
authentication,
|
||||
});
|
||||
});
|
||||
|
||||
return endpoints;
|
||||
};
|
||||
@@ -0,0 +1,78 @@
|
||||
import { RequestData, RequestResponse, RequestSpec } from "core/request/types";
|
||||
import { JSONSchema } from "core/schemas/types";
|
||||
import { z } from "zod";
|
||||
|
||||
export type Endpoint = {
|
||||
spec: RequestSpec;
|
||||
request: (data: RequestData) => Promise<RequestResponse>;
|
||||
};
|
||||
|
||||
export const HTTPMethodSchema = z.union([
|
||||
z.literal("GET"),
|
||||
z.literal("POST"),
|
||||
z.literal("PUT"),
|
||||
z.literal("PATCH"),
|
||||
z.literal("DELETE"),
|
||||
z.literal("HEAD"),
|
||||
z.literal("OPTIONS"),
|
||||
z.literal("TRACE"),
|
||||
]);
|
||||
|
||||
export type HTTPMethod = z.infer<typeof HTTPMethodSchema>;
|
||||
|
||||
export interface EndpointSpec {
|
||||
path: string;
|
||||
method: HTTPMethod;
|
||||
metadata: EndpointSpecMetadata;
|
||||
parameters?: EndpointSpecParameter[];
|
||||
security?: Record<string, string[]>;
|
||||
request: EndpointSpecRequest;
|
||||
responses: EndpointSpecResponse[];
|
||||
}
|
||||
|
||||
export interface EndpointSpecParameter {
|
||||
name: string;
|
||||
description: string;
|
||||
in: "query" | "path" | "header";
|
||||
required?: boolean;
|
||||
schema: JSONSchema;
|
||||
}
|
||||
|
||||
interface EndpointSpecRequest {
|
||||
headers?: Record<string, string>;
|
||||
body?: {
|
||||
schema: JSONSchema;
|
||||
};
|
||||
}
|
||||
|
||||
export interface EndpointSpecResponse {
|
||||
/** If you return true then this response is the relevant one */
|
||||
matches: ({
|
||||
statusCode,
|
||||
headers,
|
||||
body,
|
||||
}: {
|
||||
statusCode: number;
|
||||
headers: Record<string, string>;
|
||||
body: any;
|
||||
}) => boolean;
|
||||
success: boolean;
|
||||
name: string;
|
||||
description?: string;
|
||||
schema?: JSONSchema;
|
||||
}
|
||||
|
||||
export interface EndpointSpecMetadata {
|
||||
name: string;
|
||||
description: string;
|
||||
displayProperties: {
|
||||
title: string;
|
||||
};
|
||||
externalDocs?: ExternalDocs;
|
||||
tags: string[];
|
||||
}
|
||||
|
||||
interface ExternalDocs {
|
||||
description: string;
|
||||
url: string;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import { RequestResponse } from "core/request/types";
|
||||
import { type Response } from "node-fetch";
|
||||
|
||||
export async function getFetch() {
|
||||
return (await import("node-fetch")).default;
|
||||
}
|
||||
|
||||
export async function safeGetJson(response: Response) {
|
||||
try {
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeHeaders(headers: Headers): Record<string, string> {
|
||||
const normalizedHeaders: Record<string, string> = {};
|
||||
|
||||
headers.forEach((value, key) => {
|
||||
normalizedHeaders[key.toLowerCase()] = value;
|
||||
});
|
||||
|
||||
return normalizedHeaders;
|
||||
}
|
||||
|
||||
export function responseFromCaughtError(error: any): RequestResponse {
|
||||
if (error instanceof Error) {
|
||||
return {
|
||||
success: false,
|
||||
status: 400,
|
||||
headers: {},
|
||||
body: { error: error.message },
|
||||
};
|
||||
}
|
||||
|
||||
//convert the error into JSON
|
||||
return {
|
||||
success: false,
|
||||
status: 400,
|
||||
headers: {},
|
||||
body: { error },
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { authentication } from "integrations/airtable/authentication";
|
||||
import { startNock, stopNock } from "testing/nock";
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { serviceFetch } from "./serviceFetch";
|
||||
const authToken = () => process.env.AIRTABLE_TOKEN ?? "";
|
||||
|
||||
describe("serviceFetch", async () => {
|
||||
test("simple GET", async () => {
|
||||
const accessToken = authToken();
|
||||
|
||||
const nockDone = await startNock("serviceFetch.simple.get");
|
||||
const response = await serviceFetch({
|
||||
url: "https://api.airtable.com/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/recHcnB1MbBr9Rd2P",
|
||||
method: "GET",
|
||||
authentication: authentication,
|
||||
credentials: {
|
||||
type: "oauth2",
|
||||
name: "oauth",
|
||||
accessToken,
|
||||
scopes: ["data.records:read"],
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.status).toEqual(200);
|
||||
expect(response.success).toEqual(true);
|
||||
expect(response.body).not.toBeNull();
|
||||
stopNock(nockDone);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,73 @@
|
||||
import { addCredentialsToConfig } from "core/authentication/credentials";
|
||||
import {
|
||||
AuthCredentials,
|
||||
IntegrationAuthentication,
|
||||
} from "core/authentication/types";
|
||||
import { HTTPMethod } from "core/endpoint/types";
|
||||
import { FetchConfig, RequestResponse } from "core/request/types";
|
||||
import {
|
||||
getFetch,
|
||||
normalizeHeaders,
|
||||
responseFromCaughtError,
|
||||
safeGetJson,
|
||||
} from "./fetchUtilities";
|
||||
|
||||
export type ServiceFetchOptions = {
|
||||
url: string;
|
||||
method: HTTPMethod;
|
||||
headers?: Record<string, string>;
|
||||
body?: any;
|
||||
authentication: IntegrationAuthentication;
|
||||
credentials?: AuthCredentials;
|
||||
};
|
||||
|
||||
export async function serviceFetch({
|
||||
url,
|
||||
method = "GET",
|
||||
headers,
|
||||
body,
|
||||
credentials,
|
||||
authentication,
|
||||
}: ServiceFetchOptions): Promise<RequestResponse> {
|
||||
let fetchConfig: FetchConfig = {
|
||||
url,
|
||||
method,
|
||||
headers: {
|
||||
...headers,
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
};
|
||||
|
||||
if (credentials == null) {
|
||||
throw {
|
||||
type: "missing_credentials",
|
||||
};
|
||||
}
|
||||
|
||||
fetchConfig = addCredentialsToConfig(fetchConfig, {
|
||||
authentication,
|
||||
credentials,
|
||||
});
|
||||
|
||||
const fetchObject = {
|
||||
method: fetchConfig.method,
|
||||
headers: fetchConfig.headers,
|
||||
body: fetchConfig.body,
|
||||
};
|
||||
|
||||
try {
|
||||
const fetch = await getFetch();
|
||||
const response = await fetch(url, fetchObject);
|
||||
|
||||
const json = await safeGetJson(response);
|
||||
|
||||
return {
|
||||
success: response.ok,
|
||||
status: response.status,
|
||||
headers: normalizeHeaders(response.headers),
|
||||
body: json,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return responseFromCaughtError(error);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import { JSONSchemaError } from "core/schemas/types";
|
||||
|
||||
export type RequestError =
|
||||
| RequestBodyInvalid
|
||||
| ParameterMissing
|
||||
| ParametersInvalid
|
||||
| ExtraParametersError
|
||||
| InsufficientScopesError
|
||||
| MissingResponseSpec
|
||||
| ResponseBodyInvalid
|
||||
| BodyMissing
|
||||
| MissingCredentialsError;
|
||||
|
||||
export interface RequestBodyInvalid {
|
||||
type: "request_body_invalid";
|
||||
errors: any[];
|
||||
}
|
||||
|
||||
export interface BodyMissing {
|
||||
type: "missing_body";
|
||||
}
|
||||
|
||||
export interface ParameterMissing {
|
||||
type: "missing_parameter";
|
||||
parameter: {
|
||||
name: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ParametersInvalid {
|
||||
type: "parameter_invalid";
|
||||
parameter: {
|
||||
name: string;
|
||||
value: any;
|
||||
};
|
||||
errors: JSONSchemaError[];
|
||||
}
|
||||
|
||||
export interface ExtraParametersError {
|
||||
type: "extra_parameters";
|
||||
parameters: Array<{
|
||||
name: string;
|
||||
value: any;
|
||||
}>;
|
||||
}
|
||||
|
||||
export interface MissingCredentialsError {
|
||||
type: "missing_credentials";
|
||||
}
|
||||
|
||||
export interface InsufficientScopesError {
|
||||
type: "insufficient_scopes";
|
||||
missingScopes: string[];
|
||||
}
|
||||
|
||||
export interface MissingResponseSpec {
|
||||
type: "no_response_spec";
|
||||
status: number;
|
||||
}
|
||||
|
||||
export interface ResponseBodyInvalid {
|
||||
type: "response_invalid";
|
||||
errors: Array<{ name: string; errors: JSONSchemaError[] }>;
|
||||
status: number;
|
||||
body?: any;
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
import { applyCredentials } from "core/authentication/credentials";
|
||||
import {
|
||||
getFetch,
|
||||
normalizeHeaders,
|
||||
responseFromCaughtError,
|
||||
safeGetJson,
|
||||
} from "core/fetch/fetchUtilities";
|
||||
import { JSONSchemaError } from "core/schemas/types";
|
||||
import {
|
||||
FetchConfig,
|
||||
RequestData,
|
||||
RequestResponse,
|
||||
RequestSpec,
|
||||
} from "./types";
|
||||
import * as Sentry from "@sentry/node";
|
||||
|
||||
export async function requestEndpoint(
|
||||
{ baseUrl, endpointSpec, authentication }: RequestSpec,
|
||||
{ parameters, body, credentials }: RequestData
|
||||
): Promise<RequestResponse> {
|
||||
const { method, security, request, responses } = endpointSpec;
|
||||
let path = endpointSpec.path;
|
||||
|
||||
// validate the request body
|
||||
if (body == null && request.body?.schema != null) {
|
||||
throw {
|
||||
type: "missing_body",
|
||||
};
|
||||
}
|
||||
|
||||
let headers: Record<string, string> = {};
|
||||
|
||||
// validate and add the parameters
|
||||
if (endpointSpec.parameters != null) {
|
||||
for (const parameter of endpointSpec.parameters) {
|
||||
const { name, in: location, required } = parameter;
|
||||
|
||||
// if the parameter is missing
|
||||
if (parameters === undefined || parameters[name] == null) {
|
||||
if (required) {
|
||||
throw {
|
||||
type: "missing_parameter",
|
||||
parameter: {
|
||||
name,
|
||||
},
|
||||
};
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const element = parameters[name];
|
||||
|
||||
//add the parameter
|
||||
switch (location) {
|
||||
case "path":
|
||||
path = path.replace(`{${name}}`, element as string);
|
||||
break;
|
||||
case "query": {
|
||||
if (parameter.schema?.type === "array") {
|
||||
const array = element as Array<string>;
|
||||
for (const item of array) {
|
||||
path = `${path}${path.includes("?") ? "&" : "?"}${name}=${item}`;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
path = `${path}${path.includes("?") ? "&" : "?"}${name}=${element}`;
|
||||
break;
|
||||
}
|
||||
case "header":
|
||||
headers = {
|
||||
...headers,
|
||||
[name]: `${element}`,
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// add headers from the config
|
||||
for (const name in request.headers) {
|
||||
if (Object.prototype.hasOwnProperty.call(request.headers, name)) {
|
||||
const element = request.headers[name];
|
||||
headers = {
|
||||
...headers,
|
||||
[name]: element,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// build the fetch config
|
||||
const url = `${baseUrl}${path}`;
|
||||
let fetchConfig: FetchConfig = {
|
||||
url,
|
||||
method,
|
||||
headers: {
|
||||
...headers,
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
};
|
||||
|
||||
// apply credentials
|
||||
if (security != null) {
|
||||
if (credentials == null) {
|
||||
throw {
|
||||
type: "missing_credentials",
|
||||
};
|
||||
}
|
||||
fetchConfig = applyCredentials(fetchConfig, {
|
||||
endpointSecurity: security,
|
||||
authentication,
|
||||
credentials,
|
||||
});
|
||||
}
|
||||
|
||||
// do the fetch and try get the JSON
|
||||
const fetchObject = {
|
||||
method: fetchConfig.method,
|
||||
headers: fetchConfig.headers,
|
||||
body: fetchConfig.body,
|
||||
};
|
||||
|
||||
try {
|
||||
const fetch = await getFetch();
|
||||
const response = await fetch(fetchConfig.url, fetchObject);
|
||||
const json = await safeGetJson(response);
|
||||
|
||||
const normalizedHeaders = normalizeHeaders(response.headers);
|
||||
|
||||
// start with the first response spec and loop through them, if one succeeds then return that
|
||||
const specErrors: Array<{ name: string; errors: JSONSchemaError[] }> = [];
|
||||
for (const spec of responses) {
|
||||
const isMatch = spec.matches({
|
||||
statusCode: response.status,
|
||||
headers: normalizedHeaders,
|
||||
body: json,
|
||||
});
|
||||
|
||||
if (!isMatch) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return {
|
||||
success: spec.success,
|
||||
status: response.status,
|
||||
headers: normalizedHeaders,
|
||||
body: json,
|
||||
};
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
//if it's a 2xx response, even if it fails validation we'll return it as a success
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
//we want to report this to Sentry though so we can improve the schemas
|
||||
Sentry.captureException({
|
||||
type: "response_invalid",
|
||||
baseUrl: baseUrl,
|
||||
spec: endpointSpec,
|
||||
status: response.status,
|
||||
body: json,
|
||||
errors: specErrors,
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
status: response.status,
|
||||
headers: normalizeHeaders(response.headers),
|
||||
body: json,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
throw {
|
||||
type: "no_response_spec",
|
||||
status: response.status,
|
||||
body: json,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return responseFromCaughtError(error);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import {
|
||||
IntegrationAuthentication,
|
||||
AuthCredentials,
|
||||
} from "core/authentication/types";
|
||||
import { HTTPMethod, EndpointSpec } from "core/endpoint/types";
|
||||
|
||||
export interface FetchConfig {
|
||||
url: string;
|
||||
method: HTTPMethod;
|
||||
headers: Record<string, string>;
|
||||
body?: any;
|
||||
}
|
||||
|
||||
export interface RequestSpec {
|
||||
baseUrl: string;
|
||||
endpointSpec: EndpointSpec;
|
||||
authentication: IntegrationAuthentication;
|
||||
}
|
||||
export interface RequestData {
|
||||
parameters?: Record<string, any>;
|
||||
body?: any;
|
||||
credentials?: AuthCredentials;
|
||||
}
|
||||
|
||||
export interface RequestResponse {
|
||||
success: boolean;
|
||||
status: number;
|
||||
headers?: Record<string, string>;
|
||||
body?: any;
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { AutoReffer } from "./autoReffer";
|
||||
import { JSONSchema } from "./types";
|
||||
|
||||
describe("autoReffer", async () => {
|
||||
test("simple", async () => {
|
||||
const schema: JSONSchema = {
|
||||
type: "object",
|
||||
properties: {
|
||||
type: {
|
||||
type: "string",
|
||||
const: "person",
|
||||
},
|
||||
person: {
|
||||
title: "Person",
|
||||
type: "object",
|
||||
properties: {
|
||||
email: {
|
||||
type: "string",
|
||||
},
|
||||
timezone: {
|
||||
type: "string",
|
||||
enum: [
|
||||
"Africa/Abidjan",
|
||||
"Africa/Accra",
|
||||
"Africa/Addis_Ababa",
|
||||
"Africa/Algiers",
|
||||
"Africa/Asmara",
|
||||
"Africa/Asmera",
|
||||
],
|
||||
},
|
||||
props: {
|
||||
anyOf: [
|
||||
{
|
||||
type: "object",
|
||||
properties: {
|
||||
first: {
|
||||
type: "string",
|
||||
},
|
||||
last: {
|
||||
type: "string",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
parent: {
|
||||
title: "Person",
|
||||
type: "object",
|
||||
properties: {
|
||||
email: {
|
||||
type: "string",
|
||||
},
|
||||
timezone: {
|
||||
type: "string",
|
||||
enum: [
|
||||
"Africa/Abidjan",
|
||||
"Africa/Accra",
|
||||
"Africa/Addis_Ababa",
|
||||
"Africa/Algiers",
|
||||
"Africa/Asmara",
|
||||
"Africa/Asmera",
|
||||
],
|
||||
},
|
||||
props: {
|
||||
anyOf: [
|
||||
{
|
||||
type: "object",
|
||||
properties: {
|
||||
first: {
|
||||
type: "string",
|
||||
},
|
||||
last: {
|
||||
type: "string",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
id: {
|
||||
type: "string",
|
||||
},
|
||||
tz: {
|
||||
type: "string",
|
||||
enum: [
|
||||
"Africa/Abidjan",
|
||||
"Africa/Accra",
|
||||
"Africa/Addis_Ababa",
|
||||
"Africa/Algiers",
|
||||
"Africa/Asmara",
|
||||
"Africa/Asmera",
|
||||
],
|
||||
},
|
||||
},
|
||||
required: ["type", "person", "id"],
|
||||
additionalProperties: false,
|
||||
};
|
||||
|
||||
const autoReffer = new AutoReffer(schema);
|
||||
const optimizedSchema = autoReffer.optimize();
|
||||
|
||||
expect(optimizedSchema).toMatchInlineSnapshot(`
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"definitions": {
|
||||
"Person": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
},
|
||||
"props": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/Props",
|
||||
},
|
||||
],
|
||||
},
|
||||
"timezone": {
|
||||
"$ref": "#/definitions/Timezone",
|
||||
},
|
||||
},
|
||||
"title": "Person",
|
||||
"type": "object",
|
||||
},
|
||||
"Props": {
|
||||
"properties": {
|
||||
"first": {
|
||||
"type": "string",
|
||||
},
|
||||
"last": {
|
||||
"type": "string",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
"Timezone": {
|
||||
"enum": [
|
||||
"Africa/Abidjan",
|
||||
"Africa/Accra",
|
||||
"Africa/Addis_Ababa",
|
||||
"Africa/Algiers",
|
||||
"Africa/Asmara",
|
||||
"Africa/Asmera",
|
||||
],
|
||||
"type": "string",
|
||||
},
|
||||
},
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
},
|
||||
"parent": {
|
||||
"$ref": "#/definitions/Person",
|
||||
},
|
||||
"person": {
|
||||
"$ref": "#/definitions/Person",
|
||||
},
|
||||
"type": {
|
||||
"const": "person",
|
||||
"type": "string",
|
||||
},
|
||||
"tz": {
|
||||
"$ref": "#/definitions/Timezone",
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"type",
|
||||
"person",
|
||||
"id",
|
||||
],
|
||||
"type": "object",
|
||||
}
|
||||
`);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,222 @@
|
||||
import { JSONSchema } from "./types";
|
||||
import nodeObjectHash from "node-object-hash";
|
||||
import pointer from "json-pointer";
|
||||
|
||||
type JSONPointer = string[];
|
||||
const hasher = nodeObjectHash({ sort: true });
|
||||
|
||||
type Options = {
|
||||
refIfMoreThan: number;
|
||||
};
|
||||
|
||||
export class AutoReffer {
|
||||
#schemaPointers = new Map<string, JSONPointer[]>();
|
||||
#schema: JSONSchema;
|
||||
#options: Options;
|
||||
|
||||
constructor(schema: JSONSchema, options: Options = { refIfMoreThan: 2 }) {
|
||||
this.#schema = schema;
|
||||
this.#options = options;
|
||||
}
|
||||
|
||||
optimize() {
|
||||
this.#walk(this.#schema, []);
|
||||
const optimizedSchema = this.#addRefs();
|
||||
return optimizedSchema;
|
||||
}
|
||||
|
||||
#walk(schema: JSONSchema, pointer: JSONPointer) {
|
||||
if (schema.type === "object" || (schema.type === "string" && schema.enum)) {
|
||||
const hash = hasher.hash(schema);
|
||||
const existingPath = this.#schemaPointers.get(hash);
|
||||
if (existingPath) {
|
||||
existingPath.push(pointer);
|
||||
} else {
|
||||
this.#schemaPointers.set(hash, [pointer]);
|
||||
}
|
||||
}
|
||||
|
||||
if (schema.properties) {
|
||||
for (const [key, value] of Object.entries(schema.properties)) {
|
||||
if (typeof value === "boolean") continue;
|
||||
this.#walk(value, [...pointer, "properties", key]);
|
||||
}
|
||||
}
|
||||
|
||||
if (schema.items) {
|
||||
if (typeof schema.items === "boolean") return;
|
||||
this.#walk(schema.items, [...pointer, "items"]);
|
||||
}
|
||||
|
||||
if (schema.additionalProperties) {
|
||||
if (typeof schema.additionalProperties === "boolean") return;
|
||||
this.#walk(schema.additionalProperties, [
|
||||
...pointer,
|
||||
"additionalProperties",
|
||||
]);
|
||||
}
|
||||
|
||||
if (schema.allOf) {
|
||||
schema.allOf.forEach((item, index) => {
|
||||
this.#walk(item, [...pointer, "allOf", `${index}`]);
|
||||
});
|
||||
}
|
||||
|
||||
if (schema.anyOf) {
|
||||
schema.anyOf.forEach((item, index) => {
|
||||
this.#walk(item, [...pointer, "anyOf", `${index}`]);
|
||||
});
|
||||
}
|
||||
|
||||
if (schema.oneOf) {
|
||||
schema.oneOf.forEach((item, index) => {
|
||||
this.#walk(item, [...pointer, "oneOf", `${index}`]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#addRefs(): JSONSchema {
|
||||
const newSchema: JSONSchema = JSON.parse(JSON.stringify(this.#schema));
|
||||
//create definitions structure if it doesn't exist
|
||||
if (!newSchema.definitions) {
|
||||
newSchema.definitions = {};
|
||||
}
|
||||
|
||||
//turn the map into an array of [hash, pointers]
|
||||
const schemaPaths = Array.from(this.#schemaPointers.entries());
|
||||
|
||||
//filter out the ones that are not used more than the threshold
|
||||
const filteredSchemaPaths = schemaPaths.filter(
|
||||
([hash, pointers]) => pointers.length >= this.#options.refIfMoreThan
|
||||
);
|
||||
|
||||
//now flatten it to an array of pointers with name
|
||||
const names = new Set<string>();
|
||||
const pointers = filteredSchemaPaths.flatMap(([hash, pointers]) => {
|
||||
//the name must be unique
|
||||
const name = this.#inventName(pointers, newSchema, names);
|
||||
return pointers.map((p) => ({
|
||||
pointer: p,
|
||||
name: name,
|
||||
}));
|
||||
});
|
||||
|
||||
//now we want to sort them by their path, so we start out with the deepest ones in the tree
|
||||
const sortedPointers = pointers.sort((a, b) => {
|
||||
return b.pointer.join("/").localeCompare(a.pointer.join("/"));
|
||||
});
|
||||
|
||||
for (let index = 0; index < sortedPointers.length; index++) {
|
||||
const element = sortedPointers[index];
|
||||
try {
|
||||
const originalObject = pointer.get(newSchema, element.pointer);
|
||||
const ref = `#/definitions/${element.name}`;
|
||||
newSchema.definitions[element.name] = originalObject;
|
||||
|
||||
//set the ref
|
||||
pointer.set(newSchema, element.pointer, { $ref: ref });
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
return newSchema;
|
||||
}
|
||||
|
||||
#inventName(
|
||||
pointers: JSONPointer[],
|
||||
schema: JSONSchema,
|
||||
names: Set<string>
|
||||
): string {
|
||||
const candidates: string[] = [];
|
||||
for (const ptr of pointers) {
|
||||
try {
|
||||
const object = pointer.get(schema, ptr);
|
||||
if (object.title) {
|
||||
candidates.push(object.title);
|
||||
}
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
if (candidates.length > 0) {
|
||||
const mostCommon = mode(candidates);
|
||||
if (mostCommon) {
|
||||
const name = toTitleCase(mostCommon);
|
||||
if (!names.has(name)) {
|
||||
names.add(name);
|
||||
return name;
|
||||
}
|
||||
|
||||
//if the name is already taken, we need to add a number to it
|
||||
let i = 1;
|
||||
while (names.has(`${name}${i}`)) {
|
||||
i++;
|
||||
}
|
||||
names.add(`${name}${i}`);
|
||||
return `${name}${i}`;
|
||||
}
|
||||
}
|
||||
|
||||
//failing finding a title we can look at the path and try create a name from that
|
||||
const namesFromPointer = pointers.map((ptr) =>
|
||||
findAppropriateNameFromPointer(ptr)
|
||||
);
|
||||
|
||||
const mostCommon = mode(namesFromPointer);
|
||||
const name = toTitleCase(mostCommon ?? namesFromPointer[0]);
|
||||
if (!names.has(name)) {
|
||||
names.add(name);
|
||||
return name;
|
||||
}
|
||||
|
||||
//if the name is already taken, we need to add a number to it
|
||||
let i = 1;
|
||||
while (names.has(`${name}${i}`)) {
|
||||
i++;
|
||||
}
|
||||
names.add(`${name}${i}`);
|
||||
return `${name}${i}`;
|
||||
}
|
||||
}
|
||||
|
||||
function mode(arr: string[]) {
|
||||
return arr
|
||||
.sort(
|
||||
(a, b) =>
|
||||
arr.filter((v) => v === a).length - arr.filter((v) => v === b).length
|
||||
)
|
||||
.pop();
|
||||
}
|
||||
|
||||
//remove spaces and convert to TitleCase, deal with single words
|
||||
function toTitleCase(str: string) {
|
||||
return str
|
||||
.split(" ")
|
||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||
.join("");
|
||||
}
|
||||
|
||||
function nameIsJustNumbers(name: string | undefined) {
|
||||
if (!name) return false;
|
||||
return /^\d+$/.test(name);
|
||||
}
|
||||
|
||||
function findAppropriateNameFromPointer(pointer: JSONPointer): string {
|
||||
//start with the last segment and loop backwards
|
||||
for (let i = pointer.length - 1; i >= 0; i--) {
|
||||
const name = pointer[i];
|
||||
|
||||
if (name === "anyOf" || name === "oneOf" || name === "allOf") {
|
||||
continue;
|
||||
}
|
||||
|
||||
//check if the segment is a number, if so we need to look at the previous segment
|
||||
if (!nameIsJustNumbers(name)) {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
return "Item";
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
declare module "json-schema-deref-sync";
|
||||
@@ -0,0 +1,235 @@
|
||||
import { JSONSchema, JSONSchemaInstanceType } from "./types";
|
||||
|
||||
export function makeStringSchema(
|
||||
title: string,
|
||||
description?: string,
|
||||
options?: {
|
||||
defaultValue?: string;
|
||||
const?: string;
|
||||
enum?: string[];
|
||||
}
|
||||
): JSONSchema {
|
||||
const schema: JSONSchema = {
|
||||
type: "string",
|
||||
title,
|
||||
};
|
||||
|
||||
if (description) {
|
||||
schema.description = description;
|
||||
}
|
||||
|
||||
if (options?.defaultValue) {
|
||||
schema.default = options.defaultValue;
|
||||
}
|
||||
|
||||
if (options?.enum) {
|
||||
schema.enum = options.enum;
|
||||
}
|
||||
|
||||
if (options?.const) {
|
||||
schema.const = options.const;
|
||||
}
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
export function makeNumberSchema(
|
||||
title: string,
|
||||
description?: string,
|
||||
options?: {
|
||||
defaultValue: number;
|
||||
}
|
||||
): JSONSchema {
|
||||
const schema: JSONSchema = {
|
||||
type: "number",
|
||||
title,
|
||||
};
|
||||
|
||||
if (description) {
|
||||
schema.description = description;
|
||||
}
|
||||
|
||||
if (options?.defaultValue) {
|
||||
schema.default = options.defaultValue;
|
||||
}
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
export function makeBooleanSchema(
|
||||
title: string,
|
||||
description?: string,
|
||||
options?: {
|
||||
defaultValue?: boolean;
|
||||
enum?: boolean;
|
||||
const?: boolean;
|
||||
}
|
||||
): JSONSchema {
|
||||
const schema: JSONSchema = {
|
||||
title,
|
||||
type: "boolean",
|
||||
};
|
||||
|
||||
if (description) {
|
||||
schema.description = description;
|
||||
}
|
||||
|
||||
if (options?.defaultValue) {
|
||||
schema.default = options.defaultValue;
|
||||
}
|
||||
|
||||
if (options?.enum) {
|
||||
schema.enum = [options.enum];
|
||||
}
|
||||
|
||||
if (options?.const) {
|
||||
schema.const = options.const;
|
||||
}
|
||||
|
||||
return schema;
|
||||
}
|
||||
|
||||
export function makeArraySchema(title: string, items: JSONSchema): JSONSchema {
|
||||
return {
|
||||
type: "array",
|
||||
title,
|
||||
items,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeObjectSchema(
|
||||
title: string,
|
||||
options: {
|
||||
optionalProperties?: Record<string, JSONSchema>;
|
||||
requiredProperties?: Record<string, JSONSchema>;
|
||||
additionalProperties?: boolean | JSONSchema;
|
||||
}
|
||||
): JSONSchema {
|
||||
let properties: Record<string, JSONSchema> | undefined = undefined;
|
||||
|
||||
if (options.optionalProperties || options.requiredProperties) {
|
||||
properties = {};
|
||||
}
|
||||
|
||||
if (options.optionalProperties) {
|
||||
properties = {
|
||||
...properties,
|
||||
...options.optionalProperties,
|
||||
};
|
||||
}
|
||||
|
||||
if (options.requiredProperties) {
|
||||
properties = {
|
||||
...properties,
|
||||
...options.requiredProperties,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
type: "object",
|
||||
title,
|
||||
properties,
|
||||
required: options.requiredProperties
|
||||
? Object.keys(options.requiredProperties)
|
||||
: undefined,
|
||||
additionalProperties: options.additionalProperties,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeRecordSchema(
|
||||
title: string,
|
||||
schema: JSONSchema
|
||||
): JSONSchema {
|
||||
return {
|
||||
type: "object",
|
||||
title,
|
||||
additionalProperties: schema,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeNull(): JSONSchema {
|
||||
return {
|
||||
type: "null",
|
||||
};
|
||||
}
|
||||
|
||||
export function makeOneOf(title: string, schemas: JSONSchema[]): JSONSchema {
|
||||
return {
|
||||
title,
|
||||
oneOf: schemas,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeAnyOf(title: string, schemas: JSONSchema[]): JSONSchema {
|
||||
return {
|
||||
title,
|
||||
anyOf: schemas,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeNullable(schema: JSONSchema): JSONSchema {
|
||||
//if there's no existing type then we need to create an anyOf with null
|
||||
if (!schema.type) {
|
||||
return {
|
||||
title: schema.title,
|
||||
description: schema.description,
|
||||
anyOf: [
|
||||
{
|
||||
type: "null",
|
||||
},
|
||||
schema,
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
//if there is a type then we can add the "null" type to it
|
||||
let combinedTypes: JSONSchemaInstanceType[] = [];
|
||||
switch (typeof schema.type) {
|
||||
case "string":
|
||||
combinedTypes = [schema.type, "null"];
|
||||
break;
|
||||
case "object":
|
||||
combinedTypes = [...schema.type, "null"];
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Invalid schema type: ${typeof schema.type}`);
|
||||
}
|
||||
|
||||
return {
|
||||
...schema,
|
||||
type: combinedTypes,
|
||||
};
|
||||
}
|
||||
|
||||
export function makeAllPropertiesOptional(schema: JSONSchema): JSONSchema {
|
||||
if (schema.type !== "object") {
|
||||
throw new Error("Schema must be an object");
|
||||
}
|
||||
|
||||
if (!schema.properties) {
|
||||
throw new Error("Schema must have properties");
|
||||
}
|
||||
|
||||
return {
|
||||
...schema,
|
||||
required: [],
|
||||
};
|
||||
}
|
||||
|
||||
export function makePropertiesOptional(
|
||||
schema: JSONSchema,
|
||||
properties: string[]
|
||||
): JSONSchema {
|
||||
if (schema.type !== "object") {
|
||||
throw new Error("Schema must be an object");
|
||||
}
|
||||
|
||||
if (!schema.properties) {
|
||||
throw new Error("Schema must have properties");
|
||||
}
|
||||
|
||||
return {
|
||||
...schema,
|
||||
required: schema.required?.filter((p) => !properties.includes(p)),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { expect, test } from "vitest";
|
||||
import spec from "./test-openapi-spec-v2.json";
|
||||
import { dereferenceSpec, schemaFromOpenApiSpecV2 } from "./openApi";
|
||||
|
||||
test("Returns the correct schema", async () => {
|
||||
const dereferenced = dereferenceSpec(spec);
|
||||
const schema = schemaFromOpenApiSpecV2(
|
||||
dereferenced,
|
||||
"/paths//conversations.list/get/responses/200/schema"
|
||||
);
|
||||
expect(schema.type).toEqual("object");
|
||||
expect(schema.additionalProperties).toEqual(false);
|
||||
});
|
||||
@@ -0,0 +1,15 @@
|
||||
import deref from "json-schema-deref-sync";
|
||||
import pointer from "json-pointer";
|
||||
import { type JSONSchema } from "./types";
|
||||
|
||||
export function dereferenceSpec(spec: any): any {
|
||||
return deref(spec);
|
||||
}
|
||||
|
||||
// todo validate that it's a valid json schema
|
||||
export function schemaFromOpenApiSpecV2(spec: any, path: string): JSONSchema {
|
||||
// we need to escape the path because it contains ~ and / characters
|
||||
path = path.replace(/~/g, "~0").replace(/\/\//g, "/~1");
|
||||
const schema = pointer.get(spec as pointer.JsonObject, path);
|
||||
return schema;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
import { Schema, InstanceType } from "@cfworker/json-schema";
|
||||
import { ErrorObject } from "ajv";
|
||||
|
||||
export type JSONSchema = Schema;
|
||||
export type JSONSchemaInstanceType = InstanceType;
|
||||
export type JSONSchemaError = ErrorObject;
|
||||
@@ -0,0 +1,122 @@
|
||||
import { JSONSchema, JSONSchemaError } from "./types";
|
||||
import nodeObjectHash from "node-object-hash";
|
||||
import Ajv from "ajv";
|
||||
import { performance, PerformanceObserver } from "perf_hooks";
|
||||
|
||||
//setup performance tracking
|
||||
const perfObserver = new PerformanceObserver((items) => {
|
||||
return;
|
||||
});
|
||||
perfObserver.observe({ entryTypes: ["measure"], buffered: true });
|
||||
|
||||
const ajv = new Ajv({
|
||||
strict: false,
|
||||
logger: false,
|
||||
});
|
||||
|
||||
type SuccessResult = {
|
||||
success: true;
|
||||
};
|
||||
|
||||
type FailureResult = {
|
||||
success: false;
|
||||
errors: JSONSchemaError[];
|
||||
};
|
||||
|
||||
export async function validate(
|
||||
data: any,
|
||||
schema?: JSONSchema
|
||||
): Promise<SuccessResult | FailureResult> {
|
||||
try {
|
||||
if (schema === undefined) {
|
||||
return {
|
||||
success: true as const,
|
||||
};
|
||||
}
|
||||
|
||||
if (data === undefined) {
|
||||
return {
|
||||
success: false as const,
|
||||
errors: [
|
||||
{
|
||||
keyword: "undefined",
|
||||
instancePath: "undefined",
|
||||
schemaPath: "undefined",
|
||||
params: {},
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
performance.mark("get-validator-start");
|
||||
const validator = getValidator(schema);
|
||||
performance.mark("get-validator-end");
|
||||
|
||||
performance.mark("validate-start");
|
||||
const result = validator(data);
|
||||
performance.mark("validate-end");
|
||||
|
||||
const getValidatorPerformance = performance.measure(
|
||||
"get-validator",
|
||||
"get-validator-start",
|
||||
"get-validator-end"
|
||||
);
|
||||
const validatePerformance = performance.measure(
|
||||
"validate",
|
||||
"validate-start",
|
||||
"validate-end"
|
||||
);
|
||||
|
||||
if (process.env.SHOW_PERFORMANCE_TESTS === "true") {
|
||||
console.log("validate benchmarks:", {
|
||||
getValidator: getValidatorPerformance.duration,
|
||||
validate: validatePerformance.duration,
|
||||
});
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
return {
|
||||
success: false as const,
|
||||
errors: validator.errors ?? [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true as const,
|
||||
};
|
||||
} catch (e: any) {
|
||||
console.error(e);
|
||||
return {
|
||||
success: false as const,
|
||||
errors: [
|
||||
{
|
||||
keyword: "undefined",
|
||||
instancePath: "undefined",
|
||||
schemaPath: "undefined",
|
||||
params: {},
|
||||
message: e.toString(),
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
//we are going to has the schemas and use that as the key to find the cached validator
|
||||
const hasher = nodeObjectHash({ sort: false });
|
||||
|
||||
function getValidator(schema: JSONSchema) {
|
||||
const hash = hasher.hash(schema);
|
||||
|
||||
// get the validator from the cache, if it doesn't exist, add it to the cache
|
||||
let validator = ajv.getSchema(hash);
|
||||
if (validator === undefined) {
|
||||
ajv.addSchema(schema, hash);
|
||||
validator = ajv.getSchema(hash);
|
||||
}
|
||||
|
||||
if (validator === undefined) {
|
||||
throw new Error("Could not get validator");
|
||||
}
|
||||
|
||||
return validator;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Action } from "core/action/types";
|
||||
import { IntegrationAuthentication } from "core/authentication/types";
|
||||
|
||||
export type Service = {
|
||||
name: string;
|
||||
service: string;
|
||||
version: string;
|
||||
baseUrl: string;
|
||||
live: boolean;
|
||||
authentication: IntegrationAuthentication;
|
||||
actions: Record<string, Action>;
|
||||
retryableStatusCodes: number[];
|
||||
};
|
||||
@@ -0,0 +1,97 @@
|
||||
import { InputSpec } from "core/action/types";
|
||||
import { checkRequiredScopes } from "core/authentication/credentials";
|
||||
import { RequestError } from "core/request/errors";
|
||||
import { RequestData, RequestSpec } from "core/request/types";
|
||||
import { validate } from "core/schemas/validate";
|
||||
|
||||
type ValidationResult =
|
||||
| {
|
||||
success: true;
|
||||
}
|
||||
| {
|
||||
success: false;
|
||||
error: RequestError;
|
||||
};
|
||||
|
||||
export async function validateInputs(
|
||||
inputSpec: InputSpec,
|
||||
{ parameters, body, credentials }: RequestData
|
||||
): Promise<ValidationResult> {
|
||||
if (inputSpec.security) {
|
||||
if (credentials === undefined) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "missing_credentials",
|
||||
},
|
||||
};
|
||||
}
|
||||
const requiredScopes = inputSpec.security[credentials.name] ?? [];
|
||||
const result = checkRequiredScopes(requiredScopes, credentials);
|
||||
|
||||
if (!result.success) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "insufficient_scopes",
|
||||
missingScopes: result.missingScopes,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// validate the request body exists if it should
|
||||
if (body == null && inputSpec.body != null) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "missing_body",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
//validate the parameters
|
||||
if (inputSpec.parameters != null) {
|
||||
for (const parameter of inputSpec.parameters) {
|
||||
const { name, required } = parameter;
|
||||
|
||||
// if the parameter is missing
|
||||
if (parameters === undefined || parameters[name] == null) {
|
||||
if (required) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "missing_parameter",
|
||||
parameter: {
|
||||
name,
|
||||
},
|
||||
},
|
||||
};
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const element = parameters[name];
|
||||
//validate the parameter against the schema
|
||||
const valid = await validate(element, parameter.schema);
|
||||
if (!valid.success) {
|
||||
return {
|
||||
success: false,
|
||||
error: {
|
||||
type: "parameter_invalid",
|
||||
parameter: {
|
||||
name,
|
||||
value: element,
|
||||
},
|
||||
errors: valid.errors,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
};
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,75 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://slack.com:443",
|
||||
"method": "GET",
|
||||
"path": "/api/conversations.list?limit=3",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": [
|
||||
"13a10900e45a2e5f5f662b462e26151762c481e859dbffffde6956a4097eb37f02aa77df7d8db575e3fea335752c0a039e145027e3d40b2d00eba4129d035425d78756f60ba204af170b1f86483c07dee72fe4317870e818d6cdc59b7d081878c0287860ab6e19cd3bf225f61be1bc2382ac0003f2e24cce767358bdc5ff27e6efe91e15d4cecfa8a6aaeaa6eeeaf667d1c49ef8fb383a0c655532f02ae7e5e72c8ac21662b52b9fbf2ed41ddc25fcc145a24ddfb1d411d84be8b4ff04dbb1b7b63ebf31fc3bfed0b427f133131f2a9ed4f65f9d87833bea7962df1dcbb40c575534c5b0150ce8e822c38f0726b8c1a31775894ab417e0d9318cb3c3335335424a29fa12934fe2d87ceefa561a8129f271cb7784f29485b4fd55e0491abc5f00ce6df0e046706922da1285233d68fe538d002f132a1be061b31db24c20e0de211ded031dfdc7403381cc3efb633986e2d0cae55b25863e82922a674915308c922049729e62948938a552fde834122d2af230a4ad5404eb6368268695184d5a6b371a5b02166f21265a49a688495cc46831de9149e52d1de762e84a357473940f6c7da403cff8c744e37194d39b870b86ef4f71a40ab47210eafedec73fa66bb99aa36aaa6acc30179aa4d4548102cec5c0a3e46de9484720aa1fd1458a057d8fa70eb30d722b62ad1bfdaf51732b0c120ad5261e0936adc6e03e980bf5b38efe852022fc10052d45ff3cb4e9a73bcca22c88540219b11b9ff60572714c9e4bede4f2e2fa97ef83a8cfa3a06aeb94601a99baa6d96693b436663171fddf9a64af46731d453115ddd0d4d9b7d5af35e352b56742300a313884c29056bed452699f53febf3154c19949cfb0d0f7301142aadafa91c1303d001ec4a72f59f8541fdd1e3d3cbc3c7f0437caf536fcff03"
|
||||
],
|
||||
"rawHeaders": [
|
||||
"date",
|
||||
"Sat, 18 Feb 2023 16:06:41 GMT",
|
||||
"server",
|
||||
"Apache",
|
||||
"x-powered-by",
|
||||
"HHVM/4.153.1",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"referrer-policy",
|
||||
"no-referrer",
|
||||
"x-slack-backend",
|
||||
"r",
|
||||
"x-slack-unique-id",
|
||||
"Y_D3kQScXBLeo8CcHpwldgAAECY",
|
||||
"strict-transport-security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-headers",
|
||||
"slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags",
|
||||
"access-control-expose-headers",
|
||||
"x-slack-req-id, retry-after",
|
||||
"x-oauth-scopes",
|
||||
"channels:read,channels:join,channels:manage,chat:write,groups:write,im:write,mpim:write,chat:write.customize,reactions:write",
|
||||
"x-accepted-oauth-scopes",
|
||||
"channels:read,groups:read,mpim:read,im:read,read",
|
||||
"expires",
|
||||
"Mon, 26 Jul 1997 05:00:00 GMT",
|
||||
"cache-control",
|
||||
"private, no-cache, no-store, must-revalidate",
|
||||
"pragma",
|
||||
"no-cache",
|
||||
"x-xss-protection",
|
||||
"0",
|
||||
"x-content-type-options",
|
||||
"nosniff",
|
||||
"x-slack-req-id",
|
||||
"10d2571cfa8e50b57c91d537221aff81",
|
||||
"vary",
|
||||
"Accept-Encoding",
|
||||
"content-encoding",
|
||||
"br",
|
||||
"content-length",
|
||||
"654",
|
||||
"content-type",
|
||||
"application/json; charset=utf-8",
|
||||
"x-envoy-upstream-service-time",
|
||||
"118",
|
||||
"x-backend",
|
||||
"main_normal main_canary_with_overflow main_control_with_overflow",
|
||||
"x-server",
|
||||
"slack-www-hhvm-main-iad-cxtr",
|
||||
"x-slack-shared-secret-outcome",
|
||||
"no-match",
|
||||
"via",
|
||||
"envoy-www-iad-scsk, envoy-edge-lhr-csok",
|
||||
"x-edge-backend",
|
||||
"envoy-www",
|
||||
"x-slack-edge-shared-secret-outcome",
|
||||
"no-match",
|
||||
"connection",
|
||||
"close"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"fields": {
|
||||
"Employee": "Employee single create"
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"id": "recY9ZLK96wNBblmo",
|
||||
"createdTime": "2023-02-18T17:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee single create"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:05:53 GMT",
|
||||
"Content-Type",
|
||||
"120",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=uxQV2kzjELpFGUscnluykIVz7XOSrD1HxCYqoKdrnnPDt2Djy+EBfTKTDx4p0fAh1qD5c3/jRM2bCy9rhptozXyMsWOCDL7v2H3E6VRso6pGZm+kmcdzFjjoIO36; Expires=Sat, 25 Feb 2023 17:05:53 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=uxQV2kzjELpFGUscnluykIVz7XOSrD1HxCYqoKdrnnPDt2Djy+EBfTKTDx4p0fAh1qD5c3/jRM2bCy9rhptozXyMsWOCDL7v2H3E6VRso6pGZm+kmcdzFjjoIO36; Expires=Sat, 25 Feb 2023 17:05:53 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwL5hqTq5iBqCg9Q; path=/; expires=Sun, 18 Feb 2024 17:05:53 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"114"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,73 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"records": [
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "Employee #1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "Employee #2"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recGy1FsSzQnQ1Q5G",
|
||||
"createdTime": "2023-02-18T17:05:09.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee #1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recfrk4NonMC37k3q",
|
||||
"createdTime": "2023-02-18T17:05:09.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee #2"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:05:09 GMT",
|
||||
"Content-Type",
|
||||
"145",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=S3w+xLzGuJ4YZa7uQpSGEZYmk2IXTVlsJ9yVl+E2aUbEW5BtGoPl4lNa9pwXEpNvI29HEMTQgpuOXAnvfTFKzm+ot6y2DAQJwqa1nDNgQVRZ2z6lNn602nx0ebhI; Expires=Sat, 25 Feb 2023 17:05:08 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=S3w+xLzGuJ4YZa7uQpSGEZYmk2IXTVlsJ9yVl+E2aUbEW5BtGoPl4lNa9pwXEpNvI29HEMTQgpuOXAnvfTFKzm+ot6y2DAQJwqa1nDNgQVRZ2z6lNn602nx0ebhI; Expires=Sat, 25 Feb 2023 17:05:08 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brw7GK0C3hS9Fnih9; path=/; expires=Sun, 18 Feb 2024 17:05:08 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"221"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,97 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"fields": {
|
||||
"Employee": "Delete now #3"
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"id": "recyubpGhZWle9GOS",
|
||||
"createdTime": "2023-02-18T17:25:39.000Z",
|
||||
"fields": {
|
||||
"Employee": "Delete now #3"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:25:38 GMT",
|
||||
"Content-Type",
|
||||
"121",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=jt7yHA1t0HaG6Wp2xE4aJWZdQ59coYaZrRwqp8gwZmizt1A1N1H+xEqqycwyHEJtuK/6Rvc5FGcWdsJZQD2kbg5MSS0aropskjuOcOWICRp4+IHNWdYH5Osmcfre; Expires=Sat, 25 Feb 2023 17:25:38 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=jt7yHA1t0HaG6Wp2xE4aJWZdQ59coYaZrRwqp8gwZmizt1A1N1H+xEqqycwyHEJtuK/6Rvc5FGcWdsJZQD2kbg5MSS0aropskjuOcOWICRp4+IHNWdYH5Osmcfre; Expires=Sat, 25 Feb 2023 17:25:38 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwoFcsjVo3nFDHPT; path=/; expires=Sun, 18 Feb 2024 17:25:38 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"105"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
},
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "DELETE",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/recyubpGhZWle9GOS",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"deleted": true,
|
||||
"id": "recyubpGhZWle9GOS"
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:25:39 GMT",
|
||||
"Content-Type",
|
||||
"59",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=SjG+vAIOeCRwgx9Zhi7bVWiFG0acnh1G6+u2nL+ZUfo+4ON1RPjGdhX41SiaekKoYBmW2oCbSynCYAXKGnQjJYaOmPFAeIkml0VZuXSCv1Jm8P2PsXR+DoKIvZTk; Expires=Sat, 25 Feb 2023 17:25:39 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=SjG+vAIOeCRwgx9Zhi7bVWiFG0acnh1G6+u2nL+ZUfo+4ON1RPjGdhX41SiaekKoYBmW2oCbSynCYAXKGnQjJYaOmPFAeIkml0VZuXSCv1Jm8P2PsXR+DoKIvZTk; Expires=Sat, 25 Feb 2023 17:25:39 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwUynCRjs24wfp6Z; path=/; expires=Sun, 18 Feb 2024 17:25:39 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"41"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,125 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"records": [
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "Delete now #1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "Delete now #2"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recTR6YLOshwwyi1O",
|
||||
"createdTime": "2023-02-18T17:22:12.000Z",
|
||||
"fields": {
|
||||
"Employee": "Delete now #1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recuQVL2gpUjN64py",
|
||||
"createdTime": "2023-02-18T17:22:12.000Z",
|
||||
"fields": {
|
||||
"Employee": "Delete now #2"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:22:12 GMT",
|
||||
"Content-Type",
|
||||
"154",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=IAMzoMptPLC7k7rWXTocxJiu8ciJvbHqD17c0EPaM38k1FkzA/zW7S+tRKK6LOzrVFyLL8GUgFtdfDGFELrQ8uO1bADYnEiB4vfOAXjRwSBA2Dc61N3O+MIWMdnM; Expires=Sat, 25 Feb 2023 17:22:12 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=IAMzoMptPLC7k7rWXTocxJiu8ciJvbHqD17c0EPaM38k1FkzA/zW7S+tRKK6LOzrVFyLL8GUgFtdfDGFELrQ8uO1bADYnEiB4vfOAXjRwSBA2Dc61N3O+MIWMdnM; Expires=Sat, 25 Feb 2023 17:22:12 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwFID6JiyKkz2OUb; path=/; expires=Sun, 18 Feb 2024 17:22:12 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"225"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
},
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "DELETE",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m?records=recTR6YLOshwwyi1O&records=recuQVL2gpUjN64py",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"deleted": true,
|
||||
"id": "recTR6YLOshwwyi1O"
|
||||
},
|
||||
{
|
||||
"deleted": true,
|
||||
"id": "recuQVL2gpUjN64py"
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 17:22:13 GMT",
|
||||
"Content-Type",
|
||||
"91",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=psOMBihmNThSHe+ZEkpP1CKmbhnepN53OlaE2Eyi0zBUDOzM7dHGR7ptEm8ebKfpyqDolVl93quNNO44wwIfZqZHuSPVGyZsJWJoM2FsHY4G4HaFCJZoPEkqRFFs; Expires=Sat, 25 Feb 2023 17:22:12 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=psOMBihmNThSHe+ZEkpP1CKmbhnepN53OlaE2Eyi0zBUDOzM7dHGR7ptEm8ebKfpyqDolVl93quNNO44wwIfZqZHuSPVGyZsJWJoM2FsHY4G4HaFCJZoPEkqRFFs; Expires=Sat, 25 Feb 2023 17:22:12 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwq5X9BQFhfFj5lr; path=/; expires=Sun, 18 Feb 2024 17:22:12 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"97"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,79 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/recHcnB1MbBr9Rd2P",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Faith Butterworth",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/0Hy62Ommo3C1BR3r_TsIMw/xGdMUGBUycsvzqjCPHlIuKyvUCM_Y6InDa7Bz15pCaGtWXyue5BlHYak_kFJYmgVXbgvWAXkaigRk7xdcUHiZU66F33CrAUP36ihAFT3-eU/-_khPf6Rh8P9uLt3Oc55HupkyS000nORrpvZpY1bKwI",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/MlmaPKrIg1yOj_qipSwKhg/fVQ5W7QtoxoAszvbIHT2dksddzWQi2ETkCewMXRSY2NIiX6wD1LWuC6d4VICHwRCz_6sKW4vhwZ1vkScFYpcgQ/Iy8lz5HcTKpTrG8gBq4fQJRyPAdnfYrwn3u05_lovmc",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/BBIfL5Oqc8BAHkugmNUkXA/JygSzSF9lLJi1U1dP1xCpH1QTSJwxb2FRvJssEdxZubfzVIa9iofsOn5HKsIFLuPl2K3yYCvaxAD3ZsHa7WCig/Rpbg9vWTPa6-oxoPUO4gqkOBFHzadVBHEZhjJoIu6Y8",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/xlrKts_ACw09qLqsAW16EQ/qrDMlQpI1cVdPCe0uw6ZJw9FeZCcwenmFzZ317qbsO0q8ZY2DY5k-bpPFYBaS4KkqztczIOqdnCBIYiuJ3_wqA/4LU_0QW7hp8Rw828Z_ov3GNcZa86pywziLdQy364XXE",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 16:02:10 GMT",
|
||||
"Content-Type",
|
||||
"872",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=PhNLtNqLT//gbRBjRTywLiyg0lY3ZGo9Q2LLwOqLnAwsXcrRIaaELYV7A+s2lJlrAsid5UKIKld15Jq1nLyroXxAcFPd3vcbq6ku7tK7LE8HnOQiaMOV9gOoxqoa; Expires=Sat, 25 Feb 2023 16:02:10 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=PhNLtNqLT//gbRBjRTywLiyg0lY3ZGo9Q2LLwOqLnAwsXcrRIaaELYV7A+s2lJlrAsid5UKIKld15Jq1nLyroXxAcFPd3vcbq6ku7tK7LE8HnOQiaMOV9gOoxqoa; Expires=Sat, 25 Feb 2023 16:02:10 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwuEVkvPW1vATlmC; path=/; expires=Sun, 18 Feb 2024 16:02:10 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"1320"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/listRecords",
|
||||
"body": {
|
||||
"timeZone": "America/Los_Angeles",
|
||||
"userLocale": "en",
|
||||
"sort": [
|
||||
{
|
||||
"field": "Employee",
|
||||
"direction": "asc"
|
||||
}
|
||||
],
|
||||
"fields": [
|
||||
"Employee"
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recWhRejYoDn5CNsB",
|
||||
"createdTime": "2023-01-23T07:46:46.000Z",
|
||||
"fields": {}
|
||||
},
|
||||
{
|
||||
"id": "recFeH8y7qLNR6CxB",
|
||||
"createdTime": "2023-01-22T23:15:09.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee 7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recRo4MuSqRcb33pp",
|
||||
"createdTime": "2023-01-23T00:48:36.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee 9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Faith Butterworth"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recbKWDa9URtGWIGG",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Harley Holbrook"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rec3cPi3z4s6oe9SD",
|
||||
"createdTime": "2023-01-22T23:51:21.000Z",
|
||||
"fields": {
|
||||
"Employee": "Jimmy dean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recGPicQa5yIo9dBY",
|
||||
"createdTime": "2023-01-22T19:22:05.000Z",
|
||||
"fields": {
|
||||
"Employee": "Matt Aitken"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recElL0yiCgIEVcyc",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Quinn Nguyen"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 16:24:53 GMT",
|
||||
"Content-Type",
|
||||
"338",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=4+PtBWlCPjGrIo2V0YEi8J0ogkebmIOEMfx8TOaOhZvHsaXUZ1TQV+5DlPbCxYxrXoXbbP/F0iRXc3qLGC8LVtm5VIkxt0NDhBENoLsdbBAWF1bbmlOs2DM3N+k3; Expires=Sat, 25 Feb 2023 16:24:53 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=4+PtBWlCPjGrIo2V0YEi8J0ogkebmIOEMfx8TOaOhZvHsaXUZ1TQV+5DlPbCxYxrXoXbbP/F0iRXc3qLGC8LVtm5VIkxt0NDhBENoLsdbBAWF1bbmlOs2DM3N+k3; Expires=Sat, 25 Feb 2023 16:24:53 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brw4B3gkaAL97bpKd; path=/; expires=Sun, 18 Feb 2024 16:24:53 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"829"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,218 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/listRecords",
|
||||
"body": {},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "rec3cPi3z4s6oe9SD",
|
||||
"createdTime": "2023-01-22T23:51:21.000Z",
|
||||
"fields": {
|
||||
"Employee": "Jimmy dean",
|
||||
"Phone": "7778",
|
||||
"Employee type": "Employee",
|
||||
"Manager": {
|
||||
"id": "usrpWV6yqSVvzVO0j",
|
||||
"email": "matt@trigger.dev",
|
||||
"name": "Matt Aitken"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recElL0yiCgIEVcyc",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Quinn Nguyen",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "attx14Pa1lP0DMgRw",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/5gbGs-cRWoOC46FxBWQZKw/ph_QI1srGvvZArxOz207bnKOs-xlIXF8ZqMlk5ssMr-jbiMuFfXOjmjadjOACGFRyQ9nE59Dpy7540UU_6bpgsQ_tMKtCFaaf2a4ieIPEEU/ptI5mq4oczxmmrz-RRWb3MSegywNfAwWf--9mL5IT34",
|
||||
"filename": "headshot-pink-1.png",
|
||||
"size": 215411,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/3bEGb1n_oJxadHpHMcDg_w/1Mga_f3JNzLtWq_an_E7I98CxejzOpiALmDJHRdI0XcBbVwIv-vzj96mY-XeAL0W32Q_WCQPu4TqWzisnlqLYg/7pJLZzaspSp1339lIgp1o1Nb1durOAoIx-IflDRI8gY",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/7Xr67It2dJ296uYyumST1g/HH8QTjlaP0frLwscoJy3vJLvOdKwz1zHL_ll8zMtfFkm1uFB9-nRkA09YeSojhemScYjpvIB7OoxJTh3lqU-jQ/8jtF2js5F47hndbxts2_ZIFZaxkuq3G0BxbomG1wRDA",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/O1xGv0NoeaGTVYYDxpZnuQ/IBXER_7M4O9QqAmv_9pF2evdf5_9YzeVmdzk3Rsi2gFaK6ueREni-Kaw6Xg8VORqFpHNtUQ7JrV_5Ya4zhSuXg/VAGl2IqW98-D0E1RgBretLYJCmNCDqledVmdTrUOEIU",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Employee"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recFeH8y7qLNR6CxB",
|
||||
"createdTime": "2023-01-22T23:15:09.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee 7",
|
||||
"Phone": "342567",
|
||||
"Employee type": "Contractor",
|
||||
"Manager": {
|
||||
"id": "usrpWV6yqSVvzVO0j",
|
||||
"email": "matt@trigger.dev",
|
||||
"name": "Matt Aitken"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recGPicQa5yIo9dBY",
|
||||
"createdTime": "2023-01-22T19:22:05.000Z",
|
||||
"fields": {
|
||||
"Employee": "Matt Aitken",
|
||||
"Phone": "12345678",
|
||||
"Employee type": "Employee",
|
||||
"Manager": {
|
||||
"id": "usrpWV6yqSVvzVO0j",
|
||||
"email": "matt@trigger.dev",
|
||||
"name": "Matt Aitken"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Faith Butterworth",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/xV5UysTMWXnI9p8E8KMTlA/Ov21BA--8-n8JC_sH7-sx_Iub_aXA1PGiVAohUAhE5SuEtqSMGhN39pRHI3tmu3LqEh8iDz8pTZ_TdWHVV8riCTBPEm8NvvD3o6BtJTRXcE/LJjYfS0Wh_KMcmkgL-82HOLXyhhDHnMsFvrqL1OCtXQ",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/L9WFjSk92HlOH9RDdrP7MA/7AgbUc3M9KuDz5plvUFL5dsRwt55PiqcnPvoDIawWfk0w_N4GDZPTPDiiqxFOsUMNOk4CB1RuBZFFLNEfu0bRA/RYcp3x_oGgLtvOi7CtUplGM_rmU-EdbBQ5zdcr7L-Yo",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/Zl-Thn_JCnnb_-j9CpJ0lg/9hIAzhles7CH7n0EgRzrg-_qVCz1G6oHXX8M7A70KVUBy3Ttnc1NwoSKLMj7JxmYkqc8hYCRU4qRA_S22sS1cw/BhQLDmDmMAUd4sUaxVfTbHnxPGJD9q0_NPB3l7rYz4o",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/4E18KjffN_36eSJ65hCEFg/1_ts6X0NwupOAEyHnehE_hy5ROdSOt1jODcXv5Cny3Wn4O5r3Ewl3vgsg3Lebkwv40iJo7tbtblZEdtZMecpJA/GBgtTGmld0ZH7_4FygTqipHkEpQVn4dt3CmGBnOo6Wc",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recRo4MuSqRcb33pp",
|
||||
"createdTime": "2023-01-23T00:48:36.000Z",
|
||||
"fields": {
|
||||
"Employee": "Employee 9",
|
||||
"Phone": "12345678",
|
||||
"Employee type": "Employee",
|
||||
"Manager": {
|
||||
"id": "usrpWV6yqSVvzVO0j",
|
||||
"email": "matt@trigger.dev",
|
||||
"name": "Matt Aitken"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recWhRejYoDn5CNsB",
|
||||
"createdTime": "2023-01-23T07:46:46.000Z",
|
||||
"fields": {}
|
||||
},
|
||||
{
|
||||
"id": "recbKWDa9URtGWIGG",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "Harley Holbrook",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "attIMHgGEnN0YutyM",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/Fz00EH3JBLCN7V_swur5cg/p3tx8jWcy5175n6bvK9aCabwdIfMur6wDrly_X6A8cL6YnO5JBKK0YJW1EjrEzjCtkj0uJ0PAS4lbwD2hMsKlKUZjopUmDegHLnms_ucOxE/6HP7Qw3GHTGiAmHUM21jHC5fhLcyfTrlD9qrs35a9-I",
|
||||
"filename": "headshot-yellow-2.png",
|
||||
"size": 349926,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/Cyg5kaW38cKzs03TbM-X3g/8omtIQVimV1MrD9PPtj2SaAlOA3CxuCdqHWoVPxi6UELMV2w7EhFv9Ko3WexIF5bcQyd9-N4RLFGvd5__VgP6A/suCIwJkTLliZrHLwioXIUqnrkJ7gIOxtNrdQtkDrBjk",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/g3EV5PxrbBETRQ9Qzn5WYg/rloz8wROtoNA6Ab9HEykJEmHtnmqUzxnnksoNJU7Y1NjeoV6dQQQZxLTjQBYJukBQfil4EXI8b_ejtARnkANhw/RwNwembhBCNpNJPThTWE_Fae3KtNvBQf-nDboeTP06c",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676743200000/hFdCcDELa9Y1qNU8ynA-gA/rY9pKGsa3U-i95eAYUT9qPkXhakhXNpWaWBOKsKSSvmc0MFERzMvBTQ9X6hfBBOWdJNPm2ewSI5qaMk1OqdDYg/IVswNEnsz2QWGQtpfHLGHHaAZEWVam08gd7vSXPVMOI",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "On leave"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 15:58:57 GMT",
|
||||
"Content-Type",
|
||||
"2247",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=eKX9sqNvujzmAJZfcbDUrm7NlI8Xe9niXH7mrVhWbrGQZxHi9a8M9cKLI067MCp0mv5UfHVCEeUvkQbnHW8lB/LQwpch1qdox/a0c+J5kcVIGXWLH8zOB6pv2t42; Expires=Sat, 25 Feb 2023 15:58:57 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=eKX9sqNvujzmAJZfcbDUrm7NlI8Xe9niXH7mrVhWbrGQZxHi9a8M9cKLI067MCp0mv5UfHVCEeUvkQbnHW8lB/LQwpch1qdox/a0c+J5kcVIGXWLH8zOB6pv2t42; Expires=Sat, 25 Feb 2023 15:58:57 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwJiIPgBOUtNPjri; path=/; expires=Sun, 18 Feb 2024 15:58:57 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"4968"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,83 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/recHcnB1MbBr9Rd2P",
|
||||
"body": {
|
||||
"fields": {
|
||||
"Employee": "John Doe II"
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "John Doe II",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/0Hy62Ommo3C1BR3r_TsIMw/xGdMUGBUycsvzqjCPHlIuKyvUCM_Y6InDa7Bz15pCaGtWXyue5BlHYak_kFJYmgVXbgvWAXkaigRk7xdcUHiZU66F33CrAUP36ihAFT3-eU/-_khPf6Rh8P9uLt3Oc55HupkyS000nORrpvZpY1bKwI",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/MlmaPKrIg1yOj_qipSwKhg/fVQ5W7QtoxoAszvbIHT2dksddzWQi2ETkCewMXRSY2NIiX6wD1LWuC6d4VICHwRCz_6sKW4vhwZ1vkScFYpcgQ/Iy8lz5HcTKpTrG8gBq4fQJRyPAdnfYrwn3u05_lovmc",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/BBIfL5Oqc8BAHkugmNUkXA/JygSzSF9lLJi1U1dP1xCpH1QTSJwxb2FRvJssEdxZubfzVIa9iofsOn5HKsIFLuPl2K3yYCvaxAD3ZsHa7WCig/Rpbg9vWTPa6-oxoPUO4gqkOBFHzadVBHEZhjJoIu6Y8",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/xlrKts_ACw09qLqsAW16EQ/qrDMlQpI1cVdPCe0uw6ZJw9FeZCcwenmFzZ317qbsO0q8ZY2DY5k-bpPFYBaS4KkqztczIOqdnCBIYiuJ3_wqA/4LU_0QW7hp8Rw828Z_ov3GNcZa86pywziLdQy364XXE",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 16:56:09 GMT",
|
||||
"Content-Type",
|
||||
"868",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=2CpHsb1CL3MMw3hBwb9rVw+mR1QJ7rNbVnCS1fkDNEEi3FM0b4jSEGQ0FhjkIkdkQfLhOMrCXK95XbgEImuhWJuv4FKNdOIk6hNaJawWjFq6kh/mOMlFi7HU8r8h; Expires=Sat, 25 Feb 2023 16:56:09 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=2CpHsb1CL3MMw3hBwb9rVw+mR1QJ7rNbVnCS1fkDNEEi3FM0b4jSEGQ0FhjkIkdkQfLhOMrCXK95XbgEImuhWJuv4FKNdOIk6hNaJawWjFq6kh/mOMlFi7HU8r8h; Expires=Sat, 25 Feb 2023 16:56:09 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwP6XoEdwHyGdxxZ; path=/; expires=Sun, 18 Feb 2024 16:56:09 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"1314"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,92 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"fields": {
|
||||
"Employee": "John Doe"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "John Doe",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/0Hy62Ommo3C1BR3r_TsIMw/xGdMUGBUycsvzqjCPHlIuKyvUCM_Y6InDa7Bz15pCaGtWXyue5BlHYak_kFJYmgVXbgvWAXkaigRk7xdcUHiZU66F33CrAUP36ihAFT3-eU/-_khPf6Rh8P9uLt3Oc55HupkyS000nORrpvZpY1bKwI",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/MlmaPKrIg1yOj_qipSwKhg/fVQ5W7QtoxoAszvbIHT2dksddzWQi2ETkCewMXRSY2NIiX6wD1LWuC6d4VICHwRCz_6sKW4vhwZ1vkScFYpcgQ/Iy8lz5HcTKpTrG8gBq4fQJRyPAdnfYrwn3u05_lovmc",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/BBIfL5Oqc8BAHkugmNUkXA/JygSzSF9lLJi1U1dP1xCpH1QTSJwxb2FRvJssEdxZubfzVIa9iofsOn5HKsIFLuPl2K3yYCvaxAD3ZsHa7WCig/Rpbg9vWTPa6-oxoPUO4gqkOBFHzadVBHEZhjJoIu6Y8",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/xlrKts_ACw09qLqsAW16EQ/qrDMlQpI1cVdPCe0uw6ZJw9FeZCcwenmFzZ317qbsO0q8ZY2DY5k-bpPFYBaS4KkqztczIOqdnCBIYiuJ3_wqA/4LU_0QW7hp8Rw828Z_ov3GNcZa86pywziLdQy364XXE",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 16:46:03 GMT",
|
||||
"Content-Type",
|
||||
"870",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=aRijGYsG1c7HW7/3PfA+iqX9yfDtsVgoPBVm4dkHcigHjt0gpNbzI/GN4nVRaRPorF1fOAE0jRrIREfxlnx9YcqQP097XI6IpF109sT5W5dRnY6rzb2gyGS93Vhn; Expires=Sat, 25 Feb 2023 16:46:03 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=aRijGYsG1c7HW7/3PfA+iqX9yfDtsVgoPBVm4dkHcigHjt0gpNbzI/GN4nVRaRPorF1fOAE0jRrIREfxlnx9YcqQP097XI6IpF109sT5W5dRnY6rzb2gyGS93Vhn; Expires=Sat, 25 Feb 2023 16:46:03 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwkAO755Iu5BkpXR; path=/; expires=Sun, 18 Feb 2024 16:46:03 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"1325"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,114 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m",
|
||||
"body": {
|
||||
"performUpsert": {
|
||||
"fieldsToMergeOn": [
|
||||
"Employee"
|
||||
]
|
||||
},
|
||||
"records": [
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "John Doe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fields": {
|
||||
"Employee": "Jane Doe"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"records": [
|
||||
{
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "John Doe",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/0Hy62Ommo3C1BR3r_TsIMw/xGdMUGBUycsvzqjCPHlIuKyvUCM_Y6InDa7Bz15pCaGtWXyue5BlHYak_kFJYmgVXbgvWAXkaigRk7xdcUHiZU66F33CrAUP36ihAFT3-eU/-_khPf6Rh8P9uLt3Oc55HupkyS000nORrpvZpY1bKwI",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/MlmaPKrIg1yOj_qipSwKhg/fVQ5W7QtoxoAszvbIHT2dksddzWQi2ETkCewMXRSY2NIiX6wD1LWuC6d4VICHwRCz_6sKW4vhwZ1vkScFYpcgQ/Iy8lz5HcTKpTrG8gBq4fQJRyPAdnfYrwn3u05_lovmc",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/BBIfL5Oqc8BAHkugmNUkXA/JygSzSF9lLJi1U1dP1xCpH1QTSJwxb2FRvJssEdxZubfzVIa9iofsOn5HKsIFLuPl2K3yYCvaxAD3ZsHa7WCig/Rpbg9vWTPa6-oxoPUO4gqkOBFHzadVBHEZhjJoIu6Y8",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676750400000/xlrKts_ACw09qLqsAW16EQ/qrDMlQpI1cVdPCe0uw6ZJw9FeZCcwenmFzZ317qbsO0q8ZY2DY5k-bpPFYBaS4KkqztczIOqdnCBIYiuJ3_wqA/4LU_0QW7hp8Rw828Z_ov3GNcZa86pywziLdQy364XXE",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "recpyQHEcTiiwzAAe",
|
||||
"createdTime": "2023-02-18T16:49:12.000Z",
|
||||
"fields": {
|
||||
"Employee": "Jane Doe"
|
||||
}
|
||||
}
|
||||
],
|
||||
"updatedRecords": [
|
||||
"recHcnB1MbBr9Rd2P"
|
||||
],
|
||||
"createdRecords": [
|
||||
"recpyQHEcTiiwzAAe"
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sat, 18 Feb 2023 16:49:12 GMT",
|
||||
"Content-Type",
|
||||
"931",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=/B2FI/4JzHLz69XGh0fnXEzIHT58xav2z9CRaJPk/mxxK+IPKjzX/Kd13DU/uJsnD5QcWRgFZjepxA7s8HoojMSUw3+Vkav3Db4mPcly8wQXp88r5BEUjDvFso9o; Expires=Sat, 25 Feb 2023 16:49:12 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=/B2FI/4JzHLz69XGh0fnXEzIHT58xav2z9CRaJPk/mxxK+IPKjzX/Kd13DU/uJsnD5QcWRgFZjepxA7s8HoojMSUw3+Vkav3Db4mPcly8wQXp88r5BEUjDvFso9o; Expires=Sat, 25 Feb 2023 16:49:12 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwsqrG8CnBxgniFg; path=/; expires=Sun, 18 Feb 2024 16:49:12 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"1504"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,78 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://slack.com:443",
|
||||
"method": "POST",
|
||||
"path": "/api/chat.postMessage",
|
||||
"body": {
|
||||
"channel": "C00AAAAAAAA",
|
||||
"text": "This channel doesn't exist, so message won't send"
|
||||
},
|
||||
"status": 200,
|
||||
"response": [
|
||||
"13270000045439f20ace64f1259fdc9ec3444e00b2e6817cef2beb4e3f1ab2011262c998a76bb93c"
|
||||
],
|
||||
"rawHeaders": [
|
||||
"date",
|
||||
"Sat, 18 Feb 2023 16:06:42 GMT",
|
||||
"server",
|
||||
"Apache",
|
||||
"x-powered-by",
|
||||
"HHVM/4.153.1",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"referrer-policy",
|
||||
"no-referrer",
|
||||
"x-slack-backend",
|
||||
"r",
|
||||
"x-slack-unique-id",
|
||||
"Y_D3kqn7oMaK4u0tyzhR0AAAEDY",
|
||||
"strict-transport-security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-headers",
|
||||
"slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags",
|
||||
"access-control-expose-headers",
|
||||
"x-slack-req-id, retry-after",
|
||||
"x-oauth-scopes",
|
||||
"channels:read,channels:join,channels:manage,chat:write,groups:write,im:write,mpim:write,chat:write.customize,reactions:write",
|
||||
"x-accepted-oauth-scopes",
|
||||
"chat:write",
|
||||
"expires",
|
||||
"Mon, 26 Jul 1997 05:00:00 GMT",
|
||||
"cache-control",
|
||||
"private, no-cache, no-store, must-revalidate",
|
||||
"pragma",
|
||||
"no-cache",
|
||||
"x-xss-protection",
|
||||
"0",
|
||||
"x-content-type-options",
|
||||
"nosniff",
|
||||
"x-slack-req-id",
|
||||
"ebbefac5397dbab5385db0aae08cf6b3",
|
||||
"vary",
|
||||
"Accept-Encoding",
|
||||
"content-encoding",
|
||||
"br",
|
||||
"content-length",
|
||||
"40",
|
||||
"content-type",
|
||||
"application/json; charset=utf-8",
|
||||
"x-envoy-upstream-service-time",
|
||||
"93",
|
||||
"x-backend",
|
||||
"main_normal main_canary_with_overflow main_control_with_overflow",
|
||||
"x-server",
|
||||
"slack-www-hhvm-main-iad-dihx",
|
||||
"x-slack-shared-secret-outcome",
|
||||
"no-match",
|
||||
"via",
|
||||
"envoy-www-iad-uqca, envoy-edge-lhr-ozbu",
|
||||
"x-edge-backend",
|
||||
"envoy-www",
|
||||
"x-slack-edge-shared-secret-outcome",
|
||||
"no-match",
|
||||
"connection",
|
||||
"close"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,78 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://slack.com:443",
|
||||
"method": "POST",
|
||||
"path": "/api/chat.postMessage",
|
||||
"body": {
|
||||
"channel": "C04GWUTDC3W",
|
||||
"text": "This the Trigger.dev integrations test"
|
||||
},
|
||||
"status": 200,
|
||||
"response": [
|
||||
"132a0300c4f7dfcd9f56ce9d9f9342c8d6f68b484575e2661a76992518653ed6029993da6eeb1ffccd5ee7345e3bb70b6a2dc047cc6a474c8790110b4b6112e38710141d5d7f7f7e5c14e36f28ac9610f8244dd23821e74d1688288302d2d790231ad355b5df82a0e0e8fa972e9eeeae73eef97ed686181b0ad73ce882605eae7aede863d1ef76db0bd36a6fa27fe9e317b9002e2360a92b8c47fc31049f8e6edce7e7ebcbcd1ba9a03e9b3101f2b01b4fd93d33e1da644bc8ff7161faf2553ea405e1dab9e6672888b8ed2456c3b4c796c43df1a8dab9fcc53ca1fa78c294ffe6b7c20bc170baaa060a937a4be63de7f627f531276273af355d3dd88e517b0185cce397a058db09ab71d2bca74b29d992ad9b657572babef0e99649c9b2cb3197da8159b25dbd5ab2f5d9ac64496a7192be18348e881e3192189d34d057f0f9d534a00667852a365b685402cac16b4132aa117b171387829075f67ae7f319"
|
||||
],
|
||||
"rawHeaders": [
|
||||
"date",
|
||||
"Sat, 18 Feb 2023 16:06:41 GMT",
|
||||
"server",
|
||||
"Apache",
|
||||
"x-powered-by",
|
||||
"HHVM/4.153.1",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"referrer-policy",
|
||||
"no-referrer",
|
||||
"x-slack-backend",
|
||||
"r",
|
||||
"x-slack-unique-id",
|
||||
"Y_D3kaZTOTsosPP4CQqdxwAAAD8",
|
||||
"strict-transport-security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-headers",
|
||||
"slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags",
|
||||
"access-control-expose-headers",
|
||||
"x-slack-req-id, retry-after",
|
||||
"x-oauth-scopes",
|
||||
"channels:read,channels:join,channels:manage,chat:write,groups:write,im:write,mpim:write,chat:write.customize,reactions:write",
|
||||
"x-accepted-oauth-scopes",
|
||||
"chat:write",
|
||||
"expires",
|
||||
"Mon, 26 Jul 1997 05:00:00 GMT",
|
||||
"cache-control",
|
||||
"private, no-cache, no-store, must-revalidate",
|
||||
"pragma",
|
||||
"no-cache",
|
||||
"x-xss-protection",
|
||||
"0",
|
||||
"x-content-type-options",
|
||||
"nosniff",
|
||||
"x-slack-req-id",
|
||||
"bd4f8b61920e9df75d67e4cfeb504ab9",
|
||||
"vary",
|
||||
"Accept-Encoding",
|
||||
"content-encoding",
|
||||
"br",
|
||||
"content-length",
|
||||
"351",
|
||||
"content-type",
|
||||
"application/json; charset=utf-8",
|
||||
"x-envoy-upstream-service-time",
|
||||
"141",
|
||||
"x-backend",
|
||||
"main_normal main_canary_with_overflow main_control_with_overflow",
|
||||
"x-server",
|
||||
"slack-www-hhvm-main-iad-mhht",
|
||||
"x-slack-shared-secret-outcome",
|
||||
"no-match",
|
||||
"via",
|
||||
"envoy-www-iad-qbeb, envoy-edge-lhr-vvct",
|
||||
"x-edge-backend",
|
||||
"envoy-www",
|
||||
"x-slack-edge-shared-secret-outcome",
|
||||
"no-match",
|
||||
"connection",
|
||||
"close"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,75 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://slack.com:443",
|
||||
"method": "GET",
|
||||
"path": "/api/conversations.list?limit=1",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": [
|
||||
"13b70300c4c8b67c7d337bad87225e710b16c4026732712e9d6da4139c5a54d3ce1324f223350ae881931e68f7fe6f2e24241b5ae4fce77333b3308328b0bdc4c2a6b0c47fd8fe99218bb08d13c7b0eeaf3fed1350d47ec5b10d59b12bca7aac133d4690f51821096e8017ee6455da533537753e31a7cf1f8a4134bc504d55d54dddd5edb6948833517f6a3b0cb0cc0dea32ab8b76a2c2b0c8a4d6b369799577425dd5010f896e52233616b8cbf8b8df824e74d5d5cf1fc5e9f8fd719fd94f603a045e61471fcef3f123a9795cbe1f966919aeaa688a612b14de3162df8f279060601b5ea44a20d17d8337c7302e4f2e4d558826a6c8229a3e6ec7f23bfa639a72cc9ae6e29f85125e05bc3b2a819318db3338ce776ce35ed4d248740b126c7a503e5423e15e3c991b886c598e5622e0ce7dc37abc6fe8684101b30acd3947bb1c13d3a154d39724844e2171995571e95794c47e1c677542492aa2844b4dee39115d926741c0bb52eec747642206ab11f9b5d631d92d819adefc4a7429f12192908486c57ab7442a76f9301383deac46a939aa07554cf5b06d2cfe028d6b812d9122d694e12ac0b13c8f7d9c6302b6115dbca7c16b73fa70fa64dc9d450f6f85d8c36201"
|
||||
],
|
||||
"rawHeaders": [
|
||||
"date",
|
||||
"Sat, 18 Feb 2023 16:06:42 GMT",
|
||||
"server",
|
||||
"Apache",
|
||||
"x-powered-by",
|
||||
"HHVM/4.153.1",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"referrer-policy",
|
||||
"no-referrer",
|
||||
"x-slack-backend",
|
||||
"r",
|
||||
"x-slack-unique-id",
|
||||
"Y_D3khlLQ9vqek922QY0uQAAECM",
|
||||
"strict-transport-security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-headers",
|
||||
"slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags",
|
||||
"access-control-expose-headers",
|
||||
"x-slack-req-id, retry-after",
|
||||
"x-oauth-scopes",
|
||||
"channels:read,channels:join,channels:manage,chat:write,groups:write,im:write,mpim:write,chat:write.customize,reactions:write",
|
||||
"x-accepted-oauth-scopes",
|
||||
"channels:read,groups:read,mpim:read,im:read,read",
|
||||
"expires",
|
||||
"Mon, 26 Jul 1997 05:00:00 GMT",
|
||||
"cache-control",
|
||||
"private, no-cache, no-store, must-revalidate",
|
||||
"pragma",
|
||||
"no-cache",
|
||||
"x-xss-protection",
|
||||
"0",
|
||||
"x-content-type-options",
|
||||
"nosniff",
|
||||
"x-slack-req-id",
|
||||
"c9ac7f0c1a73910e91a87a6cd3925462",
|
||||
"vary",
|
||||
"Accept-Encoding",
|
||||
"content-encoding",
|
||||
"br",
|
||||
"content-length",
|
||||
"452",
|
||||
"content-type",
|
||||
"application/json; charset=utf-8",
|
||||
"x-envoy-upstream-service-time",
|
||||
"115",
|
||||
"x-backend",
|
||||
"main_normal main_canary_with_overflow main_control_with_overflow",
|
||||
"x-server",
|
||||
"slack-www-hhvm-main-iad-bmkm",
|
||||
"x-slack-shared-secret-outcome",
|
||||
"no-match",
|
||||
"via",
|
||||
"envoy-www-iad-vpph, envoy-edge-lhr-tspo",
|
||||
"x-edge-backend",
|
||||
"envoy-www",
|
||||
"x-slack-edge-shared-secret-outcome",
|
||||
"no-match",
|
||||
"connection",
|
||||
"close"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,120 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v1/blocks/b4609033-b45a-4fc6-8d15-f06920495ab1/children",
|
||||
"body": {
|
||||
"children": [
|
||||
{
|
||||
"heading_1": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This new title is appended using appendBlockChildren()"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "list",
|
||||
"results": [
|
||||
{
|
||||
"object": "block",
|
||||
"id": "4c946f30-ebc2-4eed-bfbc-094226ae9659",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-27T11:22:00.000Z",
|
||||
"last_edited_time": "2023-02-27T11:22:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "heading_1",
|
||||
"heading_1": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This new title is appended using appendBlockChildren()",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "This new title is appended using appendBlockChildren()",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"is_toggleable": false,
|
||||
"color": "default"
|
||||
}
|
||||
}
|
||||
],
|
||||
"next_cursor": null,
|
||||
"has_more": false,
|
||||
"type": "block",
|
||||
"block": {}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:22:57 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=53f6ccf8-1698-4ece-ab61-a73987903c80; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:22:56 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"383-2rLMttu6Pq17KGfS6h8OoM7fsF0\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:22:56 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=VXShyz_MBH77_gf3gFuj9pOYT7KvZ0tAI1g76xSEsck-1677496977-0-AUaWjGjnwWhILvSEGODB1JprJBjZrmavjD0fIoD8o74Vdpn24iAC1GFwI+oEzZMuV8/3uv4uYpo9ZB8PP0HV/c4=; path=/; expires=Mon, 27-Feb-23 11:52:57 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,98 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v1/comments",
|
||||
"body": {
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"rich_text": [
|
||||
{
|
||||
"text": {
|
||||
"content": "Hello world"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "comment",
|
||||
"id": "6ff7c4ea-2666-4fe7-a256-56b43a73ea10",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"discussion_id": "81530ca2-4afa-44c0-b298-7fab0a72b563",
|
||||
"created_time": "2023-02-27T13:00:00.000Z",
|
||||
"last_edited_time": "2023-02-27T13:00:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Hello world",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Hello world",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 13:00:37 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=7bc1c0a7-d91d-4689-91b6-c883d992ffec; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 13:00:37 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"24c-39U+DEocpupSzxBZH1jvsL+yyfE\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 13:00:37 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=JdgeEvg_PUn_06.lvhPATrAM_WVGfxBXIcOghAm6Yr0-1677502837-0-AbYTmwFA+LHk4LeVThTqVragQppCTfC0TAHONeLrHzQP4RvMSSL92kGXM1mtAufkMHDcaHDftwzDCzLiKkGNOtg=; path=/; expires=Mon, 27-Feb-23 13:30:37 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,165 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v1/databases",
|
||||
"body": {
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "📝"
|
||||
},
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Trigger.dev created db",
|
||||
"link": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Name": {
|
||||
"title": {}
|
||||
},
|
||||
"Description": {
|
||||
"rich_text": {}
|
||||
},
|
||||
"In stock": {
|
||||
"checkbox": {}
|
||||
},
|
||||
"+1": {
|
||||
"people": {}
|
||||
},
|
||||
"Photo": {
|
||||
"files": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "database",
|
||||
"id": "8db50793-ac53-496b-bbff-a74be0fb78b4",
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "📝"
|
||||
},
|
||||
"created_time": "2023-02-27T12:03:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_time": "2023-02-27T12:03:00.000Z",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Trigger.dev created db",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Trigger.dev created db",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"description": [],
|
||||
"is_inline": false,
|
||||
"properties": {
|
||||
"Photo": {
|
||||
"id": "JvIM",
|
||||
"name": "Photo",
|
||||
"type": "files",
|
||||
"files": {}
|
||||
},
|
||||
"Description": {
|
||||
"id": "al%3E%3F",
|
||||
"name": "Description",
|
||||
"type": "rich_text",
|
||||
"rich_text": {}
|
||||
},
|
||||
"+1": {
|
||||
"id": "b%7DNi",
|
||||
"name": "+1",
|
||||
"type": "people",
|
||||
"people": {}
|
||||
},
|
||||
"In stock": {
|
||||
"id": "q%60gF",
|
||||
"name": "In stock",
|
||||
"type": "checkbox",
|
||||
"checkbox": {}
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"name": "Name",
|
||||
"type": "title",
|
||||
"title": {}
|
||||
}
|
||||
},
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"url": "https://www.notion.so/8db50793ac53496bbbffa74be0fb78b4",
|
||||
"archived": false
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 12:03:23 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=45d29e4b-e829-4c24-b6a4-6220d6103576; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 12:03:22 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"48b-o15ev/xDPCB+PMklXFEv7yjRNjg\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 12:03:22 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=oTxAMd2fa8cXyXzIAradg5hbvrWNohWvKiBn_nAAT.Q-1677499403-0-AcoKZ8MVXztc+eW5DoC2TGRVKUWQIgFsB8w8UHKbORoTp8Qw7uTk/efMwoQoW2BTGY6Qy4GJEn1P8iZ/DRsSLIA=; path=/; expires=Mon, 27-Feb-23 12:33:23 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,116 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v1/pages",
|
||||
"body": {
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"properties": {
|
||||
"title": {
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Test page"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "page",
|
||||
"id": "8bd3c664-d6ef-46af-9910-e22686eb997e",
|
||||
"created_time": "2023-02-26T17:38:00.000Z",
|
||||
"last_edited_time": "2023-02-26T17:38:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": null,
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"title": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Test page",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Test page",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Test-page-8bd3c664d6ef46af9910e22686eb997e"
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sun, 26 Feb 2023 17:38:03 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=0584f959-2ff5-46b1-9d5d-832c26040396; Domain=www.notion.so; Path=/; Expires=Mon, 26 Feb 2024 17:38:02 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"301-5q45Nq2W9keK4up4HOm5qUpzNKo\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon, 27 Feb 2023 17:38:02 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=MeS4vVeV5Sms1RFoqYUoJ.onoMrGFyS6M_b0rfN7aho-1677433083-0-AQTR+b9TQ5LWf2yEhTnFj4QFuWs/C0ySl36mDO9bwhQ2rnsR1I8wrFgFls6yg4BJuorZQBnYtmIw00LnCvDHTfA=; path=/; expires=Sun, 26-Feb-23 18:08:03 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,96 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "DELETE",
|
||||
"path": "/v1/blocks/4c946f30-ebc2-4eed-bfbc-094226ae9659",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "block",
|
||||
"id": "4c946f30-ebc2-4eed-bfbc-094226ae9659",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-27T11:22:00.000Z",
|
||||
"last_edited_time": "2023-02-27T11:26:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": true,
|
||||
"type": "heading_1",
|
||||
"heading_1": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This new title is appended using appendBlockChildren()",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "This new title is appended using appendBlockChildren()",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"is_toggleable": false,
|
||||
"color": "default"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:26:10 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=d7b221d7-718e-45a2-a11e-1406aa98975d; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:26:09 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"326-D6+1VY70vo6bSnfGivDXLQlR9sA\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:26:09 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=LargbK1gg7PjzvuUZu9DAsNpgc2zb3YdVGwgePQccYg-1677497170-0-Af8+5TWVeIgr9kq8MfM0cIPW6rO2QT0AA7cuyIFfJYni14Qvd5M0V+CkIF/Vrto9qbmPTD6L40sKr4fkr12MIkA=; path=/; expires=Mon, 27-Feb-23 11:56:10 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,76 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/blocks/b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "block",
|
||||
"id": "b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"parent": {
|
||||
"type": "workspace",
|
||||
"workspace": true
|
||||
},
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-27T09:19:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": true,
|
||||
"archived": false,
|
||||
"type": "child_page",
|
||||
"child_page": {
|
||||
"title": "Personal Home"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 09:26:00 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=5d40d8ce-14ac-4534-a52e-1fc1b79f6242; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 09:26:00 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"1bf-Xn6bRYmy8GO/bp7WIQLZCOHSxRw\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 09:26:00 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=xDv5oNogRgQN.m5YOrYBRu7vQPpAprpUNpqRES8Zbp8-1677489960-0-AS3KjttcIVVXJO5WedstOC9vc78EcmHw2kyHHdUTBVk3Uufe8/r5VygzgdKwS8XiDkYFQFYaMzvUMIcZwcXBNeE=; path=/; expires=Mon, 27-Feb-23 09:56:00 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,223 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/blocks/b4609033-b45a-4fc6-8d15-f06920495ab1/children",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "list",
|
||||
"results": [
|
||||
{
|
||||
"object": "block",
|
||||
"id": "2675c67d-392a-4b86-86f6-93de22c797bd",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "paragraph",
|
||||
"paragraph": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Organize everything in your life in one place.",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Organize everything in your life in one place.",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"color": "gray"
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"id": "f3df1513-efda-4caf-af5b-f08a0ebe3dfa",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"has_children": true,
|
||||
"archived": false,
|
||||
"type": "column_list",
|
||||
"column_list": {}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"id": "d843f4ae-6cc2-44df-a294-3d9405c950bb",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-26T17:36:00.000Z",
|
||||
"last_edited_time": "2023-02-26T17:36:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "child_page",
|
||||
"child_page": {
|
||||
"title": "Test page"
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"id": "026566db-b2a0-4d0a-96f1-1007fccc28df",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-26T17:37:00.000Z",
|
||||
"last_edited_time": "2023-02-26T17:37:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "child_page",
|
||||
"child_page": {
|
||||
"title": "Test page"
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"id": "8bd3c664-d6ef-46af-9910-e22686eb997e",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-26T17:38:00.000Z",
|
||||
"last_edited_time": "2023-02-26T17:38:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "child_page",
|
||||
"child_page": {
|
||||
"title": "Test page"
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "block",
|
||||
"id": "fe7ade22-66de-45fb-b3b5-4a467ff67d2b",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-26T17:38:00.000Z",
|
||||
"last_edited_time": "2023-02-26T17:38:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "paragraph",
|
||||
"paragraph": {
|
||||
"rich_text": [],
|
||||
"color": "default"
|
||||
}
|
||||
}
|
||||
],
|
||||
"next_cursor": null,
|
||||
"has_more": false,
|
||||
"type": "block",
|
||||
"block": {}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:09:36 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=86f94a88-a9d2-4e88-abf9-3d364583ad08; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:09:36 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"c9a-7ksTq1q+y6dBHZKFnoF7Xfgs/Fw\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:09:36 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=ipVUIrHFEqeTilNjmbfPoJKioZkTOB97pJd9mYe9zIk-1677496176-0-AZfFsUjfINaIHmGd5kPe0tqoBC2UgOqo1kL89YPsBd4fTQWgiJ5PdZFotvJdsHaXlUTyGswSb6HQO3kF6D7POjw=; path=/; expires=Mon, 27-Feb-23 11:39:36 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,75 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/users/me",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644",
|
||||
"name": "Trigger.dev (localhost)",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/b374368f-9f41-460a-bf8e-5e19f8fb0e07/td-square-logo_512.png",
|
||||
"type": "bot",
|
||||
"bot": {
|
||||
"owner": {
|
||||
"type": "user",
|
||||
"user": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4",
|
||||
"name": "Matt Aitken",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/0ccadce7-a4aa-4a69-92e6-2ac708593613/matt-wedding.jpg",
|
||||
"type": "person",
|
||||
"person": {
|
||||
"email": "matt@apihero.run"
|
||||
}
|
||||
}
|
||||
},
|
||||
"workspace_name": "Notion integration test workspace"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sun, 26 Feb 2023 17:03:48 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=9231cce8-e2ce-411c-b0e1-2597eb62b367; Domain=www.notion.so; Path=/; Expires=Mon, 26 Feb 2024 17:03:48 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"258-Y7OR6G0p0SWytfeYN6CvqKvsRr4\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon, 27 Feb 2023 17:03:48 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=bFtxnRN2taXobaLZvnlr6T3gU61eVngXy2I7_UV5sQs-1677431028-0-AVKDesaUNQBhdDqVjtHeh1Up5jm+pHl7pOcmzOpVMuUGHrrNulojcu6nNhI8Qp0hIs2e5m2DF/7wTh8dzT4KPOc=; path=/; expires=Sun, 26-Feb-23 17:33:48 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,95 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/comments?block_id=b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "list",
|
||||
"results": [
|
||||
{
|
||||
"object": "comment",
|
||||
"id": "6ff7c4ea-2666-4fe7-a256-56b43a73ea10",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"discussion_id": "81530ca2-4afa-44c0-b298-7fab0a72b563",
|
||||
"created_time": "2023-02-27T13:00:00.000Z",
|
||||
"last_edited_time": "2023-02-27T13:00:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Hello world",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Hello world",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"next_cursor": null,
|
||||
"has_more": false,
|
||||
"type": "comment",
|
||||
"comment": {}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 13:00:58 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=c81c8597-3ce1-47c0-8534-3d082e8bad6c; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 13:00:58 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"2ac-O+0+EDR87lnud1uk0Nv98XVEwRE\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 13:00:58 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=SZWrmwDFWsjiBWbj0XSJiw.u3NWFS5JHraec1hFlXTU-1677502858-0-AceoZDX4TcA2W/fyWOdl8ZvCnFibpJWx8CF8vLabqtJQK1ZqHHYc5yitwJd6ylJC1pCsnGxwqDtKKPSThXMs5Hc=; path=/; expires=Mon, 27-Feb-23 13:30:58 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,164 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/databases/0fadc732-4472-418c-83dc-04454332cb52",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "database",
|
||||
"id": "0fadc732-4472-418c-83dc-04454332cb52",
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "📓"
|
||||
},
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_time": "2023-02-24T19:09:00.000Z",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Journal",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Journal",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"description": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Document your life - daily happenings, special occasions, and reflections on your goals.\nCategorize entries with tags and automatically capture the date.\n\n↓ Click through the different database tabs to filter entries by a specific category such as daily or personal.",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Document your life - daily happenings, special occasions, and reflections on your goals.\nCategorize entries with tags and automatically capture the date.\n\n↓ Click through the different database tabs to filter entries by a specific category such as daily or personal.",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"is_inline": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"name": "Tags",
|
||||
"type": "multi_select",
|
||||
"multi_select": {
|
||||
"options": [
|
||||
{
|
||||
"id": "4322f3ac-635f-4d2f-808f-22d639bc393b",
|
||||
"name": "Daily",
|
||||
"color": "purple"
|
||||
},
|
||||
{
|
||||
"id": "00a58cba-c800-40cd-a8f1-6e42527b0a29",
|
||||
"name": "Special Event",
|
||||
"color": "yellow"
|
||||
},
|
||||
{
|
||||
"id": "f4cf83a1-4b72-494e-bbc7-4a3c5cbaca4e",
|
||||
"name": "Work",
|
||||
"color": "blue"
|
||||
},
|
||||
{
|
||||
"id": "b28c7f82-f6e4-4a72-a790-78585e7ead7e",
|
||||
"name": "Personal",
|
||||
"color": "red"
|
||||
},
|
||||
{
|
||||
"id": "7973659c-e670-44c5-95bd-ee8bea4410fe",
|
||||
"name": "Planning",
|
||||
"color": "orange"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"name": "Created",
|
||||
"type": "created_time",
|
||||
"created_time": {}
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"name": "Name",
|
||||
"type": "title",
|
||||
"title": {}
|
||||
}
|
||||
},
|
||||
"parent": {
|
||||
"type": "workspace",
|
||||
"workspace": true
|
||||
},
|
||||
"url": "https://www.notion.so/0fadc7324472418c83dc04454332cb52",
|
||||
"archived": false
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:31:56 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=b02dceea-7410-4b8b-9953-39e385a6602f; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:31:56 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"848-0VcVJU20PQNFJSOeYVumjc5lRqY\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:31:56 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=uuQBm38FV5ll_bzRt2ubDw9OzPXYBeijloNaM81LTJU-1677497516-0-AfW2IE7SMS9u4DCuJo99WPCqCycUNmDB75jASkaVcuA5lfUjhFko1coulGCEfqctYOnwFGsTRXkTUmhyigS0rIc=; path=/; expires=Mon, 27-Feb-23 12:01:56 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,107 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/pages/b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "page",
|
||||
"id": "b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:09:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": {
|
||||
"type": "external",
|
||||
"external": {
|
||||
"url": "https://www.notion.so/images/page-cover/met_horace_pippin.jpg"
|
||||
}
|
||||
},
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🏡"
|
||||
},
|
||||
"parent": {
|
||||
"type": "workspace",
|
||||
"workspace": true
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"title": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Personal Home",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Personal Home",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Personal-Home-b4609033b45a4fc68d15f06920495ab1"
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sun, 26 Feb 2023 17:03:49 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=837961ad-d90a-4d47-a6f1-ef58202dc051; Domain=www.notion.so; Path=/; Expires=Mon, 26 Feb 2024 17:03:49 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"36c-te9LAYsMgFb2lhvFvIZkYRlpBwU\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon, 27 Feb 2023 17:03:49 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=c4loqDfzCMnR_nUxqp_cUN9b64H5.AYvYzoiD2k3Dys-1677431029-0-AdU9UH0qjksRe8fwh1fJEjKmMC1iLs8At3ExpapYqTIt2++8Ygcgg/6mhzD8rEvFPpWIDSDdfXLmwEWtH2uWfPI=; path=/; expires=Sun, 26-Feb-23 17:33:49 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,62 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/users/cc18a80a-973f-42c4-8fed-a055f8ae31f4",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4",
|
||||
"name": "Matt Aitken",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/0ccadce7-a4aa-4a69-92e6-2ac708593613/matt-wedding.jpg",
|
||||
"type": "person",
|
||||
"person": {
|
||||
"email": "matt@apihero.run"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sun, 26 Feb 2023 17:03:48 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=7a2dbb41-36d9-4105-a02e-5d48c2b39738; Domain=www.notion.so; Path=/; Expires=Mon, 26 Feb 2024 17:03:48 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"109-LARZeHVPyOZD6oYu0o3lE/OaSIY\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon, 27 Feb 2023 17:03:48 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=.LPcUVtRskZYeQnmoXm3JleuCDBhDy5xttc1bB0ZAhU-1677431028-0-AZgnltB964z4cce5vJuH+ZKp7AA28R96OldVDfor3Gmp8BNHTuPud15UN9TMND7J18fL9Jeu1QBOsPuTBwuINGc=; path=/; expires=Sun, 26-Feb-23 17:33:48 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,94 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v1/users",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "list",
|
||||
"results": [
|
||||
{
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4",
|
||||
"name": "Matt Aitken",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/0ccadce7-a4aa-4a69-92e6-2ac708593613/matt-wedding.jpg",
|
||||
"type": "person",
|
||||
"person": {
|
||||
"email": "matt@apihero.run"
|
||||
}
|
||||
},
|
||||
{
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644",
|
||||
"name": "Trigger.dev (localhost)",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/b374368f-9f41-460a-bf8e-5e19f8fb0e07/td-square-logo_512.png",
|
||||
"type": "bot",
|
||||
"bot": {
|
||||
"owner": {
|
||||
"type": "user",
|
||||
"user": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4",
|
||||
"name": "Matt Aitken",
|
||||
"avatar_url": "https://s3-us-west-2.amazonaws.com/public.notion-static.com/0ccadce7-a4aa-4a69-92e6-2ac708593613/matt-wedding.jpg",
|
||||
"type": "person",
|
||||
"person": {
|
||||
"email": "matt@apihero.run"
|
||||
}
|
||||
}
|
||||
},
|
||||
"workspace_name": "Notion integration test workspace"
|
||||
}
|
||||
}
|
||||
],
|
||||
"next_cursor": null,
|
||||
"has_more": false,
|
||||
"type": "user",
|
||||
"user": {}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Sun, 26 Feb 2023 17:03:48 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=3f1b8498-f598-48f5-ae0e-909958b2d1a3; Domain=www.notion.so; Path=/; Expires=Mon, 26 Feb 2024 17:03:48 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"3bc-ykFfGm633jdplPzsTxjZ4jd6FvI\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Mon, 27 Feb 2023 17:03:48 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=JUbz0XQ9i6zPhxS0oIlWs64OPfsdvZRqasIXF2JnDbQ-1677431028-0-AVLucbFsDItX1PIHDRVIsLNIprkWZAJwGX7lOZsK48xoMeUPs3gFdaJEh1CXf5WYt4q62YwDMhlsHcPlW0kc7iA=; path=/; expires=Sun, 26-Feb-23 17:33:48 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,523 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v1/databases/0fadc732-4472-418c-83dc-04454332cb52/query",
|
||||
"body": {},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "list",
|
||||
"results": [
|
||||
{
|
||||
"object": "page",
|
||||
"id": "09b0be23-f79f-48e4-a24e-be483decd15b",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🎂"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "7973659c-e670-44c5-95bd-ee8bea4410fe",
|
||||
"name": "Planning",
|
||||
"color": "orange"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "28th Birthday",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "28th Birthday",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/28th-Birthday-09b0be23f79f48e4a24ebe483decd15b"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "1e26b51f-de7a-4f4f-a491-4217636b232e",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🥥"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "00a58cba-c800-40cd-a8f1-6e42527b0a29",
|
||||
"name": "Special Event",
|
||||
"color": "yellow"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Hawaii Vacation",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Hawaii Vacation",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Hawaii-Vacation-1e26b51fde7a4f4fa4914217636b232e"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "2726fedf-6d01-461a-990e-5238be7b7741",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "📋"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "f4cf83a1-4b72-494e-bbc7-4a3c5cbaca4e",
|
||||
"name": "Work",
|
||||
"color": "blue"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Job Search - September",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Job Search - September",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Job-Search-September-2726fedf6d01461a990e5238be7b7741"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "527fa387-5b64-4eb9-a60e-5382a2fc483b",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "✨"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "4322f3ac-635f-4d2f-808f-22d639bc393b",
|
||||
"name": "Daily",
|
||||
"color": "purple"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "So much to be grateful for",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "So much to be grateful for",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/So-much-to-be-grateful-for-527fa3875b644eb9a60e5382a2fc483b"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "5c2a75da-1b9c-4cbb-9f2d-fc258c2ee77e",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🌻"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "4322f3ac-635f-4d2f-808f-22d639bc393b",
|
||||
"name": "Daily",
|
||||
"color": "purple"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Just another day",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Just another day",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Just-another-day-5c2a75da1b9c4cbb9f2dfc258c2ee77e"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "a6d6cce8-97f2-42b1-9ca9-13496014741a",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🍸"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "b28c7f82-f6e4-4a72-a790-78585e7ead7e",
|
||||
"name": "Personal",
|
||||
"color": "red"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Date with Stewart",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Date with Stewart",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Date-with-Stewart-a6d6cce897f242b19ca913496014741a"
|
||||
},
|
||||
{
|
||||
"object": "page",
|
||||
"id": "b02c0fe9-758e-4d4b-925e-4b5463459b8b",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-24T19:07:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "💭"
|
||||
},
|
||||
"parent": {
|
||||
"type": "database_id",
|
||||
"database_id": "0fadc732-4472-418c-83dc-04454332cb52"
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"Tags": {
|
||||
"id": "!'(w",
|
||||
"type": "multi_select",
|
||||
"multi_select": [
|
||||
{
|
||||
"id": "4322f3ac-635f-4d2f-808f-22d639bc393b",
|
||||
"name": "Daily",
|
||||
"color": "purple"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Created": {
|
||||
"id": "%7D%25j%7B",
|
||||
"type": "created_time",
|
||||
"created_time": "2023-02-24T19:07:00.000Z"
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Daily reflection",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Daily reflection",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Daily-reflection-b02c0fe9758e4d4b925e4b5463459b8b"
|
||||
}
|
||||
],
|
||||
"next_cursor": null,
|
||||
"has_more": false,
|
||||
"type": "page",
|
||||
"page": {}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:58:47 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=b073f780-6c12-425e-964c-a024261062b8; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:58:47 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"1d6c-SpQFVKKxcgW+bv9mDjNi7A5pUcY\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:58:47 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=cwWAubzSJCT1wYgrzxM1q.SqOSvuofy9GfmFsOA2gLc-1677499127-0-AegyUwVahKvgc2gyTcp71mVVrVZqv6QGBz1sjO8pGkrWTDiNjVfBddTR0woRBH4Xew/jAiiYdlZhArh/NJuiBvA=; path=/; expires=Mon, 27-Feb-23 12:28:47 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,106 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v1/blocks/2675c67d-392a-4b86-86f6-93de22c797bd",
|
||||
"body": {
|
||||
"paragraph": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This update comes from the Trigger.dev Notion integration test suite. 🎉"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "block",
|
||||
"id": "2675c67d-392a-4b86-86f6-93de22c797bd",
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-27T11:16:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"has_children": false,
|
||||
"archived": false,
|
||||
"type": "paragraph",
|
||||
"paragraph": {
|
||||
"rich_text": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This update comes from the Trigger.dev Notion integration test suite. 🎉",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "This update comes from the Trigger.dev Notion integration test suite. 🎉",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"color": "gray"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 11:16:26 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=486e8f8b-ef53-45a3-ae00-f4ae81089073; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 11:16:25 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"336-hVhtPA/lqL1IENJDtmp9GXLmBEA\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 11:16:25 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=OidhXOa8sHJ.9YAgTZh9Fw6Pv75DlQPlYX981oAiGFg-1677496586-0-AXc/acKhhqM1u1P4GSnmVUMPJ4lTqM/PcKOXZQLO7zjLeMyLSBjk7JP6w+ytOJ9ZWLYd+7xcZNEzp7jKCZDFtxk=; path=/; expires=Mon, 27-Feb-23 11:46:26 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,211 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v1/databases/8db50793-ac53-496b-bbff-a74be0fb78b4",
|
||||
"body": {
|
||||
"title": [
|
||||
{
|
||||
"text": {
|
||||
"content": "Trigger.dev updated db title"
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": [
|
||||
{
|
||||
"text": {
|
||||
"content": "This is an updated description"
|
||||
}
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"+1": null,
|
||||
"Photo": {
|
||||
"url": {}
|
||||
},
|
||||
"Store availability": {
|
||||
"multi_select": {
|
||||
"options": [
|
||||
{
|
||||
"name": "Duc Loi Market"
|
||||
},
|
||||
{
|
||||
"name": "Rainbow Grocery"
|
||||
},
|
||||
{
|
||||
"name": "Gus'''s Community Market"
|
||||
},
|
||||
{
|
||||
"name": "The Good Life Grocery",
|
||||
"color": "orange"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "database",
|
||||
"id": "8db50793-ac53-496b-bbff-a74be0fb78b4",
|
||||
"cover": null,
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "📝"
|
||||
},
|
||||
"created_time": "2023-02-27T12:03:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"last_edited_time": "2023-02-27T12:48:00.000Z",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Trigger.dev updated db title",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Trigger.dev updated db title",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"description": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "This is an updated description",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "This is an updated description",
|
||||
"href": null
|
||||
}
|
||||
],
|
||||
"is_inline": false,
|
||||
"properties": {
|
||||
"Photo": {
|
||||
"id": "JvIM",
|
||||
"name": "Photo",
|
||||
"type": "url",
|
||||
"url": {}
|
||||
},
|
||||
"Store availability": {
|
||||
"id": "_TEG",
|
||||
"name": "Store availability",
|
||||
"type": "multi_select",
|
||||
"multi_select": {
|
||||
"options": [
|
||||
{
|
||||
"id": "b38859ad-7eb8-445a-8445-00344ea4c0b3",
|
||||
"name": "Duc Loi Market",
|
||||
"color": "default"
|
||||
},
|
||||
{
|
||||
"id": "fa7f8bd8-a8be-4804-9f53-868369e861ea",
|
||||
"name": "Rainbow Grocery",
|
||||
"color": "default"
|
||||
},
|
||||
{
|
||||
"id": "4b1eec41-5a4a-41e2-9a76-6d7482de838b",
|
||||
"name": "Gus'''s Community Market",
|
||||
"color": "default"
|
||||
},
|
||||
{
|
||||
"id": "029b153e-bce3-4e95-9788-80968a605248",
|
||||
"name": "The Good Life Grocery",
|
||||
"color": "orange"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Description": {
|
||||
"id": "al%3E%3F",
|
||||
"name": "Description",
|
||||
"type": "rich_text",
|
||||
"rich_text": {}
|
||||
},
|
||||
"In stock": {
|
||||
"id": "q%60gF",
|
||||
"name": "In stock",
|
||||
"type": "checkbox",
|
||||
"checkbox": {}
|
||||
},
|
||||
"Name": {
|
||||
"id": "title",
|
||||
"name": "Name",
|
||||
"type": "title",
|
||||
"title": {}
|
||||
}
|
||||
},
|
||||
"parent": {
|
||||
"type": "page_id",
|
||||
"page_id": "b4609033-b45a-4fc6-8d15-f06920495ab1"
|
||||
},
|
||||
"url": "https://www.notion.so/8db50793ac53496bbbffa74be0fb78b4",
|
||||
"archived": false
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 12:48:06 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=f5110365-ef1e-4adc-9d18-2c2ab2334011; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 12:48:05 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"735-KLx0Xyzef9XBSHzwld9artJGnuE\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 12:48:05 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=5Tc3lAQfIEVKIRFQmBPDpdDZg3Kb2Mc_nvEy5Bldkgk-1677502086-0-AXzYbrme7DAsjAZ8yjzmsEbiebZCkG9g/bYh4S81cKtKgkmsi2/btarTp3YkgikTIxy0ULUxVUWdQoY2uanFusk=; path=/; expires=Mon, 27-Feb-23 13:18:06 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,111 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.notion.com:443",
|
||||
"method": "PATCH",
|
||||
"path": "/v1/pages/b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"body": {
|
||||
"icon": {
|
||||
"emoji": "🦸♀️"
|
||||
}
|
||||
},
|
||||
"status": 200,
|
||||
"response": {
|
||||
"object": "page",
|
||||
"id": "b4609033-b45a-4fc6-8d15-f06920495ab1",
|
||||
"created_time": "2023-02-24T19:07:00.000Z",
|
||||
"last_edited_time": "2023-02-27T09:19:00.000Z",
|
||||
"created_by": {
|
||||
"object": "user",
|
||||
"id": "cc18a80a-973f-42c4-8fed-a055f8ae31f4"
|
||||
},
|
||||
"last_edited_by": {
|
||||
"object": "user",
|
||||
"id": "bcd4bb6e-7cb4-4e04-8609-10744a579644"
|
||||
},
|
||||
"cover": {
|
||||
"type": "external",
|
||||
"external": {
|
||||
"url": "https://www.notion.so/images/page-cover/met_horace_pippin.jpg"
|
||||
}
|
||||
},
|
||||
"icon": {
|
||||
"type": "emoji",
|
||||
"emoji": "🦸♀️"
|
||||
},
|
||||
"parent": {
|
||||
"type": "workspace",
|
||||
"workspace": true
|
||||
},
|
||||
"archived": false,
|
||||
"properties": {
|
||||
"title": {
|
||||
"id": "title",
|
||||
"type": "title",
|
||||
"title": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": {
|
||||
"content": "Personal Home",
|
||||
"link": null
|
||||
},
|
||||
"annotations": {
|
||||
"bold": false,
|
||||
"italic": false,
|
||||
"strikethrough": false,
|
||||
"underline": false,
|
||||
"code": false,
|
||||
"color": "default"
|
||||
},
|
||||
"plain_text": "Personal Home",
|
||||
"href": null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"url": "https://www.notion.so/Personal-Home-b4609033b45a4fc68d15f06920495ab1"
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Mon, 27 Feb 2023 09:19:09 GMT",
|
||||
"Content-Type",
|
||||
"application/json; charset=utf-8",
|
||||
"Transfer-Encoding",
|
||||
"chunked",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"notion_browser_id=4df0d92c-a26b-46ef-b272-8f5ab412147d; Domain=www.notion.so; Path=/; Expires=Tue, 27 Feb 2024 09:19:09 GMT; Secure",
|
||||
"Content-Security-Policy",
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://gist.github.com https://apis.google.com https://www.google.com https://www.gstatic.com https://cdn.amplitude.com https://api.amplitude.com http://dev-embed.notion.co http://embed.notion.co https://widget.intercom.io https://js.intercomcdn.com https://static.zdassets.com https://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://analytics.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://embed.typeform.com https://admin.typeform.com https://public.profitwell.com https://static.profitwell.com js.sentry-cdn.com https://js.chilipiper.com https://platform.twitter.com https://cdn.syndication.twimg.com https://accounts.google.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://cdn01.boxcdn.net https://cdn.sprig.com assets.customer.io code.gist.build;connect-src 'self' data: blob: https://msgstore.www.notion.so wss://msgstore.www.notion.so ws://localhost:* ws://127.0.0.1:* https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https://cdn.amplitude.com https://api.amplitude.com https://www.notion.so https://api.embed.ly http://dev-embed.notion.co http://embed.notion.co https://js.intercomcdn.com https://api-iam.intercom.io https://uploads.intercomcdn.com wss://nexus-websocket-a.intercom.io https://ekr.zdassets.com https://ekr.zendesk.com\t https://makenotion.zendesk.com\t https://api.smooch.io\t wss://api.smooch.io\t https://logs-01.loggly.com https://http-inputs-notion.splunkcloud.com https://cdn.segment.com https://api.segment.io https://analytics.pgncs.notion.so https://api.pgncs.notion.so https://o324374.ingest.sentry.io https://checkout.stripe.com https://js.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://www2.profitwell.com https://tracking.chilipiper.com https://api.chilipiper.com https://api.unsplash.com https://boards-api.greenhouse.io https://accounts.google.com https://oauth2.googleapis.com https://www.googletagmanager.com https://analytics.google.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://region1.google-analytics.com https://region1.analytics.google.com https://www.google-analytics.com https://api-v2.mutinyhq.io https://client-registry.mutinycdn.com https://client.mutinycdn.com https://user-data.mutinycdn.com https://cdn.metadata.io https://platformapi.metadata.io https://d2hrivdxn8ekm8.cloudfront.net https://d1lu3pmaz2ilpx.cloudfront.net https://dvqigh9b7wa32.cloudfront.net https://d330aiyvva2oww.cloudfront.net https://cdn.transcend.io https://telemetry.transcend.io https://api.statuspage.io https://pgncd.notion.so https://api.statsig.com https://statsigapi.net https://exp.notion.so https://file.notion.so notion://file.notion.so https://api.box.com https://*.mux.com https://api.sprig.com https://storage.googleapis.com https://cdn.sprig.com https://cdn.userleap.com track.customer.io *.api.gist.build *.cloud.gist.build;font-src 'self' data: https://cdnjs.cloudflare.com https://js.intercomcdn.com https://cdn01.boxcdn.net;img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com https://region1.google-analytics.com https://region1.analytics.google.com https://file.notion.so notion://file.notion.so https://*.mux.com track.customer.io;style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://github.githubassets.com https://js.chilipiper.com https://platform.twitter.com https://ton.twimg.com https://accounts.google.com https://cdn.transcend.io https://cdn01.boxcdn.net code.gist.build;media-src blob: https: http: https://file.notion.so notion://file.notion.so https://*.mux.com;worker-src blob:;frame-src https: http: https://accounts.google.com renderer.gist.build code.gist.build",
|
||||
"X-DNS-Prefetch-Control",
|
||||
"off",
|
||||
"X-Frame-Options",
|
||||
"SAMEORIGIN",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=5184000; includeSubDomains",
|
||||
"X-Download-Options",
|
||||
"noopen",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"X-Permitted-Cross-Domain-Policies",
|
||||
"none",
|
||||
"Referrer-Policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"X-XSS-Protection",
|
||||
"0",
|
||||
"ETag",
|
||||
"W/\"375-pnfsUIOn2SpGzML61kePXEPuNag\"",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"CF-Cache-Status",
|
||||
"DYNAMIC",
|
||||
"Set-Cookie",
|
||||
"notion_check_cookie_consent=true; Domain=www.notion.so; Path=/; Expires=Tue, 28 Feb 2023 09:19:09 GMT; Secure",
|
||||
"Set-Cookie",
|
||||
"__cf_bm=1BLTVHBW95WeTHRxGxJKr04euPqe7BD2TOQ8IfSBjI4-1677489549-0-AfqV/cu4hBSMEmapCSw220yP2VouKUsmSJ9VYAfjPjidTTEjq6nhTLrgAbbp3vcdzhzmrHmdJI0dzqmofxlvKq0=; path=/; expires=Mon, 27-Feb-23 09:49:09 GMT; domain=.notion.com; HttpOnly; Secure; SameSite=None",
|
||||
"Server",
|
||||
"cloudflare"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,56 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.sendgrid.com:443",
|
||||
"method": "POST",
|
||||
"path": "/v3/mail/send",
|
||||
"body": {
|
||||
"from": {
|
||||
"email": "matt@email.trigger.dev"
|
||||
},
|
||||
"subject": "Hello, World!",
|
||||
"content": [
|
||||
{
|
||||
"type": "text/plain",
|
||||
"value": "Email body here"
|
||||
}
|
||||
],
|
||||
"personalizations": [
|
||||
{
|
||||
"to": [
|
||||
{
|
||||
"email": "matt@trigger.dev"
|
||||
}
|
||||
],
|
||||
"subject": "Hello, World!"
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 202,
|
||||
"response": "",
|
||||
"rawHeaders": [
|
||||
"Server",
|
||||
"nginx",
|
||||
"Date",
|
||||
"Sun, 19 Feb 2023 19:16:30 GMT",
|
||||
"Content-Length",
|
||||
"0",
|
||||
"Connection",
|
||||
"close",
|
||||
"X-Message-Id",
|
||||
"D9FX-x6ETvKlMlzEi0Qlpg",
|
||||
"Access-Control-Allow-Origin",
|
||||
"https://sendgrid.api-docs.io",
|
||||
"Access-Control-Allow-Methods",
|
||||
"POST",
|
||||
"Access-Control-Allow-Headers",
|
||||
"Authorization, Content-Type, On-behalf-of, x-sg-elas-acl",
|
||||
"Access-Control-Max-Age",
|
||||
"600",
|
||||
"X-No-CORS-Reason",
|
||||
"https://sendgrid.com/docs/Classroom/Basics/API/cors.html",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=600; includeSubDomains"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,59 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.sendgrid.com:443",
|
||||
"method": "PUT",
|
||||
"path": "/v3/marketing/contacts",
|
||||
"body": {
|
||||
"contacts": [
|
||||
{
|
||||
"email": "matt+1@mattaitken.com",
|
||||
"first_name": "Matt",
|
||||
"last_name": "Aitken"
|
||||
}
|
||||
]
|
||||
},
|
||||
"status": 202,
|
||||
"response": {
|
||||
"job_id": "1befbf98-bfdc-4565-ba5a-c7e8b91f2678"
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Server",
|
||||
"nginx",
|
||||
"Date",
|
||||
"Mon, 20 Feb 2023 15:21:43 GMT",
|
||||
"Content-Type",
|
||||
"application/json",
|
||||
"Content-Length",
|
||||
"50",
|
||||
"Connection",
|
||||
"close",
|
||||
"x-amzn-requestid",
|
||||
"6fcf9591-e37d-4fb9-b175-59d434ba45c6",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-headers",
|
||||
"AUTHORIZATION, Content-Type, On-behalf-of, x-sg-elas-acl, X-Recaptcha, X-Request-Source",
|
||||
"x-amz-apigw-id",
|
||||
"ApNxLHMAvHcFjkA=",
|
||||
"access-control-allow-methods",
|
||||
"PUT,OPTIONS,DELETE,OPTIONS",
|
||||
"access-control-expose-headers",
|
||||
"Link, Location",
|
||||
"x-amzn-trace-id",
|
||||
"Root=1-63f39007-0392a34047f268f366e7d4ce;Sampled=0",
|
||||
"x-envoy-upstream-service-time",
|
||||
"231",
|
||||
"referrer-policy",
|
||||
"strict-origin-when-cross-origin",
|
||||
"x-content-type-options",
|
||||
"nosniff",
|
||||
"x-ratelimit-limit",
|
||||
"200",
|
||||
"x-ratelimit-remaining",
|
||||
"197",
|
||||
"x-ratelimit-reset",
|
||||
"17"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,79 @@
|
||||
[
|
||||
{
|
||||
"scope": "https://api.airtable.com:443",
|
||||
"method": "GET",
|
||||
"path": "/v0/appBlf3KsalIQeMUo/tblvXn2TOeVPC9c6m/recHcnB1MbBr9Rd2P",
|
||||
"body": "",
|
||||
"status": 200,
|
||||
"response": {
|
||||
"id": "recHcnB1MbBr9Rd2P",
|
||||
"createdTime": "2023-01-03T12:05:53.000Z",
|
||||
"fields": {
|
||||
"Employee": "John Doe II",
|
||||
"Phone": "(123) 456-7890",
|
||||
"Headshot": [
|
||||
{
|
||||
"id": "att3ibwyOXULYL15O",
|
||||
"width": 950,
|
||||
"height": 700,
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676995200000/D_htRl39BrNhGxsiGlNpcQ/tYWJWmeq3WBDaQCZIeDn-IAKEczimZduMBB30Xq48IYOla6DEq2h59YjRRAQZr4xH-YCc7n3cf4GAXlxPXYAYGfo2e0K230BdUzQXk43vrc/Y61oM8Pgbyu_5-jhuGhea9r2mpjjm5lxIGOJPP5BaO4",
|
||||
"filename": "headshot-purple-2 (1).png",
|
||||
"size": 191272,
|
||||
"type": "image/png",
|
||||
"thumbnails": {
|
||||
"small": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676995200000/1Ev7NzTXpXw2FnaLtcYrzg/NZwW2F5QNr7qa_SXXlDx9vhjD_oxlwvSCboJj2T_S1WC0J0WWYYOWr6pfn_s_Z3aOU34l-v7ScjvQdL9vDtczQ/U0GygRlbr35RvoD2S-yyeJ3IWrbOqEjFe1D_-8KKpNY",
|
||||
"width": 49,
|
||||
"height": 36
|
||||
},
|
||||
"large": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676995200000/lgoKQYxOC2eUe51PTO-_yg/dKv1Cx9ws40PNDnn2Y8bKlv4fbCfyGDshlFno1NOrEkceHJW-cCWG5E97cBs4B389t0Rf8SK3dMt8RkUOyueCg/3WxWv9_VvEua1zls82Z4Dca3yjWD9Cp2e6ldqrhzTKg",
|
||||
"width": 695,
|
||||
"height": 512
|
||||
},
|
||||
"full": {
|
||||
"url": "https://v5.airtableusercontent.com/v1/15/15/1676995200000/Rihc4R_4ndQBrAHA49_j7Q/3V3Js1Xsx4AxXmxVkurk09ZpYY0kmOJHJlhDqybO5Zws1tP1oZZC4mCaRRnMLpx3XLu41c5aALWuo7Jl7UC2yQ/1Kej1MQjyAGYqcSVqo4_1GHLMOoF9puGps0NxQCCHpQ",
|
||||
"width": 3000,
|
||||
"height": 3000
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"Employee type": "Contractor"
|
||||
}
|
||||
},
|
||||
"rawHeaders": [
|
||||
"Date",
|
||||
"Tue, 21 Feb 2023 12:47:49 GMT",
|
||||
"Content-Type",
|
||||
"867",
|
||||
"Connection",
|
||||
"close",
|
||||
"Set-Cookie",
|
||||
"AWSALB=P04kqBtI/0ytyUg9Fjvlqdj/79QEnNQZOJrk8expPLgAkwq3exJsTzPeYwbkOAkiuGDomuXqutUq6flBHmrEFz1du9r03QrsztyUe1mYaFVAoAPR4BacSk6CNE/8; Expires=Tue, 28 Feb 2023 12:47:49 GMT; Path=/",
|
||||
"Set-Cookie",
|
||||
"AWSALBCORS=P04kqBtI/0ytyUg9Fjvlqdj/79QEnNQZOJrk8expPLgAkwq3exJsTzPeYwbkOAkiuGDomuXqutUq6flBHmrEFz1du9r03QrsztyUe1mYaFVAoAPR4BacSk6CNE/8; Expires=Tue, 28 Feb 2023 12:47:49 GMT; Path=/; SameSite=None; Secure",
|
||||
"Server",
|
||||
"Tengine",
|
||||
"Set-Cookie",
|
||||
"brw=brwJ69m62Pda820BR; path=/; expires=Wed, 21 Feb 2024 12:47:49 GMT; domain=.airtable.com; samesite=none; secure",
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains; preload",
|
||||
"access-control-allow-origin",
|
||||
"*",
|
||||
"access-control-allow-methods",
|
||||
"DELETE,GET,OPTIONS,PATCH,POST,PUT",
|
||||
"access-control-allow-headers",
|
||||
"authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with",
|
||||
"X-Frame-Options",
|
||||
"DENY",
|
||||
"X-Content-Type-Options",
|
||||
"nosniff",
|
||||
"Vary",
|
||||
"Accept-Encoding",
|
||||
"airtable-uncompressed-content-length",
|
||||
"1314"
|
||||
],
|
||||
"responseIsBinary": false
|
||||
}
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user