diff --git a/examples/node-nestjs/package-lock.json b/examples/node-nestjs/package-lock.json index 1739c4c..9bfe386 100644 --- a/examples/node-nestjs/package-lock.json +++ b/examples/node-nestjs/package-lock.json @@ -19,7 +19,7 @@ "nestjs-pino": "4.4.0", "pg": "8.14.1", "pino-http": "10.4.0", - "pluggy-sdk": "0.70.0", + "pluggy-sdk": "0.85.3", "reflect-metadata": "0.2.2", "rxjs": "7.8.2", "sequelize": "6.37.8", @@ -243,6 +243,7 @@ "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -2226,6 +2227,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.20.tgz", "integrity": "sha512-uivaQnTwnfnW1cam8rlh9Xpxvvq+9zKs5ywHWtHRHu1CSQ2FnsLvDewP9Ybhyuf6l075BXKgbixxyW9OKZGpmA==", "license": "MIT", + "peer": true, "dependencies": { "file-type": "21.3.4", "iterare": "1.2.1", @@ -2308,6 +2310,7 @@ "integrity": "sha512-RlaeQctEtSNrc3SxwQDnAxv/R22ww2t5dbP8OMzaghXofUPRCe2dXhXZSlKMkCyCSEWX+tMhESlGRB5rcJhYTQ==", "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@nuxt/opencollective": "0.4.1", "fast-safe-stringify": "2.1.1", @@ -2361,6 +2364,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.20.tgz", "integrity": "sha512-HFJ/bf189AGziCp7o9DPdPEgj7LXvCWswR3hBNiVCIo3SwOwTIss1BsQWCCJVAtVYTmwIHOI0i0k9dMGXh3Hew==", "license": "MIT", + "peer": true, "dependencies": { "cors": "2.8.6", "express": "5.2.1", @@ -2578,6 +2582,7 @@ "integrity": "sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@xhmikosr/bin-wrapper": "^13.0.5", @@ -2650,6 +2655,7 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.21" @@ -3052,6 +3058,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3209,6 +3216,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -3307,7 +3315,8 @@ "version": "13.12.3", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.3.tgz", "integrity": "sha512-2ipwZ2NydGQJImne+FhNdhgRM37e9lCev99KnqkbFHd94Xn/mErARWI1RSLem1QA19ch5kOhzIZd7e8CA2FI8g==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/yargs": { "version": "17.0.33", @@ -3362,6 +3371,7 @@ "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.29.1", "@typescript-eslint/types": "8.29.1", @@ -3883,6 +3893,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3944,6 +3955,7 @@ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4338,6 +4350,7 @@ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -4577,6 +4590,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -5631,6 +5645,7 @@ "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -5692,6 +5707,7 @@ "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7230,6 +7246,7 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -7979,12 +7996,12 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -8001,9 +8018,9 @@ } }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -8012,12 +8029,12 @@ } }, "node_modules/jws": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", - "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { - "jwa": "^1.4.2", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -8967,6 +8984,7 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", "license": "MIT", + "peer": true, "dependencies": { "pg-connection-string": "^2.7.0", "pg-pool": "^3.8.0", @@ -9076,6 +9094,7 @@ "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", "license": "MIT", + "peer": true, "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -9107,6 +9126,7 @@ "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.4.0.tgz", "integrity": "sha512-vjQsKBE+VN1LVchjbfLE7B6nBeGASZNRNKsR68VS0DolTm5R3zo+47JX1wjm0O96dcbvA7vnqt8YqOWlG5nN0w==", "license": "MIT", + "peer": true, "dependencies": { "get-caller-file": "^2.0.5", "pino": "^9.0.0", @@ -9210,13 +9230,16 @@ } }, "node_modules/pluggy-sdk": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/pluggy-sdk/-/pluggy-sdk-0.70.0.tgz", - "integrity": "sha512-QFmRD4DT73TmtooIr3KnZJdViSyzXtG3Xu1Zkb+NybHrSNARwPTy1R0OBjeyVQBFPu3VhA0bcF9zmyGMzCBoTw==", + "version": "0.85.3", + "resolved": "https://registry.npmjs.org/pluggy-sdk/-/pluggy-sdk-0.85.3.tgz", + "integrity": "sha512-1p/1yEjhlKKXCKoJVWMPUUZeXXicuyGoWaTt6scAlRSR020VoWOaOu1dTwL1J3FO7/gkdlZyaXx2qnXBPoVoJg==", "license": "MIT", "dependencies": { "got": "11.8.6", - "jsonwebtoken": "^9.0.2" + "jsonwebtoken": "9.0.3" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/pluggy-sdk/node_modules/@sindresorhus/is": { @@ -9430,6 +9453,7 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -9696,7 +9720,8 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/require-directory": { "version": "2.1.1", @@ -9887,6 +9912,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -10047,6 +10073,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@types/debug": "^4.1.8", "@types/validator": "^13.7.17", @@ -10112,6 +10139,7 @@ "resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz", "integrity": "sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==", "license": "MIT", + "peer": true, "dependencies": { "glob": "7.2.0" }, @@ -10731,6 +10759,7 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -11057,6 +11086,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -11221,6 +11251,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11461,6 +11492,7 @@ "integrity": "sha512-Pkx5joZ9RrdgO5LBkyX1L2ZAJeK/Taz3vqZ9CbcP0wS5LEMx5QkKsEwLl29QJfihZ+DKRBFldzy1O30pJ1MDpA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -11530,6 +11562,7 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", diff --git a/examples/node-nestjs/package.json b/examples/node-nestjs/package.json index 3675b56..f9c4a8c 100644 --- a/examples/node-nestjs/package.json +++ b/examples/node-nestjs/package.json @@ -30,7 +30,7 @@ "nestjs-pino": "4.4.0", "pg": "8.14.1", "pino-http": "10.4.0", - "pluggy-sdk": "0.70.0", + "pluggy-sdk": "0.85.3", "reflect-metadata": "0.2.2", "rxjs": "7.8.2", "sequelize": "6.37.8", diff --git a/examples/node-nestjs/src/services/transaction.service.ts b/examples/node-nestjs/src/services/transaction.service.ts index ba7f490..9d15bf4 100644 --- a/examples/node-nestjs/src/services/transaction.service.ts +++ b/examples/node-nestjs/src/services/transaction.service.ts @@ -23,9 +23,9 @@ export class TransactionService { itemId: payload.itemId, }); - const { results: transactions } = await this.pluggyClient + const transactions = await this.pluggyClient .instance() - .fetchTransactions(payload.accountId, { + .fetchAllTransactions(payload.accountId, { createdAtFrom: payload.transactionsCreatedAtFrom, }); @@ -42,12 +42,11 @@ export class TransactionService { itemId: payload.itemId, }); - const { results: transactions } = await this.pluggyClient + const transactions = await this.pluggyClient .instance() - .fetchTransactions(payload.accountId, { - // @ts-expect-error ids not exists + .fetchAllTransactions(payload.accountId, { ids: payload.transactionIds, - }); + } as any); await this.saveTransactions( payload.itemId, diff --git a/examples/vercel-quickdeploy-nextjs/src/app/lib/services/webhook-handlers/transactions-handler.ts b/examples/vercel-quickdeploy-nextjs/src/app/lib/services/webhook-handlers/transactions-handler.ts index f0e366c..532cf93 100644 --- a/examples/vercel-quickdeploy-nextjs/src/app/lib/services/webhook-handlers/transactions-handler.ts +++ b/examples/vercel-quickdeploy-nextjs/src/app/lib/services/webhook-handlers/transactions-handler.ts @@ -52,18 +52,9 @@ export async function handleTransactionsUpdated({transactionIds = [], accountId try { if (transactionIds.length === 0) return; - const transactions: Transaction[] = []; - let page = 1; - while (true) { - const response = await pluggyClient.fetchTransactions(accountId, { - ids: transactionIds, - page, - pageSize: 500, - }); - transactions.push(...response.results); - if (response.results.length < 500) break; - page++; - } + const transactions = await pluggyClient.fetchAllTransactions(accountId, { + ids: transactionIds, + } as any); if (transactions.length === 0) return; diff --git a/java/src/main/java/ai/pluggy/quickstart/QuickstartApplication.java b/java/src/main/java/ai/pluggy/quickstart/QuickstartApplication.java index 959025b..772b072 100644 --- a/java/src/main/java/ai/pluggy/quickstart/QuickstartApplication.java +++ b/java/src/main/java/ai/pluggy/quickstart/QuickstartApplication.java @@ -98,6 +98,9 @@ public static void main(String[] args) throws IOException, InterruptedException account.getBalance(), account.getNumber())); try { + // TODO: migrate to cursor-based GET /v2/transactions once pluggy-java SDK adds support. + // pluggy-java 0.6.3 only exposes getTransactions() which calls the deprecated GET /transactions. + // Track: https://github.com/pluggyai/pluggy-java List transactions = pluggyClient.service().getTransactions(accountId).execute().body() .getResults();