From fa69f763679bfe4941ea830d6cb47b8cefe88cbc Mon Sep 17 00:00:00 2001 From: Pablo Pettinari Date: Mon, 18 May 2026 19:41:16 +0200 Subject: [PATCH] remove unused google-spreadsheet integration and dead SF record type env vars - delete src/utils/addRowToSpreadsheet.ts (no callers) - drop google-spreadsheet and @types/google-spreadsheet deps - remove GOOGLE_APPLICATION_CREDENTIALS and GOOGLE_*_SPREADSHEET_ID/SHEET_NAME envs - remove SF_RECORD_TYPE_* envs (record type ids are hardcoded in src/lib/sf-field-mappings.ts and src/lib/sf/index.ts) - update salesforce-mapping skill to point at hardcoded record type ids --- .claude/skills/salesforce-mapping.md | 10 +- .env.local.example | 22 --- package.json | 2 - pnpm-lock.yaml | 193 --------------------------- src/utils/addRowToSpreadsheet.ts | 41 ------ 5 files changed, 1 insertion(+), 267 deletions(-) delete mode 100644 src/utils/addRowToSpreadsheet.ts diff --git a/.claude/skills/salesforce-mapping.md b/.claude/skills/salesforce-mapping.md index a0ab99b6..aa367a09 100644 --- a/.claude/skills/salesforce-mapping.md +++ b/.claude/skills/salesforce-mapping.md @@ -93,15 +93,7 @@ const curatedData = { ### Record Type -Different forms use different Salesforce record types. Set via environment variables: - -``` -SF_RECORD_TYPE_OFFICE_HOURS -SF_RECORD_TYPE_PROJECT_GRANTS -SF_RECORD_TYPE_SMALL_GRANTS -SF_RECORD_TYPE_SPONSORSHIPS -SF_RECORD_TYPE_GRANTS_ROUND -``` +Different forms use different Salesforce record types. Record type IDs are hardcoded in `src/lib/sf-field-mappings.ts` (per-form `HARDWIRED_FIELDS.RecordTypeId`) and `src/lib/sf/index.ts` (`WISHLIST_RECORD_TYPE_ID`, `RFP_RECORD_TYPE_ID`). ## Common Salesforce Errors diff --git a/.env.local.example b/.env.local.example index 61ee981e..8bfd4a95 100644 --- a/.env.local.example +++ b/.env.local.example @@ -14,28 +14,6 @@ SF_PROD_LOGIN_URL= SF_PROD_CONSUMER_KEY= SF_PROD_CONSUMER_SECRET= -# salesforce record types -SF_RECORD_TYPE_OFFICE_HOURS= -SF_RECORD_TYPE_PROJECT_GRANTS= -SF_RECORD_TYPE_SMALL_GRANTS= -SF_RECORD_TYPE_SPONSORSHIPS= -SF_RECORD_TYPE_GRANTS_ROUND= -SF_RECORD_TYPE_GENERALIST_ECODEV= -SF_RECORD_TYPE_PSE_COMMUNITY_EVENT= -SF_RECORD_TYPE_PSE_QFI= -SF_RECORD_TYPE_PSE_GRANTS= - -# google sheet credentials for applications -GOOGLE_APPLICATION_CREDENTIALS= - -# google sheet for academic grants -GOOGLE_ACADEMIC_SPREADSHEET_ID= -GOOGLE_ACADEMIC_SHEET_NAME= - -# google sheet for devcon grants -GOOGLE_DEVCON_SPREADSHEET_ID= -GOOGLE_DEVCON_SHEET_NAME= - # captcha (key/secret for testing only, check Netlify for production key if needed) NEXT_PUBLIC_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001 HCAPTCHA_SECRET=0x0000000000000000000000000000000000000000 diff --git a/package.json b/package.json index 92083c44..d5300e4f 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ "formidable": "^2.0.1", "framer-motion": "^11.0.5", "github-slugger": "^2.0.0", - "google-spreadsheet": "^3.2.0", "gray-matter": "^4.0.3", "jsforce": "^3.10.0", "jsonwebtoken": "^9.0.2", @@ -59,7 +58,6 @@ "devDependencies": { "@hookform/resolvers": "^3.1.0", "@types/formidable": "^2.0.4", - "@types/google-spreadsheet": "^3.1.5", "@types/jsonwebtoken": "^9.0.10", "@types/mailchimp__mailchimp_marketing": "^3.0.3", "@types/node": "17.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3670286..b068e543 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,9 +65,6 @@ importers: github-slugger: specifier: ^2.0.0 version: 2.0.0 - google-spreadsheet: - specifier: ^3.2.0 - version: 3.3.0 gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -132,9 +129,6 @@ importers: '@types/formidable': specifier: ^2.0.4 version: 2.0.6 - '@types/google-spreadsheet': - specifier: ^3.1.5 - version: 3.3.2 '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 @@ -1721,9 +1715,6 @@ packages: '@types/formidable@2.0.6': resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==} - '@types/google-spreadsheet@3.3.2': - resolution: {integrity: sha512-uBwRhNwx5JPsmrV+XmD77dxL8vVdOY/Aba1kx/mxtR6jePLZIN06I1jjEXEFidAyLUz+JWCphsVk8CCJ2Kzy2w==} - '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -2078,10 +2069,6 @@ packages: zod: optional: true - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -2193,10 +2180,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -2230,9 +2213,6 @@ packages: resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} - axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -2263,9 +2243,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -2894,10 +2871,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -2933,9 +2906,6 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-text-encoding@1.0.6: - resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} - fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} @@ -2996,15 +2966,6 @@ packages: focus-visible@5.2.1: resolution: {integrity: sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -3065,14 +3026,6 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gaxios@4.3.3: - resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==} - engines: {node: '>=10'} - - gcp-metadata@4.3.1: - resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} - engines: {node: '>=10'} - generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -3134,20 +3087,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - google-auth-library@6.1.6: - resolution: {integrity: sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==} - engines: {node: '>=10'} - - google-p12-pem@3.1.4: - resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==} - engines: {node: '>=10'} - deprecated: Package is no longer maintained - hasBin: true - - google-spreadsheet@3.3.0: - resolution: {integrity: sha512-ahmRNh14s1i3phfvbF2mxen1lohWJpUaFWgsU6P6bXu7QrmxMaim1Ys/7BU4W5yucWCzphoIrHMbrbeIR5K9mw==} - engines: {node: '>=0.8.0'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -3162,10 +3101,6 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - gtoken@5.3.2: - resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==} - engines: {node: '>=10'} - has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -3407,10 +3342,6 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -3489,9 +3420,6 @@ packages: engines: {node: '>=18'} hasBin: true - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -3527,15 +3455,9 @@ packages: jwa@1.4.2: resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3620,10 +3542,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lucide-react@0.546.0: resolution: {integrity: sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ==} peerDependencies: @@ -3959,10 +3877,6 @@ packages: encoding: optional: true - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - node-releases@2.0.36: resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} @@ -5121,9 +5035,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -6749,8 +6660,6 @@ snapshots: dependencies: '@types/node': 17.0.0 - '@types/google-spreadsheet@3.3.2': {} - '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 @@ -7131,10 +7040,6 @@ snapshots: typescript: 5.9.2 zod: 3.25.76 - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - acorn-import-attributes@1.9.5(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7271,8 +7176,6 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@2.0.1: {} - asap@2.0.6: {} assertion-error@2.0.1: {} @@ -7293,12 +7196,6 @@ snapshots: axe-core@4.11.0: {} - axios@0.21.4: - dependencies: - follow-redirects: 1.15.11 - transitivePeerDependencies: - - debug - axobject-query@4.1.0: {} babel-plugin-macros@3.1.0: @@ -7319,8 +7216,6 @@ snapshots: baseline-browser-mapping@2.10.9: {} - bignumber.js@9.3.1: {} - bl@4.1.0: dependencies: buffer: 5.7.1 @@ -8105,8 +8000,6 @@ snapshots: esutils@2.0.3: {} - event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} events@3.3.0: {} @@ -8141,8 +8034,6 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-text-encoding@1.0.6: {} - fast-uri@3.1.0: {} fastq@1.19.1: @@ -8203,8 +8094,6 @@ snapshots: focus-visible@5.2.1: {} - follow-redirects@1.15.11: {} - for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -8273,25 +8162,6 @@ snapshots: functions-have-names@1.2.3: {} - gaxios@4.3.3: - dependencies: - abort-controller: 3.0.0 - extend: 3.0.2 - https-proxy-agent: 5.0.1 - is-stream: 2.0.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@4.3.1: - dependencies: - gaxios: 4.3.3 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -8371,35 +8241,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - google-auth-library@6.1.6: - dependencies: - arrify: 2.0.1 - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.6 - gaxios: 4.3.3 - gcp-metadata: 4.3.1 - gtoken: 5.3.2 - jws: 4.0.0 - lru-cache: 6.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-p12-pem@3.1.4: - dependencies: - node-forge: 1.3.1 - - google-spreadsheet@3.3.0: - dependencies: - axios: 0.21.4 - google-auth-library: 6.1.6 - lodash: 4.17.21 - transitivePeerDependencies: - - debug - - encoding - - supports-color - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -8413,15 +8254,6 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - gtoken@5.3.2: - dependencies: - gaxios: 4.3.3 - google-p12-pem: 3.1.4 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -8703,8 +8535,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@2.0.1: {} - is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -8800,10 +8630,6 @@ snapshots: - encoding - supports-color - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.1 - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -8846,22 +8672,11 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - jws@3.2.2: dependencies: jwa: 1.4.2 safe-buffer: 5.2.1 - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -8928,10 +8743,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lucide-react@0.546.0(react@18.3.1): dependencies: react: 18.3.1 @@ -9531,8 +9342,6 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-forge@1.3.1: {} - node-releases@2.0.36: {} object-assign@4.1.1: {} @@ -11018,8 +10827,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yaml@1.10.2: {} yaml@2.8.2: {} diff --git a/src/utils/addRowToSpreadsheet.ts b/src/utils/addRowToSpreadsheet.ts deleted file mode 100644 index 4c6d548d..00000000 --- a/src/utils/addRowToSpreadsheet.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { GoogleSpreadsheet, ServiceAccountCredentials } from 'google-spreadsheet'; - -let credentials: ServiceAccountCredentials; -try { - credentials = JSON.parse(process.env.GOOGLE_APPLICATION_CREDENTIALS || ''); -} catch (error) { - console.log(error); -} - -interface ISpreadsheetConfig { - id: string; - sheetName: string; -} - -interface IRow { - [header: string]: string | number | boolean | undefined; -} - -export default async function addRowToSpreadsheet(spreadsheet: ISpreadsheetConfig, rawRow: IRow) { - if (!credentials) { - throw new Error('no credentials'); - } - - const doc = new GoogleSpreadsheet(spreadsheet.id); - await doc.useServiceAccountAuth(credentials); - - await doc.loadInfo(); - const sheet = doc.sheetsByTitle[spreadsheet.sheetName]; - - // remove undefined values in an immutable way - const row = Object.keys(rawRow).reduce((newRow, key) => { - const value = rawRow[key]; - if (value !== undefined) { - newRow[key] = value; - } - - return newRow; - }, {} as Record); - - await sheet.addRow(row); -}