From 6b7c5cace9ddc75d3f52b3dd5be99c675feb469f Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 11:53:31 -0400 Subject: [PATCH 1/6] Wire real third-party API keys via SealedSecret for demo capture Adds a sealed banking-thirdparty-keys secret (real sandbox + synth keys) and per-service env patches so all 6 backend services read their third-party credentials from it, enabling real outbound capture instead of dummy defaults. transactions uses Spring relaxed-binding names (PAYMENT_*); ai-service is re-pointed off the mock ai-api-key secret. SealedSecret is sealed against the local minikube controller (cluster-specific; do not merge to master). Co-Authored-By: Claude Opus 4.8 --- .../accounts-service-thirdparty-env.yaml | 31 ++++++++++++++++ .../speedscale/ai-service-thirdparty-env.yaml | 36 +++++++++++++++++++ .../banking-thirdparty-keys-sealed.yaml | 35 ++++++++++++++++++ .../fraud-service-thirdparty-env.yaml | 31 ++++++++++++++++ .../overlays/speedscale/kustomization.yaml | 10 +++++- .../notification-service-thirdparty-env.yaml | 26 ++++++++++++++ .../transactions-service-thirdparty-env.yaml | 26 ++++++++++++++ .../user-service-thirdparty-env.yaml | 26 ++++++++++++++ 8 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml create mode 100644 kubernetes/overlays/speedscale/ai-service-thirdparty-env.yaml create mode 100644 kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml create mode 100644 kubernetes/overlays/speedscale/fraud-service-thirdparty-env.yaml create mode 100644 kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml create mode 100644 kubernetes/overlays/speedscale/transactions-service-thirdparty-env.yaml create mode 100644 kubernetes/overlays/speedscale/user-service-thirdparty-env.yaml diff --git a/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml new file mode 100644 index 0000000..c31a450 --- /dev/null +++ b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-accounts + namespace: banking-app +spec: + template: + spec: + containers: + - name: accounts-service + env: + - name: PLAID_CLIENT_ID + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: PLAID_CLIENT_ID + - name: PLAID_SECRET + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: PLAID_SECRET + - name: EXCHANGE_RATES_APP_ID + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: EXCHANGE_RATES_APP_ID + - name: MOODYS_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: MOODYS_API_KEY diff --git a/kubernetes/overlays/speedscale/ai-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/ai-service-thirdparty-env.yaml new file mode 100644 index 0000000..ce2dceb --- /dev/null +++ b/kubernetes/overlays/speedscale/ai-service-thirdparty-env.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-ai + namespace: banking-app +spec: + template: + spec: + containers: + - name: ai-service + env: + - name: AI_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: AI_API_KEY + - name: OPENAI_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: OPENAI_API_KEY + - name: GEMINI_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: GEMINI_API_KEY + - name: XAI_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: XAI_API_KEY + - name: OPENROUTER_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: OPENROUTER_API_KEY diff --git a/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml new file mode 100644 index 0000000..c35f781 --- /dev/null +++ b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + name: banking-thirdparty-keys + namespace: banking-app +spec: + encryptedData: + AI_API_KEY: AgCddXWwteqeDaSXzlhyP+8GGbmy78Cf0U0+46bovMGPSLKgI/oiyYORatev2Gmgf8tZXi/6shza0IfUhmlr1lIvhkeM24tHIhqtJsUJbVwxNW7S6R+LfnsHbBpElkrHtTQbEgIotrL1TiLEAa2XY6zlGYzO1pM7N0T2U2YGywIpEofeNHUbLVthm2SzXJO6crmbni85HK0MGZyn9ld73aHqh+brUOqKPeO/pFEXgEgz/A8MmlNwXaPxGdaFNuJO6+fbCi8wxMdBCP1lnkg2jtxQDEdaO917gvgSfKeJGWKp/8opG1gHDgE5Xe7k7mLOJq18m9mY0W+I5KaUX3g/W5Juo2xWrzVzhUKKxmrGtkSWjbrbSEwQxu4cGlDHrSM2jeRwcjjv7ZehkX8bzM1sMJNOhkeo6beergQ4TGH9NL+sJcjjSbm9U4+zVSq0NSp9I55nqbwAGKbecPn6hL20tZZhfzdizDWbfA3B1+RLvk3OWir9k4gLhggIt+QJNLcHd8BN0VtA7zTgfhuMpmrcSRUv5Pv5gobJYZY9xfc4XgNmpV5PoWYN/XVr1HPZm9MjVWQJUM3arxg0PeCdsUbg03og/OmxmdHfCL8kJZ0WZ5rGIPtqpHGK+LfVcalW+uHxEW3u2kbrGRzzF+MtTpTKtB6SmyH5ysVpTzx0gmgSIQ0HFKfiWf+vMGpfC9MHiakWXSwoDml44wGbZdldoLygfBRliiQj38f8BxmcTqAzMeN7kKthzLautzty4EPnUlxct37iA3q+9Khr4sDPUuoCpLxaCZluvuufFV99wpkpSFW6XTmmHBtRIkLfREBDbz2b53Pb6gjlagZiFgGVl/k= + COMPLY_API_KEY: AgC9RP6Mu3a4qlnnE+pi8uREKTK/8WXlJHDFxqYzd/n8JuJE2N1uEeb9Kn88nQxsneJ2ZxzXXI4ZojauCY+UCSD2KfFEnchIbZLZZDWuJiq3RwMCMICKoEL7s9XEqfdbuKE/8+5ThmN/i3uHkmg95Cmx3x4uD/U/t6sQxHoPlasevK6UO0BEMGE3yvN4EbhKO+hvUNlzepUwxIJOAZQd0vXinsX2/sdOqa7Wdp2iHXbHHQpxAm7WZH5brtlYU+87e/bf2v6/kgXfyT58zTpoyTT/5yRb+TDQRTDU+cckDZQ+9cSE/rSNHkEffhi2JMQPXRZlckkDQiYGBPLdxpCZSqC8NqI6TGE6HWPb+f0kETArhKjX/C2F3y6Mn01cnC4m28MaFB8G/UPIlzaXVLwsRQJSUS4hKcwrUlvDE9Inh4y/SoPQjd3srf2N4GToYP5xxLC+dFRCxNinAtwHpqDAscBgVKNgpuoNc7v8K8mk7MEycO2IWk1M8F+PKp1QBf5GikZaqlJHbNHrHFHfdx7PQHGdJ5IQ+BmUskWtUE+Nvy80GlErGuB+Q8Sb6xE7V0dxpSk7hNhTjgOR1fajAizFSA/dhTBsA1tcqAskQqxxxUG7L/022ByWKNRDqqBEZQSFELG/urWIg5+qtMn49s74ofZPyqOFhj42ZRcRkjP3QAoUPSnezLPN1711Bl7FdgsFpu6a8mvQ/RcUu6du3dJ31Jk0aR9RG6FaJnD+uT1wDxRsXg== + EXCHANGE_RATES_APP_ID: AgDCXL+ygCo1Ky4CJjMPDHnx8iVc8u7Bh2BtJdE0GOQFEG0b3hsqntfDJVOLB5uQJWPoe4IVaHM5J81ZZJUVgxaWvvFbldulzPHGAPRkh2QNoADTgsvzl1HKSPTwetoeaH6fZXXFibmiGzpnXCu7xaEbGOdo4poKBR64dYVVPYm+07/Y0VWwi6ehawQWoav6ZQfgCjjGCsB6zSvN1g82ibv7Fi5+j3zZ3MBhbd7Uejt0F0YPqoIo0oyUnWkHsiVtBFMhySy1ymgiOYbBVbopf0nEQBV+JYTOnnx1d3xjOtc7FSbzB0kcnSruZ/sfquMOX/QniUZayF+VuWbIsnTBlgYU0X+JTfXztHeGIc0l5hMAw4EhCdKw+ySwQEHXdq1FwA9LoxH6i3/c5bs+hZLmZUuLszRPEpqHysL+9XCU46T3RQF2Q9MZcTVuNg9/HjPvsCD3FdQD+49CebtrW59tGWXtq5KFHStz34zuDpP08YN4QdXfu+dE/vf2qaSR5crLqWk8LtRzDICTuMHbw+Z089srRaR7PDO+wABfEaEF3wj7VFCUqinLj2ZJV6nqCL7GDubdNenAOZHFahp5ScyxsR1RrMJEcmtmLIQfcR8Fk845UHYOIT69xNSaNvH5Ofe2s+2+iqOY9gE2kfpyaON/BAhh4X7KtnS0VR0C+Pz3KH6wcnq161GGBjQWcpkT/36tvLaKqVT7McNj7Ti8C77hOKV2QCyPEwU0H/fCwfR4bZWx3A== + GEMINI_API_KEY: AgDZWtvMJm+ceXwBv9uKKCNLSgP+K2+m+GppYwCA224Iv9xhNLJ42NKq/gwxWwLE3IWf8+/WglUS2QoQEphP0XtLkhdmJGnRo1AXGkFXepASGldQfPW10VPXiBW2r62AVIrgubQqK/xVJuA0EhziwBcSzPnvDhGYd8fIXh6Cs3niKvsi4maPeN0l/3ZbHqSU5+reIt74VfNyDrJBRnsC/7+b9nWfH5c+QcZqRN6zJH+atNVD83GV1rddXR66YZgUvatBMacsDciNDIB2HHTUdmzHLl/qCbWdrWesuX21YgEnHy1l++dfaKUOQxK/50NBcu62DF5L+kN+pToYeUGfi3L4VE7NkQ3R8t8WghCJVbV6Ok/jbd8uDtQTbDsrMHyfH6asYmV11SWZIbkCE6hO7JDADdH20hpVkoxaBQIWVdynD3PE+gGoA04ZHx8vDOjY/ebPLHF0hW6bvaMyv60XhAb2gpZRQx81B7APD4Za7bJu7lyA3JT+cJ6V0OjmgUz6i611GN9w1lvyUbMQZeRB2BKkQKpr80ZadobryUbyiwZPabbgZn+dDS1Jl7JekMibbmxiiXZew+SY/v6Ma4uAQE+MIECzVV0MN/7CfH6mXSTZUr1o3oIfOujm3SIfrVM+YCr0AedAxmKnWEebxBfUWUMbnk/CdFY/RXG12XZ7midjwekW6s0veTpqBuTz6RkHf3f3YGVbNUddtfMk3ApVEcNKzlhLXWJikUJoMtHmgFP/LSg+p2YnWGwSj0GobTygKN2DnUl66w== + HIBP_API_KEY: AgCa/Qa73iN5smi66KDPHXn5+IZ/IsWB56opumAkR/95xLJtNy6TuAIBsDfo54Un4D/+A5ShtGSQCpQ4PjpIecU3B+tlbK2UNKGr123XBGYFx0KykZeZPjS7Z4VFrvRpb5lui46EYChYvHsZB+yQOOSpf5WG2RbkYDX4tDdrhmevrjDm5CZBpTPBMmHDgHuPN946XE7J4sutkhco/X8maidrRosiNmPwjh9I/jDB9spnaVCB1BpgdWSUVz3mly85QIOL2KS/Us3vFOueAO+J4T1HYh1B4G7oA+sSwDiZ3HtamHv4pG4rTR3g2g2QodASQjhc1Gd/vj/iUhB9BL1Rt2iUNca7O98Ld2MKjukPUq+FwohPOiMl9VRy2Ez7ww0dXfFfPW0VBcrvVsbPChsMVrmVcxir+8cMATJNNxz/OBRNdjI7qQdaaoYR3QhOWWOVkRPW3WOmqQSGaJ1rHv+kOyED0CzJ8JqDT32tpPMLRrpNo2wXaARvK78D0dl+w12dM0uNGW+Y8WqFJz2neA3Ps210ocKfwqX8Kv+jSX7gCyXD895mzoVmdYFoNi4LvZ4W8bNqdhQnvtUJqfVxeDh9jULVhjMZfTb21PY93kbc0vcTJQUglK95kC9THDuhoVZHeGLTU++AEW15o9VbVp2tqwOlfI+TogLS/LDmyZ1YtEMzY5clKkV2O/2D7uAvQX1B2q69Mfy1u92qL05tDWijSBNwIMQDa0md46k9GgqbHQ+1DA== + JUMIO_API_TOKEN: AgCCvJ+cCSJ/yfYRITJTqyiLzBYku37rLE7mPi3TaMSSJT9i4RdJSogZDjX0QhQHiWwnGGsOd3IPhmOXwUB66WWBheKh+3m1yAVR/OYJ+d0imVuLc7nO2yEQfJ8IzP1bw9F6jejArV/w5gxX8W2GRdkeIB+Oh1vlxdm1f/2+FFispypbG6M2l3s0peY3/R8T3IE7o99LmnpLny6FCQ4OfWTLA4G6w/8kzwRS4wuJPHwIqwphnwbjk7Qm+i5AxBRCsYe2yrPARC5a/mB4TSw6nVobX6izGgzFWhGgKOFCZTmwdaiGPUIlnqNQv4mNTXFnkV+YNrjcohFA5ShP2/eLLdQrbQbPaQZr5oLfE59iSnKWvwuVcx8SN05A3QPgMaKvGsHIeBBeack47oRKS0cEjqS35h4R9s69WElhGUs90X0neRE026NF4JAR2vTzA3ggmBlbQq7dlwh3mCkdMiRGB/+zt89ZpY5qw9+XdX9J+14ZTKQJQpU7D1vn6TDxWZ9P7eKLPOEObwYKx6CzWtc4BrMQDsaEBBbhp2Eh0rtgqf1Te/nPQe/C4FVPXT/hAw8gEUJkn0oaoEMdYH0d5Uo2D64FpwAKAB6LXigCAX8bpBR0k4cA5aLoZ6X2dqlO1+RxEaWlrlUSv9m9Y/Sbzqb7HOSf1zVl/0bhBhjPcubChjkbnSNBof2NIxk7SAPErQIzyCFunx+Pj1yXe12JzzTL/AO4eK+VSrrK0AEqmqrSElpPrFi5U5OYTmeP + MAXMIND_ACCOUNT_ID: AgA1VJiclhQvT/SqXHks10Hau3U8lLd3RJ6bm8ztc9hoJi5hqqJ9ee4VJMpoKAmCF2NZO/AaxcEDGqENT70KxFGM6Zur1txX+Guf2JJkXXOK6nh7S1iLzznIvHRYNJMMJGf0YIcTrnuyF9xNOurRyaYZxLXB0ecv+R1r3gVHn8uRwA6ynrCfHrKY9LtF+iKBI94ggyj7vpGRoj1KY2brPeIiwve0gisF/Cas0+JYPxX37PG8/agbpUAYMteOBRpQIWiVscTtYdWjkft6T8ujADf1aCDOTbuv5u6dj/H08awZNtQlKqgah+Ny6x4UtCjTbRUdzhmA2vAyE4dDjxqnOmGN47Tnv1HA99Fnojpkj5wJN9x8tVG7iVNkEMhumwHbladSAjnLOV3jiz8SZE/k4CidRGkdAv7gv5W4NmEkAoaLZz0H8czvtyuXYVUKRraxP4WlP36q4Kluk58fuBg0vaz5XoSri10VlgczVi0tKlNGSXNP+bGuHDZADrAqsnDzk0BjbfYnD1TrAhcUmb+o53HVSJmJ6snwJ5erN5rLvv/K+d1KSfCXkfi6NXOqtQsEClspSap3XUGM8H0HLS4TDUjMnsGnDNynGDq8iTTrfKeNsVE/Tk/qX3b4A9GuLzRPB5zQJUEnxxyzwI8LbRgLg6g/gJQAHK3kMHiyEncva9A4N7JRbUO4lVako5zLM0VXh8o3vTJlaOqO + MAXMIND_LICENSE_KEY: AgB0E62QSRRNuQQwm+4NhCnHVit16NW/43EZdScP6c/XWvpM5JoOZXpdNnznSpLrrU1CuAQQOy9YRgLCeD1OiZMO/aLNmsutRBwO1RLws/0m03kQV4hOecZpfW/IiDRIfRVToK2pKowS8HWhW+xaziSZCZy5Ybku4Jxs0PdQt0e1bOjN9XFbgQaAUjz5TV8DdWUHOIjvXwdYoCbvLrnuEm36YcfpZkl3+SySApGfi40LVyKVPuF1fV2vZ/2p5xt8QtQ8zQN8md2Snvi1Q+Elteds8nLCw8gkc/MOc8apeWz/IucyGVYK8NFOCQFCj0JYVSrJ8i3zSjx3IsbXmd4gGu6Z/P/1ydlveBFWjL+cVfzrNKIBSO5hUjXllUmceEmZZUwC7OjmaEmqIRfIZM9h6voj/Ub6t3tDrpwQuq8Up54ZrYRLPgDZLGE/cC5GoQowkhu1UA9dlUn/lerQBEUu3xSPwp9Z9BFY2nr1vLIPZLI8ZeVUK9nOjtmYiXJtMRw4cz/y7ZBP44rcVYEWUYMmwRb9LmzWi47nIIiRsi/Iy5i8fhUULS8MAyKWG1FT2x1QFQRtISjIHfrpAhqce8FGmmqGbkA6CKRFuLxr89oVbQ8X0A2cPA10vg5A+dR1m0I8pi13X0H/TIDldtCNbQC860HmD6BvoIoDyzYlP/uyQWM4nzBRLadFmkx8cAJeOCkutIQeyvtDKOoXluC1fEXDCTqr + MOODYS_API_KEY: AgDa4PLrahdUHzdMkNyl0R8GJfo4j6l1N+ATprf6m2Bs4indw6lmU9qFbyaZTHKEH4zi7dwEZcBoPsRyRIYdw1ALZ12tK1dKP+GQpXlDVgNeDmk5Q1foyDTOqLrgGyGf3A4aE2tdjAXRPDG71kEYtSvwUa9DLaFQ+bMfjLtyAGC+iazBjr0lNKbdP7+Nx5ww1+a/jgevbPPaiDX6nSpr0qgDZZVPno5aCC60EDfl29bB69WCFIyQFvozWs/KSd4yd2qGAnu1UNqt7Y+eHptJmkSVp4lRtv8QGXUR+q+VHWUJL3Im34xxVo3Fs5/PdxCpld1YztAJdkVpujXWLgIuv87jLldhkUAFBXbaqgrRvpAoL+W+tbciUiwucQAwyT283y3ZqlPddbIItuvHLyd+ogwYZy0/ZejXNs69KcVi/30pjbhS+COLq+QIgLb5/C9FC37LvxVcfBcbcG9bstkJeUo5wLateypTUqdN5cB5kmus5w0msSrST/V1DRJ2SQ1tTVNDWZwmKSqpx8e9hZHPkJootVbQ9/UmykqVr1ycfMt/0TP2LK9g4L3rbb5Yi5oJxuQG9z6u3h0DItFZAvCDLG7aau2ZgQMcmh5kfWXYkOYHXQaeplpA5ubG/5vgMKBiLCkEIGJc6EMmSTLlbijFNX7+3mPT0TCHF4tJgyDZ47zgSQlEk9raSMldf/o4HAvY99fqs7CODC6uswCfOG2AKTcp3LXuGnWHVej+UUEKXr5j81JwhZDUQG5PPOOURA== + OPENAI_API_KEY: AgDRCYoE7EMqze1TMGy1i+x9I90+lJZKzum0mYIhrrXvaa9t9fkr59lDHhOPkf5opiu7yyfPYaWwGqH7pSFHmQTdnEFIWcVpe/gRLQbnvJqtKQCqDv8ZS7h5sZZu0PP6W9JePhMj6VTJZKk7Woc9aBYAjD1lrkC1/0KLER54FuDjKVPHTBlH06vWnWgHIcwe3fZyFs3l3z8G7aek9EBcVwdhwZE8EnXxRomTyZh7VA0/xc3yh6nBJ/b/6THwi43XKFcS7Kw6W7xG/lcbeGx5jEPPNqFXzr7aLuDF3c6gnaYl2wLYe6s2yhm/HqzzV9Tn+GPcwXb68QAOK1beDoXlWbPZUhxQXb2NK8kgwijbwkdJBdGBkCGODeVgYs+ODcAl4hGYvu/f1RYXpCQ6k1AysgjRAso0k1SymmqBzTqkRpRyVnotlI/VA0Qz7Oz2hq82NVR63kZu7bdz/3WinWZ3HegR0RwouShVWH3EciZ2e8XEYS8WADiU6HUFyxVoFBqLN8nus7HYW4OEVjDshvVfhlOkFgFMTWC1VRwfG8UFjVmboND+j31CEQsKSKTzldWUSmc72DgMsoMlOVhGC4/Kq25g9GabiAK1kkqvBP2vLIVjWIhOUaOSQLHnyLkii+2Os4/Mg9mu7d23KGm5LJrAULysEFZwhrRCBU2U0xcTNxB7zUPcSdblzeT6j+mq3SIUbCFcvlqJH/pOfzK23kSAOtRc7AzOddtPidt8ytSK2FdlNn+BPrtbYeeX+ICjwX9xELaWKgpi37baDqDICnUH20w2efQKN1CM+8iCxpLUXA3J0oDFHwP5P7Q3zP2jWotWGh+5IicsTZDCtDN9H7d3hvwPsIu480e94XBATqkVFHKf+W6efRp6ElVSrJhh36/DvmTe9qPdGDCYFnf/7WqMlT3I8ObMtA== + OPENROUTER_API_KEY: AgB8ekWtwK+ppJl9xatahaJ4M+podWKakYk0pWDb22LTadNwTu5E/+xkap5/g2ZtH/cZ/3swosf3MTdZvMapW20Vr+TCFzuV6BHj05Il29OLkBue4FhwxYgyuAhAHJ7qotkwtpVVPkd4glKoYTKjLs368zwxiWqmy65UXg/NBWg31vbZ0kS+Inn0CVsc7lvGTyFosqDLRbSGc0vQS/SVQPgbgEzNtYuZMBKSK6GxTs0FbhxSYX2on5wbyVmii+vlkfzbtq1bb1nIVGhU9u2qOfdMjKo2vSww1IaZlYfOpPWhaj0tszXJpZWiUS03i5GfHi7u31VBAoW87uUKLEIpdW+A21AQ3bn/fmlWLNei/RvRfoPMYzi0Qbq94OUEEkBwI5cF4JhJUNenuN8qNEftZBCmU1sfxuNF48xaH/gE9zWghup3TDBbXD+Z1G/H7G9+Kx1MY5V29a/fwSnFu3QHr4TBuf2NcwH2hMidOKLfHy/g0Mtits+0EnFipzS+OYGFtuHy/mVkJd+RFdS90GNmM+pOcy9qIINU2a9Jcc5Hzp/vWta7FQtAk0uQaOXpODPP9Pc02QtT4LA9pdt0BWQdIRftrb9FZWeJLITVHDy+mrEbrp1BoUilux6/PDimA09LWvaPf4r7qCZrpWnHG2ez/0wUeo2CpO558ukkgyv6/zIF3zKslTgP8zJYVbz/b8srOnyE5ouOGsDMTiWorTZJ3d9LSYxWV+q3K8Fdmr8rSfYSCm2AqAVyCi+1ZVZPLZ1JjBCHFgtpCcDZ48o4AHz6BaXhs4GwTQaI2x7j + PAYPAL_ACCESS_TOKEN: AgDct+C4n3vqIufc3fTh8zG4svjb+U+cRS8YEKVuDQRFS4xuRO4byG0whiLaxGBlYDJEtpt8O8tH9FW/sjB06BmgEYDjbwYbtsCnR6MY+KJHMTbPaEbKlLZfhfxxJsvJ7UrJrnJ9hStxOJYE5GXjjO8ejEkZCrIKo/WMAbym3tCH2x5JuinbvzqgjByXb5NymWPawCrls0ISMv7vEtsZiqT9BEZNS/iHzbzDQUPrA6ypX38BmVWd0tOQHSUmlAxNzBs7L7V2pxmoGZBXQUXNQBpgtWOOCL2bmG4s+TVaUMREoWG/D8NR9OskDcjBCW6U3KQYOQ+qu8XJOJ8CfwDA2ZSZfyQ+BfJ9cQtLeC/1n+fhk4KPLTEdz7870O3RP64zFGIKQfDfOoQwHDIE19z01yfXloNmeRCwSuFNuz75ADGpy3Jj9JNkBbY0vJ1KYW5Wr0Nkg9bnp/On92rXOAoPodQKFmLZU/ONIDMOUjyJ4WfRBVOsBVhyLruYrRrXyXf8j3xUheSW9IROuvE3pOrhs6qDo8j9znVOW2zbfAzgKVPDUrUuF+/kbHF6H0O03gXjQFswnr9je7Xnad+ppzbhw1BvqGNw/tj9HSrQGZs5TcGgPO3SVxBPuxfaTR5LhPxSK2ncxDO87TRxul+D9AqoxjdtmR6DG6cvnVIWLfuy6eGkjEzJ7zp4LgEits8wh9iwcHfF7COwpsAG84rlEH7txBscjKsAFK1gJSSsdcZaWIW5NcGVqPPjVCTBv87l8gZlQvu8EZyDnDUdvSy7iMctOQcTDNEBRs46F4t2AcBpcUcbUpq85bRiWe0F7gk+nZTcdntv + PLAID_CLIENT_ID: AgDTBKhGq9rxkN/0BvFywyD24wSoZJ/ddEI7i5VYuXEe6DM7vz8r8CfIFuYwTse0uUG7TK0bRazGXNDUIFM8kKAA76EiMC810L1hh8lV+gmgWFNAYE1TG3MU6kkALIivsPYqumQwQ+YsdrGyAuQiXAUyPBxTD9OOYNiGnaEdofnsTIIiyDOsI1RDNYayBxI20to3zCThlccCHjrL2PoTMdmJb8JTBjwzwUt1Pkp6GICh6YX50CW9L4ARwpwGH8QfveQ4mAis4mJyMFV+THU7p2nU78fG71ShloCt+GpGxZyqrP0h/Q0INl1auIOkZnCgz51foaOSwApN947wobX8nBFbSeUKcg337ZRUcwE+Lf3Z0kz5vsGUbOnzk4YzcwyBh6sPDAUZgMuDPT5r4JMqwQoKLmc2KIaQ/pZ4yp6iUZvIQvZMp1r9WIgvjJ0VWpWnyr62Pe5bKNMr4xvFjwBoIWIAxRqvmZNS0XWNnQ4LMYfGj6gSO6t0yBsV9BB5zBiHHvoJqBuyZwOfrMmEbiOP+Myym9COhnGlTXZ4U/lI3tsUhNL1vk0Y1M8k/DUHk7pIhaXgH1h/LpOYD8NfZhcQTo2EW3WtxAUei6uZ+ArZ9BAOFbW+riHYvDbkmUS1tZVNhhow1cN5clkTCFstY51YD1iTRXhAxvHcpk5CO7cF4jlnGC5JNuVKJj+Z8ixzLXEIMjwpKv7BuvKZPr+l9gL/YYqhJfmBp1CT094= + PLAID_SECRET: AgAuSgqohCQfPBAEnrnaRokQ4985ISeCTs9Kwlm5SPhloFLSrIGxdxpfvXYTWKPUBBYbBWi37hCk3LCVCZilkA55DmkS1N4zAMV1xITgvynsTIjR86Io9zJTwrYacADgUGtqPEeTPQosvO/dHQcGKXBIFzBDaNKG2YWOS6bq9qEU6m06rtEL/kxhaa/bC0tbvECjG5ZOnNtKfbSupwzk6UmYyudpigwunDe0f1SMuGtGq0MhEIBU4/VkQ2/enK5FF3JwOOYTCVJVjVO22EznyVm1EwhkeMpKXdenVLFV77QWRzzT13tcpm3zp70IJd4UnOgAr+nJ/bqAFeylqBg+HgBcAj51kMps4iiz57+ovrMZEYD4rk71JtNuUtm6TSNZ7QSp9mKb5Kg2lkMbwJcXtuodZxZ0ndWocQVoA0OuaySio3Itg747bxqXgmhJDFHEqSBQNUZ0F2Warr+tbQBhY00x5MWAp8qy2/DVVP6gcn36au8T1smujdQiLinEsURbCQ4ATqiq3lJBlAw8SuY7pciJAJn9mS4UQQ5ClfrGZGTVGtjWDe7V8ZsgSIKExFPueIPWGgKmZsyELonjCx+2DdRnkgwVEv8fMDUAvtyM10y4o1uw0O4tjHygmhQPR+OtzvjQPlHeNA1qvf5HnJ4nnCXlpOyeY5F2yRx/lId4bZkowGbf4IALenTB860/+s8tDNUdGPrtntjC7oo6s0PKCyB5XRA8Cr7l4Swrb4/0whc= + SENDGRID_API_KEY: AgBAD4MXuOLMMWNGGnVo4ceyIDQ5ccU7n/lV3ztTaT/oRkxZ4l0roFma3XzuV7hUVP8jZHKtopdz90CcvFHudugwY+UVQWjKkCkMAind6LvzDdFLLpuoK2VyjY63ooEIrcms5IJjZkRD4SxAI+X+FAojphhhqTGfvITA/W9VGCrQC1TvNasUjxX1os9DoNg6CWtjVvwcBQatr6rT2kGZ+HzIYQbPi4QQlV5l0DZblb66o+IQGRD8W9z1vpSi8DuxjyolTMzZxAGohHDfeoj0jJc24yQZQpgS071m6p+KjTBHCwG5HvydJNY3M8ViOWiRqgwt+3l+ljwlcWA7BmYSExVgevd3/wAgmgk+O9HyHPEr/xkIKJXZZx7bHZ70bcCjbhpmsQCDtmf+ExadiKIdRNCcjTonJ/d7PlXqOng++GW3SHHzeycNNw3KBnVKfrY/+kJKIRTnKk/+DaZQt6KTUpFQwBVyr/I1Nqhb22Vovxb6uXGj64jyTN5BpHiQddJ+WhEjG3df/hXX52vnIr1wfPL8sZJTDIf66y2HVoPUTdAaGaiogCzWHi54cRXxZw8eWODigeRP187eClcLANy/NCKbnpiUnemomZjRbLRxMo1m9V7Mreh/lxuB97iiG5gpK9jDVAXnVb+R5+jBW7rqusTAOBs95HuVpCBTok70+nVO5S1f5XMjAZYB7rPxeJ+RzcwFCCtuicskVgHs1vwbdfZCp10SnfyVRSz5loKKvLoghiiQdz8v2UoPa4xCFr14vhmFe8tEmIh4gjLl/4SGuPpULfFZ/2w= + SIFT_API_KEY: AgBZMRST7fcJMEtXSWc7i6CZwKPMhXomIIASEyK9ze9BPOldYNvNoJRBGhCotihu1ngBPDObEstpKinlwjAOh9dqUAMkkjM3vwqKuJ5KT9N/vPotTU4u01+Sr8zhsjPKaac1GKKXmH3jN4y1705Oi039plAYHo9DJSY5QmH5dbm12k14Y6xPXz54LzBAQ9/Ae6nM31sCaTGEGQWHGUomzJHNW2JmewU9qkg+cgqPChY+3FX5SsJ209SMCdkrFITlbv14P0OZ4FWQqHo4gCHM0KtruP3Ic1E89SmcVznYOaytRHZzeyczKIdXji7DjiXL74NBYlaVSfwe1i3tDJeehn6SUor1Re20UnVzzd8Cz4kc7WVI75fgHprAfQU02qwlpp+ThJ6ZyjIQV5LiFuoakc+/ih7F0Clzz2JUUvrmUtFzsUDKgT9id/GnAQ2rAL5ElG2d0Skx3bCM5Vdt9YR9bpVCdzx6g+x6sh/8hw4/SsSpNIOCDn2RwEoLSkOrmoT/xDpObWpQQxteiZ4wHXL83e/82P4grdFsjeKo2W3ncEUtxKqsxho5+EA6UnnfYjycEuCLXZTqLlUeulLyVwITw4IuMlQO3qHeVCJbQA+bjOmZIHfBUJ6jYK2ESn3vDcZbfYdKqqJ7E7kWwWOp7pWpmSCd2GH1SZkzOZZEkw+ZxdyNX7ro23EKc4q8WaYA+ko86aK9XjIaHj6JQmE1ZE572mrUiPYYu3unwqfISEQsMzn/gg== + SLACK_WEBHOOK_URL: AgDXzFOgUX+WnEwv9wQj6azEsKhSv1LbUvnFl3mX7RTRfjfKEOYDQOdAxTDACQQAHZ0QqZ5ACiDR22reuqojL8kOz6EoiFFQVlQhUeaYzdYqp0H1drP1gflRINqlTCtdoHEvPcP9QWtdOAaEB0h97OcFkcA8XpOQ2Un4HZOutssfxBs1KUQOrnm0Pe4vwE/xCSEBC2t3aA/L3yNMpLhAiVtDi3Htx9RSzyi1l1YxBS8VLKXaGdKI2IVgEx0QoEz5U3LexGLA7HyP9oZ6oqKO9AQHeZWoII7QhE8x3VLSoP90lRRHynVnnw8X7krq5wkgOFOnVt4YAoEGNmeAAIzu5L8Wtuc1L7YdVfL1LrmgGLtd/hD6I/meBP6n+/+sLfp3hATDoqUvzuxDoHqNg5XtC6CfPDDaCbZAhSGfhGSqaBYDkDX/J7FEjv2oMrxCKL0xagu+vI1hKdJybhKwx2fWE2x10AzYI4mDwZtfauFwjD0Pa6/rwA4yIfWXICmJ5bUTpYApe7bNZlTSf+peJVFtDYOBrm+b14vd9m5OAwWcYU6Nbi382xINlizT/m+qW4Im0KyHUWSV2ipkR8+2l0kHKBN2pGoevdDDROmUj0v+otLLqc1NnEvMWeXdTsOZAnstm47kU8zUqdhsaSgJW/1ZjhicgT1psZ575lStg4KNmNMWVLPvsQPMCaHMgWf1t7DeB+sHTyaXBwBhoI5pCid0hKj233XicJAX/Prdto/jKszqyacWtLu9EWbXROrf7H9AAqDegOC3V6D1/ve9/tAmamjoc7w+CsTTwA3x9FScU3m0 + SOCURE_API_KEY: AgAQ08HiDQGu9bVzpfLAtPXaYoqEWNk9MnChujRAATgg2jTcL2cq5qk2K8UaGwB3GX1Cu096/MpZJJK+91tKkGukHGQ/ukxM8kXO6JesEPcQc3cu2x9FOk6zcGse4hQ0+fTJ59ga9gdyldzalvA35RQgJGYNvI1yT7HrHOUnlPqROBLbWl2GCYLYkwm7fUYl22nLpldlWtP/VjUWInqDqKrETSaZyxVljZMW2n96MF91OQ2RxaQRIMVCeKd2DaK3Zgim3uaAoTiIafHcDsZv7Iwh2hyYT5lrSY+Xvkd7Vj1d+DCvuzhfuZTBOuSZFzuXUZ4s2rorp4u4OzrEUVjaYZNkd284WA91+JOL8uVYyKFSWdmoBZ7A0ulvGdx8TjuuafPL9f2EOpaRmqRa7GINc0sO3uJ732xQ9PMzer2zo+wq7U+JVzCzDhc6TxJMG3+U8Rlbmlq7hGR786bOniw7mYeCuntB0tcq1xB67fBfKmbEpqZ24kjuyJCC5jq/s8W/MUM08C49M/imQVY1f1I8/tW0S1VAEsNfIOJRO5Ge28hwvEtMTjyLUkxY6NA4Pjk6NUHjQOxArMdzeFad1lr9qMEi0m4sH2Coc+lrNJJouvHAa1fVUe72aE3mrXiLna5CKqUFfEIJ4pqMMN5Bz4jKgWpB5QLDWmQG6WydOLLlyRL3F+UvlIguslzyE+nYCGgPlIMvLvkkB7q25Jr6Zqq2Ggbqs6AYWV6DAyxHpq30EIuLxoR8GLY= + STRIPE_API_KEY: AgAATQGKzGn0ISBrqEBv3Tzqs3gB365pKSjHUd4jme/x89EE6/FuO+DT7YEYpQPXM+vXlflaBNdujhFknD2F96k+psk7Xz3e/cB0a0P4SBrRWuoiWE9otHGUGJEF4IM/rzsnyOIjLqlgrX+gXsXAchxh1Mjja18XO2g0jn6wNS7dSH8FMSSs22HlC5755m1S8vydvWQ7jPoMIHnmiHkKv46Y1TMeJcEnGJaeM1+N3zrzLqN/ejj/ALmvuRkOM9E+9j3s1yIfOqw0TM5Lfw60afl46dOGO4CddZuYXd+bHM9JlUSlWmWKN0QlpEpWlWUqG9/L20sVvlJ8/COrxZ/Da4esklr5zX2lQqsnB4TRKdUvHU/Ck+gt9c2a822IWRMME5tYpBVIABebRIICMBg2I+M9oP2WQ10qX9AfcQ469Jhk/Z/B50sP/BDeegq2Cvz2oljPpeCc5x7qDV67aE4jSWcp7yvVhHbOUpd0XaJKOsCM23GINgmeDlkpUaQ8Lgu8ZQymhBjVIVAnmmynjRPo3+diEkjC55+LSFsxMNWFULM4aIOih2Ci+wx+vrcASb0vK1DXu6YiLZpG0v+NZk/v2qjm2mUCfu0xl29wCWuX4IMMoaHqrrsEv0aq96Yrczn1hOmLFlEOhRjvGqGavJxWdRFy8IIcIzcHQZI+Fo1gaBzMgxHqccH/H0oWm3YfxkkK595ik7OMi+3IrZs6e2cN4JhILN1CbB72QJPnghBX9Uu9n3lgk/YGdBXl2v3R+U+N7fH+e0leKE10IKhiVfTLlROhJFw90fnRBDfoKmuPU0JOLxLQODxT0/MbzYsThnEBU4WL8R6yrcvpPbCnbQ== + TWILIO_ACCOUNT_SID: AgA3OKzHKUgibs3lAjvkDoMUlO6dVHpqB5sabUZiJ6wJEALrX/UQsxnPFANAJqcDc0ttNO25YCF978puvVoPDQcz62fk9w5qOuWPrB+7x6GtOdJ2vNRXDby231I3PrBoL563XbUNzB+XhFt1MFgyvuW2y66YXo7JEkIUYv23cRVKDK1RbPDv+5kGDYYskyjuxCfD6s8w/lwnBervO5T/vIJo2TP/BM8OnPhpeEQXzWoi3aFOr/Bli2nOqF5VaLLrFUajJ8Gf5SQlcMbkz9GvYgrG2PikXmSDGRao4D/0HX28K93aRkkQ8PdU+hf3nz3X1ZFk5cel0JtFbSYdjVg9GgQD9H4UodCgABEWE06wgqdsVcq7/Y6l6OieMZyl4vyBINo9GE3ZPP9ON2uTh3X3ZU4vMOupB1Yx71iq5Yn9WJeMwhmtBJBMNLbsn/k9gJfWG4D/0Uo69LgNQ/Qsvl/7Vy4GKUjDm+YVJ+r1OrGe4LU9hOLYzLcCPdp5oBf4PhdKnUdi9kNIn0qO/PFEpRabbYMtghrhQB4z2Nw9O3GkCIvCf2muu7VeiA6p8JSIfvouFqewq0nSyI+i8CZdgYcOLLwZuxZjeYap2koKBSYgZqb+ZvKwM+x6MfMlvVNR2W6aJaMBAy0NgqxPzCW4PAifdC/QpzDINgg90KVxmyf54vbFnVhx7vWH+cz4/UJpJeyRPrwmTqxP2KYslfSu22sqeKCO2HfYKMIinTFPXqq/ftkkDgx1 + TWILIO_AUTH_TOKEN: AgCa3fM2ep/7PVWXn/WV+0+XaNDz2uqDuS0D+MLSrkV/O/SvE7gqLTHLvzDl0Z49XbfyKPs1csFqtu6mx2CDjHDVWwtdWOnLthN/NvRxF8rqn8fxcSKygSAI4ytmdne9rPF4HU/22EePseGpBXvebmvuZMqgTyHLjr0cpMXf43n2ZnQU9FJ3lVdTBb4Gd4z30KeMAx1Jw2M9szsiopxjqqKaGGT239yuwyRWxJHNQrZZb/KATd0/78XTQCE1jTBRlKlW+l6KgP/BsCx5TVNmlmB0/r2mLMZMhR64FVRXV1DvDExBpEeybuFWphAFE9p0o1dlGGAE4kD0cwN8HGt1UIMXpMB3hYyQdKa3YefqMpgkVCz+EXt3pYhFLkp7Nncxk5y5sOe9BzkAP1zqRMDpV9HoFQctzPiqspXGJDDwRrbke+KRoiLvQXncP4hwx68ISBfiNx0XDMI/C6YhqlfbZYXgRVuI4z0xt4FLzo/4IC4GYkKPiEVoDRg9IQK2zp414Ic6Mfm5NcvGE3VMJTrGc24/eZNvp5yeK9a+wCEpn94mtW7N0DM4bwf6F73e7AV+cinAzgUfOJkcxvyQV+Mc/84PmFsrB+uE3M3Bg9yd8hJk/eTzbZg+gCeN4ZnBIKHY11S+Gwsz1yT9eMcI2PdnqSPQBqp4EujpTIQIc7r+O6GotCXL7sffQgch3MQMChNIbe7kJgivuiOe/yC0VDCdPBjOiaUHfG/H9zFOt1iDZmvc6w== + XAI_API_KEY: AgBlGK9Ewcvn5O1kNwE5tpcAash3Kq+yhGMaIrFwhLcR4SNBTZF1H5Isa8CcULOlREZZLQdsjIhb8xe7i/P2w5ZNb7FJ3bXe9VyRLxuhlOM+MRWq7qzU5JSPdKmzOnzQX8LA2+AnDmsxuF+FhcQVAY6RSEjGrgTulsFADrD5d8bY0YPYQSaWSrhF3WJih+IeI74pP6q8TYHOy/Mmra5JmdOUBbs8Cr52DKAWmmFG0X/VuaUNT6JMNd7PAm8A2OeqYJLRRGQJVQ/WoOkiiLBOljDTASk0kHqNcH6Q0SNWumLJU3uSiRfmA68V7Hfsq1MS4HpJEyYFSWq9PmYLP859xpHYtkWlog/tUwVOjVq4QUrfzjbQ8lNcqtMTvBcd6iUtFB45J5RvOmLaQXLttU38fdwv31G1KQk5mwGWoCsQXo4vrXTnW5c8QJ0VVSFkP4D3WLSrTinNBf9ooKEpWKbkj56UkSR84IaL0C0KG2tdqojVIbUJfRcb0da20QLI+T/9D4AfAOrSjLt1B0OQplLEWFZcCB/ZF38MUJswDyVgk+mhyrWadTVvI0dhYVcljWij8ugT0bDHfZdp6/1GluImsq3x+zN86iJT3ES+qcJf1xZ00HMf04aodr2X7iTyPWtiyaQVLzFyzXG/te14n6Ott8g6eSbn/j9B79kIpuMMYBoC7uqxDCgsMVLgQ1Zh+fCL8MUxyOyqyKbaM31+loFcER3bkRfAsKJ2hM8jlQ5Q5sxmMh3janRA9wdW6eeNwSaqGZr5TqhYM0zLW16PDU3nsrQV4jb92l1y/QOpQpHEfShYFIELuWE= + template: + metadata: + name: banking-thirdparty-keys + namespace: banking-app + type: Opaque diff --git a/kubernetes/overlays/speedscale/fraud-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/fraud-service-thirdparty-env.yaml new file mode 100644 index 0000000..442f59e --- /dev/null +++ b/kubernetes/overlays/speedscale/fraud-service-thirdparty-env.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-fraud + namespace: banking-app +spec: + template: + spec: + containers: + - name: fraud-service + env: + - name: STRIPE_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: STRIPE_API_KEY + - name: SIFT_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: SIFT_API_KEY + - name: MAXMIND_ACCOUNT_ID + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: MAXMIND_ACCOUNT_ID + - name: MAXMIND_LICENSE_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: MAXMIND_LICENSE_KEY diff --git a/kubernetes/overlays/speedscale/kustomization.yaml b/kubernetes/overlays/speedscale/kustomization.yaml index 143892d..582ea26 100644 --- a/kubernetes/overlays/speedscale/kustomization.yaml +++ b/kubernetes/overlays/speedscale/kustomization.yaml @@ -5,6 +5,7 @@ resources: - ../../base - ../../observability - speedscale-metrics-services.yaml +- banking-thirdparty-keys-sealed.yaml patches: # Add Istio injection and Speedscale labels to the existing banking-app namespace @@ -26,4 +27,11 @@ patches: - path: api-gateway-annotations.yaml - path: frontend-annotations.yaml - path: fraud-service-annotations.yaml -- path: notification-service-annotations.yaml \ No newline at end of file +- path: notification-service-annotations.yaml +# Real third-party API keys (sourced from banking-thirdparty-keys SealedSecret) +- path: accounts-service-thirdparty-env.yaml +- path: transactions-service-thirdparty-env.yaml +- path: fraud-service-thirdparty-env.yaml +- path: notification-service-thirdparty-env.yaml +- path: user-service-thirdparty-env.yaml +- path: ai-service-thirdparty-env.yaml \ No newline at end of file diff --git a/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml new file mode 100644 index 0000000..013c3a4 --- /dev/null +++ b/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-notification + namespace: banking-app +spec: + template: + spec: + containers: + - name: notification-service + env: + - name: SENDGRID_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: SENDGRID_API_KEY + - name: TWILIO_ACCOUNT_SID + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: TWILIO_ACCOUNT_SID + - name: TWILIO_AUTH_TOKEN + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: TWILIO_AUTH_TOKEN diff --git a/kubernetes/overlays/speedscale/transactions-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/transactions-service-thirdparty-env.yaml new file mode 100644 index 0000000..72de797 --- /dev/null +++ b/kubernetes/overlays/speedscale/transactions-service-thirdparty-env.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-transactions + namespace: banking-app +spec: + template: + spec: + containers: + - name: transactions-service + env: + - name: PAYMENT_STRIPE_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: STRIPE_API_KEY + - name: PAYMENT_PAYPAL_ACCESS_TOKEN + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: PAYPAL_ACCESS_TOKEN + - name: PAYMENT_COMPLY_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: COMPLY_API_KEY diff --git a/kubernetes/overlays/speedscale/user-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/user-service-thirdparty-env.yaml new file mode 100644 index 0000000..e39f2e9 --- /dev/null +++ b/kubernetes/overlays/speedscale/user-service-thirdparty-env.yaml @@ -0,0 +1,26 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: banking-user + namespace: banking-app +spec: + template: + spec: + containers: + - name: user-service + env: + - name: SOCURE_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: SOCURE_API_KEY + - name: JUMIO_API_TOKEN + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: JUMIO_API_TOKEN + - name: HIBP_API_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: HIBP_API_KEY From f15143e3aa6fb02a9733bc2e0ed26d59f8194c73 Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 12:05:48 -0400 Subject: [PATCH 2/6] Wire Slack webhook for capture; re-seal with new channel webhook Co-Authored-By: Claude Opus 4.8 --- .../banking-thirdparty-keys-sealed.yaml | 44 +++++++++---------- .../notification-service-thirdparty-env.yaml | 5 +++ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml index c35f781..23c9679 100644 --- a/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml +++ b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml @@ -6,28 +6,28 @@ metadata: namespace: banking-app spec: encryptedData: - AI_API_KEY: AgCddXWwteqeDaSXzlhyP+8GGbmy78Cf0U0+46bovMGPSLKgI/oiyYORatev2Gmgf8tZXi/6shza0IfUhmlr1lIvhkeM24tHIhqtJsUJbVwxNW7S6R+LfnsHbBpElkrHtTQbEgIotrL1TiLEAa2XY6zlGYzO1pM7N0T2U2YGywIpEofeNHUbLVthm2SzXJO6crmbni85HK0MGZyn9ld73aHqh+brUOqKPeO/pFEXgEgz/A8MmlNwXaPxGdaFNuJO6+fbCi8wxMdBCP1lnkg2jtxQDEdaO917gvgSfKeJGWKp/8opG1gHDgE5Xe7k7mLOJq18m9mY0W+I5KaUX3g/W5Juo2xWrzVzhUKKxmrGtkSWjbrbSEwQxu4cGlDHrSM2jeRwcjjv7ZehkX8bzM1sMJNOhkeo6beergQ4TGH9NL+sJcjjSbm9U4+zVSq0NSp9I55nqbwAGKbecPn6hL20tZZhfzdizDWbfA3B1+RLvk3OWir9k4gLhggIt+QJNLcHd8BN0VtA7zTgfhuMpmrcSRUv5Pv5gobJYZY9xfc4XgNmpV5PoWYN/XVr1HPZm9MjVWQJUM3arxg0PeCdsUbg03og/OmxmdHfCL8kJZ0WZ5rGIPtqpHGK+LfVcalW+uHxEW3u2kbrGRzzF+MtTpTKtB6SmyH5ysVpTzx0gmgSIQ0HFKfiWf+vMGpfC9MHiakWXSwoDml44wGbZdldoLygfBRliiQj38f8BxmcTqAzMeN7kKthzLautzty4EPnUlxct37iA3q+9Khr4sDPUuoCpLxaCZluvuufFV99wpkpSFW6XTmmHBtRIkLfREBDbz2b53Pb6gjlagZiFgGVl/k= - COMPLY_API_KEY: AgC9RP6Mu3a4qlnnE+pi8uREKTK/8WXlJHDFxqYzd/n8JuJE2N1uEeb9Kn88nQxsneJ2ZxzXXI4ZojauCY+UCSD2KfFEnchIbZLZZDWuJiq3RwMCMICKoEL7s9XEqfdbuKE/8+5ThmN/i3uHkmg95Cmx3x4uD/U/t6sQxHoPlasevK6UO0BEMGE3yvN4EbhKO+hvUNlzepUwxIJOAZQd0vXinsX2/sdOqa7Wdp2iHXbHHQpxAm7WZH5brtlYU+87e/bf2v6/kgXfyT58zTpoyTT/5yRb+TDQRTDU+cckDZQ+9cSE/rSNHkEffhi2JMQPXRZlckkDQiYGBPLdxpCZSqC8NqI6TGE6HWPb+f0kETArhKjX/C2F3y6Mn01cnC4m28MaFB8G/UPIlzaXVLwsRQJSUS4hKcwrUlvDE9Inh4y/SoPQjd3srf2N4GToYP5xxLC+dFRCxNinAtwHpqDAscBgVKNgpuoNc7v8K8mk7MEycO2IWk1M8F+PKp1QBf5GikZaqlJHbNHrHFHfdx7PQHGdJ5IQ+BmUskWtUE+Nvy80GlErGuB+Q8Sb6xE7V0dxpSk7hNhTjgOR1fajAizFSA/dhTBsA1tcqAskQqxxxUG7L/022ByWKNRDqqBEZQSFELG/urWIg5+qtMn49s74ofZPyqOFhj42ZRcRkjP3QAoUPSnezLPN1711Bl7FdgsFpu6a8mvQ/RcUu6du3dJ31Jk0aR9RG6FaJnD+uT1wDxRsXg== - EXCHANGE_RATES_APP_ID: AgDCXL+ygCo1Ky4CJjMPDHnx8iVc8u7Bh2BtJdE0GOQFEG0b3hsqntfDJVOLB5uQJWPoe4IVaHM5J81ZZJUVgxaWvvFbldulzPHGAPRkh2QNoADTgsvzl1HKSPTwetoeaH6fZXXFibmiGzpnXCu7xaEbGOdo4poKBR64dYVVPYm+07/Y0VWwi6ehawQWoav6ZQfgCjjGCsB6zSvN1g82ibv7Fi5+j3zZ3MBhbd7Uejt0F0YPqoIo0oyUnWkHsiVtBFMhySy1ymgiOYbBVbopf0nEQBV+JYTOnnx1d3xjOtc7FSbzB0kcnSruZ/sfquMOX/QniUZayF+VuWbIsnTBlgYU0X+JTfXztHeGIc0l5hMAw4EhCdKw+ySwQEHXdq1FwA9LoxH6i3/c5bs+hZLmZUuLszRPEpqHysL+9XCU46T3RQF2Q9MZcTVuNg9/HjPvsCD3FdQD+49CebtrW59tGWXtq5KFHStz34zuDpP08YN4QdXfu+dE/vf2qaSR5crLqWk8LtRzDICTuMHbw+Z089srRaR7PDO+wABfEaEF3wj7VFCUqinLj2ZJV6nqCL7GDubdNenAOZHFahp5ScyxsR1RrMJEcmtmLIQfcR8Fk845UHYOIT69xNSaNvH5Ofe2s+2+iqOY9gE2kfpyaON/BAhh4X7KtnS0VR0C+Pz3KH6wcnq161GGBjQWcpkT/36tvLaKqVT7McNj7Ti8C77hOKV2QCyPEwU0H/fCwfR4bZWx3A== - GEMINI_API_KEY: AgDZWtvMJm+ceXwBv9uKKCNLSgP+K2+m+GppYwCA224Iv9xhNLJ42NKq/gwxWwLE3IWf8+/WglUS2QoQEphP0XtLkhdmJGnRo1AXGkFXepASGldQfPW10VPXiBW2r62AVIrgubQqK/xVJuA0EhziwBcSzPnvDhGYd8fIXh6Cs3niKvsi4maPeN0l/3ZbHqSU5+reIt74VfNyDrJBRnsC/7+b9nWfH5c+QcZqRN6zJH+atNVD83GV1rddXR66YZgUvatBMacsDciNDIB2HHTUdmzHLl/qCbWdrWesuX21YgEnHy1l++dfaKUOQxK/50NBcu62DF5L+kN+pToYeUGfi3L4VE7NkQ3R8t8WghCJVbV6Ok/jbd8uDtQTbDsrMHyfH6asYmV11SWZIbkCE6hO7JDADdH20hpVkoxaBQIWVdynD3PE+gGoA04ZHx8vDOjY/ebPLHF0hW6bvaMyv60XhAb2gpZRQx81B7APD4Za7bJu7lyA3JT+cJ6V0OjmgUz6i611GN9w1lvyUbMQZeRB2BKkQKpr80ZadobryUbyiwZPabbgZn+dDS1Jl7JekMibbmxiiXZew+SY/v6Ma4uAQE+MIECzVV0MN/7CfH6mXSTZUr1o3oIfOujm3SIfrVM+YCr0AedAxmKnWEebxBfUWUMbnk/CdFY/RXG12XZ7midjwekW6s0veTpqBuTz6RkHf3f3YGVbNUddtfMk3ApVEcNKzlhLXWJikUJoMtHmgFP/LSg+p2YnWGwSj0GobTygKN2DnUl66w== - HIBP_API_KEY: AgCa/Qa73iN5smi66KDPHXn5+IZ/IsWB56opumAkR/95xLJtNy6TuAIBsDfo54Un4D/+A5ShtGSQCpQ4PjpIecU3B+tlbK2UNKGr123XBGYFx0KykZeZPjS7Z4VFrvRpb5lui46EYChYvHsZB+yQOOSpf5WG2RbkYDX4tDdrhmevrjDm5CZBpTPBMmHDgHuPN946XE7J4sutkhco/X8maidrRosiNmPwjh9I/jDB9spnaVCB1BpgdWSUVz3mly85QIOL2KS/Us3vFOueAO+J4T1HYh1B4G7oA+sSwDiZ3HtamHv4pG4rTR3g2g2QodASQjhc1Gd/vj/iUhB9BL1Rt2iUNca7O98Ld2MKjukPUq+FwohPOiMl9VRy2Ez7ww0dXfFfPW0VBcrvVsbPChsMVrmVcxir+8cMATJNNxz/OBRNdjI7qQdaaoYR3QhOWWOVkRPW3WOmqQSGaJ1rHv+kOyED0CzJ8JqDT32tpPMLRrpNo2wXaARvK78D0dl+w12dM0uNGW+Y8WqFJz2neA3Ps210ocKfwqX8Kv+jSX7gCyXD895mzoVmdYFoNi4LvZ4W8bNqdhQnvtUJqfVxeDh9jULVhjMZfTb21PY93kbc0vcTJQUglK95kC9THDuhoVZHeGLTU++AEW15o9VbVp2tqwOlfI+TogLS/LDmyZ1YtEMzY5clKkV2O/2D7uAvQX1B2q69Mfy1u92qL05tDWijSBNwIMQDa0md46k9GgqbHQ+1DA== - JUMIO_API_TOKEN: AgCCvJ+cCSJ/yfYRITJTqyiLzBYku37rLE7mPi3TaMSSJT9i4RdJSogZDjX0QhQHiWwnGGsOd3IPhmOXwUB66WWBheKh+3m1yAVR/OYJ+d0imVuLc7nO2yEQfJ8IzP1bw9F6jejArV/w5gxX8W2GRdkeIB+Oh1vlxdm1f/2+FFispypbG6M2l3s0peY3/R8T3IE7o99LmnpLny6FCQ4OfWTLA4G6w/8kzwRS4wuJPHwIqwphnwbjk7Qm+i5AxBRCsYe2yrPARC5a/mB4TSw6nVobX6izGgzFWhGgKOFCZTmwdaiGPUIlnqNQv4mNTXFnkV+YNrjcohFA5ShP2/eLLdQrbQbPaQZr5oLfE59iSnKWvwuVcx8SN05A3QPgMaKvGsHIeBBeack47oRKS0cEjqS35h4R9s69WElhGUs90X0neRE026NF4JAR2vTzA3ggmBlbQq7dlwh3mCkdMiRGB/+zt89ZpY5qw9+XdX9J+14ZTKQJQpU7D1vn6TDxWZ9P7eKLPOEObwYKx6CzWtc4BrMQDsaEBBbhp2Eh0rtgqf1Te/nPQe/C4FVPXT/hAw8gEUJkn0oaoEMdYH0d5Uo2D64FpwAKAB6LXigCAX8bpBR0k4cA5aLoZ6X2dqlO1+RxEaWlrlUSv9m9Y/Sbzqb7HOSf1zVl/0bhBhjPcubChjkbnSNBof2NIxk7SAPErQIzyCFunx+Pj1yXe12JzzTL/AO4eK+VSrrK0AEqmqrSElpPrFi5U5OYTmeP - MAXMIND_ACCOUNT_ID: AgA1VJiclhQvT/SqXHks10Hau3U8lLd3RJ6bm8ztc9hoJi5hqqJ9ee4VJMpoKAmCF2NZO/AaxcEDGqENT70KxFGM6Zur1txX+Guf2JJkXXOK6nh7S1iLzznIvHRYNJMMJGf0YIcTrnuyF9xNOurRyaYZxLXB0ecv+R1r3gVHn8uRwA6ynrCfHrKY9LtF+iKBI94ggyj7vpGRoj1KY2brPeIiwve0gisF/Cas0+JYPxX37PG8/agbpUAYMteOBRpQIWiVscTtYdWjkft6T8ujADf1aCDOTbuv5u6dj/H08awZNtQlKqgah+Ny6x4UtCjTbRUdzhmA2vAyE4dDjxqnOmGN47Tnv1HA99Fnojpkj5wJN9x8tVG7iVNkEMhumwHbladSAjnLOV3jiz8SZE/k4CidRGkdAv7gv5W4NmEkAoaLZz0H8czvtyuXYVUKRraxP4WlP36q4Kluk58fuBg0vaz5XoSri10VlgczVi0tKlNGSXNP+bGuHDZADrAqsnDzk0BjbfYnD1TrAhcUmb+o53HVSJmJ6snwJ5erN5rLvv/K+d1KSfCXkfi6NXOqtQsEClspSap3XUGM8H0HLS4TDUjMnsGnDNynGDq8iTTrfKeNsVE/Tk/qX3b4A9GuLzRPB5zQJUEnxxyzwI8LbRgLg6g/gJQAHK3kMHiyEncva9A4N7JRbUO4lVako5zLM0VXh8o3vTJlaOqO - MAXMIND_LICENSE_KEY: AgB0E62QSRRNuQQwm+4NhCnHVit16NW/43EZdScP6c/XWvpM5JoOZXpdNnznSpLrrU1CuAQQOy9YRgLCeD1OiZMO/aLNmsutRBwO1RLws/0m03kQV4hOecZpfW/IiDRIfRVToK2pKowS8HWhW+xaziSZCZy5Ybku4Jxs0PdQt0e1bOjN9XFbgQaAUjz5TV8DdWUHOIjvXwdYoCbvLrnuEm36YcfpZkl3+SySApGfi40LVyKVPuF1fV2vZ/2p5xt8QtQ8zQN8md2Snvi1Q+Elteds8nLCw8gkc/MOc8apeWz/IucyGVYK8NFOCQFCj0JYVSrJ8i3zSjx3IsbXmd4gGu6Z/P/1ydlveBFWjL+cVfzrNKIBSO5hUjXllUmceEmZZUwC7OjmaEmqIRfIZM9h6voj/Ub6t3tDrpwQuq8Up54ZrYRLPgDZLGE/cC5GoQowkhu1UA9dlUn/lerQBEUu3xSPwp9Z9BFY2nr1vLIPZLI8ZeVUK9nOjtmYiXJtMRw4cz/y7ZBP44rcVYEWUYMmwRb9LmzWi47nIIiRsi/Iy5i8fhUULS8MAyKWG1FT2x1QFQRtISjIHfrpAhqce8FGmmqGbkA6CKRFuLxr89oVbQ8X0A2cPA10vg5A+dR1m0I8pi13X0H/TIDldtCNbQC860HmD6BvoIoDyzYlP/uyQWM4nzBRLadFmkx8cAJeOCkutIQeyvtDKOoXluC1fEXDCTqr - MOODYS_API_KEY: AgDa4PLrahdUHzdMkNyl0R8GJfo4j6l1N+ATprf6m2Bs4indw6lmU9qFbyaZTHKEH4zi7dwEZcBoPsRyRIYdw1ALZ12tK1dKP+GQpXlDVgNeDmk5Q1foyDTOqLrgGyGf3A4aE2tdjAXRPDG71kEYtSvwUa9DLaFQ+bMfjLtyAGC+iazBjr0lNKbdP7+Nx5ww1+a/jgevbPPaiDX6nSpr0qgDZZVPno5aCC60EDfl29bB69WCFIyQFvozWs/KSd4yd2qGAnu1UNqt7Y+eHptJmkSVp4lRtv8QGXUR+q+VHWUJL3Im34xxVo3Fs5/PdxCpld1YztAJdkVpujXWLgIuv87jLldhkUAFBXbaqgrRvpAoL+W+tbciUiwucQAwyT283y3ZqlPddbIItuvHLyd+ogwYZy0/ZejXNs69KcVi/30pjbhS+COLq+QIgLb5/C9FC37LvxVcfBcbcG9bstkJeUo5wLateypTUqdN5cB5kmus5w0msSrST/V1DRJ2SQ1tTVNDWZwmKSqpx8e9hZHPkJootVbQ9/UmykqVr1ycfMt/0TP2LK9g4L3rbb5Yi5oJxuQG9z6u3h0DItFZAvCDLG7aau2ZgQMcmh5kfWXYkOYHXQaeplpA5ubG/5vgMKBiLCkEIGJc6EMmSTLlbijFNX7+3mPT0TCHF4tJgyDZ47zgSQlEk9raSMldf/o4HAvY99fqs7CODC6uswCfOG2AKTcp3LXuGnWHVej+UUEKXr5j81JwhZDUQG5PPOOURA== - OPENAI_API_KEY: AgDRCYoE7EMqze1TMGy1i+x9I90+lJZKzum0mYIhrrXvaa9t9fkr59lDHhOPkf5opiu7yyfPYaWwGqH7pSFHmQTdnEFIWcVpe/gRLQbnvJqtKQCqDv8ZS7h5sZZu0PP6W9JePhMj6VTJZKk7Woc9aBYAjD1lrkC1/0KLER54FuDjKVPHTBlH06vWnWgHIcwe3fZyFs3l3z8G7aek9EBcVwdhwZE8EnXxRomTyZh7VA0/xc3yh6nBJ/b/6THwi43XKFcS7Kw6W7xG/lcbeGx5jEPPNqFXzr7aLuDF3c6gnaYl2wLYe6s2yhm/HqzzV9Tn+GPcwXb68QAOK1beDoXlWbPZUhxQXb2NK8kgwijbwkdJBdGBkCGODeVgYs+ODcAl4hGYvu/f1RYXpCQ6k1AysgjRAso0k1SymmqBzTqkRpRyVnotlI/VA0Qz7Oz2hq82NVR63kZu7bdz/3WinWZ3HegR0RwouShVWH3EciZ2e8XEYS8WADiU6HUFyxVoFBqLN8nus7HYW4OEVjDshvVfhlOkFgFMTWC1VRwfG8UFjVmboND+j31CEQsKSKTzldWUSmc72DgMsoMlOVhGC4/Kq25g9GabiAK1kkqvBP2vLIVjWIhOUaOSQLHnyLkii+2Os4/Mg9mu7d23KGm5LJrAULysEFZwhrRCBU2U0xcTNxB7zUPcSdblzeT6j+mq3SIUbCFcvlqJH/pOfzK23kSAOtRc7AzOddtPidt8ytSK2FdlNn+BPrtbYeeX+ICjwX9xELaWKgpi37baDqDICnUH20w2efQKN1CM+8iCxpLUXA3J0oDFHwP5P7Q3zP2jWotWGh+5IicsTZDCtDN9H7d3hvwPsIu480e94XBATqkVFHKf+W6efRp6ElVSrJhh36/DvmTe9qPdGDCYFnf/7WqMlT3I8ObMtA== - OPENROUTER_API_KEY: AgB8ekWtwK+ppJl9xatahaJ4M+podWKakYk0pWDb22LTadNwTu5E/+xkap5/g2ZtH/cZ/3swosf3MTdZvMapW20Vr+TCFzuV6BHj05Il29OLkBue4FhwxYgyuAhAHJ7qotkwtpVVPkd4glKoYTKjLs368zwxiWqmy65UXg/NBWg31vbZ0kS+Inn0CVsc7lvGTyFosqDLRbSGc0vQS/SVQPgbgEzNtYuZMBKSK6GxTs0FbhxSYX2on5wbyVmii+vlkfzbtq1bb1nIVGhU9u2qOfdMjKo2vSww1IaZlYfOpPWhaj0tszXJpZWiUS03i5GfHi7u31VBAoW87uUKLEIpdW+A21AQ3bn/fmlWLNei/RvRfoPMYzi0Qbq94OUEEkBwI5cF4JhJUNenuN8qNEftZBCmU1sfxuNF48xaH/gE9zWghup3TDBbXD+Z1G/H7G9+Kx1MY5V29a/fwSnFu3QHr4TBuf2NcwH2hMidOKLfHy/g0Mtits+0EnFipzS+OYGFtuHy/mVkJd+RFdS90GNmM+pOcy9qIINU2a9Jcc5Hzp/vWta7FQtAk0uQaOXpODPP9Pc02QtT4LA9pdt0BWQdIRftrb9FZWeJLITVHDy+mrEbrp1BoUilux6/PDimA09LWvaPf4r7qCZrpWnHG2ez/0wUeo2CpO558ukkgyv6/zIF3zKslTgP8zJYVbz/b8srOnyE5ouOGsDMTiWorTZJ3d9LSYxWV+q3K8Fdmr8rSfYSCm2AqAVyCi+1ZVZPLZ1JjBCHFgtpCcDZ48o4AHz6BaXhs4GwTQaI2x7j - PAYPAL_ACCESS_TOKEN: AgDct+C4n3vqIufc3fTh8zG4svjb+U+cRS8YEKVuDQRFS4xuRO4byG0whiLaxGBlYDJEtpt8O8tH9FW/sjB06BmgEYDjbwYbtsCnR6MY+KJHMTbPaEbKlLZfhfxxJsvJ7UrJrnJ9hStxOJYE5GXjjO8ejEkZCrIKo/WMAbym3tCH2x5JuinbvzqgjByXb5NymWPawCrls0ISMv7vEtsZiqT9BEZNS/iHzbzDQUPrA6ypX38BmVWd0tOQHSUmlAxNzBs7L7V2pxmoGZBXQUXNQBpgtWOOCL2bmG4s+TVaUMREoWG/D8NR9OskDcjBCW6U3KQYOQ+qu8XJOJ8CfwDA2ZSZfyQ+BfJ9cQtLeC/1n+fhk4KPLTEdz7870O3RP64zFGIKQfDfOoQwHDIE19z01yfXloNmeRCwSuFNuz75ADGpy3Jj9JNkBbY0vJ1KYW5Wr0Nkg9bnp/On92rXOAoPodQKFmLZU/ONIDMOUjyJ4WfRBVOsBVhyLruYrRrXyXf8j3xUheSW9IROuvE3pOrhs6qDo8j9znVOW2zbfAzgKVPDUrUuF+/kbHF6H0O03gXjQFswnr9je7Xnad+ppzbhw1BvqGNw/tj9HSrQGZs5TcGgPO3SVxBPuxfaTR5LhPxSK2ncxDO87TRxul+D9AqoxjdtmR6DG6cvnVIWLfuy6eGkjEzJ7zp4LgEits8wh9iwcHfF7COwpsAG84rlEH7txBscjKsAFK1gJSSsdcZaWIW5NcGVqPPjVCTBv87l8gZlQvu8EZyDnDUdvSy7iMctOQcTDNEBRs46F4t2AcBpcUcbUpq85bRiWe0F7gk+nZTcdntv - PLAID_CLIENT_ID: AgDTBKhGq9rxkN/0BvFywyD24wSoZJ/ddEI7i5VYuXEe6DM7vz8r8CfIFuYwTse0uUG7TK0bRazGXNDUIFM8kKAA76EiMC810L1hh8lV+gmgWFNAYE1TG3MU6kkALIivsPYqumQwQ+YsdrGyAuQiXAUyPBxTD9OOYNiGnaEdofnsTIIiyDOsI1RDNYayBxI20to3zCThlccCHjrL2PoTMdmJb8JTBjwzwUt1Pkp6GICh6YX50CW9L4ARwpwGH8QfveQ4mAis4mJyMFV+THU7p2nU78fG71ShloCt+GpGxZyqrP0h/Q0INl1auIOkZnCgz51foaOSwApN947wobX8nBFbSeUKcg337ZRUcwE+Lf3Z0kz5vsGUbOnzk4YzcwyBh6sPDAUZgMuDPT5r4JMqwQoKLmc2KIaQ/pZ4yp6iUZvIQvZMp1r9WIgvjJ0VWpWnyr62Pe5bKNMr4xvFjwBoIWIAxRqvmZNS0XWNnQ4LMYfGj6gSO6t0yBsV9BB5zBiHHvoJqBuyZwOfrMmEbiOP+Myym9COhnGlTXZ4U/lI3tsUhNL1vk0Y1M8k/DUHk7pIhaXgH1h/LpOYD8NfZhcQTo2EW3WtxAUei6uZ+ArZ9BAOFbW+riHYvDbkmUS1tZVNhhow1cN5clkTCFstY51YD1iTRXhAxvHcpk5CO7cF4jlnGC5JNuVKJj+Z8ixzLXEIMjwpKv7BuvKZPr+l9gL/YYqhJfmBp1CT094= - PLAID_SECRET: AgAuSgqohCQfPBAEnrnaRokQ4985ISeCTs9Kwlm5SPhloFLSrIGxdxpfvXYTWKPUBBYbBWi37hCk3LCVCZilkA55DmkS1N4zAMV1xITgvynsTIjR86Io9zJTwrYacADgUGtqPEeTPQosvO/dHQcGKXBIFzBDaNKG2YWOS6bq9qEU6m06rtEL/kxhaa/bC0tbvECjG5ZOnNtKfbSupwzk6UmYyudpigwunDe0f1SMuGtGq0MhEIBU4/VkQ2/enK5FF3JwOOYTCVJVjVO22EznyVm1EwhkeMpKXdenVLFV77QWRzzT13tcpm3zp70IJd4UnOgAr+nJ/bqAFeylqBg+HgBcAj51kMps4iiz57+ovrMZEYD4rk71JtNuUtm6TSNZ7QSp9mKb5Kg2lkMbwJcXtuodZxZ0ndWocQVoA0OuaySio3Itg747bxqXgmhJDFHEqSBQNUZ0F2Warr+tbQBhY00x5MWAp8qy2/DVVP6gcn36au8T1smujdQiLinEsURbCQ4ATqiq3lJBlAw8SuY7pciJAJn9mS4UQQ5ClfrGZGTVGtjWDe7V8ZsgSIKExFPueIPWGgKmZsyELonjCx+2DdRnkgwVEv8fMDUAvtyM10y4o1uw0O4tjHygmhQPR+OtzvjQPlHeNA1qvf5HnJ4nnCXlpOyeY5F2yRx/lId4bZkowGbf4IALenTB860/+s8tDNUdGPrtntjC7oo6s0PKCyB5XRA8Cr7l4Swrb4/0whc= - SENDGRID_API_KEY: AgBAD4MXuOLMMWNGGnVo4ceyIDQ5ccU7n/lV3ztTaT/oRkxZ4l0roFma3XzuV7hUVP8jZHKtopdz90CcvFHudugwY+UVQWjKkCkMAind6LvzDdFLLpuoK2VyjY63ooEIrcms5IJjZkRD4SxAI+X+FAojphhhqTGfvITA/W9VGCrQC1TvNasUjxX1os9DoNg6CWtjVvwcBQatr6rT2kGZ+HzIYQbPi4QQlV5l0DZblb66o+IQGRD8W9z1vpSi8DuxjyolTMzZxAGohHDfeoj0jJc24yQZQpgS071m6p+KjTBHCwG5HvydJNY3M8ViOWiRqgwt+3l+ljwlcWA7BmYSExVgevd3/wAgmgk+O9HyHPEr/xkIKJXZZx7bHZ70bcCjbhpmsQCDtmf+ExadiKIdRNCcjTonJ/d7PlXqOng++GW3SHHzeycNNw3KBnVKfrY/+kJKIRTnKk/+DaZQt6KTUpFQwBVyr/I1Nqhb22Vovxb6uXGj64jyTN5BpHiQddJ+WhEjG3df/hXX52vnIr1wfPL8sZJTDIf66y2HVoPUTdAaGaiogCzWHi54cRXxZw8eWODigeRP187eClcLANy/NCKbnpiUnemomZjRbLRxMo1m9V7Mreh/lxuB97iiG5gpK9jDVAXnVb+R5+jBW7rqusTAOBs95HuVpCBTok70+nVO5S1f5XMjAZYB7rPxeJ+RzcwFCCtuicskVgHs1vwbdfZCp10SnfyVRSz5loKKvLoghiiQdz8v2UoPa4xCFr14vhmFe8tEmIh4gjLl/4SGuPpULfFZ/2w= - SIFT_API_KEY: AgBZMRST7fcJMEtXSWc7i6CZwKPMhXomIIASEyK9ze9BPOldYNvNoJRBGhCotihu1ngBPDObEstpKinlwjAOh9dqUAMkkjM3vwqKuJ5KT9N/vPotTU4u01+Sr8zhsjPKaac1GKKXmH3jN4y1705Oi039plAYHo9DJSY5QmH5dbm12k14Y6xPXz54LzBAQ9/Ae6nM31sCaTGEGQWHGUomzJHNW2JmewU9qkg+cgqPChY+3FX5SsJ209SMCdkrFITlbv14P0OZ4FWQqHo4gCHM0KtruP3Ic1E89SmcVznYOaytRHZzeyczKIdXji7DjiXL74NBYlaVSfwe1i3tDJeehn6SUor1Re20UnVzzd8Cz4kc7WVI75fgHprAfQU02qwlpp+ThJ6ZyjIQV5LiFuoakc+/ih7F0Clzz2JUUvrmUtFzsUDKgT9id/GnAQ2rAL5ElG2d0Skx3bCM5Vdt9YR9bpVCdzx6g+x6sh/8hw4/SsSpNIOCDn2RwEoLSkOrmoT/xDpObWpQQxteiZ4wHXL83e/82P4grdFsjeKo2W3ncEUtxKqsxho5+EA6UnnfYjycEuCLXZTqLlUeulLyVwITw4IuMlQO3qHeVCJbQA+bjOmZIHfBUJ6jYK2ESn3vDcZbfYdKqqJ7E7kWwWOp7pWpmSCd2GH1SZkzOZZEkw+ZxdyNX7ro23EKc4q8WaYA+ko86aK9XjIaHj6JQmE1ZE572mrUiPYYu3unwqfISEQsMzn/gg== - SLACK_WEBHOOK_URL: AgDXzFOgUX+WnEwv9wQj6azEsKhSv1LbUvnFl3mX7RTRfjfKEOYDQOdAxTDACQQAHZ0QqZ5ACiDR22reuqojL8kOz6EoiFFQVlQhUeaYzdYqp0H1drP1gflRINqlTCtdoHEvPcP9QWtdOAaEB0h97OcFkcA8XpOQ2Un4HZOutssfxBs1KUQOrnm0Pe4vwE/xCSEBC2t3aA/L3yNMpLhAiVtDi3Htx9RSzyi1l1YxBS8VLKXaGdKI2IVgEx0QoEz5U3LexGLA7HyP9oZ6oqKO9AQHeZWoII7QhE8x3VLSoP90lRRHynVnnw8X7krq5wkgOFOnVt4YAoEGNmeAAIzu5L8Wtuc1L7YdVfL1LrmgGLtd/hD6I/meBP6n+/+sLfp3hATDoqUvzuxDoHqNg5XtC6CfPDDaCbZAhSGfhGSqaBYDkDX/J7FEjv2oMrxCKL0xagu+vI1hKdJybhKwx2fWE2x10AzYI4mDwZtfauFwjD0Pa6/rwA4yIfWXICmJ5bUTpYApe7bNZlTSf+peJVFtDYOBrm+b14vd9m5OAwWcYU6Nbi382xINlizT/m+qW4Im0KyHUWSV2ipkR8+2l0kHKBN2pGoevdDDROmUj0v+otLLqc1NnEvMWeXdTsOZAnstm47kU8zUqdhsaSgJW/1ZjhicgT1psZ575lStg4KNmNMWVLPvsQPMCaHMgWf1t7DeB+sHTyaXBwBhoI5pCid0hKj233XicJAX/Prdto/jKszqyacWtLu9EWbXROrf7H9AAqDegOC3V6D1/ve9/tAmamjoc7w+CsTTwA3x9FScU3m0 - SOCURE_API_KEY: AgAQ08HiDQGu9bVzpfLAtPXaYoqEWNk9MnChujRAATgg2jTcL2cq5qk2K8UaGwB3GX1Cu096/MpZJJK+91tKkGukHGQ/ukxM8kXO6JesEPcQc3cu2x9FOk6zcGse4hQ0+fTJ59ga9gdyldzalvA35RQgJGYNvI1yT7HrHOUnlPqROBLbWl2GCYLYkwm7fUYl22nLpldlWtP/VjUWInqDqKrETSaZyxVljZMW2n96MF91OQ2RxaQRIMVCeKd2DaK3Zgim3uaAoTiIafHcDsZv7Iwh2hyYT5lrSY+Xvkd7Vj1d+DCvuzhfuZTBOuSZFzuXUZ4s2rorp4u4OzrEUVjaYZNkd284WA91+JOL8uVYyKFSWdmoBZ7A0ulvGdx8TjuuafPL9f2EOpaRmqRa7GINc0sO3uJ732xQ9PMzer2zo+wq7U+JVzCzDhc6TxJMG3+U8Rlbmlq7hGR786bOniw7mYeCuntB0tcq1xB67fBfKmbEpqZ24kjuyJCC5jq/s8W/MUM08C49M/imQVY1f1I8/tW0S1VAEsNfIOJRO5Ge28hwvEtMTjyLUkxY6NA4Pjk6NUHjQOxArMdzeFad1lr9qMEi0m4sH2Coc+lrNJJouvHAa1fVUe72aE3mrXiLna5CKqUFfEIJ4pqMMN5Bz4jKgWpB5QLDWmQG6WydOLLlyRL3F+UvlIguslzyE+nYCGgPlIMvLvkkB7q25Jr6Zqq2Ggbqs6AYWV6DAyxHpq30EIuLxoR8GLY= - STRIPE_API_KEY: AgAATQGKzGn0ISBrqEBv3Tzqs3gB365pKSjHUd4jme/x89EE6/FuO+DT7YEYpQPXM+vXlflaBNdujhFknD2F96k+psk7Xz3e/cB0a0P4SBrRWuoiWE9otHGUGJEF4IM/rzsnyOIjLqlgrX+gXsXAchxh1Mjja18XO2g0jn6wNS7dSH8FMSSs22HlC5755m1S8vydvWQ7jPoMIHnmiHkKv46Y1TMeJcEnGJaeM1+N3zrzLqN/ejj/ALmvuRkOM9E+9j3s1yIfOqw0TM5Lfw60afl46dOGO4CddZuYXd+bHM9JlUSlWmWKN0QlpEpWlWUqG9/L20sVvlJ8/COrxZ/Da4esklr5zX2lQqsnB4TRKdUvHU/Ck+gt9c2a822IWRMME5tYpBVIABebRIICMBg2I+M9oP2WQ10qX9AfcQ469Jhk/Z/B50sP/BDeegq2Cvz2oljPpeCc5x7qDV67aE4jSWcp7yvVhHbOUpd0XaJKOsCM23GINgmeDlkpUaQ8Lgu8ZQymhBjVIVAnmmynjRPo3+diEkjC55+LSFsxMNWFULM4aIOih2Ci+wx+vrcASb0vK1DXu6YiLZpG0v+NZk/v2qjm2mUCfu0xl29wCWuX4IMMoaHqrrsEv0aq96Yrczn1hOmLFlEOhRjvGqGavJxWdRFy8IIcIzcHQZI+Fo1gaBzMgxHqccH/H0oWm3YfxkkK595ik7OMi+3IrZs6e2cN4JhILN1CbB72QJPnghBX9Uu9n3lgk/YGdBXl2v3R+U+N7fH+e0leKE10IKhiVfTLlROhJFw90fnRBDfoKmuPU0JOLxLQODxT0/MbzYsThnEBU4WL8R6yrcvpPbCnbQ== - TWILIO_ACCOUNT_SID: AgA3OKzHKUgibs3lAjvkDoMUlO6dVHpqB5sabUZiJ6wJEALrX/UQsxnPFANAJqcDc0ttNO25YCF978puvVoPDQcz62fk9w5qOuWPrB+7x6GtOdJ2vNRXDby231I3PrBoL563XbUNzB+XhFt1MFgyvuW2y66YXo7JEkIUYv23cRVKDK1RbPDv+5kGDYYskyjuxCfD6s8w/lwnBervO5T/vIJo2TP/BM8OnPhpeEQXzWoi3aFOr/Bli2nOqF5VaLLrFUajJ8Gf5SQlcMbkz9GvYgrG2PikXmSDGRao4D/0HX28K93aRkkQ8PdU+hf3nz3X1ZFk5cel0JtFbSYdjVg9GgQD9H4UodCgABEWE06wgqdsVcq7/Y6l6OieMZyl4vyBINo9GE3ZPP9ON2uTh3X3ZU4vMOupB1Yx71iq5Yn9WJeMwhmtBJBMNLbsn/k9gJfWG4D/0Uo69LgNQ/Qsvl/7Vy4GKUjDm+YVJ+r1OrGe4LU9hOLYzLcCPdp5oBf4PhdKnUdi9kNIn0qO/PFEpRabbYMtghrhQB4z2Nw9O3GkCIvCf2muu7VeiA6p8JSIfvouFqewq0nSyI+i8CZdgYcOLLwZuxZjeYap2koKBSYgZqb+ZvKwM+x6MfMlvVNR2W6aJaMBAy0NgqxPzCW4PAifdC/QpzDINgg90KVxmyf54vbFnVhx7vWH+cz4/UJpJeyRPrwmTqxP2KYslfSu22sqeKCO2HfYKMIinTFPXqq/ftkkDgx1 - TWILIO_AUTH_TOKEN: AgCa3fM2ep/7PVWXn/WV+0+XaNDz2uqDuS0D+MLSrkV/O/SvE7gqLTHLvzDl0Z49XbfyKPs1csFqtu6mx2CDjHDVWwtdWOnLthN/NvRxF8rqn8fxcSKygSAI4ytmdne9rPF4HU/22EePseGpBXvebmvuZMqgTyHLjr0cpMXf43n2ZnQU9FJ3lVdTBb4Gd4z30KeMAx1Jw2M9szsiopxjqqKaGGT239yuwyRWxJHNQrZZb/KATd0/78XTQCE1jTBRlKlW+l6KgP/BsCx5TVNmlmB0/r2mLMZMhR64FVRXV1DvDExBpEeybuFWphAFE9p0o1dlGGAE4kD0cwN8HGt1UIMXpMB3hYyQdKa3YefqMpgkVCz+EXt3pYhFLkp7Nncxk5y5sOe9BzkAP1zqRMDpV9HoFQctzPiqspXGJDDwRrbke+KRoiLvQXncP4hwx68ISBfiNx0XDMI/C6YhqlfbZYXgRVuI4z0xt4FLzo/4IC4GYkKPiEVoDRg9IQK2zp414Ic6Mfm5NcvGE3VMJTrGc24/eZNvp5yeK9a+wCEpn94mtW7N0DM4bwf6F73e7AV+cinAzgUfOJkcxvyQV+Mc/84PmFsrB+uE3M3Bg9yd8hJk/eTzbZg+gCeN4ZnBIKHY11S+Gwsz1yT9eMcI2PdnqSPQBqp4EujpTIQIc7r+O6GotCXL7sffQgch3MQMChNIbe7kJgivuiOe/yC0VDCdPBjOiaUHfG/H9zFOt1iDZmvc6w== - XAI_API_KEY: AgBlGK9Ewcvn5O1kNwE5tpcAash3Kq+yhGMaIrFwhLcR4SNBTZF1H5Isa8CcULOlREZZLQdsjIhb8xe7i/P2w5ZNb7FJ3bXe9VyRLxuhlOM+MRWq7qzU5JSPdKmzOnzQX8LA2+AnDmsxuF+FhcQVAY6RSEjGrgTulsFADrD5d8bY0YPYQSaWSrhF3WJih+IeI74pP6q8TYHOy/Mmra5JmdOUBbs8Cr52DKAWmmFG0X/VuaUNT6JMNd7PAm8A2OeqYJLRRGQJVQ/WoOkiiLBOljDTASk0kHqNcH6Q0SNWumLJU3uSiRfmA68V7Hfsq1MS4HpJEyYFSWq9PmYLP859xpHYtkWlog/tUwVOjVq4QUrfzjbQ8lNcqtMTvBcd6iUtFB45J5RvOmLaQXLttU38fdwv31G1KQk5mwGWoCsQXo4vrXTnW5c8QJ0VVSFkP4D3WLSrTinNBf9ooKEpWKbkj56UkSR84IaL0C0KG2tdqojVIbUJfRcb0da20QLI+T/9D4AfAOrSjLt1B0OQplLEWFZcCB/ZF38MUJswDyVgk+mhyrWadTVvI0dhYVcljWij8ugT0bDHfZdp6/1GluImsq3x+zN86iJT3ES+qcJf1xZ00HMf04aodr2X7iTyPWtiyaQVLzFyzXG/te14n6Ott8g6eSbn/j9B79kIpuMMYBoC7uqxDCgsMVLgQ1Zh+fCL8MUxyOyqyKbaM31+loFcER3bkRfAsKJ2hM8jlQ5Q5sxmMh3janRA9wdW6eeNwSaqGZr5TqhYM0zLW16PDU3nsrQV4jb92l1y/QOpQpHEfShYFIELuWE= + AI_API_KEY: AgBeO/RfNCClr5nKxrfytsf2T3sqbzG+7ATyTw2xGL75V15zdQ3wRtEGRP3e/mRcWB2pnkurJ5u4LoGV+amay5exr4Oh4kIPE34SUtTrLmFljggu7sJj3Bb7HJY+5L6fbqmTypWWgxjtjX/SQb/i7KiDk3tI5NrZJ2KZBpDFYQxT1XmK1z/wWVktTnO6ji/VZLY4pLPoXCCLDf4wdGO4OoZh1CP4scULVoF+jLbhvVKtYZHlajuetP5xGzBQ7ha11AeFYWVMIxzyaKVyEn21XR2tj7WLUYnSCp1h6qjpGry79iinOlbqso+MciCTdCn68Y4lXJpBR8rcdD99y2y6nBT3woa94L3Ze6/48qk5UshGI2WF3j/lTBdaQahFW2sIbjDASVryxNzDu9DaPGPSFTP0UDBkVA+WcJm2UXf8yW938V46ZlCJpP8RWxVzBIkFoleTlFPZDBYd/FcwW0DkvGo0Wu1zxGkZVyh3cYCOv64+Xorg5HcbZq4V+sHZPlZltJKDqcfb7GsxujxDubtC5L/4y24N+o6n2XM8PCE1rsYv5okFYXjGTgIDbdD4fMuBjOVHv7Zi/VZJHLboIT23J783OCSibOLtFmiFQD4qcYo0e6ic6FcsN6qitAUUxLV2LS8cKhc3SxZwDpD1CfpwJbvzZGVdd0QbityVlOwQQAdR8T8HbEPB7mgj6rXtTxfqmpi7UbAiKlTSHLjwbw527lUW2D5xJNFAfwmMlXWydWg6lQcql97FG0r/cFslBsCjopfxetXOSkPBU7xocJF5HQSuRzUvq2lkqXQRQXNBqbcqCEwcR6INueO8edibX+j+UMdl00IjTF4pkFyLxbk= + COMPLY_API_KEY: AgDYDRcPomV4vmQt5e04CmW/a12kUgCKdXs6A3GfsRQnjaglQz3kraVXwUzLqNX8OK6Fon/ESuw2H+7m2fNEEPPaLrKOm4SyBpUXNC8YcuKHPRnm24uz0sj2Smsme08WboAMGRNc0aC36Owwe8NTVms4l2zn5ihDJ8c7p8U2dJ+yFJxkYo6qx4K22VMvQICTPZIHs/nM56o+77AhSli18cpfikdi0VvbIQH6yzdEWPxSTXSsTKq9R5pwdi5b342MufoSlgcyLh5pEjMp3LpgZAX3N7Hl2CnBx3UVHCqLzLsU/SJodi/MHx9WYbQqr60wm+5ZRhimWtp950P2l6JinFid4BhLgQTLZN8dfbVcW2AEFHxB7WaClatYujFfaIVrk3DgUEcRZ2SyuFqP3LV5VZp7DOkJlbmfGQAnwuUGBbNTmnnVTa6dD1zuo5fq2282BZGTw2lilXb7+Bm3iwTGHGVhgESCJ1iAVLK5jgXIoY7/D5dqZq5iXGuYOlM8omNkhM5QX1FaazV9EC6jcNTgAjeFSCpZDHJoIodOWPGD1nsOHBGXYcSUdDG83JNRVvOfvo4qbA7thBuCQH7RmJ/2349xyKOBMuKGPJXM9XmfrRL2PS5SO+geipKWKtEH2d8ncWPVko2Ko4klvqhamoK84F8/UbV/emhWe7o7TPtLoMX8ZCo8KA4QeutmHDh+Ai/HW68P1bYsXbpw2JoPuQMxEdagpKOpGybcq/i5QP8yRz5VyA== + EXCHANGE_RATES_APP_ID: AgBALjFYmYaXhY1W1TGtE1RYA5XWgwGSlE4y7ExhnA7PatMSpaFuxM7Suofps3bfQ/nTuc8LkWoChHRxPegHBomvy0rIQmC305FDysYMXaI1T0/aRf3jDwNLZ55WP71UUTjW4jnyb52wzM6y8GYoTKYBzBDGDIEXIe9RxBSYgC/ZXi3w0HgsQl4JG0eYSEZBt3X27YX5fjBHFjZZhn9HHfHClSLbUw3PleU9ZN9LpM45M6fmRD80DJuWPytUtRAAzyCmn5ujVSZom8W4l9L5R+t0NoehQPmkpFUmA999q2su9T0E3iVkQxSyHI+wI8tE5qmB3UDwQIwsbNwzTDEveoNXBd4gAbewLQXudCQgkLTFQkrNGXQEgOLeNziBEGmNyTVRGZKFQWCHvSy7IAIZ7pkr5ulA13Kto7Q+vgikXG0ejBnNkLpnl/t4fdZNkZBLJGiZNEamKEErsu51Om4CUInpQN6iTWLPSk/9RDxaQoaQe1621nwzmDCNKrbP7YYC+dhX3Y3z53dVPPrQty+4sHNZhKfCx0ZacY91nv6F95j2d5eWXUmJ5RF4TehhrYYW9jijmSNd53D65/0L70AEt0rrhVZjVL+1oCblHw5SalIQ1wNSMln7zKbIne3tPzfNs37kvGU86F1/hjIHCXPeXQ6NJaYAMtZBB4bEkxLQUEN1RtcsKObx4zjG+B52SPE7kvhu8dFjTYiSx5+N8xdAUrwz6ON4l9OFTrHcInqt6mSVNg== + GEMINI_API_KEY: AgDTJllQqHddHDC8TAEMLMH4Jxylxh6vZlxkgBKlb1HjoulpjiF+hXZNBbM/E3iT7de4eZ7mD8RPAi2mAH/0z1BGmMIHUX5NljWbrKJLbYGGWkFsR36HySvGb+nanuRALJG4co5/p4gkwbauia54WWc/PAcvLjrrun0I8k6Y8HPKu2LWuFUalbR3G8nbiiuxdzeBePI7uI37o+Od3NqsTM05wTfspjLvGSlaZwTS85QZNbr7++emGcKhHOp6XZI5CFYJT+T9BAOGNGfgAMbDyy7g7yCqSSk9UYuu1lhItQEgTHjKbop9FcAwXyRw4hO+hCIstc8sVAcGM2KjVhJ+4f0CFajjUFi7wxJEYFdCRRwYvnVykY25lZ4S/S1yXKLouyS6Hh3zPXhSO+PMYMsRnjUQof3ZW6wlWNWMT2s+y/qnnWz1arqyUMcm8abgUWPy0oOPFVUDS7OLuPmQjG2+cRZyuZvxlw3WCwuqTSq//rKrm7LKWRSrnSnbYn3yhUCfIOHdquhxkooVnMAk2/5Ssg5ZD307v7ta56gJcmiqqsvaBWQcnsbYpu3s2em2B/SkvvhD2jykf86hzUwLdy/fjOUjB9I1RREHpGHlNNzd9R6BYPetdtXFv39YqoJFtg5IGdhFfgAVhJnJrnnSytRZj4EMC4TTVZcFxonXNFqQKFglM6MEEQHJxqnVuIvngK1R9N2Ykje81wiHu/nD0nhzf51pDRGbuvLeWSye0Kp+L+KJReJ36tXewxg3AhaJx4MGXx9wpNez/g== + HIBP_API_KEY: AgA/HwUCk57faCV90rcpluUKEQvuA/oWyUzjRdnMq4MCZyWawX1eA9hs4X2hDViZAuLqT96RBnZWhcsUYEluITJWicxN8AMu3mQSryA5A/tQwT99gFHySf8tQ3gfQ4sj1mQoSmE3V/JytpMQd9aNR/P0HscXTdbZp+mHy3KS0LG2g8kI4/SjCq3OIwP+YytJF6ZQb1u8bTDv1nhrzP8MXV/YGRFz0j4Pq2ZUKPPkrqw2/APFl71fR3r67K4JEHp5gOxgmHA54A0N6uLD4gDv0jMhYeOwl07VnCNUysZKqwEAsMtjhOykZx/vGko1vTDDF8dUZUnOkQZBokaqr1KcSCho0S/Woap1eXfMuFr8CGvXwCFQSKhS/5wLswtoLl/YpAZXSvDdkWPxEXHRhB4EMqJEkEBAXoR/y8DvD3jghiroKkNX93g47ZhCRkksXdlbPHipafcN3TKdIpxK0Bx3CBui4xFtvzZjYAmmHrUyHqbO2vFlKdZiIj2b+eQYR/AzMWQCwDv5GQ0nw+2/UVuLMLR+gamqgOIB0a792EgFbsf/ZqplW2kPKQpWduFq/aRUMhMWe/ZdGoK2y40NpwsTCHRuZ3k28vhcOi/zvt1iLli+cu7E/Eul753Fw2BzsR0zQNJlMf1h8K61NDwtRP70x/GTRE2eTgOzSnhgrOaRehpzsCeSt76U8j302YyFdhc/HE3rdaLU85EpfRT7vIl1bYe8DAARJ/A5JiogRv1vZcYFYg== + JUMIO_API_TOKEN: AgAtgtr5xXIontZ3BrpcZLiAu250mWmGcc580tgd/PFLe2stSvPxrNFka/rVNbfAmWp5la/2pVI+4aS/MnAhLRN+pQgScbEq3ozhI6bEo6IMbzoyGOD8t9QdTe4nmqJ4U5HDhBP8EBG+bPjXba3epkRwDaL4zN+RInYED4VSqSOT6WeJNHktjPkpYXXrEqv3NBV4pxnj/b2Ika0MtZi22U/bStctCBgG3ICXaORuRDuOVYGmPOsgl3qgWGrk+sIacjqsGB/sApJWGsyiph1uulEHBn/81J4F6+CvzolasYinVFmlxL7hRfi5PpWo4+WwWAGVD3jWLAe0qjj26R9EPkhGCJDWp4l50mRY3ry/dwWReRy1P8dIXmGMxoSHVHR9/tR4DxsyDM1qm+nTn4D2B4RztsQkT3pe23dPVLZu7g+ztyy5J4vxd+2IMlf3pbxjHoUW9xUzc30IZpCCSUSMlne7myLO52PO6lvnuynJ5RZOoH+2uU8GHCRm6z4IPepQlzZG/5rDhhUv9JxYF+t3/AJ6StHJgw+z47LOpwBiMKGmrrMuYP7avzQOGPZjY/0RBZ9OAw7dUmknor5q2bR+mDcbhMe09wbEGSSv+6riwSMXcH5RQHDQXuKp6xm3iKCO7b7IhrMNNvxyR66YpvRHZ1eBj4QEx8JkzBh+NPRwKM6FwuGU04QObz21e22ChuLQ0fP2HQKmIQ7xlvUUMaHikwM+C45bRhwBowQFkInM/7TZGXPEuXPikPpY + MAXMIND_ACCOUNT_ID: AgCd7Q7a0jwJCjPfw96XlI2Hs1RNoIsReCBpB1fxOXdbTSMSM7a3XmQ+j2Xq8afkBpc/Lgjsvow+t6VoLKuk0zVcIxaxrHQHbolcPQ7CgQfHgKvMIHTryMjuMjlM3ee592g6JxWRTeinSOlelVgeNZ//YzwKyp0DVRY8A2RR2ifS2kwYgIeDBr4GRJ8gPO2Y09lrCoD3KTE0uml7mL88py044/YVowRZdagQksqfEF3k8o0VLaL8QvAJrUmXdREMrA+n264PvPdvmd1UJrq3ih/i73pigzPlJ+F5f7y7ai31DKML3dbDdbs2kZkR+yM8zTBn6sEPTlIND/QuUu86ZO2g9sCxTDcBvnawUAmedNo1RQqyqJ9hdC0K0BQiHH2yJCB3APFYfrAQj7yPh9fZojf3F+t4nQE1kbB+GAlorZ3YPBzmW/Zu++WPFHnBwBQkmKgkJSWz5q8f8lw+gIuLs43SbQGBgmLvAhx6Jxd1xymKC8rSdGAHfg4wK3q0+dG30/KC8Wbb7Rw+IHHYTi8eUoT1aq4gPQT14IguCFljV70ywRZ8G3VscNWzaHz0gFnraP50lDjjd5Z/JxM8QR5iAzqKOD2BBKVoksbEBFTFV43dsRECRrCGRRp+/gfCRUI6SC/8Bk6XKRyPyWeDA8M78cwAWt++XJ6EksXnygZR4d69HS5YZyr495lPoL4nxGOx6u8yRfbNRsjL + MAXMIND_LICENSE_KEY: AgBmpMqdFOBZwIEPfNred8RS0A9rXbZaDkm9VnhoduqSjPcCDhXB+bdaHsz7N8XfQEgYmIh3FwnAnPC2cbvslrLRDJCPLO+L/uXs5VfCvgnVxJVDoPRV0IPChcz4xYhtjE31Xxu/cMATSSItxQAJsz2zQwxR+5lACPkc6vWwdxJjmeyGZyJ97iLPh3aPDgp/6OrFjejID2Nz71xVqZiz3/ZIxLCQucSMA1KSGgCzDSSig1ayX3R7iWe1Low/tzfSRNJ2U3kqEnbWOwpq1wlT0U85dM7gGX/f1qazBbVEw5tQOvGYxmG/IgWuM+2nqLoeQOYRpUYers/KIMowHpdg/3mYTiiKvdkg3NIbf1pG4chpH+SSfr6e3yJogiByh54NfNxB9shHKrNkPAS3BpqpygF5IrPeYdVr8PhlMJvIq5IDdoPwq+X8t/1O1g1Zb8oZyiTBNrlF4/zJT/GsdXQvg3IdsAWZwqKBcwAZa973xQzCM1I1kmNw2sRU/xaIh/LDKWCcMJ+3aZxtOxVsq1QVtOF3ReCKhO7X5STLhSDPvItAZDyv+UTsIkUR5gSaps28ygG/mgS8gqmgNwnoljDemMevmTotUDqrC6LVORnyDo/YYyVexascv4wNHEsO9KuVrSG6seAOmqoq6ZZJLo9ZazMLZ9932ixj2EPTnNLzK1WjogJUSefDRRJokIbQHITaGWhoDGbtX5g8UwjPm4FAwLv4 + MOODYS_API_KEY: AgAlLScl2DUnOEI6fBCSE5WKL+UkSn3Zt6V8gGZyS7z8fsnMVasB+5d0mNpn96413ygwQTElmYn/oia/WhHr0eUaCAgMqRQnkQyXRrP4WrhVuzOXZb5oJt3E1L4VMFU3iJa5K2DlwwcTPYOPD8yV09D3D37Rq0CVqH1+WyC+tbVPkb/YaC3wDsrMFA+twIhVc5P2FcRbWwtku6kLHW3sHNjCLTvM+cLxkU2ymL9T0Svk9B2WH3HLmhtLhPfKAmHqnu5BPzSKX/nTJGKOg0HPJruxzPzLXV1ba45jYRYgBVpIX3UuAcd3OVko/LfE1ppi7deDIQ11iKbO9m/EQhWVdAZH/uOWVavMR+H50GbK5hEH1hxRh2/l+bj+PXd5BuYH79ADCfyYMTqPCBSA/Y1SLcohDd/qREaMZV3B2dWbn2oWGsqQzlMDY0dlmkxEYc4qfATFJVs5qKhMZRMi+YF1f/j/6BrrLbEtXJHSx0T7loP61Mm4lZkTGdF2O72I9KFpfSpXVgntNMp632YzSIqJxu6SRwRXLHJTWBwGjRkGcsBcy7TG3DIFPWrBoNHEeVA7EDQIaaX6mTcg7ki3f/S5x/gt0ExRBVjvTSnkEm5n+N96wTGI/J2feHfbjIsttBu4oMWa3R7c+ZhM3G2NvNeM7rcPUhpyBxmaw/aN945XGgnQ4b03qWDVleZw+gLBws26un3zo3jd2hWUSLqyocQk9RWz4jv/6QYUEy7GW9bwrEBYMyt4XZydC4esmeWqFA== + OPENAI_API_KEY: AgCiy4MtCCyI27IZCzaPWQjskfDoZ8QGMZ9bdqgVcrRrF7RwlYLJeH9bRzwKgps1iDZ9kTM/L8doQTZllZsXEJ/YpTFbVrEEb54UYy1MjVwwJAXTriM+XTlOMaeFhQtQX1bnlH5cghmrszR3Oej2TdW92kD5tHW5YinwswopQNnxS//INzVID+sHBbU56uCulB7I0IXm2zVAP6ieku9ZOSHvvIare+wSWnsHiI5+H+00ZNDDVc/qO3Ky835gdX/ROZMEimGE2gmhHQ/tWk0AoRU7D+aoOo9Gbuwob8FUlwDm2iO5KE6wNNVj0UhmnXt7fs4wrTsSfDzuvEI6jqHr7pK2AZaly1WyBUUa/aZ1hrVomXgbgB8DJ3LvqJxeNkpOAUCWTy3NmSHHo6C2JzYoWNvnCe/hy1e04qcUOPYmae1xIaQKJFddV/kiDBdAJ0cjwyzrmOkaCoC2nasT1JRezxxeHAPVxiBZc59XPKClMjJAzKqoL+D0e9HhJhAm6YfqHwST2CnMv+mTAbwVlFo/OTmd2ZVeFhYag98zSYuAx86pBcaVK9yc746SmbBD+Ew85bmhlbZsPCvwydpqke+rNJ3+LVp151eSDT9FbX4WyN+E4Tm20iPFJ2n1odzqPwDaXCCtXMGJNTXMLdlC8HGIAwQqtEBIQuPMZ0OWyPMhGXjOG7Afb9yLEAWWNpa8GmZqPAqwmpk3QCHkOXOT3Uz5Ef+7svT56woHsEsdMegFaJfVVLByh1c5a2R74Zf3ViMn2LCWg5SOQfozqv5HCLZPfYMesTXQyhTEKb8XAQ7quclXf1xopKnj1Dp3PlrNqkSGNsAILBJ8zYRmLRd9Z3vwlsWiBk7BRklheuauhsvqPiea7/QIK6em0kveK5ZwM6mEwgyEhphxpTH12U4rMZ1IsrHx5iQrUg== + OPENROUTER_API_KEY: AgBVWFj2FkIiImcfg/Kd8uksObPwNWp/3xbB+WMdxeRkbmti3Ik0+LpHJso/wIx8hNnVoz7BM/Aoz4UTV1EDIv7FFAJutC2i4CKvFIt2SPoUuObranTCyPN95wC+QOL9PgiXi2hJJjmi7On8ha9cxlP7KzmDG8r34Q5tiOuTn51Dkw4v2WNnPkfUbD0dQzeciO/sa0wDQO+HXv23GuKNNyFGOrwQmvK66aK0y0X2PHVKvHfBQHIm807R4Pttawcy21aIdVBSJBgbV4tiT7AvTL9TIgi863/dYwz96CDSU8GbSm/HoBaOR17Vbx0JfzQu0T1VyIOoYBt1jb+nHaZYYjm8VqvRIfn7DVbGHD3XX/kamsB/a5BbjerEOUa4g/eT7Md+tsFGJV0oeUxsYrfqhWZ2FQXR8xYPTJAYgkOg3QzE2PbHMEeaIS9qUOtaCDViNB0OrtkhAymryiD5pIeHkpCx0JFitfrB7No5HkzOOkiJ0q8jMXMPg5/+7kByikZCwS36TTl/9N7aOBCUz78cznUZpvfxBRYOaVAXMGGnGPSVQy0Jt7DmoMjVry7aOc6fr4QGp52hZNW9EkeXhMuC6Jhlq+pt87QC/RMzWeSmXQIiibgsLhSHQR7enqLnxzzzizv/AUhO+GxbSaxBmApgAp2XWaDq6hR2vJbud/sY9EeZovgQS9KTxsU7pWx2Ge1LWtoTeqzMr1BLhe16H21i6el3TR5rNUyiEc7oX62GR14pg9gsQD12oJ/8z9dYBbJOe0rjuDJLyvGtLdgszwLFwYHVahOcs5JlNFjp + PAYPAL_ACCESS_TOKEN: AgBz7TrQ5EcdVW4g8lvwpAiPB7/9tGzH0lD4coXkBY//QJqnwXAtJBkYZyrU7UGKFemXtX8NCzncOP0Lwnb7WP9X0U98+Lk1XDYsWvEAsaHspa3enluSKCsTwYi/pEK5f9Npm42LFXWHgBOOp+rASnBlnBZOw1WOE2sCmISJl2EiR/L7/1ZvhXE2KsxRrDJcMpHm6wFM1yEUnvkILf6SVb/EazHraqrPJiGuzRRZ32aY5ZoEyumVSe+br0wqCoApLRhvsa9HKLYUoH84zbKYp3Gid5bDzxPBq3yiBVDhM7WNlyEj+OvuQc0/ZB3YalHlY0SX9Evl/1OJYLfxI3I4kPAzNcNz6KRn0DKxwxMUEZ4pkiR7LgPTnrBmdcZvlsiw/n3AfzYArgEja80b84vPH8PhTer2Wy9h4TD7TAXPwOHJG6PKrO+UEF2uHR/BfPKBm7FDWgqujRfWzXvoF4l4gzSNn/0fOuprkhq6/W0Xfm9UzKWCAn/h8Kfw+hadbRRucL7RN33lXrxdngfdqBjtBbFXHvHNm5nscrte1iykqEqYPKejeg1i0mx/K5g3lkHD/a1PaNTjZlM3AnZhrKfUhf841cHAWMNVtEQ3fim4qSIFici2Olh0pMr74YXU6XVcuW3DBOoWClERYffPFhfUVLkAD/iovonzabgVTqv5TigXAxnX1ydzB+w9SYcmvvqHBu3hrvn2Wtf5trzNrbDOpQI7HnHWoGwwyFQpUU8D3pqQLwTU2juLdQ8Uv/FkdFy2j2bdGina/wIvjjOsR9EhXaXbPm/eqePJC3Jxy8W8Ct4MnyPq+UTENyblK9Gz5d2YIfET + PLAID_CLIENT_ID: AgChgm1vZU86brNM4nqxJ8myaXT/JnVnYiirltgHoc3nUtUAg1DI/Ml45oSWHQCPuTSPNEnBgR3wLWv5wRGZ4CWPn+GNigrrvRDw6NcfWlUfeBP2rotLe4TOOmjB29Dlidv45bEw7IcxSvr5fKx3ah04jmgr2QxwHKYZoG0VcPd0y3Gxm7UbAAOI9mAOLS9z4XpJbwEByYnIb77jB4/+wcEExR/OoZv72ajh5m29uFyFuq9aMMsJEOUzMXOzEgceROW/PRab0GTqX0IvY53wbewCf8ESC0jClyuei8VL0bU6GE61Bht7N+DrRosFccx2DOk6x/bemVNH1lw8dnGT5czzbcw8laLNi6+ElAHJAhTrr1s4PoZN7PUoC1LHRkPqxmMV5YLegtigQYRUwdiju43j+AOnk08ndGkgllsgFAgCSLbr+Xy76sOt6WWFIpd4HRhbSyIwgdXVXxF/zIyELCrUbCg03u2pEP/qVHIOBr+chHHtNK6Vt9EjiZjJ2P8PpjB9sX8vPIUmfLzzv57uGjXKFAPNjIQMgIpcjQwkhrT/ki8lpRqzMptRpqX9th99zMqytSzDuEwEMo1D8fyOpy0ERXaY/f1hqiNZXM35fcl1qGM3zAT9LRIbHhJw6lfuSxQoMid1S04BckbS/SeRqdWRiJQFpxyCoxS3/qgsKQLB00yaBiFZ5rKYimHZpSdWILYFFbxvCXBCqZdzrHslcvnlHMG8ttD16ok= + PLAID_SECRET: AgDOMgaB0NjlZ8azZ0o9ELxT/YUZgEbJONe5M4YiwMqk71/d/yUbpjYPOdXAe2xBBJdtC3Wk+i+3GcqXZvmLLlX4WYX3S6zeSnYc9yxeaNhi8233TjMPNK7o/mxK7rhD78zMW1OffbwaR3EM7HWsd9/rZ+HM80kSJZWhGZsz6JZQjj4tTQCacQTlylaMsAnmSFVUPRqnPXMtvKEZVhldT6qCsd1m79haiqM3u5jhhPwtx1vPlSga7dO5EjvEs1sasPZY8kFG230cavMq/r35oPn2jXrrrAElssX22h+3vv7KG7SLgbBDwDTMR1u+OZ8AGBCGbPuP/B6yRzhY/+TrdaH6Ulgz+FSAGKKIdVWdgUeNaf/Z6Q75QadPDGAjZvIbD0QWeLAv5Rdjhx/+ukAlX8JP1gen9nxdndIR9/QD57OMmzxa4/GLNuVvf6YASPJdaCHE5OdE586thHAPXqclrVMGTYnKnbdLSFWc/dT3bl6Rk1s0VOD/EJpwRLrcMdu4GIdp4kSm9h+3h78vR5NgVUhIsHAQgd4vPb+V57PNHw2XQPop7N0pWmKyyYTv19/hZ12uimTBMUs9kQhjTAlDBWBjRwLG9PV469hCbfsA6eu4gqxZzrbfzIQTyUQIjq91kwGtQGsQIHqpRfoTpODashZL4boYhyqpEE2ZBUYc/8F5GkaynnrCxqHgLH/BecZwW3iD9HGsotNI1k2CLBNE1HBtssQAiPQtm+85/yEprGU= + SENDGRID_API_KEY: AgCLklUAGx1pmVolieKsszY2AZHFh/8MjiseVY/Aee5i5oP+MSSMKybNT2qolOMww01K3s8ypuu6J6BwbLxgKKLFgY9qySzeh9pHJDPAQGBkEqW/YuZ1nSoItP/PKtjaCqZhBuk78aFdI5DH2VnRBorP71eowen4oJGKiK1GY1gq0beTN43PdmWEvPTbjif2SM+Pv1LWfzYMfNJdc0ZIdNukYlD+4Yo6biUJj+u35B1bTdJcMPihBUZ5nPUQaR+ZlfY+eAY5YQH/eot+xUkKONMLk3zXhPgAz+koYNYYMT3EAsZNtXUwlo0hMxM6IRY8Y3JcXxvu8OR1S12JiMt0e2VZfkmttUQZi4JRFxwj9T+C/5o0TFmNpjPUpjf19TMPS0mN4AyUGaUPnRFGWQA9+7MkawNxMFoAxWyw/Sf1Ova4X25bZuEh5m1ojzQN9il729511WBf2QY65fpFlsDYzc9icgPeKFa+4jVzo84Ek9YIqMCccXMnDrJGwpJczjMcm8M1/MweShXSZY9A0KA2grSeACHt2ArKtU2oXY2KbL5XAWk9XQaosVE1YV0EUdLvqm4QmHo/dzcH7mNM6ykGWjMiTCgEXdn8bjsK4BEB62vnk8BYcdlwLO6+2kwHT3ybzQ89U7bYDwujTs/u5lotwjGVpFdhBBbqFxJVjIMismU1biDiMEOW9tbEa+o+SEKyIBtSX6bBYmfuaYYQ5NnvTyP64AhNVwIYJJZgOwEpSAmYDYJB5vrZtKjzZzydqEiIYxoWl1WQweGH5WOkDffdTXyLeByI0Jc= + SIFT_API_KEY: AgCwYb0yQfHh61M/cTuBRlatJU2H8zgEM+mf8BpyIVmxPF1PVDZ+vP3Y8KzPD7j++0R2KAmnY0CHa3/8hNljU8ofKiQfsHgB95vJf6qhvU/X8I6Rds4pqvfemhr4w/LdkFOwimPguSxkvHHbQiCrHubqRYjmuewWoMn3usQJCNl5C5l9MaifGhaOYwv4oiItZPKHjk0nTwSg2uMx9WLzjEd76RHz2VlR7yUmuTg2UdFm+tyOdH8qhPsyFY4GDY9dOOTbbZxjcMbJZolXFgy4MyyR2r7GrVeRA6mJhwmr6EFNu8ZTgqzjajAwGhAhesYTb3GpA4/mvZrARwyz+uIHp8Sm6cvfjShS+Zw+6V460gimm84gla+tipPyL8eNb7Ii1Bv0ckXzWT1TPTNe+qu34dJhgq8zudrVYL9vDOmz1HGf+Rn+iyRmQkp+Y+qomCnLCQk+7WDSQ4rAdBlby1sRnEcX7+6CpGlepx10ZNGcmusUUom73fCBdPAuDgiRHF5RD8HDa+fSWG/RtwzADFZeyc8ZX7Jo4w2tUWNsZwUiSgF2OZ+DUxPvB7YHEzM22dO75haVOVF3bQdmOarnY3FfTVoP6r6GX3DVxjOgJWk61YqipJaLaVO8SyWwwq+3QQXNda18nQED1+MEdZWAPeSwf3nqZcnoC2j6Ck0e5iI/Mp63WdrXtLeOkcNOnOqu/OhRGMQNcuftD33xBnB56ZYvbWlhr0IMETk7OkFevI9cy1TJsg== + SLACK_WEBHOOK_URL: AgBZd2J4e9LdIUQcof+sDLNPy7DOGjTzK52LqsxauhzNWcuZ1dzuZSWYrwtaKYRvlk+B34k3Zqzx9oYG387+xLb6czNsbQaDfy7fvQCKMVzwalQ+Of0YkC06srleVz6W5x6C5avk9DymgNLAfvokNJq/eoSv0sdWO7n1ZTTDUTq+S7Q5shFZ6tS98mjxzhGskG1M4Sfy6TIUeaZvPMDuNlZGVB1B11GafMqQzwIK+PdNFae0EpOfd/hZhw5g+bvLL24aE5rZseVq2dcvRLGZ/jWX/farv6lV2AzrHybcdnKBR8YRBykyDv7X7EtPXWfeospDnqAFx1AisqFQzHjBlFRX+cLggLbnYAEx/fSPxl0d2yGnbVmijgQvXhuv6ATVvzX0jk4jJW5orzwQE5AjTRatJSSDM9P4YBLr1vstPhbeoriCNC11Z61oZmbQysrwwb/+zzVTZO/QkU/piLmuDb9hfYBADYeo49N4TVY1n8ixKetUhBRTz4xCFTR71Zd/8/CogMZNVkp1JvPZE04WDIRwL2gwe5p1rnAKQuTkukTaMwxHd6/o4wlbA2+z2CCOMaRnVJ1yCn6wbBInwHLEQMZ7U+N2bVfvn/csaldY6OcWDQGXF+Jf6dKdYhXYp/6tcLCGWzmSbnXiS5mDQm53LneyxTbPqhAEYzLLBf1tjoJNir4wDAmmkzGtB/tI9CF06YG3WpsCjxcNOJjvWbdgB1MR/M6lDAb10nUqGsBEkCxgPSQreQL3rqWwuJH/MlekIeqFxfZx56ATwRnvKf/8CoudZcFYY0Jiqhg8dYcW1YY1 + SOCURE_API_KEY: AgALF8LQ6HA0IWaYHAHRvxRMNLqcsBkdDWuFjYTbD7SkhWcpmom6NhDBQw+KY1zyjXc7c9QGNS/NeCwnYD34AtdxMV1q7yRXx7iTZLnxWKwx6xUQkLkDuS0sVHIVGAcYGa9EG+1nJCmATa9pTDtsKeKU+WtWI9tB7tt+wW5CvHkqv+uBVxxtHSsWY9/m8RnhYyW/g+/nlZAO1CWKMEFJg1w1yd5qQmi7A4qm+XlbYbBjT4h7EclkrbG7UTBoicU0cUHNUl78idMmKW720iqTz/ye/Pl8s+dC/Arty4UkJlTk3f9cGjmd3a+rS/UK3ByaSLI0Q4tGstuIiHafw9ydiAthv7Ugo1cljwYMzV527svfBbSu9SiFBVDF4bdY+M7F0evvmsmi21jBV0ezg4vI/peBD3wv+j/nTPwhJgvTBdsLGiq/qfryc3VD4ywqk6PGMNrhMnWioCk+uJ7a0dn6tddCTP5jlPamotANsYlHBch3vlFPy/cDWbg4jQZuQOpabFQqGfnn/ITVNuYsBj7ukXb4K6weF7eyl0FLpA4UpQgq9wR0ayeVAstSEkgUszyia9Y4WCGW5gQMqd7206QVyvlZ6huiV64EIKsI5FK3Ywlu5mX+Yn9zaY8zQbq7AByXTzf22xn9yUURjUJN9feo8d0BV0vBLF5I9GMLRoxpu/AYajGcqpm+H1WdCvWOtF2cN3Yc1geWVkbIsWJJTARnJ8nsmS9KzF8/jZo9cg5Jh+5fZvFSG9s= + STRIPE_API_KEY: AgB4PiFDGJK9O3C+Dfw4fAHZGMdKTupTQCQsq21TflWkFxBniVrYNyyQiCd4LNanExxIo2OAQ/PDXsYDIbI32Z/PjlTjmmX7+CWlExU3TZ8pGBX6hYWGSdnplxRIgDAynXBHGUaG74wT3l7pULrRPB9Clt0OuAcxjyZA4Sf1dxziUhXN2Sly5/epcskV252hPA0vwvPFF9BGXl7KB/j9IKxNHiSEO8xo4X/3O8Ww/y4W6W8y4Z+XT2IWv3auIL+Xb1jH7rSVeHWAoXTiq5IW9NvuNexXxDswQ1qSmOJKO/Z3nyXBZ0d2L/clv0ZjMWSgheZPehff1WwaL+e/gblDQ07/DuxxQh5IyCiOTfgZ+35qVDAHgXcY9dkXv26G/kApYfn3cWl93c9bc/kcdrzRzzxagh0vhT4tF/7L2XHbDIbwoA8ZxUQzLjEQqDPEnivA5bBXb7JQcg82VgCD7/EprbmjvQSBW/lGGe6grl1pKLZgimsmYIoZKQhR5CQTVBYUccU3DzWha8IGdn1W8SQECd1ypJ8aZBAlqoBVQRp4qbRIse5uO0ZVqhsRwnpglfM577uZYfPZlEp/om+MOB8d9HGvbgvdLKfcqETWkGMPyTzr+QcgKaeqJvqBt/ENqdpvOXcOyu+JWWhZpQgZpYSPByFV+GOM9UlVgq8q+lzH6jzH0iML+7JFqOkykknnV8yuFs2ACdRaKPsX+cXOQh/its5SOnn6kCTd9Koia4Paa6iP0fsQtIg/44MYTSSaLeeg5Y0swrDa2nV/7CzqEW/j60Hybe2WRLdJtGGBC+xXKpRaYAunhDzuPOfWgP3dcvJabI1CwVH19ZA8ruIC8g== + TWILIO_ACCOUNT_SID: AgAsPCa7/4tRaNmQ9yIhAUrirW9GWo3ecyufanU/vATZKx849046pDQh1/rAJks88kWDqzjIETApgHWV3yxcTEkarTC5Ydu0Q72poVgNBqUflLEMaSFk4noLTe8wzl98CqB8j1orbX6Hx1hkzetXn7MnhIBUSdxpYSAXii2rw++qmGpt4/rCYeoUTS77hJvNGLG93028QiXp8FBEluVMUK+i4K4X0BzP8GXKFOpWwLPg9oizu2kT9IeoGb7/UddLK9qpPxgPnOL2biRR1obzkIkYDrtUOKBJEInfGr7C/IBDfr6j1n8tn1hL/llZ8My1TGeB5gnORDsxsfTnM0bDNqGYpkkLaeJ3ZjKj2lCWvr1OoxDRHkvteEpoJa7JNVQ+8iUD/Fho/dwgSKTwkpSyYClwMehPkYeUVZlZbKKSDt2imE7fAaM4ekenc6tRnecspn+7tGaXx8PLof5xsP6710lYJFscq9uR9kCZNXkYUzjz3Sn08Rz4FpSeqwcSwwb7t/TlZWUuW5YrSO+yaOuxlBJsz7BrFwp0MIG7Euy2t/3v+zvWElNgJxFf7kvTDeiF7nzSbCmsheGF9eXWWZCK5FAjmD9L0KhZjbxbK3sbM7e0Xyt/HKiirQZpLsRz+Sd1OUGI86SNJ1RsETjuvVQVwJLldN8zRYuclE4Qv3pzQRxILJ5XXUFn3GfMF50c6HH22e5eIIJ3WE1qvt0reTiYpf2hB+6SLjOOU+z1tscB/5ixrXtu + TWILIO_AUTH_TOKEN: AgCrkG+gvofciG01shntIaD6vJfvEdQvyyhJkXnF2PHEs9UoXrKvjRGlj1T9Gj58CvgjswvMOZ+6V/4otFE61PAmGQBRLuNvIerELSbaPjGHQltWtN4hWg8vhe7/D/mXmebiGfi6M2KzqTAxOQppO1ZkitNivDbacWQNQvgI8Z8MMMR3M+ZDnjikG8YTqvI02BwiB/IC+6ZPHVftSBLQvDipYlfV1m94ZMNzUbKbR9fcnJx9sIBKsEURusUBSybnmR7+NMKuME0EGck2uUth/DThTMxB+WZBYCjxvS4F99qnDCh3bD4rELhFeq9FdQl7Kk7vAXgnjSi1vfrdL8AXnt7pwz0YvrR5bgzrUIUmpGIxStslK78tqzZYPMea5S9cZDSui9oYbQKXwDbl7fg2nqLrYrd2Mg4xBbTwrkHgb80kNPbLUp+wstBb7mLX97x/lHaTMPVpV/g4n9Okb8XgByo0/ZcCnXtfv4857i997yhuLZLiIcotY6YLpSarS31zSCjV0XxQoF1VCaSNQ0cJKCmmnmMv48cybZA9Hh1wU0PULnMv5rhBNAfIERBZia6dy8st3e2MxSm/e9iCG+eWlDGKl8+pnkQKzdm1jGUVElBD+Tlaapc33GLfaDLzkjKba0heKjHkVisNIxh7V4KiJ3agCYKPpqZohdrtECUs+oGVYjkbo+LLvwzm2ITq4TQ7iNU/vpz015lVY04BqTDIc21IwgnPoNsXxXPvNSurWDHnJQ== + XAI_API_KEY: AgCpszFaOIW/o6nG3e732Xv+SIDWc3HLibKtGp+/wQly/cymvYpxF8/p4zskJFPjheguer0/evQNeE1fkhgzGXc5OzfVciildASRdtUXRkriPaoBdB4aGeBy8hUc/t9dnDlkOWTPWiPcZkZhPyu5bSEyjM2N8TPEYTOPHvj6kJiFoWAM1flzJ3Xq5iwnzLGoWrAE0Kqi4QH7FdsRKcnRMLQ6lra/MM8xiuPEufEO0eb31pKTGtIa5z4MBnP9lq4Gfl5P8jXtrvvXDOFA2RCHaUrRc5BCllCC+gMw7Q0Z7sfU3dmsjYyFkMhHLuMIO7tV5V93hfq9HYRdLfeRKmV2WTzAKhf1GooH/FjBDmfwOAuS2lPYWY6y+ZG+FojcP5hD5msX1AM4Y4y2Ut/HDrM/2VPieRKKiBBhFk+e7QIBzA3qKsoCN6AwWfSwdOlNJHhAc+3GQy9G7LMJkCbBVSXwS2EyMGD7YE08uYi7RdchAllX4ZnRQA2WnGia6pfnHAVCB//2/4wOLzNrw4BWepx/wrqWVz8mZ5VwsmhjYcScRC1BohrRvuGddBhlPsSn36Iv4tY+5xro3TIK4rlVbsGLsdQpHfmhsNqEPB7D0cbpDoe4SRgkfAGtE0oSHMXzitAl+tf6WicxAYmQ+FrewhckSOuilD+Y5UTa5gpfzreNLlHv2nEAYZqIuIE4yc+B+wUXr91td/p/OLH7PwXh4CnG/BMVEt2iTYQqGBlf6gtLHhjrvO3m4mbrvGWHDf6N1nn7eZSEQQWAA7g7imvtV8nZgy0GOHhqQrZ0jaZZ4PvbWMM7RdybRi8= template: metadata: name: banking-thirdparty-keys diff --git a/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml index 013c3a4..239ee67 100644 --- a/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml +++ b/kubernetes/overlays/speedscale/notification-service-thirdparty-env.yaml @@ -24,3 +24,8 @@ spec: secretKeyRef: name: banking-thirdparty-keys key: TWILIO_AUTH_TOKEN + - name: SLACK_WEBHOOK_URL + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: SLACK_WEBHOOK_URL From c37f76c4ddfc439a8ed7ac3f1fb0776d040659b6 Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 12:38:09 -0400 Subject: [PATCH 3/6] Wire real AWS S3 creds for statement export; drop fake hardcoded creds Co-Authored-By: Claude Opus 4.8 --- .../accounts-service-deployment.yaml | 6 --- .../accounts-service-thirdparty-env.yaml | 12 +++++ .../banking-thirdparty-keys-sealed.yaml | 46 ++++++++++--------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/kubernetes/base/deployments/accounts-service-deployment.yaml b/kubernetes/base/deployments/accounts-service-deployment.yaml index 9965f2f..70c0bb1 100644 --- a/kubernetes/base/deployments/accounts-service-deployment.yaml +++ b/kubernetes/base/deployments/accounts-service-deployment.yaml @@ -45,14 +45,8 @@ spec: key: secret - name: JAVA_OPTS value: "-Xms128m -Xmx384m -XX:MaxMetaspaceSize=128m -XX:ReservedCodeCacheSize=32m -XX:MaxDirectMemorySize=16m -XX:+UseSerialGC -XX:+UseStringDeduplication -XX:+UseContainerSupport -Djava.security.egd=file:/dev/./urandom -Dspring.main.lazy-initialization=true" - - name: AWS_S3_BUCKET - value: "banking-app-statements" - name: AWS_REGION value: "us-east-1" - - name: AWS_ACCESS_KEY_ID - value: "AKIAIOSFODNN7EXAMPLE" - - name: AWS_SECRET_ACCESS_KEY - value: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" envFrom: - configMapRef: name: app-config diff --git a/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml index c31a450..f70e038 100644 --- a/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml +++ b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml @@ -29,3 +29,15 @@ spec: secretKeyRef: name: banking-thirdparty-keys key: MOODYS_API_KEY + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: AWS_ACCESS_KEY_ID + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: banking-thirdparty-keys + key: AWS_SECRET_ACCESS_KEY + - name: AWS_S3_BUCKET + value: "speedscale-banking-demo-statements" diff --git a/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml index 23c9679..80762a2 100644 --- a/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml +++ b/kubernetes/overlays/speedscale/banking-thirdparty-keys-sealed.yaml @@ -6,28 +6,30 @@ metadata: namespace: banking-app spec: encryptedData: - AI_API_KEY: AgBeO/RfNCClr5nKxrfytsf2T3sqbzG+7ATyTw2xGL75V15zdQ3wRtEGRP3e/mRcWB2pnkurJ5u4LoGV+amay5exr4Oh4kIPE34SUtTrLmFljggu7sJj3Bb7HJY+5L6fbqmTypWWgxjtjX/SQb/i7KiDk3tI5NrZJ2KZBpDFYQxT1XmK1z/wWVktTnO6ji/VZLY4pLPoXCCLDf4wdGO4OoZh1CP4scULVoF+jLbhvVKtYZHlajuetP5xGzBQ7ha11AeFYWVMIxzyaKVyEn21XR2tj7WLUYnSCp1h6qjpGry79iinOlbqso+MciCTdCn68Y4lXJpBR8rcdD99y2y6nBT3woa94L3Ze6/48qk5UshGI2WF3j/lTBdaQahFW2sIbjDASVryxNzDu9DaPGPSFTP0UDBkVA+WcJm2UXf8yW938V46ZlCJpP8RWxVzBIkFoleTlFPZDBYd/FcwW0DkvGo0Wu1zxGkZVyh3cYCOv64+Xorg5HcbZq4V+sHZPlZltJKDqcfb7GsxujxDubtC5L/4y24N+o6n2XM8PCE1rsYv5okFYXjGTgIDbdD4fMuBjOVHv7Zi/VZJHLboIT23J783OCSibOLtFmiFQD4qcYo0e6ic6FcsN6qitAUUxLV2LS8cKhc3SxZwDpD1CfpwJbvzZGVdd0QbityVlOwQQAdR8T8HbEPB7mgj6rXtTxfqmpi7UbAiKlTSHLjwbw527lUW2D5xJNFAfwmMlXWydWg6lQcql97FG0r/cFslBsCjopfxetXOSkPBU7xocJF5HQSuRzUvq2lkqXQRQXNBqbcqCEwcR6INueO8edibX+j+UMdl00IjTF4pkFyLxbk= - COMPLY_API_KEY: AgDYDRcPomV4vmQt5e04CmW/a12kUgCKdXs6A3GfsRQnjaglQz3kraVXwUzLqNX8OK6Fon/ESuw2H+7m2fNEEPPaLrKOm4SyBpUXNC8YcuKHPRnm24uz0sj2Smsme08WboAMGRNc0aC36Owwe8NTVms4l2zn5ihDJ8c7p8U2dJ+yFJxkYo6qx4K22VMvQICTPZIHs/nM56o+77AhSli18cpfikdi0VvbIQH6yzdEWPxSTXSsTKq9R5pwdi5b342MufoSlgcyLh5pEjMp3LpgZAX3N7Hl2CnBx3UVHCqLzLsU/SJodi/MHx9WYbQqr60wm+5ZRhimWtp950P2l6JinFid4BhLgQTLZN8dfbVcW2AEFHxB7WaClatYujFfaIVrk3DgUEcRZ2SyuFqP3LV5VZp7DOkJlbmfGQAnwuUGBbNTmnnVTa6dD1zuo5fq2282BZGTw2lilXb7+Bm3iwTGHGVhgESCJ1iAVLK5jgXIoY7/D5dqZq5iXGuYOlM8omNkhM5QX1FaazV9EC6jcNTgAjeFSCpZDHJoIodOWPGD1nsOHBGXYcSUdDG83JNRVvOfvo4qbA7thBuCQH7RmJ/2349xyKOBMuKGPJXM9XmfrRL2PS5SO+geipKWKtEH2d8ncWPVko2Ko4klvqhamoK84F8/UbV/emhWe7o7TPtLoMX8ZCo8KA4QeutmHDh+Ai/HW68P1bYsXbpw2JoPuQMxEdagpKOpGybcq/i5QP8yRz5VyA== - EXCHANGE_RATES_APP_ID: AgBALjFYmYaXhY1W1TGtE1RYA5XWgwGSlE4y7ExhnA7PatMSpaFuxM7Suofps3bfQ/nTuc8LkWoChHRxPegHBomvy0rIQmC305FDysYMXaI1T0/aRf3jDwNLZ55WP71UUTjW4jnyb52wzM6y8GYoTKYBzBDGDIEXIe9RxBSYgC/ZXi3w0HgsQl4JG0eYSEZBt3X27YX5fjBHFjZZhn9HHfHClSLbUw3PleU9ZN9LpM45M6fmRD80DJuWPytUtRAAzyCmn5ujVSZom8W4l9L5R+t0NoehQPmkpFUmA999q2su9T0E3iVkQxSyHI+wI8tE5qmB3UDwQIwsbNwzTDEveoNXBd4gAbewLQXudCQgkLTFQkrNGXQEgOLeNziBEGmNyTVRGZKFQWCHvSy7IAIZ7pkr5ulA13Kto7Q+vgikXG0ejBnNkLpnl/t4fdZNkZBLJGiZNEamKEErsu51Om4CUInpQN6iTWLPSk/9RDxaQoaQe1621nwzmDCNKrbP7YYC+dhX3Y3z53dVPPrQty+4sHNZhKfCx0ZacY91nv6F95j2d5eWXUmJ5RF4TehhrYYW9jijmSNd53D65/0L70AEt0rrhVZjVL+1oCblHw5SalIQ1wNSMln7zKbIne3tPzfNs37kvGU86F1/hjIHCXPeXQ6NJaYAMtZBB4bEkxLQUEN1RtcsKObx4zjG+B52SPE7kvhu8dFjTYiSx5+N8xdAUrwz6ON4l9OFTrHcInqt6mSVNg== - GEMINI_API_KEY: AgDTJllQqHddHDC8TAEMLMH4Jxylxh6vZlxkgBKlb1HjoulpjiF+hXZNBbM/E3iT7de4eZ7mD8RPAi2mAH/0z1BGmMIHUX5NljWbrKJLbYGGWkFsR36HySvGb+nanuRALJG4co5/p4gkwbauia54WWc/PAcvLjrrun0I8k6Y8HPKu2LWuFUalbR3G8nbiiuxdzeBePI7uI37o+Od3NqsTM05wTfspjLvGSlaZwTS85QZNbr7++emGcKhHOp6XZI5CFYJT+T9BAOGNGfgAMbDyy7g7yCqSSk9UYuu1lhItQEgTHjKbop9FcAwXyRw4hO+hCIstc8sVAcGM2KjVhJ+4f0CFajjUFi7wxJEYFdCRRwYvnVykY25lZ4S/S1yXKLouyS6Hh3zPXhSO+PMYMsRnjUQof3ZW6wlWNWMT2s+y/qnnWz1arqyUMcm8abgUWPy0oOPFVUDS7OLuPmQjG2+cRZyuZvxlw3WCwuqTSq//rKrm7LKWRSrnSnbYn3yhUCfIOHdquhxkooVnMAk2/5Ssg5ZD307v7ta56gJcmiqqsvaBWQcnsbYpu3s2em2B/SkvvhD2jykf86hzUwLdy/fjOUjB9I1RREHpGHlNNzd9R6BYPetdtXFv39YqoJFtg5IGdhFfgAVhJnJrnnSytRZj4EMC4TTVZcFxonXNFqQKFglM6MEEQHJxqnVuIvngK1R9N2Ykje81wiHu/nD0nhzf51pDRGbuvLeWSye0Kp+L+KJReJ36tXewxg3AhaJx4MGXx9wpNez/g== - HIBP_API_KEY: AgA/HwUCk57faCV90rcpluUKEQvuA/oWyUzjRdnMq4MCZyWawX1eA9hs4X2hDViZAuLqT96RBnZWhcsUYEluITJWicxN8AMu3mQSryA5A/tQwT99gFHySf8tQ3gfQ4sj1mQoSmE3V/JytpMQd9aNR/P0HscXTdbZp+mHy3KS0LG2g8kI4/SjCq3OIwP+YytJF6ZQb1u8bTDv1nhrzP8MXV/YGRFz0j4Pq2ZUKPPkrqw2/APFl71fR3r67K4JEHp5gOxgmHA54A0N6uLD4gDv0jMhYeOwl07VnCNUysZKqwEAsMtjhOykZx/vGko1vTDDF8dUZUnOkQZBokaqr1KcSCho0S/Woap1eXfMuFr8CGvXwCFQSKhS/5wLswtoLl/YpAZXSvDdkWPxEXHRhB4EMqJEkEBAXoR/y8DvD3jghiroKkNX93g47ZhCRkksXdlbPHipafcN3TKdIpxK0Bx3CBui4xFtvzZjYAmmHrUyHqbO2vFlKdZiIj2b+eQYR/AzMWQCwDv5GQ0nw+2/UVuLMLR+gamqgOIB0a792EgFbsf/ZqplW2kPKQpWduFq/aRUMhMWe/ZdGoK2y40NpwsTCHRuZ3k28vhcOi/zvt1iLli+cu7E/Eul753Fw2BzsR0zQNJlMf1h8K61NDwtRP70x/GTRE2eTgOzSnhgrOaRehpzsCeSt76U8j302YyFdhc/HE3rdaLU85EpfRT7vIl1bYe8DAARJ/A5JiogRv1vZcYFYg== - JUMIO_API_TOKEN: AgAtgtr5xXIontZ3BrpcZLiAu250mWmGcc580tgd/PFLe2stSvPxrNFka/rVNbfAmWp5la/2pVI+4aS/MnAhLRN+pQgScbEq3ozhI6bEo6IMbzoyGOD8t9QdTe4nmqJ4U5HDhBP8EBG+bPjXba3epkRwDaL4zN+RInYED4VSqSOT6WeJNHktjPkpYXXrEqv3NBV4pxnj/b2Ika0MtZi22U/bStctCBgG3ICXaORuRDuOVYGmPOsgl3qgWGrk+sIacjqsGB/sApJWGsyiph1uulEHBn/81J4F6+CvzolasYinVFmlxL7hRfi5PpWo4+WwWAGVD3jWLAe0qjj26R9EPkhGCJDWp4l50mRY3ry/dwWReRy1P8dIXmGMxoSHVHR9/tR4DxsyDM1qm+nTn4D2B4RztsQkT3pe23dPVLZu7g+ztyy5J4vxd+2IMlf3pbxjHoUW9xUzc30IZpCCSUSMlne7myLO52PO6lvnuynJ5RZOoH+2uU8GHCRm6z4IPepQlzZG/5rDhhUv9JxYF+t3/AJ6StHJgw+z47LOpwBiMKGmrrMuYP7avzQOGPZjY/0RBZ9OAw7dUmknor5q2bR+mDcbhMe09wbEGSSv+6riwSMXcH5RQHDQXuKp6xm3iKCO7b7IhrMNNvxyR66YpvRHZ1eBj4QEx8JkzBh+NPRwKM6FwuGU04QObz21e22ChuLQ0fP2HQKmIQ7xlvUUMaHikwM+C45bRhwBowQFkInM/7TZGXPEuXPikPpY - MAXMIND_ACCOUNT_ID: AgCd7Q7a0jwJCjPfw96XlI2Hs1RNoIsReCBpB1fxOXdbTSMSM7a3XmQ+j2Xq8afkBpc/Lgjsvow+t6VoLKuk0zVcIxaxrHQHbolcPQ7CgQfHgKvMIHTryMjuMjlM3ee592g6JxWRTeinSOlelVgeNZ//YzwKyp0DVRY8A2RR2ifS2kwYgIeDBr4GRJ8gPO2Y09lrCoD3KTE0uml7mL88py044/YVowRZdagQksqfEF3k8o0VLaL8QvAJrUmXdREMrA+n264PvPdvmd1UJrq3ih/i73pigzPlJ+F5f7y7ai31DKML3dbDdbs2kZkR+yM8zTBn6sEPTlIND/QuUu86ZO2g9sCxTDcBvnawUAmedNo1RQqyqJ9hdC0K0BQiHH2yJCB3APFYfrAQj7yPh9fZojf3F+t4nQE1kbB+GAlorZ3YPBzmW/Zu++WPFHnBwBQkmKgkJSWz5q8f8lw+gIuLs43SbQGBgmLvAhx6Jxd1xymKC8rSdGAHfg4wK3q0+dG30/KC8Wbb7Rw+IHHYTi8eUoT1aq4gPQT14IguCFljV70ywRZ8G3VscNWzaHz0gFnraP50lDjjd5Z/JxM8QR5iAzqKOD2BBKVoksbEBFTFV43dsRECRrCGRRp+/gfCRUI6SC/8Bk6XKRyPyWeDA8M78cwAWt++XJ6EksXnygZR4d69HS5YZyr495lPoL4nxGOx6u8yRfbNRsjL - MAXMIND_LICENSE_KEY: AgBmpMqdFOBZwIEPfNred8RS0A9rXbZaDkm9VnhoduqSjPcCDhXB+bdaHsz7N8XfQEgYmIh3FwnAnPC2cbvslrLRDJCPLO+L/uXs5VfCvgnVxJVDoPRV0IPChcz4xYhtjE31Xxu/cMATSSItxQAJsz2zQwxR+5lACPkc6vWwdxJjmeyGZyJ97iLPh3aPDgp/6OrFjejID2Nz71xVqZiz3/ZIxLCQucSMA1KSGgCzDSSig1ayX3R7iWe1Low/tzfSRNJ2U3kqEnbWOwpq1wlT0U85dM7gGX/f1qazBbVEw5tQOvGYxmG/IgWuM+2nqLoeQOYRpUYers/KIMowHpdg/3mYTiiKvdkg3NIbf1pG4chpH+SSfr6e3yJogiByh54NfNxB9shHKrNkPAS3BpqpygF5IrPeYdVr8PhlMJvIq5IDdoPwq+X8t/1O1g1Zb8oZyiTBNrlF4/zJT/GsdXQvg3IdsAWZwqKBcwAZa973xQzCM1I1kmNw2sRU/xaIh/LDKWCcMJ+3aZxtOxVsq1QVtOF3ReCKhO7X5STLhSDPvItAZDyv+UTsIkUR5gSaps28ygG/mgS8gqmgNwnoljDemMevmTotUDqrC6LVORnyDo/YYyVexascv4wNHEsO9KuVrSG6seAOmqoq6ZZJLo9ZazMLZ9932ixj2EPTnNLzK1WjogJUSefDRRJokIbQHITaGWhoDGbtX5g8UwjPm4FAwLv4 - MOODYS_API_KEY: AgAlLScl2DUnOEI6fBCSE5WKL+UkSn3Zt6V8gGZyS7z8fsnMVasB+5d0mNpn96413ygwQTElmYn/oia/WhHr0eUaCAgMqRQnkQyXRrP4WrhVuzOXZb5oJt3E1L4VMFU3iJa5K2DlwwcTPYOPD8yV09D3D37Rq0CVqH1+WyC+tbVPkb/YaC3wDsrMFA+twIhVc5P2FcRbWwtku6kLHW3sHNjCLTvM+cLxkU2ymL9T0Svk9B2WH3HLmhtLhPfKAmHqnu5BPzSKX/nTJGKOg0HPJruxzPzLXV1ba45jYRYgBVpIX3UuAcd3OVko/LfE1ppi7deDIQ11iKbO9m/EQhWVdAZH/uOWVavMR+H50GbK5hEH1hxRh2/l+bj+PXd5BuYH79ADCfyYMTqPCBSA/Y1SLcohDd/qREaMZV3B2dWbn2oWGsqQzlMDY0dlmkxEYc4qfATFJVs5qKhMZRMi+YF1f/j/6BrrLbEtXJHSx0T7loP61Mm4lZkTGdF2O72I9KFpfSpXVgntNMp632YzSIqJxu6SRwRXLHJTWBwGjRkGcsBcy7TG3DIFPWrBoNHEeVA7EDQIaaX6mTcg7ki3f/S5x/gt0ExRBVjvTSnkEm5n+N96wTGI/J2feHfbjIsttBu4oMWa3R7c+ZhM3G2NvNeM7rcPUhpyBxmaw/aN945XGgnQ4b03qWDVleZw+gLBws26un3zo3jd2hWUSLqyocQk9RWz4jv/6QYUEy7GW9bwrEBYMyt4XZydC4esmeWqFA== - OPENAI_API_KEY: AgCiy4MtCCyI27IZCzaPWQjskfDoZ8QGMZ9bdqgVcrRrF7RwlYLJeH9bRzwKgps1iDZ9kTM/L8doQTZllZsXEJ/YpTFbVrEEb54UYy1MjVwwJAXTriM+XTlOMaeFhQtQX1bnlH5cghmrszR3Oej2TdW92kD5tHW5YinwswopQNnxS//INzVID+sHBbU56uCulB7I0IXm2zVAP6ieku9ZOSHvvIare+wSWnsHiI5+H+00ZNDDVc/qO3Ky835gdX/ROZMEimGE2gmhHQ/tWk0AoRU7D+aoOo9Gbuwob8FUlwDm2iO5KE6wNNVj0UhmnXt7fs4wrTsSfDzuvEI6jqHr7pK2AZaly1WyBUUa/aZ1hrVomXgbgB8DJ3LvqJxeNkpOAUCWTy3NmSHHo6C2JzYoWNvnCe/hy1e04qcUOPYmae1xIaQKJFddV/kiDBdAJ0cjwyzrmOkaCoC2nasT1JRezxxeHAPVxiBZc59XPKClMjJAzKqoL+D0e9HhJhAm6YfqHwST2CnMv+mTAbwVlFo/OTmd2ZVeFhYag98zSYuAx86pBcaVK9yc746SmbBD+Ew85bmhlbZsPCvwydpqke+rNJ3+LVp151eSDT9FbX4WyN+E4Tm20iPFJ2n1odzqPwDaXCCtXMGJNTXMLdlC8HGIAwQqtEBIQuPMZ0OWyPMhGXjOG7Afb9yLEAWWNpa8GmZqPAqwmpk3QCHkOXOT3Uz5Ef+7svT56woHsEsdMegFaJfVVLByh1c5a2R74Zf3ViMn2LCWg5SOQfozqv5HCLZPfYMesTXQyhTEKb8XAQ7quclXf1xopKnj1Dp3PlrNqkSGNsAILBJ8zYRmLRd9Z3vwlsWiBk7BRklheuauhsvqPiea7/QIK6em0kveK5ZwM6mEwgyEhphxpTH12U4rMZ1IsrHx5iQrUg== - OPENROUTER_API_KEY: AgBVWFj2FkIiImcfg/Kd8uksObPwNWp/3xbB+WMdxeRkbmti3Ik0+LpHJso/wIx8hNnVoz7BM/Aoz4UTV1EDIv7FFAJutC2i4CKvFIt2SPoUuObranTCyPN95wC+QOL9PgiXi2hJJjmi7On8ha9cxlP7KzmDG8r34Q5tiOuTn51Dkw4v2WNnPkfUbD0dQzeciO/sa0wDQO+HXv23GuKNNyFGOrwQmvK66aK0y0X2PHVKvHfBQHIm807R4Pttawcy21aIdVBSJBgbV4tiT7AvTL9TIgi863/dYwz96CDSU8GbSm/HoBaOR17Vbx0JfzQu0T1VyIOoYBt1jb+nHaZYYjm8VqvRIfn7DVbGHD3XX/kamsB/a5BbjerEOUa4g/eT7Md+tsFGJV0oeUxsYrfqhWZ2FQXR8xYPTJAYgkOg3QzE2PbHMEeaIS9qUOtaCDViNB0OrtkhAymryiD5pIeHkpCx0JFitfrB7No5HkzOOkiJ0q8jMXMPg5/+7kByikZCwS36TTl/9N7aOBCUz78cznUZpvfxBRYOaVAXMGGnGPSVQy0Jt7DmoMjVry7aOc6fr4QGp52hZNW9EkeXhMuC6Jhlq+pt87QC/RMzWeSmXQIiibgsLhSHQR7enqLnxzzzizv/AUhO+GxbSaxBmApgAp2XWaDq6hR2vJbud/sY9EeZovgQS9KTxsU7pWx2Ge1LWtoTeqzMr1BLhe16H21i6el3TR5rNUyiEc7oX62GR14pg9gsQD12oJ/8z9dYBbJOe0rjuDJLyvGtLdgszwLFwYHVahOcs5JlNFjp - PAYPAL_ACCESS_TOKEN: AgBz7TrQ5EcdVW4g8lvwpAiPB7/9tGzH0lD4coXkBY//QJqnwXAtJBkYZyrU7UGKFemXtX8NCzncOP0Lwnb7WP9X0U98+Lk1XDYsWvEAsaHspa3enluSKCsTwYi/pEK5f9Npm42LFXWHgBOOp+rASnBlnBZOw1WOE2sCmISJl2EiR/L7/1ZvhXE2KsxRrDJcMpHm6wFM1yEUnvkILf6SVb/EazHraqrPJiGuzRRZ32aY5ZoEyumVSe+br0wqCoApLRhvsa9HKLYUoH84zbKYp3Gid5bDzxPBq3yiBVDhM7WNlyEj+OvuQc0/ZB3YalHlY0SX9Evl/1OJYLfxI3I4kPAzNcNz6KRn0DKxwxMUEZ4pkiR7LgPTnrBmdcZvlsiw/n3AfzYArgEja80b84vPH8PhTer2Wy9h4TD7TAXPwOHJG6PKrO+UEF2uHR/BfPKBm7FDWgqujRfWzXvoF4l4gzSNn/0fOuprkhq6/W0Xfm9UzKWCAn/h8Kfw+hadbRRucL7RN33lXrxdngfdqBjtBbFXHvHNm5nscrte1iykqEqYPKejeg1i0mx/K5g3lkHD/a1PaNTjZlM3AnZhrKfUhf841cHAWMNVtEQ3fim4qSIFici2Olh0pMr74YXU6XVcuW3DBOoWClERYffPFhfUVLkAD/iovonzabgVTqv5TigXAxnX1ydzB+w9SYcmvvqHBu3hrvn2Wtf5trzNrbDOpQI7HnHWoGwwyFQpUU8D3pqQLwTU2juLdQ8Uv/FkdFy2j2bdGina/wIvjjOsR9EhXaXbPm/eqePJC3Jxy8W8Ct4MnyPq+UTENyblK9Gz5d2YIfET - PLAID_CLIENT_ID: AgChgm1vZU86brNM4nqxJ8myaXT/JnVnYiirltgHoc3nUtUAg1DI/Ml45oSWHQCPuTSPNEnBgR3wLWv5wRGZ4CWPn+GNigrrvRDw6NcfWlUfeBP2rotLe4TOOmjB29Dlidv45bEw7IcxSvr5fKx3ah04jmgr2QxwHKYZoG0VcPd0y3Gxm7UbAAOI9mAOLS9z4XpJbwEByYnIb77jB4/+wcEExR/OoZv72ajh5m29uFyFuq9aMMsJEOUzMXOzEgceROW/PRab0GTqX0IvY53wbewCf8ESC0jClyuei8VL0bU6GE61Bht7N+DrRosFccx2DOk6x/bemVNH1lw8dnGT5czzbcw8laLNi6+ElAHJAhTrr1s4PoZN7PUoC1LHRkPqxmMV5YLegtigQYRUwdiju43j+AOnk08ndGkgllsgFAgCSLbr+Xy76sOt6WWFIpd4HRhbSyIwgdXVXxF/zIyELCrUbCg03u2pEP/qVHIOBr+chHHtNK6Vt9EjiZjJ2P8PpjB9sX8vPIUmfLzzv57uGjXKFAPNjIQMgIpcjQwkhrT/ki8lpRqzMptRpqX9th99zMqytSzDuEwEMo1D8fyOpy0ERXaY/f1hqiNZXM35fcl1qGM3zAT9LRIbHhJw6lfuSxQoMid1S04BckbS/SeRqdWRiJQFpxyCoxS3/qgsKQLB00yaBiFZ5rKYimHZpSdWILYFFbxvCXBCqZdzrHslcvnlHMG8ttD16ok= - PLAID_SECRET: AgDOMgaB0NjlZ8azZ0o9ELxT/YUZgEbJONe5M4YiwMqk71/d/yUbpjYPOdXAe2xBBJdtC3Wk+i+3GcqXZvmLLlX4WYX3S6zeSnYc9yxeaNhi8233TjMPNK7o/mxK7rhD78zMW1OffbwaR3EM7HWsd9/rZ+HM80kSJZWhGZsz6JZQjj4tTQCacQTlylaMsAnmSFVUPRqnPXMtvKEZVhldT6qCsd1m79haiqM3u5jhhPwtx1vPlSga7dO5EjvEs1sasPZY8kFG230cavMq/r35oPn2jXrrrAElssX22h+3vv7KG7SLgbBDwDTMR1u+OZ8AGBCGbPuP/B6yRzhY/+TrdaH6Ulgz+FSAGKKIdVWdgUeNaf/Z6Q75QadPDGAjZvIbD0QWeLAv5Rdjhx/+ukAlX8JP1gen9nxdndIR9/QD57OMmzxa4/GLNuVvf6YASPJdaCHE5OdE586thHAPXqclrVMGTYnKnbdLSFWc/dT3bl6Rk1s0VOD/EJpwRLrcMdu4GIdp4kSm9h+3h78vR5NgVUhIsHAQgd4vPb+V57PNHw2XQPop7N0pWmKyyYTv19/hZ12uimTBMUs9kQhjTAlDBWBjRwLG9PV469hCbfsA6eu4gqxZzrbfzIQTyUQIjq91kwGtQGsQIHqpRfoTpODashZL4boYhyqpEE2ZBUYc/8F5GkaynnrCxqHgLH/BecZwW3iD9HGsotNI1k2CLBNE1HBtssQAiPQtm+85/yEprGU= - SENDGRID_API_KEY: AgCLklUAGx1pmVolieKsszY2AZHFh/8MjiseVY/Aee5i5oP+MSSMKybNT2qolOMww01K3s8ypuu6J6BwbLxgKKLFgY9qySzeh9pHJDPAQGBkEqW/YuZ1nSoItP/PKtjaCqZhBuk78aFdI5DH2VnRBorP71eowen4oJGKiK1GY1gq0beTN43PdmWEvPTbjif2SM+Pv1LWfzYMfNJdc0ZIdNukYlD+4Yo6biUJj+u35B1bTdJcMPihBUZ5nPUQaR+ZlfY+eAY5YQH/eot+xUkKONMLk3zXhPgAz+koYNYYMT3EAsZNtXUwlo0hMxM6IRY8Y3JcXxvu8OR1S12JiMt0e2VZfkmttUQZi4JRFxwj9T+C/5o0TFmNpjPUpjf19TMPS0mN4AyUGaUPnRFGWQA9+7MkawNxMFoAxWyw/Sf1Ova4X25bZuEh5m1ojzQN9il729511WBf2QY65fpFlsDYzc9icgPeKFa+4jVzo84Ek9YIqMCccXMnDrJGwpJczjMcm8M1/MweShXSZY9A0KA2grSeACHt2ArKtU2oXY2KbL5XAWk9XQaosVE1YV0EUdLvqm4QmHo/dzcH7mNM6ykGWjMiTCgEXdn8bjsK4BEB62vnk8BYcdlwLO6+2kwHT3ybzQ89U7bYDwujTs/u5lotwjGVpFdhBBbqFxJVjIMismU1biDiMEOW9tbEa+o+SEKyIBtSX6bBYmfuaYYQ5NnvTyP64AhNVwIYJJZgOwEpSAmYDYJB5vrZtKjzZzydqEiIYxoWl1WQweGH5WOkDffdTXyLeByI0Jc= - SIFT_API_KEY: AgCwYb0yQfHh61M/cTuBRlatJU2H8zgEM+mf8BpyIVmxPF1PVDZ+vP3Y8KzPD7j++0R2KAmnY0CHa3/8hNljU8ofKiQfsHgB95vJf6qhvU/X8I6Rds4pqvfemhr4w/LdkFOwimPguSxkvHHbQiCrHubqRYjmuewWoMn3usQJCNl5C5l9MaifGhaOYwv4oiItZPKHjk0nTwSg2uMx9WLzjEd76RHz2VlR7yUmuTg2UdFm+tyOdH8qhPsyFY4GDY9dOOTbbZxjcMbJZolXFgy4MyyR2r7GrVeRA6mJhwmr6EFNu8ZTgqzjajAwGhAhesYTb3GpA4/mvZrARwyz+uIHp8Sm6cvfjShS+Zw+6V460gimm84gla+tipPyL8eNb7Ii1Bv0ckXzWT1TPTNe+qu34dJhgq8zudrVYL9vDOmz1HGf+Rn+iyRmQkp+Y+qomCnLCQk+7WDSQ4rAdBlby1sRnEcX7+6CpGlepx10ZNGcmusUUom73fCBdPAuDgiRHF5RD8HDa+fSWG/RtwzADFZeyc8ZX7Jo4w2tUWNsZwUiSgF2OZ+DUxPvB7YHEzM22dO75haVOVF3bQdmOarnY3FfTVoP6r6GX3DVxjOgJWk61YqipJaLaVO8SyWwwq+3QQXNda18nQED1+MEdZWAPeSwf3nqZcnoC2j6Ck0e5iI/Mp63WdrXtLeOkcNOnOqu/OhRGMQNcuftD33xBnB56ZYvbWlhr0IMETk7OkFevI9cy1TJsg== - SLACK_WEBHOOK_URL: AgBZd2J4e9LdIUQcof+sDLNPy7DOGjTzK52LqsxauhzNWcuZ1dzuZSWYrwtaKYRvlk+B34k3Zqzx9oYG387+xLb6czNsbQaDfy7fvQCKMVzwalQ+Of0YkC06srleVz6W5x6C5avk9DymgNLAfvokNJq/eoSv0sdWO7n1ZTTDUTq+S7Q5shFZ6tS98mjxzhGskG1M4Sfy6TIUeaZvPMDuNlZGVB1B11GafMqQzwIK+PdNFae0EpOfd/hZhw5g+bvLL24aE5rZseVq2dcvRLGZ/jWX/farv6lV2AzrHybcdnKBR8YRBykyDv7X7EtPXWfeospDnqAFx1AisqFQzHjBlFRX+cLggLbnYAEx/fSPxl0d2yGnbVmijgQvXhuv6ATVvzX0jk4jJW5orzwQE5AjTRatJSSDM9P4YBLr1vstPhbeoriCNC11Z61oZmbQysrwwb/+zzVTZO/QkU/piLmuDb9hfYBADYeo49N4TVY1n8ixKetUhBRTz4xCFTR71Zd/8/CogMZNVkp1JvPZE04WDIRwL2gwe5p1rnAKQuTkukTaMwxHd6/o4wlbA2+z2CCOMaRnVJ1yCn6wbBInwHLEQMZ7U+N2bVfvn/csaldY6OcWDQGXF+Jf6dKdYhXYp/6tcLCGWzmSbnXiS5mDQm53LneyxTbPqhAEYzLLBf1tjoJNir4wDAmmkzGtB/tI9CF06YG3WpsCjxcNOJjvWbdgB1MR/M6lDAb10nUqGsBEkCxgPSQreQL3rqWwuJH/MlekIeqFxfZx56ATwRnvKf/8CoudZcFYY0Jiqhg8dYcW1YY1 - SOCURE_API_KEY: AgALF8LQ6HA0IWaYHAHRvxRMNLqcsBkdDWuFjYTbD7SkhWcpmom6NhDBQw+KY1zyjXc7c9QGNS/NeCwnYD34AtdxMV1q7yRXx7iTZLnxWKwx6xUQkLkDuS0sVHIVGAcYGa9EG+1nJCmATa9pTDtsKeKU+WtWI9tB7tt+wW5CvHkqv+uBVxxtHSsWY9/m8RnhYyW/g+/nlZAO1CWKMEFJg1w1yd5qQmi7A4qm+XlbYbBjT4h7EclkrbG7UTBoicU0cUHNUl78idMmKW720iqTz/ye/Pl8s+dC/Arty4UkJlTk3f9cGjmd3a+rS/UK3ByaSLI0Q4tGstuIiHafw9ydiAthv7Ugo1cljwYMzV527svfBbSu9SiFBVDF4bdY+M7F0evvmsmi21jBV0ezg4vI/peBD3wv+j/nTPwhJgvTBdsLGiq/qfryc3VD4ywqk6PGMNrhMnWioCk+uJ7a0dn6tddCTP5jlPamotANsYlHBch3vlFPy/cDWbg4jQZuQOpabFQqGfnn/ITVNuYsBj7ukXb4K6weF7eyl0FLpA4UpQgq9wR0ayeVAstSEkgUszyia9Y4WCGW5gQMqd7206QVyvlZ6huiV64EIKsI5FK3Ywlu5mX+Yn9zaY8zQbq7AByXTzf22xn9yUURjUJN9feo8d0BV0vBLF5I9GMLRoxpu/AYajGcqpm+H1WdCvWOtF2cN3Yc1geWVkbIsWJJTARnJ8nsmS9KzF8/jZo9cg5Jh+5fZvFSG9s= - STRIPE_API_KEY: AgB4PiFDGJK9O3C+Dfw4fAHZGMdKTupTQCQsq21TflWkFxBniVrYNyyQiCd4LNanExxIo2OAQ/PDXsYDIbI32Z/PjlTjmmX7+CWlExU3TZ8pGBX6hYWGSdnplxRIgDAynXBHGUaG74wT3l7pULrRPB9Clt0OuAcxjyZA4Sf1dxziUhXN2Sly5/epcskV252hPA0vwvPFF9BGXl7KB/j9IKxNHiSEO8xo4X/3O8Ww/y4W6W8y4Z+XT2IWv3auIL+Xb1jH7rSVeHWAoXTiq5IW9NvuNexXxDswQ1qSmOJKO/Z3nyXBZ0d2L/clv0ZjMWSgheZPehff1WwaL+e/gblDQ07/DuxxQh5IyCiOTfgZ+35qVDAHgXcY9dkXv26G/kApYfn3cWl93c9bc/kcdrzRzzxagh0vhT4tF/7L2XHbDIbwoA8ZxUQzLjEQqDPEnivA5bBXb7JQcg82VgCD7/EprbmjvQSBW/lGGe6grl1pKLZgimsmYIoZKQhR5CQTVBYUccU3DzWha8IGdn1W8SQECd1ypJ8aZBAlqoBVQRp4qbRIse5uO0ZVqhsRwnpglfM577uZYfPZlEp/om+MOB8d9HGvbgvdLKfcqETWkGMPyTzr+QcgKaeqJvqBt/ENqdpvOXcOyu+JWWhZpQgZpYSPByFV+GOM9UlVgq8q+lzH6jzH0iML+7JFqOkykknnV8yuFs2ACdRaKPsX+cXOQh/its5SOnn6kCTd9Koia4Paa6iP0fsQtIg/44MYTSSaLeeg5Y0swrDa2nV/7CzqEW/j60Hybe2WRLdJtGGBC+xXKpRaYAunhDzuPOfWgP3dcvJabI1CwVH19ZA8ruIC8g== - TWILIO_ACCOUNT_SID: AgAsPCa7/4tRaNmQ9yIhAUrirW9GWo3ecyufanU/vATZKx849046pDQh1/rAJks88kWDqzjIETApgHWV3yxcTEkarTC5Ydu0Q72poVgNBqUflLEMaSFk4noLTe8wzl98CqB8j1orbX6Hx1hkzetXn7MnhIBUSdxpYSAXii2rw++qmGpt4/rCYeoUTS77hJvNGLG93028QiXp8FBEluVMUK+i4K4X0BzP8GXKFOpWwLPg9oizu2kT9IeoGb7/UddLK9qpPxgPnOL2biRR1obzkIkYDrtUOKBJEInfGr7C/IBDfr6j1n8tn1hL/llZ8My1TGeB5gnORDsxsfTnM0bDNqGYpkkLaeJ3ZjKj2lCWvr1OoxDRHkvteEpoJa7JNVQ+8iUD/Fho/dwgSKTwkpSyYClwMehPkYeUVZlZbKKSDt2imE7fAaM4ekenc6tRnecspn+7tGaXx8PLof5xsP6710lYJFscq9uR9kCZNXkYUzjz3Sn08Rz4FpSeqwcSwwb7t/TlZWUuW5YrSO+yaOuxlBJsz7BrFwp0MIG7Euy2t/3v+zvWElNgJxFf7kvTDeiF7nzSbCmsheGF9eXWWZCK5FAjmD9L0KhZjbxbK3sbM7e0Xyt/HKiirQZpLsRz+Sd1OUGI86SNJ1RsETjuvVQVwJLldN8zRYuclE4Qv3pzQRxILJ5XXUFn3GfMF50c6HH22e5eIIJ3WE1qvt0reTiYpf2hB+6SLjOOU+z1tscB/5ixrXtu - TWILIO_AUTH_TOKEN: AgCrkG+gvofciG01shntIaD6vJfvEdQvyyhJkXnF2PHEs9UoXrKvjRGlj1T9Gj58CvgjswvMOZ+6V/4otFE61PAmGQBRLuNvIerELSbaPjGHQltWtN4hWg8vhe7/D/mXmebiGfi6M2KzqTAxOQppO1ZkitNivDbacWQNQvgI8Z8MMMR3M+ZDnjikG8YTqvI02BwiB/IC+6ZPHVftSBLQvDipYlfV1m94ZMNzUbKbR9fcnJx9sIBKsEURusUBSybnmR7+NMKuME0EGck2uUth/DThTMxB+WZBYCjxvS4F99qnDCh3bD4rELhFeq9FdQl7Kk7vAXgnjSi1vfrdL8AXnt7pwz0YvrR5bgzrUIUmpGIxStslK78tqzZYPMea5S9cZDSui9oYbQKXwDbl7fg2nqLrYrd2Mg4xBbTwrkHgb80kNPbLUp+wstBb7mLX97x/lHaTMPVpV/g4n9Okb8XgByo0/ZcCnXtfv4857i997yhuLZLiIcotY6YLpSarS31zSCjV0XxQoF1VCaSNQ0cJKCmmnmMv48cybZA9Hh1wU0PULnMv5rhBNAfIERBZia6dy8st3e2MxSm/e9iCG+eWlDGKl8+pnkQKzdm1jGUVElBD+Tlaapc33GLfaDLzkjKba0heKjHkVisNIxh7V4KiJ3agCYKPpqZohdrtECUs+oGVYjkbo+LLvwzm2ITq4TQ7iNU/vpz015lVY04BqTDIc21IwgnPoNsXxXPvNSurWDHnJQ== - XAI_API_KEY: AgCpszFaOIW/o6nG3e732Xv+SIDWc3HLibKtGp+/wQly/cymvYpxF8/p4zskJFPjheguer0/evQNeE1fkhgzGXc5OzfVciildASRdtUXRkriPaoBdB4aGeBy8hUc/t9dnDlkOWTPWiPcZkZhPyu5bSEyjM2N8TPEYTOPHvj6kJiFoWAM1flzJ3Xq5iwnzLGoWrAE0Kqi4QH7FdsRKcnRMLQ6lra/MM8xiuPEufEO0eb31pKTGtIa5z4MBnP9lq4Gfl5P8jXtrvvXDOFA2RCHaUrRc5BCllCC+gMw7Q0Z7sfU3dmsjYyFkMhHLuMIO7tV5V93hfq9HYRdLfeRKmV2WTzAKhf1GooH/FjBDmfwOAuS2lPYWY6y+ZG+FojcP5hD5msX1AM4Y4y2Ut/HDrM/2VPieRKKiBBhFk+e7QIBzA3qKsoCN6AwWfSwdOlNJHhAc+3GQy9G7LMJkCbBVSXwS2EyMGD7YE08uYi7RdchAllX4ZnRQA2WnGia6pfnHAVCB//2/4wOLzNrw4BWepx/wrqWVz8mZ5VwsmhjYcScRC1BohrRvuGddBhlPsSn36Iv4tY+5xro3TIK4rlVbsGLsdQpHfmhsNqEPB7D0cbpDoe4SRgkfAGtE0oSHMXzitAl+tf6WicxAYmQ+FrewhckSOuilD+Y5UTa5gpfzreNLlHv2nEAYZqIuIE4yc+B+wUXr91td/p/OLH7PwXh4CnG/BMVEt2iTYQqGBlf6gtLHhjrvO3m4mbrvGWHDf6N1nn7eZSEQQWAA7g7imvtV8nZgy0GOHhqQrZ0jaZZ4PvbWMM7RdybRi8= + AI_API_KEY: AgCAkjG7zSdmPv03KClcxGvVTSINginI/X0GqN4cnRxGM5IaN+0OShsqRHX3CJa3PMwZs0zzrkpTQ0ENAYGudQViFrtWfZvpF3Pis3tRWBjpqg01dZ5QL1dVeKqtwtP4x00aDAjF3j6t9CPX2ggg2370RAsyZ3pFQI1rnGhN3r2L4U9lvaGFvng5JIk23MZq8d1u4Nvh/ba5SsVyHRCgAf7qWT/uCltgzaxv9hp2m5JHh9jwTyaUKcefIXc0aRHIjsclLTXAToQGP2mqwRDz/W4QsjrHLHZkJry6w5WIXyhOhm+yqt3J0Uy4LzTVJaCbtllqtOVpVqJm6I5NJrxU5eVjAgheCmAWwhEWKWhCVyHy1C8N8wAlF8r8+N56txusnw2G4+1Ipo1lM6hTaRJmeuPA/8h98pbgqvokeobR0w5t8QFvOf9lCvZdjY9Q1bxhpdWr24rbM7Zos9/FFF8p6GlCZzgji9KMCELCHtRuzS8c36DNj3fe/DNN9M7O2bZ66E1kcbca64BlcS2Zt2FRM5um2X6JShrnorCKXqFiEheLKnAwQH+D1tP3/4fnSfBdjeB/fq21NVzv7KJuighlNMI7pJz+Uhy1SQ1f7eSQeso6GQpatcv5la1JvZRlx7xsue+JwV8wyQd4povCSRaSUJ7RUVxI1EVtbfu3agtt6Doh8dGG1Tp7Miy1mTLFQ3r0ocRZMg6UAoMjh+MP2vJF46SBFogRbPu9Gfi0GkEdQ8J9rQ/a0e9shrhc1hVFsfWaqD38EpZoAWIUFoPkG3/TQQ1T1mGXqu+HevcYgLgEMWgMfNKJ7olSG+FqI8i/cQo0H0U6ZKFM3J7CbOwEBSo= + AWS_ACCESS_KEY_ID: AgCxd5ZVK1Aae3pBqsbAThBXXxoORlZAb/Ut9dx2VoWt0e4tEdT0JLmVN/OFIiqjAX43mKZhqQgV94JszLDfr3REDdMSIeUYTHYBisjTAxdUfBn/xmPoJZlSgvLj6AdxO2R23WntpdCPBMXx4Y0kWTja10JcQ8S5oRNqYTA1aZNJ4NUHwqP8OC4WgdXlwxaA23lMbYOohbcnlpg0kaBX3lZnvyl7NcuoA+nA9hqMi7HUZtWRuFVpHBtuY/qDA9lXxYALuIwsrVm/xPYTB7nvBYUBzXZDrOn96t/+8UuSJ4DTcctENgcpLFA2lqoMI19Vk2069XnfGGPuplU4ARjEeduX1yT0DHgfDXSsnZu2JzpuMW8qOmHY+k+TpnXc8m/RDDnCyTpjFYmz97xBAClIboWOOcQPonXqeNv/3UXOCNXCGN7nMPJx9x8dwBST7IjpyASFFTGutfKs23pSNDI90D8HgzR8S6McONDEB2n0s4bixX5EnPt5Aq1g+Ni/+Qwh8U9fNjYQQMx/AtKWwWnAbMt1guXdh9Vw3VWNckqEHucompCsS8kwPt8Raw61lDXvipXSUUtrgb8eiEJF65DA8ZeFqj4ipMt3Zqq5CwCkOUevUk1d3yeebCSiTgOOsZRZ7LQU9nFXLQWJ/349vH44fODnpifxh9Uy+sRDl/RYrEVcQOIWA0N3VrnxZ8tl2J8LMyoG1agqTEo34PelrzFLHgq644wYXA== + AWS_SECRET_ACCESS_KEY: AgC+wmWxZEdh0HGwVXIwkNiKM8NPiahpU2p5eLWGsBafTNP+RyIK6cYNxMoH11TmOzmr1dvII830vXm0aChNsLcUnGq42pBrraOuRKJWxxGc6VSrmaBm63+0rGgS3U7Afj4+vMfu2vOgL9cDMGyzldcSDKvSvJc1QhgOrTFWdY5ADL7L5mhYuTc7THGs3fmhuN/UqVk/kwdPLrcGWKDPYtvdSA4qr7AlQQPDrCsyET+cG4+q2pD7oUvtV61Pr/ZaOrXUzD0G2KEIxOEAgmKMTRDt9iHYRkWyAtX46RACN6A93UJCjUcKQGElJCpwwH0XtYKV/YNqrbO04R9MLh6KD+LoGZ73zPoCPI3KbZI39Vw0egtD1/Sb9wruD/DlI/Bdez/JxKsvFLSbplMfYCuB3k4TkOF4aijNVKL1Z/Pi41n4AV8lfMb1FwM3VD5MJ8hW/c2+urinmlpPXCCzcSUCt/EXeHTE6+4rYZKqbwQrOegP452qjPN+NmNEpUO3v8Xjt9DIt7bATkUgA92PvSzwGe2IZykJqvqvj/rHxNPkjeOvltU1f1wpmt7CL+f7l7wsXW8UNlYtbt/2CvtSZsroK7MbKutagbotR/dX/3/ZGjxZzfXHNW2o0WmSQcHkLxXs6cavc+viEseDps9DtkHzuUKwpwcqthSbIZ3Voc9cDZx6neya8/gPVumktDCPohTWLplhuu4ILevWEnhWqw6lU9s8nTlLzhYwjwSwdQ3R1XWQh/tuieTCsmbL + COMPLY_API_KEY: AgDW56zEbRugo2jfKzh9nLsaZLBZThOi41OzcGjfvQRQCoVtmNrbl/8Ntz8QZnXHbe1GwXtEtoTkX5SR11v4h88lfje3MuJu4NFQZ57Uw5vwy/zphh4llwdsZupBnY/YXv+sSsPWwY9ETJ3EVLHZ6d1pLj2T9E41GQ4SDUHAY9H/YDpntmxJ+rbYLJCuNGMlKvTaqUmwuiFkfxQuPpj/Cctpti0JYZAOoe2HH7iZhGJng/+Pjfny4nMcK9oj7qVJVCMjOi+g4AC6CE+1FEYwSv8dcYrvT3mfLCyWSO67DbWEaCJsTgMm/yoEDBRGf/nEJoBk4tCjLqH82AdVFtUDBWdut4Wqj0X1KFh0QmKLpfZbz3ctpIUQgj/EzqbeRp6q4OL/dqzKpIuCWrBDxXld9tc8nLFFPtc4HMirTNvPSozyCune0ppS8hOIxc5d4+mVFbYzUjmkeBXLAgn7gVoH/nvsohDaOVQPt/YoAQ7B58rPyEQnX4ffbYsz0VMj+Ad+hybVnM3dLWqfQcF/3v+U8HksAyMuhnFpwG7PgG/QjTCMMO8j5DzuGySgNhbiAmttSBXjHQZ6LDRyqFakzAdiNdOSL72lw2qzLys1nGa56RUmx5vLb/VFECUd6WYqeuj1M2VGX7qUcX7G2xm1XH+A2+e/dN0iT3Z54bZjkb+EKUKncu0N87Iov3kbXH6QYjlCXsE9t7uJwryerdDX3oTkasopg0wiZF9Ftxb9fUggyhiwrQ== + EXCHANGE_RATES_APP_ID: AgA1kqc+YKtI53beu2cHajdZqsguO1aDsQfEsjYJjVNEzC5mdF/O8X/DH6s/U5gBAUhzoA3NA2SR4jWHIaL9oNxifLmV6n4KDad5HywJKd6VogidMI0lgbCMvpjFambxrEIaqhlEacu7wsHFFDmPwRHyUURy2jHYspQjyWHsbiYiaftT1+VCID4MMt4aJodoDXZYaslAAVR33tKTAW6GyxoZtnSI5IY89qrHnxnn91iadI5CZATYFe/SwDl52nVWWMYPNoHknegrPlEnQRiT/9Q11jbN82q9YAhbzrt766FrYPVDojKaWbcmNvEtVcF5UDIzzbsH0CJ37Tb5HB+S8iOT+EHnIQ4yo7W5brfwGES3BNlzcQOkOtrCuiuWudlvNko74JkG7itv3Q2JSr2u/gy2jH0cQ9Nl7mKJIEu9uLQxa5xH2adXt9eGKtNiuFwrnL3AwBaq9V5Tdbh/m0YxSEuvMdC+SdzR/sUPAe/ywuIvZKsEIdL+RZVTX1PoICNwtcSLHwmtqNPVUpWYwaSd1+EsTwDcGVjHQbo4aBTGRsJ5u+n6HWYie/pYs1JezoifeBLHCcM4BcxahP9nqpD4+vdLH1jrhi95R7WvTQ6791j0nMnpEIPfsRznmgS0q55dYJ9llUu0aDIZs0iJf7J/CaXDZGk41DJuTHC0eBDOSDTF83DSWFWsLEZCivPR9TYVra9Pki/4DymX6PcxJPSYsY+w+hLACFbFcqGfrS7EEY7Bhw== + GEMINI_API_KEY: AgCtCZhrcwtYkOiqKYiONzpbei++hay52fHWD9Wd0cE0MPuJqY0IN1ou5nbfzS7fDebeXEQx84bFo+P6XX3tv7k1YhYhP2D4CMbORhn0ozd+j/4uMS+4LO92KTjU8zKrhVsH9OdXQoP8GSAxgDLiAes07Z6qwyj2ivnfPz1i5cKEdxZ6OmKXMQWvtVVyfPFfYUkD6giNbgkPDmvEO+b0mWV9zs7F94eJWc4pnh24QYgnK+UbKArYAHhm24zvVFN2iEjjfJS4P59R9Wz0/ulYRZI4FOAQ1EBfT1y5sWLnWm74xgwyn5rEKlRIt83JfH7Pd1oyhzvJ7vxUaev+2peOFHT9D0/s7zbpPgBVS84HB8n7ldQ6i/hNds0oRys0FmOEwqNdrT6Q5E52pGSYUIYnaXq7h3JycRNjWoYnJMe8OZQaas67GZQ1N0G2fr0K7UKPvq88Et6gGCpxEuMpvwF89Sm4/toHtBdu81xr92WmI0/2wij5Di2i0ezwhgSqkUbSKFfXKkg4+1UN1qxYxr739pjY9I4AaBuhoTTHK8pLBBZ/2NfYP1O4e8yEBNMVbxF/7yCKaHwVYT/XFVz+4Sxf5QC6AjEgbonAViW/bdRlNcLj4rnXH8nYjfRAkmfpnkS0SKRLejMoMvhTuWmYGrVzPI+DrCbgmE3DhmjSXl6zCxQDibWPTQAZaB4mNQfFkiA9t3kD2sAs5JkDGkVplp4ZkYIlmHFIEcCAohKyZ+OG744zO3wSLA7CYX5DU/XAW/fGInJMx6OuiA== + HIBP_API_KEY: AgAOPpBSzvW93FawgRQS9ew9y3W7eGltqmti3jnprhI9NLdmj9S1XUnaCofft0SSL9MaGl33vnguoBevxJSLb0GQXpg3Bdij2IASsJ/8DcvxGPtV7BsCriyieAd3kvVA7m0GwtwUuDpS4NkFJeahNOzMbODKae/SffBq0z9EoWvMjD0U1rhoroigSV7QdaH6RIg9Wxs9ok6dwQCyR+XYaN6iXF8d15LXSk8mPLmul54OAs9LwyFh2F3FrzAu+Aiy97fTk73TblQzWlHOodz2apgM8ZzjQCQGZC+VYdb2bkOp89Vfe25aiN6v2BLH5Nd2LENmRg2p+kcH08wY4AaSV97qt/U3jKckTis2t8nXAffUw83W0Usa4GN0E8FfFIgZYXXD2R1HzMy/iEcu8q3rdsJFN4FAg0gHXbyWYQaTW6hWrGdAkVtJadSt7RzUuEcJegdflkueXAIeTTJkDyzjy/wgYCttUgo9/v3CClCFUE/NRLomT4PXf9seeK357X7ktSGAb70NjN4IVEzKAwKG6lBKvzLwfS3djXc7PpvCK39yjd7+lRhAWqZnVPay05V1L5WwfjI8hf+WbVj0awJRHCzyrfo4Hsy6UnPigG9Ep0HnKQ0FTpApwsebXZDJ5G95Kbw295TebfydeTNu0tFFVdOSHwOH28+r3wy0aLwLnZynOvthYXYOC2X+676EAqjscdjG943RqZZf1V52Y/UkLRoi573Xv9kskZdSePxWWs7vzg== + JUMIO_API_TOKEN: AgClWDEc9ch2qwyRQ+P0aSfJmwrGuthANLtYwVuYhWYPa9FmeX68w1XekSaVyggD06T32t2yV7zOQ80SSzT1siqkSr5DLCOv/6ROXajIBVJ43nsCh5EadTD1GPcZVYBjf/LCyaN2mNT8noYhN4NQIePT6SBH56sfq6CIXmw39jN9FTscebRc8HRtqE37wGxH4G5lyMS2owF8HdpMXhl+dk1+ZJnZjsaK1sm28WiDhqZSIXPcSM6BR4TDXw9f8bi+mM32YkoZSZnBlE71PTj+ZEC4W5HIsnUkOG1puTeuO5jQ42512mH8PIuQFrqVDaaitlPROCGulExUOt3gNDK7adrH5Sl0OtrxYjOuS9E8+5kJ0fX7e102ly/ClH8uCBdhFU0ZBMp/WqiwDXSsAHSjJbif8x24UPUFPPHIqoMycqBArOs7iCv9Hlwig/6PglWej9v7CWIFNMhM0H3LPWvxR1alITp75USx3SOxdWFS9mK0TYfA4OLeZ4Y1e4IFB6PJ5pKya5yp2K93b4IhI2eeUp7hC2kzngtYV2gwz56fE3b2MMEdEIA0CJlawMbODYBPWYeSc63gtApZG2haYbUlkNr4hHkJ6PozwPe748uSaxNlWthpw1gPs/92syjkW7Ft8xAqFnjoU0kk0lkoc5Qm9BbGpr/fIRywewYnkVOTwTNSdPhZeDEnSTFDipnbynXneXOuQziBXohl9taRFJ1SlLBAc3H+bxbUFiLRpmGZ6GLLg1JigLSSuw7t + MAXMIND_ACCOUNT_ID: AgDD5UfTdaW5U1xEjxBFS9jBjAKLViQflgG4uQG2vVIWYWz+QaFpfkrmooG0TZwU9fXswv0YUdFcnKM+acQlADgywcjtxtQE2GtMrqheaasnRVfCJRpQQDSYn3SH1ZNMvOSAdr6SXplOfkID6XoVp6Rg4Ck1ifmCw47Ksrl6gh5sw8f57i7C2R0FzGHGzv+wHEdJBL1Sav9rni/InMTl+y3IEtH1UcV0sCWvi4QU2PAIYPsZiS0fp2R3oO9G6XNQajDwEAdSgdhKxtIyfuNOGifdfG1P+4WwGeF1KpO24/DVhivjSZn27X9w/M0N75F1WVO5OpJEckTg0Mj4GANKgYohmMaYGaHR1JXwwN6ylqLqb1k+fkxqQIFYp4AHQ4ZHHR6eZfA+GARkvoitKmMBo+FLfHLgKAc6EVnoS8MgZDQaaTvDdyKMiTa0UTIKfeWB60tXWM1AKpSeB15w4SwSE8FuiZI5/AKhjCWb78P5fw+8V9WYkMCe+giXiWToHiKbofAH7h3arp5F+dhkQqKGqZ23zwJ4SEfBkr/k+SLOnCrSqO29joDNGdl+4+glqYE1au6OsvL/lqnqeTNfulSGhDg8I8ZytJ7tgSzd5KgeyFxygJ1qW8y7w7Ei5EfEj7ZBXELfNMB8KQXvE5hKrrspxxUB27RSZD24fNKwV90Pdn/m7IUEU3IB9bFHadcxGmK5C0sewCqOERiZ + MAXMIND_LICENSE_KEY: AgCX5TetoG4dJB9am0q7Cv2nP47IqEXUVOTA7GBSoOCbnCZ+tYek0uYaLl1U186NI/H+BcEwo/PlqVHXzk0lPCSNwrPtoyNq3pd5W3XSAqC36O3Inco5KCDELDE6IJ8TFZPQthn2ua405+CvQggwVBRV8/C8rzvPXpM7+hDcX+mMogD56J5o+M3AXLQ6WtMBBh15o2xiLAAABvQeqO9ixFcVBNxpZBwNjj4KjnPEun3+Bwqtufa2LSnVtOg11uSjmKoi/1J7O7YGgsVykJXcMEAsrI3VVTdzrHJdFQWsMlrXvN0Ite/yRHMimLwLpRRoO0HBHK8Qwdnz/RYqTzLuUFyRDHrNP+pkb5ceoIoCpTJOs+8upfwsdS24yrq/qKuM7juR7ICvvHhqvE20P88nf6sDjM4uZmic5kV1iTCzZTPJENWMCjteMnpBsroxziitODx8lEGSzvAAiyscB6jhEZGby0lu6NfIzDXDWegyjN1e730aX8p0tAWeqTTw6b/ZbM8UztUPZlkEpTANUy4bv5i3aBCM/Snp8b6ecOUniAtecUCkpi87QguvNV0ZNadaUomqvjV4n/GTysAZCO8WgFAvpNxzErIg4pjhALma5UjLAc9g9Usqpc5js6Q+a2dN4E7OPOumvApGv2MZL0TGcL22EnMhFFV1qacO0zT6BGulXQh06YnR5GmWyR9BZ0yu1ATMrL/NiDby/QD9l1Q0WMyP + MOODYS_API_KEY: AgBfgeTPXv4kPisVRWokXJ0jMBBzdOHMu2wbHbcfL+SROEA2zfaLEmr381kj5+WRaVVFdOsNQIkXSY9MROVBrbgKuAZQP/8Kn8UXiNB/uCfDkbQJ3obh4Rw7P2ppxLYZUhFpuLE7K8jJxQvynIeMxlk9WS0rEG0OmZfmDiJ/kFItRaoP/CDbJR245+CeyU9wemXaQbL2AzDRIJlF9c/6CAG0srtzsOVDgRnrZjZegneJbbT51B+MGDG1rmygNteLWTXZfxQ9DvPPdBPQ9pT3G02nPOJNXF1JeHXXKd/BYyCrSEwIz9ViukEnzUnJkofIMEaIT/L5M/d1OgsP8zbyMRCaylo7BW0g0S3Guxu5Y9VtTQyYzIrNeM3XQF71chPFa43GbLfiOXy40o0JdPf/VqOilrq4WLOGvQqILHfz8dUbOUePVeNIQ/sfcgoqryNjr2maDs5s+0ewdf3t0zvBg7LGjPZZZEYVYUGbrryrtyi3Vv7gt55Tv9u0mpgmTRju7qYmfmuD8cVOx1yiBhTLB0/x05s+5acsKyW21/ygJDf+XNQrAXBr07OX01s+0FMvMm20ZqCTeT/Hd2LfukTjqhObp03CjoZUD9PdNMVblxHDnm4p0WAF8bNn7soYnyuf7VGLg+CpvUF1+AHzRtN+xD5cb8z/7e50iWt/r3UbG4RzZFLuCtVW+efTxJUHqgrVFIESdDh21QsG2XHAwlZh8D891JXe5AYsidw6rK4TAwxY6sYP1F8m67e3UCyVNA== + OPENAI_API_KEY: AgC9r7yOWRDEQ+MN/lN3aO03sk/bzfUEqwPzxFCNXqs8dkUDxzkO5iLR/+Bh4ayvBDMdaXOoeE7LjgkxLOH+RYp3AyBgKF+Z+aMazl/0IGZ+ez8wYTiNDSj2iwPdxcJZ+Lf2sYPGItDwVFhgftPou7ML1NvRqgERrw7HWsIhYejDo7iRK/ce2XZ1xeUgEtGvigivBn0hUNyxrlkU9fJqF24v3q36O2eDOtlOgpa5+1rfAsX7olfG9XSISY6VhLQVaNnIuhs46rbaVDMIBkdbjfx69j9SnA0Wzap/psaBp5EZJJ9E9waIfEHgXHpghOa0bWaMXP+hTKpgliDb9dVJgC1zRchy5FKhynBOCyQBogcY2VEPy2Z54jwos8vB7lEmwqzxYyJpGlABKE6wAMe23lh9nY/D/3s8LfdMNickx1J0Mb2j1bDmY7G0+SXm6neJEY2FyudVxgSdRv3Gz+AQT4P2QBC+XMe7BoeEdgLVXqN4gNImCj7hiEyZ74oYaa/PqWINGJW5MotZbFzKCKBo26PI8GY1fXsdnYXa3W+8cpafEKQDF6KcBgH/bSEB095JTU7GfP5UrCmoREuoqysS4yCNir1wwwMLbGc0Ah7dt+TPPFY1bXR7S/7IBVeJ/+63uJm5JxmecCfpzorfECkdsBYGoHR0D5HrXRZDeop9K0wAzju5NdkwjazLNhu2OeOaXFHoklVyy8bYtymnLC+9Qy3YAk5pEMV6RvtzxY54MwhtZkMZCaDyPZigCUAoXP3UsAHi5lG/Hng2+VErE8/E5JitgLuMNOxFcAaNHUFdTROTvEEgS/rswHV+LDORrW6XYJcIgU/BeSxbrb//ut8AdLa/B8fYT40lY7+kuxfFuGf7jxy0XQN3kKMIcvXWiCg+zRTW5zJyQyaUR8lwYvqT98XNl0Gb+w== + OPENROUTER_API_KEY: AgC9XSP+mJxvHyPgsjeSQYAkArDmHcMdRLsObg44ZBxWmz9fVzcZBOh6J+TsFwLf1w7vqh9fXe7K/zAj5b6/hLRE936AjLUMPkurPxSZhvHart3JXWl7flqxKkeC8Xdk4GqRufHuR8cu4VgAlDSq5crnE/pz+PmQgIFAjwax1hDqbJjJLW8vmlZo24/PPjZmqp7BTwVMNa2FyOA1SqQZsI6wMAj7AW2LJWvvK1t8jXCC9RWxrGjexR9HRoXshFbbzya7NhQ9NFEf1rsr3wvzBMzZoN9zhPTYIbCEpCVBdwtQRWrKysOTUH5VL5FEk81Qy9B7AOu5s1nT0V/kr2nF6UvW1xNosVYfjxs5j+SNLLOQdpwrdvh2SdtTfpWCRsAymUAIo7llUqHP9iXv0XblccUbwyg5VAEM3he+VB+jsdywY35RXMgPCQXbaaxDYaSh4ts1239fmdf3WeIEeUfdeq/V2H7nKhUbkAdyjpIKZC09LJ4c6xHMstVFA8p86FjL+zMHzeuZLx/4fx63YpmRrM96+61vzCOmkVEFynmWIeRvWGR7/GmBfUgBlEkenhZqIQep52VwmvCT4fCeAr8W/HytI4pg+xOXJPdQnUtUt87YTqWgw8Qh7nO1S3omrFY4QdG4ga/DkJ5CNpyT5GU3BZrz6+mBFaw9EW+43grdFl8Kt+MUfx6uL8wSKZjrrjx/5ilYi+8uHX0Ya3N9mMlpImoPMypT0RnS7tUgIhb0x6HpFvDqOHIpbdJBXFiiSsWpLCMhyYoVQAZjLKSFTvurB1IkANJOdNREI54Z + PAYPAL_ACCESS_TOKEN: AgCavDNO/tH3BhW/2uAezruE+IUENp0rDEYBkJWAHsHK3FlzRbggtVplVt4r0CYGob4qmr/VKeuI6c5zVv1TGXrg2lXv52XdzH+SZ7z5ATx/QMkx4t6N39/BfedZTPFr/Ffu2Cf/6twBS6jzfo7FUXVHWv2YdHQTYV4C3J7+cScPVp5GW0PCKwkDk3hGeoySaLXHXoqGIEJz8BzKojMTDWmkgORJ5R3AAuVEsGUHDUWOzck83gjNb8tUb9J3t07U/lneplEQ/TuBlqjQukAITHE2Ootz/iHICLnxnQhlnNC0jbtBGvQc1Afkmxhaqyx941wO9xdfWRJ9SD4TdQDOa54BE6/2yQL8TsF3NOToGgfcjGA5mFj1pqog4t048G21TI2tgSo5psAb8W3aq1TRc4NaJ7vSrI+unFZ4O7Ix+vefolCEhB4IR84ZNuUqoSHltwO/lZ8QK7Fznil/0CEby9AfjdILYOKkKvr00bXzq1ORnXAwCR5WKvN0Au4nGRnqQTKC57G2nG6VSDDq8Bxrpz1u4KbcSncjkCR5+Qg1yZ8GJXK1sr9RLlbzor+z2SKKeqgNakSUq8McYR6f5d5x9XuOiHL6kShR5to/sbnOzA24HxR0hjeSXfCf4NHMrW/XBJDQdxKBgFWtX3F5olDzev9luGJEXvqWBmDTYT/M4MS/NLX8F9lpLg/m5v3Jk8BQirvSD1Qhjp766PDRvXVD64B5Mn8XBjgR4PmTGmNHslMn9Iqk1ocPJaP5syAuRm1JEPDBMdWbSewx/MdpDAjE5b18dDDT25z0cn7yddBtOfKnDabB0zUZ5eu1Ei8HvsbhDRax + PLAID_CLIENT_ID: AgBFjfPgyte+JwqcCYcGuhjplhko9i6G6V6+eQfhgvPIAwdcN0VMNd9hoz0oTGmtu/P1qM9klmB++DUac3HbzTjl1yf/a8CbCw02EEehVPnKrv/EKDqkVbvc/T44ezQFWbNl8HdzPejUm7HeIMwh63I9MM1DDnIUUlUUxwrdcwGJWWUEMeLpY4hVvmvBcVgn/awlHvbnHl3iC+LH3BzzwmLIFjKMfHDcHNnnhz47exV6qbore02P2b/QnM9Zp9tGxz0qKkgtI/sVUVYS2NZ9OccAHEuopsKx9yJeIm97huAycSyPTwhnAsoqQTxtkmCqp4m9Getq01kxge0tMiJySgLwOr0ZejEWIxIxsjEpe+RFD45akWjqcpJxkwcdX4hXcrSmjoCJRBcjv7y7ynjfvJdTpvkbm+yTc2B57hP3rImHNN3og/zZf/ilp8CEBXvS1ZMj1pCpHmiDyYiN0CNWXeFs9OgnocVzBAP+KstWmCiX/3GJvR985cPmX1hR2zsloO3h7FGOCd7Q2aRLrqpNEWdr+vZ0DryUsTaoCoqYRiPMM48oFsz7HktZN1YlMEJ7xl/jMc8jB30lmqiNNnNp8Q8/esIFcR98KXV9nsjQYHII8MPpj5eKSSoia1Ctr0lXRoOeitwH8oyxANc30ti/QDXoHTHC1uhu0UhSoJCEmcAINAlw1PSIAYng5tmhEadcwCqYTVNVDbOsrENeNWDsE0847R/s+F2uFF8= + PLAID_SECRET: AgBn5bfIwiM50cwhI3MHBHZS689CPdSu0YOBUIGAK7kNj6WaEEFAQ8QuPkCS1L2oqHF4l+RpuH7bdunm+ZFpgfKxKUIutDiJwkSZhAL+X+Bv0IgVJ8qe5Sq0ZUE0YYY4wOEaY0WPev03Avaga2r1dxU2c7gC5QlczqSYVnwRhr1gKAtMgTilHCg79jt1g+aYiojp8AKHeUjOrWyGQItqTmqsZJjK1dsVn40l/pxLA0BA1sX5cDb2DVJPUva9PUAxXwtG9tZF+oFkHYurxVtPE8bXDrcA/6yW+OcujWPbuAP8Dyk+msA4U+/Fl7GwDruHkYRWne5UIg+Qpvvmqcx4JefFE2oowJWzEUb/1boNgY8tHK9BybUP/76yNOFoH528MKYw+T1zGHzClFkSaVmQQgolNokLCZYsAcWlhSc53XYB1/LzXQG+eEq+YHBPOTJkfhFZSag/vLG9tJA/SiirzfQfAjPYZlSQp4hhXMMSNLL85c5InTdEbT+dCP20E0TogD2kWEgsqGuQEA96lseF271YT6bgBdH1VK3lYcG3Xj3cbH7elvitE2jWe4uSidyvWSgzuPvUhNnMau8jEX0pTLt4IaoG/A9OUgklL54vo+UFSXK3BD0YvxfMSaS3dEO0F7hOa0QOvwQb68fGOA+a1+LGD6SjDpqnWvamkTlE1IOdUKaR/ClxPnqzmXVVs9GnciHU7PuT7p2UwS4eEptrPk7OFk41NNupvUBO2lD/uzo= + SENDGRID_API_KEY: AgBo7CgjCbLKtEVMshI8c2v2A/wQRS+8cHrn7YQiuOD2Ot0Ko/btgpfck4qOq2FmlsA6CDx1cO5JmJSAI2QDLxxTCPIUZtl/MGw5BYRZtaTOxxzIok/1HNG0F7ZPjSKXBU9NWzmN+ilF3qLbuP1jdywzmnHDDquILiaKa8GSr2bQF+FDUnjrnY6IiC29jmITHCfqXLi2sPsLfEaYXfld3bonAJPyOK5ZrXNEq0cJGxjcdMnLItqHod+9+XehhYGWU5DA+1Y38Ysi7dbWas/VsU7ayVtZnDFnVK5Hchfm8vaHtvv4q0tLT/mgXOaFIMnElU6W+pBYf2s2bOpFMl3mm6QXIC83zfViv8tH9a7TKHR3kJhbU8hjdM1yj6T7nmu3goJ97QcW3vyC9K6etO1hNLu+OBKLHSW+0Hg4riSa3AIg1ucTeQfh+hl0SvhH47SC14MAKPKG3sxO3+s6BaU3IElDiCROSv4IY6VWhiYl3frtjB9qIVJrlP4nAEw4c+nlV22tsuCmfVe9nQbjGZ1FaPl4wkB3KDWW/EZl0TY20sh+xYFsW9Mg5pHPI3grMfm5+cIZHKhWnV9AjnKSkS7xCYteJx8PoXC7N2YxSfeOr6D2R/QO0vy13/c5EGZ42LnKNwm2RJB1bbDrSANn2ysbab7DCJ4/TY1Hl6aFGiyYSeyIoLlrFEKDtLg2Li2J4sIeYnM9wHORIGlT+HxVinMVELWPYZpCEhPtIAIOKXFOiSVjGjqvt6YIWIZEchL/xvsOlDR0b9EdLiqG861ogpVY694cJZw4wz4= + SIFT_API_KEY: AgC0ucNg9zyyD/tKCAKNMH67qtsrqp6SQV4/Fy2k04eGpsWSBFL6JOGF6u327G1TAA8UKM2uc6J9eVQhxfdIYTLxk58U7qc4z538v4zELgoVpjlfdhCgqvZV7zNPELN7g3bX8FhP9W9Qu5WDsdXQ+xIBEM0tSn+KLT3LG45GZmnfvZAx87HEbaUn4jndH27qMTSNhlTP7PqqgxgOK+sSL2UiwASX0Xj3Fy9wpyXkWVHMBlRxJkyS6vTf94KSxPvXy7m/v0XFjRsb+2FIQywGkyBnyfiSQ9rz7cSf6JDthtO3mx0OgIRtHYa8Cg6f/njLX14xpiLXqiBqMkMubiFd3SCjc/KUR4rDCJRZG8Y70gBPGozI0sFNAGMXCoP4QBgXt5cSentEu3u/G3JDIGcKfMDskb67jjdlRZe3WT6ZTSzDyh1BFrWNS4DF1TmvAdOXrOrg1Oq1rk71o3OkrB2Oy5R6xMBS2urOjYW07LRWuFPyYs9pywCiAFX4kxnR1PflMZdIQT8UnBZtZ+HdctC+648W+eJwH/g4RrSSSk8B1TCVSehbnlvxOZdSrI9WRl2fd+Ry4ydGpJKj3UEczFOLYlT1JWkZk1VMBFr6jAc6y6hApxjef+ECQmBrXDq1W3S5GizE1dwO/tDiqebe9odJNHTLDQMejrJrdNsKHal0W5ZllWQE8EUZoVCp5y276dw3LtVf7c8CnoP/upPAOWCGoK9hwjDXAGSqk+UCzJjYB7qIsA== + SLACK_WEBHOOK_URL: AgBwqKNdVcCzN6DFhuUcuctrcJp5aDw1xvuhr+zfMqb2oaJwpj9W3tW58yEQLXeP6o788zkOqZlJkZ67nmT7RaBGLjKAWOqOg7SYHv+Nf06r3+2TXMcG4h67knwwfsZVsktPDRSCd3Fdsv+TawYgdnbBqlebWviAGrmQkWhM23nn9z1YnzeiUYQcOWKHch/rkqMek8pEp2NWckIBU+4V722nUmbBdC6BZtZdSg6rqQhC5zyWXI2cr2uhPk3LIXpJqzWdPx9kIgLOiZiZ1DwoaTzFpsAT13HLcrx4PtZ4BzuNgck2fiiUKjuJZhZlt10qGkL/+pq7ZNY/M/UU94vZyv0EvMJiE2+VWL1ZqLqMSnt96CJ/WxEi7jx2zPokAralzrs++RBtA2NofDkQ2JlFS2aarV7erb4VaeK5u6TUVel1ixs7OWdPX8BqkXoaz7QeCrey6FH9f1zIkwBVOjgFxDx6A5MG5WflC733/9kxDfR/5du0aOdbWoT8LgrvtguiOsU8PkErbEmtxladVWfXt4MW2BOWAaHT5RLNnPMZS9dv26XtIeSi6H30Iuvdu1LSsXEin6zXigtzz+sN/pUnfnWN+EKGSuJeeg6eY3yE0ZMRLX4Z2nrYBbd/Ye8vHPYvgPWyeJhGlGHdL0x1FEkFdOvYXMyjktYNmQv1p7uLZc5mRV9OiPweEcvXU1b0Q/IU1h/VlQ+Sr+HpScNBq/c1X0ZUJXWrX/pnZD5wRxcAVMojzTEGb5/qdzONXVWuEzvHe8ZE/Yeix541evf+CSwtwWNramioFKX4Ba8/dGKnsbJs + SOCURE_API_KEY: AgCKcJ6O7N/kObFyNZpZ0S/gBL2dDq6sWBvXlvFZA6ZLH8SPWcrpW4Ww4BEo2QnbdboQ8ymZNavlaRY1j/sWfuYzIkwiJhy0CasPQVAQlX3awX6c8Gb0pounkJPHffT0HR1s8mZlelg6g2dMWO0fvR5JaRIKIqzRWCv6oJQfowmAWxBas0a7m6nuRcDNK1o++8sG+AU887cfrw4UW4NPPOeI4As0aHYvzCQWa+F9B0Gveesgrvy9/Tc2DjMpmhG0A4W+Hqyw7Eja278cH7jmpxBoJ2u3PpohRrd8/N+8aDltm60/8xjpAgoLYP5mR/6p0/39vhlU98UdiFvSJ4TudDcrhZpjGIv5Cg7oZ55DwiZp3TPdtGXW9fFOCgNXBvZKNVK8ntgKDsSgZeuPC/rYfZvK/fifxyXbRAzUGXZxcUhSs879eIg9lz1iHpES8IvpPP+UFGWu0WBbIvL8w2PbKq9+pTJOcXk3cAHA8C7am2NJYUCPFSM81nYRWXjFbx+XND4wcJhxYw8iXX3R/BUZC9cnUrzyaIO9ao8mUVfZbhAn+Zkt42LMElYdbkXL+1xH57nz2XlQoVocyPCVqUwurkIToeEZsO3issS7eLTutOyXt3585T32i/S/mxJm8Omq3wC7UJyTuoW5jMJvYx0jQjHt/quxnrYfB0PkHfN7Xb4t+f92qMOE2sFX08HtEW848rhmgeeG0rteX3oc560tOWMz7Yj2ak/uSwwD/d1Sp+9+pnDZs5A= + STRIPE_API_KEY: AgBb+szp0244gAAw6yafmuQTmf0c0iJ1QNm5K2g4vd2qqzXU0K9NE3gz408znH3qm9DZgO0a52QiwUS6gak3dpTFZ65+r+H0kV09E4YFKvV9f/0uanfjEFQsHIGU7oJBXV7TbBx+5JzaVnaVgS4QsIejA2KjTJSHg4VZbi9WECFYmlqLl70oInmW9NrfhcWfeB2BnzxY2f+ekblVD1Yg62w38vmbZOdRsB84/WlWvKVj70dxRWhH6CXnFrnYS15KXYLH0YC8X57N/6NZPP+iIYK5S/maiwjRFvv8E+PDJirx7lBX1yZZ1bLRihX4GIK/b1zeUV3Z/F/v+mcEjdfw0eMqwMGrKJ8g2h1UaAdx7QsmiIuobcJxwTbPe3YBPwDxjz7zBFGu9SUcIbqDRD9wyJR+qql5I9Sx8oO90h6IIS37xfspvFpyxPZiSX4mqMFZeglPL5LN9BWIrXRNf7gJU2lx4jvO5GmNCVpXks+aSkvkPK0Qdf2hb954NTFxB+pYY6/6DzLcc2sUsIJD07HBkrx0odvCDbQegpykLLUEoAjodVgk42cRvZvSnwUu328aJNNE6zrd0yjLGy/sUXujzYxGendK7zWKNGLIArSGEWsKc5rAdFLE22F83OYPZMnknzsSXAMmRtUznGGfhqbaPfnDXiWmhDmxEiAOYGJLNgDUg0kRzAI92L08+ANuLgvKPfd1ljlU9tesmL06loypDhmUwLDBZ1PUHo3f9Hd9/3IYJriBADUf2eG2mJw39uox3ekn30NhnAJiodW6tbZJuK7EsAqoJMOgWOmU3yAG9csIj5A90xgzrUCG1WyP/bu/ueEWYkiaNIZG+jaK0g== + TWILIO_ACCOUNT_SID: AgCU5IWqnQf/5s9D7tv0ADgsqBrKszfb2IS2GP1rV1zq007s2+snli00XzYHYid6rg47ysPMXBbLWwh5BYGxUdSESteI+XZWby6qnvfReYTax77ian1mX7J6xxI97hx6kFR/5BtvpS1rNVGlMXXKCYcaVL+TydBbRWhFD9e5gC9OY2H4bX+l+4yeGAKEtzASiz4Oparmr0Gxmq0gnvi8upCqSj5d2VFxHScnqzZbwq0deROyRxctcPZV5uPV2XQU3hAKH5lE5ikf8+4iWE/kYB8uth4DicjbcrIpZdMY0KK5i4uAHPGIXl1xnyzxBH1BGMMqMJMBWbPVAHTb/Eanu+82mkxO5ygI2DDvXdH3+V1FvSlJNhY0v+tR7EtNqydfbi3/qkqg2yft45MG1kD64jQBAF+chiPYzuX9QFgGLlZivGIlI6pdSQrq4HfQ/Kug0Csxj8EWg7t6ULIsWg1GDNwlVoHLeRSHBTnUUcvBKsr33JFLLDsNB4i6lajyvepw22inYQJb+OccufsGEyTXjH0ltt9if5X9JAozWJItBAG2wDhSZrWTiMDfKvFniInKjIVAmiNbAKM2mrZdMxvDRDwcVCf7bOjXEN4HLF3vtEC+r/jqlLNZuIcyC822gH2DZbmjXH++I1+MCYCaEAOWMLx23e/w9PHS2Jo4wyIUbyIJeJepOQl5X114cOhwkZ350m9YWyGVYGbxSc58gNU4QVuD3Rzo4byfJnvxasDL3ZSygvTa + TWILIO_AUTH_TOKEN: AgCTXFtMgc+3Mcd7xHuKVQ5gD2SFpFBt3yCMp8rwOqPeD05NvDF4AfT7sPpx108+wHgqTrmle/D5Y6IiUkBKH9YBYfGLS52EpYruYyPZ7nbCf+z0BlGfl8dhtS0/RlU5iXPX76oJcH0cQ4/ixlOOw9PNMa4YCVvCHw1uVQYLPp3bbcvR+AemQ277QmuJ7OwdjOZj+0gcUPp5GY3kwsEEhBCiwLb4HfuNp2eEtPG7ekVs7zdfRfD5ieILB8J+1KMmoX+VywGE9uCd3iv8T1mk/gLdysGtWp2KyKZCYFLR22nmCYJ4Qu/QMP5fMYU5mbxHQnRS+BlwmbPpI+RcL1xpKTbn7OWiH/DUuUbSai2ks3dtBtdhiibz8lV0OzmRRZ20A0EYhlc39acpuzWgByLX6FtAdOYKrynBNplql49HkxALvMgpu2/qtjMzZmprU3GxJ7VD5soSIoyKT8FLWji7bPl+N9uX2pAbxnUEE8hTaQ8DiAdYxgb98rW3Y8jNyjV3F9MwedjM65URp9G+qTODsy8eSL1t+mznNgjSLXlhzjnumqV7i3pqIJdpw8kHT4tLq9eOM3+nj0PDd9HWDgQW3R41sO0DvLywNB/7iCoPMVNBsxxate125xLUoG1LO5afriLF1l05I14aDD/GMDFCX0fxUdcgFvVVrmkFi07Myb4slvJNWDKuMyMawdiIHSEDtzuhcHPwqk/3cZQPLm0uCtVwSJf1g7wl0nUvXXuDiC5DxA== + XAI_API_KEY: AgA0Lqfia/FLQGpkk310Iov1NU2Z04tcWFDFlxGcNR9CMTOLPQ0pWb+P3S1kvr3lGZwkUpeB0ifSgLRYQ6AslRqYk/oUP2TBz1VXSG1ZYiMLkIaC41C1NqM4LjU0m5tMqICLy+puIr5vEkIINHRe2NbVRVVTCn3XcggUGo/7uqFzqQpcICmVF3qaf4WjWUp0X2j5BUva0ANf4ck2hoDLRMyNZsq/qw9qoFTefNvPXN35ai7GhSVvZ/OydG87DmfjFlSbeDq4LeAUEcZZSzcLSECQss2Q8Znfsj+ioPFOdj9jDmfBXBZhvcJwN2WBdE0HQlncfibJ5cM3B2XvtTGhZhrrMhtgc+2rUKTlSGrhRboe+z/4lQN3pXiQWfDNgbftLduKJWelAADxFreXg+niixsrvCcfaP0ISijDk/CczSSV2Ueu+550GGqRzdYkrGUOctjkHQJNcVm4hbUgr0A29ieOAppz6Kk8SnggqSkZ8eoupDY1eSk7EX52ITpYae6BInOdeGRBJKt1NDqm0RcxXKx5p/z8uyfNynB8uCH9NvEnUmOS8zhMXV37AvOv4zMwtIAoRffFd1vS3KssI2ARnm7xucnC6qmmKT8tklkfowY2a0VUxgWRnGiE3WTyTwxFZCEE/W+Kdrz6fUuKwMymNGv1s4BL19RD9MzUq0NrwMEE3ILQBTNKSXniC8Vh9ppULDpzvcxwRB04p/Bw9IMYCkz/lo7YZfJlYsEwaBVnQNa5VF2R7TRDBRyX52+yUS0YnLATeRLzezUn5PgceJ1dHqKDR31khCjBo79bXXFwtL2YSLh7QrY= template: metadata: name: banking-thirdparty-keys From 3dc5406b1dfbd686f74aef7334ea2d0ab6e4514d Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 12:59:06 -0400 Subject: [PATCH 4/6] accounts-service: real Plaid sandbox flow (create+exchange+balance) fetchPlaidBalance now acquires a real sandbox access_token via /sandbox/public_token/create + /item/public_token/exchange (cached) instead of fabricating access-sandbox-, so the Plaid balance call returns a real 200. Overlay pins a locally-built image (demo-plaid) for minikube. Co-Authored-By: Claude Opus 4.8 --- .../service/FinancialDataService.java | 91 +++++++++++++++++-- .../accounts-service-thirdparty-env.yaml | 1 + .../overlays/speedscale/kustomization.yaml | 5 + 3 files changed, 88 insertions(+), 9 deletions(-) diff --git a/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java b/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java index b419591..4474f67 100644 --- a/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java +++ b/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java @@ -36,6 +36,9 @@ public class FinancialDataService { private HttpClient httpClient; + // Cached Plaid sandbox access token (acquired via public_token create+exchange). + private volatile String plaidAccessToken; + @PostConstruct void init() { this.httpClient = HttpClient.newBuilder() @@ -60,22 +63,92 @@ public void enrichAsync(String accountNumber) { } private CompletableFuture fetchPlaidBalance(String accountNumber) { - String body = "{\"access_token\":\"access-sandbox-" + accountNumber + "\"}"; - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("https://sandbox.plaid.com/accounts/balance/get")) + return ensurePlaidAccessToken().thenCompose(token -> { + if (token == null) { + logger.warn("Plaid access token unavailable; skipping balance call"); + return CompletableFuture.completedFuture(null); + } + String body = "{\"access_token\":\"" + token + "\"}"; + HttpRequest request = plaidRequest("/accounts/balance/get", body); + return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenAccept(resp -> logger.info("Plaid balance response: status={}", resp.statusCode())) + .exceptionally(ex -> { + logger.warn("Plaid balance call failed: {}", ex.getMessage()); + return null; + }); + }); + } + + // Plaid sandbox tokens are not constructible: create a public_token then exchange it + // for an access_token. Cached and reused across accounts. + private CompletableFuture ensurePlaidAccessToken() { + String cached = plaidAccessToken; + if (cached != null) { + return CompletableFuture.completedFuture(cached); + } + String createBody = "{\"institution_id\":\"ins_109508\",\"initial_products\":[\"balance\"]}"; + HttpRequest createReq = plaidRequest("/sandbox/public_token/create", createBody); + return httpClient.sendAsync(createReq, HttpResponse.BodyHandlers.ofString()) + .thenCompose(createResp -> { + String publicToken = extractJsonString(createResp.body(), "public_token"); + if (publicToken == null) { + logger.warn("Plaid public_token create failed: status={}", createResp.statusCode()); + return CompletableFuture.completedFuture((String) null); + } + HttpRequest exchangeReq = plaidRequest("/item/public_token/exchange", + "{\"public_token\":\"" + publicToken + "\"}"); + return httpClient.sendAsync(exchangeReq, HttpResponse.BodyHandlers.ofString()) + .thenApply(exchangeResp -> { + String token = extractJsonString(exchangeResp.body(), "access_token"); + if (token != null) { + plaidAccessToken = token; + logger.info("Plaid sandbox access token acquired"); + } else { + logger.warn("Plaid token exchange failed: status={}", exchangeResp.statusCode()); + } + return token; + }); + }) + .exceptionally(ex -> { + logger.warn("Plaid token setup failed: {}", ex.getMessage()); + return null; + }); + } + + private HttpRequest plaidRequest(String path, String body) { + return HttpRequest.newBuilder() + .uri(URI.create("https://sandbox.plaid.com" + path)) .timeout(TIMEOUT) .header("Content-Type", "application/json") .header("PLAID-CLIENT-ID", plaidClientId) .header("PLAID-SECRET", plaidSecret) .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); + } - return httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()) - .thenAccept(resp -> logger.info("Plaid balance response: status={}", resp.statusCode())) - .exceptionally(ex -> { - logger.warn("Plaid balance call failed: {}", ex.getMessage()); - return null; - }); + // Minimal "key":"value" string extractor — avoids pulling in a JSON dependency here. + private static String extractJsonString(String json, String key) { + if (json == null) { + return null; + } + String needle = "\"" + key + "\""; + int k = json.indexOf(needle); + if (k < 0) { + return null; + } + int colon = json.indexOf(':', k + needle.length()); + if (colon < 0) { + return null; + } + int q1 = json.indexOf('"', colon + 1); + if (q1 < 0) { + return null; + } + int q2 = json.indexOf('"', q1 + 1); + if (q2 < 0) { + return null; + } + return json.substring(q1 + 1, q2); } private CompletableFuture fetchExchangeRates() { diff --git a/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml index f70e038..4cf7e62 100644 --- a/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml +++ b/kubernetes/overlays/speedscale/accounts-service-thirdparty-env.yaml @@ -8,6 +8,7 @@ spec: spec: containers: - name: accounts-service + imagePullPolicy: IfNotPresent env: - name: PLAID_CLIENT_ID valueFrom: diff --git a/kubernetes/overlays/speedscale/kustomization.yaml b/kubernetes/overlays/speedscale/kustomization.yaml index 582ea26..91018d6 100644 --- a/kubernetes/overlays/speedscale/kustomization.yaml +++ b/kubernetes/overlays/speedscale/kustomization.yaml @@ -7,6 +7,11 @@ resources: - speedscale-metrics-services.yaml - banking-thirdparty-keys-sealed.yaml +# accounts-service: locally-built image with the real Plaid create→exchange→balance flow +images: +- name: ghcr.io/speedscale/microsvc/accounts-service + newTag: demo-plaid + patches: # Add Istio injection and Speedscale labels to the existing banking-app namespace - target: From 52c061ad1b4210fd14237992fac3285a12418f4a Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 13:05:42 -0400 Subject: [PATCH 5/6] Plaid: use 'transactions' initial_product (balance not allowed in create) Co-Authored-By: Claude Opus 4.8 --- .../banking/accountsservice/service/FinancialDataService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java b/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java index 4474f67..9b8ce9f 100644 --- a/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java +++ b/backend/accounts-service/src/main/java/com/banking/accountsservice/service/FinancialDataService.java @@ -86,7 +86,7 @@ private CompletableFuture ensurePlaidAccessToken() { if (cached != null) { return CompletableFuture.completedFuture(cached); } - String createBody = "{\"institution_id\":\"ins_109508\",\"initial_products\":[\"balance\"]}"; + String createBody = "{\"institution_id\":\"ins_109508\",\"initial_products\":[\"transactions\"]}"; HttpRequest createReq = plaidRequest("/sandbox/public_token/create", createBody); return httpClient.sendAsync(createReq, HttpResponse.BodyHandlers.ofString()) .thenCompose(createResp -> { From 8b00ab8473db72fd1a3fa6856b16d9bb5695833f Mon Sep 17 00:00:00 2001 From: Ken Ahrens Date: Thu, 11 Jun 2026 13:38:43 -0400 Subject: [PATCH 6/6] Use goproxy responder mode (drop istio-injection; no Istio on minikube) Co-Authored-By: Claude Opus 4.8 --- kubernetes/overlays/speedscale/kustomization.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/kubernetes/overlays/speedscale/kustomization.yaml b/kubernetes/overlays/speedscale/kustomization.yaml index 91018d6..8411b17 100644 --- a/kubernetes/overlays/speedscale/kustomization.yaml +++ b/kubernetes/overlays/speedscale/kustomization.yaml @@ -19,9 +19,6 @@ patches: kind: Namespace name: banking-app patch: |- - - op: add - path: /metadata/labels/istio-injection - value: enabled - op: add path: /metadata/labels/speedscale value: "true"