diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 00000000..c1394301 --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,13 @@ +creation_rules: + - key_groups: + - age: + - age14m2jv0f0z5xqk8m46cjsu6v2z6nn7ey0n9s3fnpnzsvj4jvvyqzqzl2gs2 # prod key on chatcraft.org + # Generated by `/home/taras/.local/bin/github-to-sops import-keys --github-users tarasglek,humphd` https://github.com/tarasglek/github-to-sops + - age19j4d6v9j7rx5fs629fu387qz4zmlpsqjexa4s08tkfrrmfdl5cwqjlaupd # humphd + - age1pspd08x525zqfnxz695quxc96huc8je69g572wnmavfvrnqq293sj6jw67 # humphd + - age13runq29jhy9kfpaegczrzttykerswh0qprq59msgd754yermtfmsa3hwg2 # tarasglek + - age1uagm9gk5nqvx46qyr5xe7489pr8x2drfnfe90h64duka5xtcfq2q9y3y3t # tarasglek + - age1ecvv92ayjw3spa86vk20suw9x8e3ucgp0rpdx7h6q92dyrmxtvrq8fqgp0 # tarasglek + - age1dv98p6n7w5wtyg70xq4ekhgtm8j3560ljw6gaa83upjg5l5c9caqmwcyzc # tarasglek +# EOF + diff --git a/functions/api/user.ts b/functions/api/user.ts new file mode 100644 index 00000000..5e4ef16f --- /dev/null +++ b/functions/api/user.ts @@ -0,0 +1,15 @@ +import { get_secrets } from "../secrets"; + +interface Env { + JWT_SECRET: string; +} + +// GET https://chatcraft.org/api/proxy?url= +// Must include JWT in cookie, and user must match token owner +export const onRequestGet: PagesFunction = async ({ request, env }) => { + console.error("user-info.ts onRequestGet"); + const ret = get_secrets("production", env.JWT_SECRET); + return new Response(JSON.stringify(ret), { + headers: { "content-type": "application/json" }, + }); +}; diff --git a/functions/production.enc.json b/functions/production.enc.json new file mode 100644 index 00000000..76f858eb --- /dev/null +++ b/functions/production.enc.json @@ -0,0 +1,48 @@ +{ + "GITHUB_OAUTH_CLIENT_ID": "ENC[AES256_GCM,data:Db1IoqhX6AKXu3ubyvDUsgkzgBM=,iv:n2x+oVFiTFdlc9cLB98WJ48HalajvcUWsduZ2dB4EOA=,tag:+GJXDO5P/ytrDuOhsDAjrw==,type:str]", + "GITHUB_OAUTH_CLIENT_SECRET": "ENC[AES256_GCM,data:dkDOWM4CqM4A3dln7qgyRx1eCFMEJ4jduDkqYR74Hkd3LLdSCTl4vw==,iv:WADzg/M28tGnhscI1R4idsyyKQuvSCOoVN9iPVfRPt8=,tag:YJfThOGiMmlDs4cO3chGxQ==,type:str]", + "GOOGLE_OAUTH_CLIENT_ID": "ENC[AES256_GCM,data:Yti+y/gtAfX4ySjg19sV/U/dTJBnhCWEstDU+sc2hoXm6XexpVHxRtfEvCfgtglulZEXxNXNikrgWTv4EdH8acfZiroasV+VOQ==,iv:VcqnmGsAXyH70qBImSXVq2+aRPhHRQjyxldfRXcqAAk=,tag:c1JK4nkwF6a4UKW8v313EQ==,type:str]", + "GOOGLE_OUATH_CLIENT_SECRET": "ENC[AES256_GCM,data:XWs6qc+iwJFPL3dSuCuzVAull5FF/pPvRKCHB8EyA9ORFYk=,iv:JnMNNtP7aeuJazRWCBVqCV6zTecI+64bV9L5zZU5I98=,tag:dcB8akYFdHHm9p1CXl08yg==,type:str]", + "JWT_SECRET": "ENC[AES256_GCM,data:9jB9y3E/VXdH8ChoIY4DdsfvTGWrWAhAigAjqdWu2m46sXyC44H1NEETcpz76MJM8pm5rAbHd2LO6m75D4t18EGGR/rKwHMhF0YPx5hLuLmDTxrPUtMQmSiR7GCzgECfsj1WUgc56XctaPxVzbQcgr2fFrKVGQeBeR+8uwjvOPQ=,iv:Y1DjnFYMIeODrFgJFOsk5ycl25Gycj1WIWoolQaylbw=,tag:Rr7ASr0J/3ILjCdE1jey0w==,type:str]", + "sops": { + "kms": null, + "gcp_kms": null, + "azure_kv": null, + "hc_vault": null, + "age": [ + { + "recipient": "age14m2jv0f0z5xqk8m46cjsu6v2z6nn7ey0n9s3fnpnzsvj4jvvyqzqzl2gs2", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlM29WbTd2a1NZdjFEL3g0\nTXBMbjhseDdPZnBSMUIycW1hVHZqdjVuMEdBCnVzTFdWVzB3REk1VHRTOG5TaEZK\nWkd2U0I3TmJZUmRCRXI4L2U5MEFxMm8KLS0tIDVSaHJsT01iQ2p0YThrWkxrWDE4\nc0tjcGk2ODhEb0J1NnAxTWdpejNxejAKypze84mdDF/00knfQNIjFr1/1dYFY2DB\nfcuFa+tOSLxC9QfpPDNerlxJ2fQjj6TkTTGvyqfCANDq6t4xyigLfA==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age19j4d6v9j7rx5fs629fu387qz4zmlpsqjexa4s08tkfrrmfdl5cwqjlaupd", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwSnd6Rk92c0R6ak5kYTlX\neFJBUDlmdnZVdWM3RC96cWJmT0wzWjBjb1dRCkthc1psUnVlYUhTcWh3RkJOWm14\nUDl1dlU0VHpvdmQ2cWRneTVJQmNVS1kKLS0tIHZGWjFMMG1hMGNETFJiUDcydlNy\nTzN4cTVYK2dIMnBlekpkMmtQY0tUc1UKZm95l7Q7W7mMhULAtD6l/rYr0gDec+Pg\nPh7NR1Fu6VKizxpWINJ+9OoabRQaQ3vbE9yFUrzFQBRhfWqJbPLOmw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1pspd08x525zqfnxz695quxc96huc8je69g572wnmavfvrnqq293sj6jw67", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTOS9FdEV1MG03UFhudTBT\nRW16dDU4YmdpN29vVDdWQ0FEWWZycW84UVdrCk1oUDRXd2l1VmZwckY4R3JNNVV2\nM1dtc2pORmVheFd4YzY2cHdQNVdYbncKLS0tIHgvUFlYVUozaGR4MHJpNzlPL2FQ\nNHMxWEhPUEEvT0dibnVXcGNLL2VYWUEKZEua5f2jVafNxSMfxsYKYmfOqSI6VE6U\ny7laHn4odxM3hF+ZtWrddO2M1OMZgjr6GFeEfy1SR2YZ+bj8Gkg6bw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age13runq29jhy9kfpaegczrzttykerswh0qprq59msgd754yermtfmsa3hwg2", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVSWZoeUV3ZzFOcDhCVlVJ\naVNpcVhqOEZoTkF5WTRrVXRNNkhmanR5VmtzCmlZcVRpbDl4bDlRc3d6V3ZBdHNJ\nd29ha09TUTdEK1I0aU1qY1RDVkt2SUkKLS0tIDlMWWc0Uk9hMnB1L0pZSnhGZFJZ\ndGdkQk9HaXdHSTMrWkxOdjd6eTBGRmsKwMOHcBb26L3tCwuzI2xv881Ae6+NYjyC\nU3Z8zEARUI3NN/QbrDPqtk9VNtqdBUMImaMRLBXPBdJSm8nOiG4FRQ==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1uagm9gk5nqvx46qyr5xe7489pr8x2drfnfe90h64duka5xtcfq2q9y3y3t", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFMTZNNG9GTDE3cTVYSlgz\nTEdpZlcwS0x2MHAwa3hoVk52Y2MwTGx5RkFFCmxZOThrYkZMcDYzdWZNQnM2b2Yx\nVGdhSGxCUGtOcE1kUkdaMmtMeW5uT1kKLS0tIFpJYk5jci9uUit5azFLMDR4MFky\ndHFlWjZWMXl5WlJvSy84ZlU0NzRJUXcKqDFV+K7kbg4XUr04J4LHiay49SpYwKgA\nXOEijVzI7nnPmtey0bGPVqJmfuVY5bCMCucz9dlTONCmZ0nFNClEHA==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1ecvv92ayjw3spa86vk20suw9x8e3ucgp0rpdx7h6q92dyrmxtvrq8fqgp0", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMMG1LN0xqZ1JneVEzaGkw\nRUdIeWNMQU5ZaHpZQUs4VGY5djlGdlh4R0RRCjAwTlE0YnNhQUdCWTRvemFpdExV\nNWhDeGxxSm9Eb2JCMXpoQ09Db2RlbXcKLS0tIEtUU2JxMkF1YkUzc0dTNGVnZmZu\na3A2ZVNwMEI5NDFYRWVoMSt4b1k0VHcKDcdoWKoiNqvt+GKO7912RtfcRTlnW6KV\nY4F+tVqVUptbJ8xuQCei8y3mVUjon3DUDJeriQUjOrebEK9CgNA3dw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1dv98p6n7w5wtyg70xq4ekhgtm8j3560ljw6gaa83upjg5l5c9caqmwcyzc", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUdHY3ZkRJYnZWdG1xU3Fi\ncmM0SWl2anpwUnJ3RUNsVmdEMXNBejBxTWdrCnNWQ096ekgyRnQ5RVAvc2xxcDBD\nZnhOOGNiWGVUd0NVRGxycjc3Y3VyaVEKLS0tIDZKSkRSZXhVVTR6T2pRL25xYTNy\nc2hudU9QVWhjbGdQN3JiVFB6NzFpWmsKHhpd9oLjHuTzvuf4L3IhYRV+gce/4y7y\nu0ipsyf8cfIdJvgsS+DL8ln6od5xUfS3rN85pQ+BVww780BpcgB5Yw==\n-----END AGE ENCRYPTED FILE-----\n" + } + ], + "lastmodified": "2025-01-20T12:43:11Z", + "mac": "ENC[AES256_GCM,data:1swVVnD4fRA2JWfOIpj8GvMFjgykC3ozEvkMHW8GbJop1LxjkwtaqE7m21d0xOcAVrGha12AQ7L+C9o/52E6oQ26fOZrQz5oDKaYCokm3iFAnGv6HH2fHj5xmQF+9JupiHAK9IgH0+BkBJwwRM1VvK6rPOk87lR1So6v0L8wLAo=,iv:UDkrN5QE9gbvGZaPeoRqvL2ynpiutt0IiwQrQMHbcpQ=,tag:JnqCYFehBeFXhkj/JoMzaw==,type:str]", + "pgp": null, + "unencrypted_suffix": "_unencrypted", + "version": "3.8.1" + } +} diff --git a/functions/secrets.ts b/functions/secrets.ts new file mode 100644 index 00000000..4f6227aa --- /dev/null +++ b/functions/secrets.ts @@ -0,0 +1,14 @@ +import { decryptSops } from "sops-age"; +import production_json from "./production.enc.json"; + +export async function get_secrets(environment: string, AGE_SECRET_KEY: string) { + switch (environment) { + case "production": + return await decryptSops(production_json, { + secretKey: AGE_SECRET_KEY, + }); + } + // throw new Error("Unknown environmentp"); + console.error("Unknown environment"); + return production_json; +} diff --git a/package.json b/package.json index c6d53799..9e38de7c 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "remove-markdown": "^0.5.5", + "sops-age": "^3.1.0", "tiktoken": "^1.0.18", "typescript2openai": "^1.0.1", "yaml": "^2.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 856dcab8..766b7611 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,6 +152,9 @@ importers: remove-markdown: specifier: ^0.5.5 version: 0.5.5 + sops-age: + specifier: ^3.1.0 + version: 3.1.0 tiktoken: specifier: ^1.0.18 version: 1.0.18 @@ -1592,6 +1595,18 @@ packages: resolution: {integrity: sha512-stTxvLdJ2IcGOs76AnvGYAzGvx8JvQPRxC5DW0P5zdAAnhL33noqb5LKdPt3P37BKp9FzBKZHuihQI9oVqwm0g==} engines: {node: '>=16.13'} + '@noble/ciphers@1.2.1': + resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.8.1': + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.7.1': + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1771,6 +1786,9 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@scure/base@1.2.4': + resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} @@ -2141,6 +2159,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + age-encryption@0.2.0: + resolution: {integrity: sha512-Y05OOztNCxYA68jxAJw+kmwYqXDRV6wVazEGXio1LiUofFn8zIjH++WV0oyq5dEBPyLHrnN/7X/C23qk4r5row==} + agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} @@ -2903,6 +2924,10 @@ packages: resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} engines: {node: '>=10'} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + duck@0.1.12: resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} @@ -4966,6 +4991,10 @@ packages: smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + sops-age@3.1.0: + resolution: {integrity: sha512-XzHPu6DbSW1DIfKSapT0ZWxc53L90CnN/AjSCFl74K/VpVdyuC3P4BQEQNdPRFMpYf0wdo/91gDCg/x8Zcih+w==} + engines: {node: '>=18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -7231,6 +7260,14 @@ snapshots: - bufferutil - utf-8-validate + '@noble/ciphers@1.2.1': {} + + '@noble/curves@1.8.1': + dependencies: + '@noble/hashes': 1.7.1 + + '@noble/hashes@1.7.1': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7366,6 +7403,8 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@scure/base@1.2.4': {} + '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: ejs: 3.1.10 @@ -7817,6 +7856,13 @@ snapshots: acorn@8.14.0: {} + age-encryption@0.2.0: + dependencies: + '@noble/ciphers': 1.2.1 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -8691,6 +8737,8 @@ snapshots: dotenv@10.0.0: {} + dotenv@16.4.7: {} + duck@0.1.12: dependencies: underscore: 1.13.7 @@ -11374,6 +11422,15 @@ snapshots: smob@1.5.0: {} + sops-age@3.1.0: + dependencies: + '@noble/ciphers': 1.2.1 + age-encryption: 0.2.0 + dotenv: 16.4.7 + lodash: 4.17.21 + yaml: 2.7.0 + zod: 3.24.1 + source-map-js@1.2.1: {} source-map-support@0.5.21: diff --git a/tsconfig.node.json b/tsconfig.node.json index 9d31e2ae..5338f10f 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -3,7 +3,8 @@ "composite": true, "module": "ESNext", "moduleResolution": "Node", - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true }, "include": ["vite.config.ts"] } diff --git a/wrangler.enc.json b/wrangler.enc.json new file mode 100644 index 00000000..cdc35d83 --- /dev/null +++ b/wrangler.enc.json @@ -0,0 +1,78 @@ +{ + "compatibility_date": "ENC[AES256_GCM,data:wN9CwhchgQW28g==,iv:GmyROUwwA//5Pwd545tA9++toQHcOuAaFR0LFXoxpMM=,tag:TDqtUr+Pp4dm1mAiu2rYlg==,type:str]", + "name": "ENC[AES256_GCM,data:IK446gP2uJcfYOmVYw==,iv:n8dKUKrESi3DVDg4pZetoLRSIPe0Zlfg8SrDUHKLk2U=,tag:wgDhzsXli5fHjW6cMas56w==,type:str]", + "pages_build_output_dir": "ENC[AES256_GCM,data:akGm+YA=,iv:vsdkyoU8fmJYwJ365C4Ga0kuSc78j0axZQUE0RWoNlw=,tag:W0MqasL0BLHvuNrcK5+Ntg==,type:str]", + "r2_buckets": [ + { + "binding": "ENC[AES256_GCM,data:0iBTMPXsIF4Z0DpzrLlrKf9TAZo=,iv:WZ96Hxaeo7xHskfA2IlA7QKfxk70BjLGd0+8j4R29vA=,tag:yQmANFnObS/RReMVSmnBTw==,type:str]", + "bucket_name": "ENC[AES256_GCM,data:/bqespv87idVk1cjntdTkzA=,iv:ARJgL1RI4jD4iGf74HEuBuWs27Y6LgNnPfAmqDYTLYo=,tag:ozshK4CzJ6KV/SQBT+3qhQ==,type:str]" + } + ], + "env": { + "production": { + "r2_buckets": [ + { + "binding": "ENC[AES256_GCM,data:ArKjfVO1anSjHtRAdNG1f+MmLuo=,iv:lpZbKVfBVmaW5P3bPx75zHXKqgeFveYvVqoVbLxvVus=,tag:NNvH1w7fBkqIz0VliOOHaQ==,type:str]", + "bucket_name": "ENC[AES256_GCM,data:PqX1t+4oS4VLXCzIeQ==,iv:OWEpItpWMOv8MVt8NGY7tJaMQSxhg56WKn2hI7BV1IA=,tag:rQEsgVxwuwCmQAaCzLNMHg==,type:str]" + } + ], + "vars": { + "ENVIRONMENT": "ENC[AES256_GCM,data:pZLY5ic+oMpXCQ==,iv:0nOJEDjPU+yxcDaGIZhCWOXeah4mqUj/T+onEyN8fgg=,tag:VM5bdTf9ncc22Cz5CGRHNg==,type:str]", + "GITHUB_OAUTH_CLIENT_ID": "ENC[AES256_GCM,data:36ty6SMLvVANeih/2qC+tzwcKn8=,iv:xNRz/oegYNwmJkWq38cBSlvVXrAjRhuXXKcIw/pF3Qo=,tag:cYlGW3paibitjzep47aErw==,type:str]", + "GITHUB_OAUTH_CLIENT_SECRET": "ENC[AES256_GCM,data:St6q8mzoR/XG41qGm2m7qnEzkn/6e7kR7gAnBRt2aMNQli99Kh/ilw==,iv:1wJFaelLAphHp6H+vmMX1kawddtS1tdB6uBLHidWtIg=,tag:65mc8RGgMwmI/LYfrUSg8w==,type:str]", + "GOOGLE_OAUTH_CLIENT_ID": "ENC[AES256_GCM,data:qti4CkJ3ERuJ0NBjiTxQOqVncPA1xDG1gCf5BB7ZK1Kt3zMB6DIRfI1D4gbYbQ/67aZoBdxNKVPw5Fb9OhuYz6KiHUEMc8fM9Q==,iv:KP/3fNAhiY470hqJGYW3j/717eHBEVyJTnJrv2Te5Qc=,tag:Ug/FZ8O4OlPnrbhhm122QQ==,type:str]", + "GOOGLE_OUATH_CLIENT_SECRET": "ENC[AES256_GCM,data:NeTJICJNgkYUQ/fFwtwP7kFhnE7uDaIom//eDf4Dbj2MjKg=,iv:BvW0QP0Qwp8iOBjS0EySa/w3HYvhOioCMJevzZZknpY=,tag:UXvrY/cBYtxjYM4wKZ2V7w==,type:str]", + "JWT_SECRET": "ENC[AES256_GCM,data:SuOtMbOrjcq3BfDdOaZW0RyjNcB7DGyV2AYyTDRhPtbKsCWX35UkiZrWMiQ6tYWToV/s88b3XoQuyaZ+anv4hBYCZWZi0CuR9fIIAbhFwmqEypR0j5gZya5mM6haHdiGWCIZBPphc0dhPwJcLPUOeIJ++oi6JzwP6YYy8a7ABXI=,iv:ccKCXzRpXaWxjt4E9xfZwPW4PKRJz0mFuNMnp38NXqA=,tag:BZENJZEnYesjn7HhJpW9GQ==,type:str]", + "PNPM_VERSION": "ENC[AES256_GCM,data:R/ugcoc=,iv:0uAoayh2Vva5YMBopp6Zab9efMk6ZF5Gpogn/AHj3MI=,tag:o9vr1ndVFHqYAR9XUXlTqw==,type:str]", + "SOPS_AGE_PUBKEY": "ENC[AES256_GCM,data:ZZEtUQOg9zCfXSkxfnbC3Ru0D4fgHpROGBbn5fFdefqJW3lTcceA3pTeXWc6D5DlatJwW+DGU82M7UKyOdY=,iv:PcDSCGYc0IRMHgpoaKx9lRHi1nXtcdyRCHET70XAhg4=,tag:iEEIkQT2apff9My9gfDihA==,type:str]" + } + } + }, + "vars": { + "ENVIRONMENT": "ENC[AES256_GCM,data:G4OA+EJO6oQ0iLM=,iv:wZFesyjU+3SLUl6/URK8pqL15fYAMbeVPSeRLyMOIgQ=,tag:rS2xKsCoK+H4Mf3YJanbxA==,type:str]", + "JWT_SECRET": "ENC[AES256_GCM,data:5Bm9qhWu/RECEHdcKxu9bDkjTl7uUBIjBB9HgGW9lU+x2Orry11TVeDLXc20tgKkH5F0,iv:BC5IG98JBxd77/Jc7HJk1YwISiv7P137ujKX5C0DhgY=,tag:fFy1bElb5tAiEiEypecPKQ==,type:str]", + "PNPM_VERSION": "ENC[AES256_GCM,data:H/72m8o=,iv:ZZhEoNFSbv86Dv35sLbBthGxzTUwE8f7KhswUWue6Ko=,tag:oUtboRJfF9+Nf/PjYQ162g==,type:str]", + "YARN_ENABLE_IMMUTABLE_INSTALLS": "ENC[AES256_GCM,data:R3AZHvQ=,iv:/SsIN9BRlOadC/ISoVxiRgHOXpqf7Cu8Ty6iniEwi/g=,tag:5udAZPYpr4Dh4COl3mnQMA==,type:str]" + }, + "sops": { + "kms": null, + "gcp_kms": null, + "azure_kv": null, + "hc_vault": null, + "age": [ + { + "recipient": "age14m2jv0f0z5xqk8m46cjsu6v2z6nn7ey0n9s3fnpnzsvj4jvvyqzqzl2gs2", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6NjBKaHMzQVJBRGhyNit6\nNk02WmNTalhoUlc5cVhvM2drbUpZQ1F1R1ZRCkF5bCs0ckprNVFoTWFzWG9CaXVG\nNVNmSVNBQXBmRTRpcEhaZ1ZYM09LNFEKLS0tIHhRVmllclJIOVp1SUhJaWg1Q1RQ\neFBjUUFDZllvYUZvR0Z1cTdXWVllMHcKfhHRn7nFfo5iF174vNb1B6IIMIlGVtTw\nLexgC+W239ufv3RtIyJeDR53MekQJnibBWNCFkck7ZqgtUF2SR+i/A==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age19j4d6v9j7rx5fs629fu387qz4zmlpsqjexa4s08tkfrrmfdl5cwqjlaupd", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIUm9qWSs4SE9tVkVmdWg4\ndERkcllJTVRvUWRKRVI1Q25VUnNTYkYrakRvCmxFcDVaaVJLdUVndHVrbEloMzNF\neVRQaVEvRDFkbUd6NGdCdFNXakk0bnMKLS0tIGF6UWhjVTZrVVNrc0puWVc3cW1U\nWTNUckxmTjRNUW0rOEhyR0szOGw5WFEKK2pQhUfQwmfO8sxhUuXpEOOsAHVsnejq\nD694so+zofElLMkrfhnbjEYStRD4NIme++E3hBGGwFQJBTwk6iiX2w==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1pspd08x525zqfnxz695quxc96huc8je69g572wnmavfvrnqq293sj6jw67", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPazFKcmpxcUNCeGljYy92\nYTA1cS9neHFPY011QlQwSFc3TDFxMWJUaGtZCkMveHQxM0podHlEdzZuejVybFA5\nWitnb2w5eUFCR0pEbWd5eWFGUmFCY28KLS0tIGtUZ2lwcTdVK21iSkhPdHMwc2N3\nWXZIRzJUM0dyRzdoRTRidXpkZjErWDgKGmA3WPZ1RbctU0fDZmBVqtuBlMTpjTwI\nKfHA0pk+uL7Z6qm04488y0S7cOhkTqw9rUOxl5rHReX+qSh3FvqtGw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age13runq29jhy9kfpaegczrzttykerswh0qprq59msgd754yermtfmsa3hwg2", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKdjNJRXpHdWJYTm9tNVVn\nOXhyMEhNR1A2NTBDNlVJTFVpMk1kcDFOK1JRCmtJQ0I2dkQ0ZE1zdXdQcUF3V1FT\naE54VXpkTFQvSWNxV1VnekM1eWRrSzgKLS0tIEc5TTV6djdDanVhV1NoV1NTUVRl\nR25wVGYwZ28vNmw5a0d1eXYxbVhGWm8KE8qFt9QNmKeu53YCcHl1JwazQv3u85NH\nLbReWpXvE725dNsNhMQoZciYnQpkSgOKuOpT9es8F1v5TjCPqw8Ulw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1uagm9gk5nqvx46qyr5xe7489pr8x2drfnfe90h64duka5xtcfq2q9y3y3t", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5MHpBVjR4aVdwc0x1THZK\na3Q0NFJUd1grUS9aWWtnbjRYRDNYalU2Q1drCm5YU3VyTHBoU0FweTFrbURiSGcx\neVYyREVtYzFkSW1FV2NHbnRnSzJDc0EKLS0tIFhBODUwL1pvc0ZEcHlPMGFubUlT\ndVNvaGY4L1lNWVEwa3dQNlBVVUR4UkkKRK1ZwDNIsY5NEpI0sVIpv8jTwlYgn6Kx\nugKRHV2y/5tV/OGcSV842oHYIq3aiGqfXcsZkF4VkIcZRl+RBmJbcA==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1ecvv92ayjw3spa86vk20suw9x8e3ucgp0rpdx7h6q92dyrmxtvrq8fqgp0", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQYWU4bzVJNGVLSVp3dVc3\nNWh4WGpIREhFRXFlUnFaRDY1ZjZYMURRbXk4CnZaUXUwZ3A3bzRPWnBRZWpmUUY3\nUWdlQ3hjU0F2bHdubmszQ0xIaUt3R2MKLS0tIG1zdGxCZmQzeHEvbEU5eVNOUWxL\nZGNLUXVjanlIbHBndDdMU3Zpam40SFEKf45zW40vOnxK2EmLhQhnV/gER4eULBhJ\nXZT1ht2EAZyLPwGkqYZ/qYLe56cdFxBV5PHQXjciVtvWDCPJsEBhLg==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1dv98p6n7w5wtyg70xq4ekhgtm8j3560ljw6gaa83upjg5l5c9caqmwcyzc", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtVWpGeGNqQUZweDROelRp\nM1dRRXhTZlhmM25lSEZrM3NBQXMzY3dUSXgwClJRcXF5SFVSZU14WHFMZmNzYllu\nN3l1OEdEdEVENkJ1R0lhTXk5UlBlNHMKLS0tIEVhYWNicXp5SmczTHp4ZW1yQ0h2\nRTVmdTFZbkM3a2FWWlZuNTQrdW10dlEKCoMR/sX8XPtQHBjsGbyihEvir1fy8EEN\n15XZ+uokb3mh7o2x5uXGmbJvFJoxy/I+hgmCpQE0G6+8ARL03wiTZw==\n-----END AGE ENCRYPTED FILE-----\n" + } + ], + "lastmodified": "2025-01-20T16:54:30Z", + "mac": "ENC[AES256_GCM,data:iMGLlmOtoE4r43AKaCbECz04/g0ocA++jZBrexFBReGIcsMfrTPZeoqAmKUjantkogbzDEGY48UD2hXhYTerbgCMURequRuJxbB3DbgKEOGcPYvbUPpWf//Ryt0+e2YSFZs5dFiD/fpHKhAIpN+PlZ2QI547CPCZU2eid+CgCnc=,iv:iJgQhmIDd8lVtxGgzhFeJWhFmDwkRyOeTAARsU1JBcM=,tag:hJ/AKt+1HytP9aGE6IfJjA==,type:str]", + "pgp": null, + "unencrypted_suffix": "_unencrypted", + "version": "3.8.1" + } +}