Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Cannot get banks from GoCardless #2290

Closed
2 of 5 tasks
tantonini opened this issue Jan 26, 2024 · 11 comments
Closed
2 of 5 tasks

[Bug]: Cannot get banks from GoCardless #2290

tantonini opened this issue Jan 26, 2024 · 11 comments
Labels
bug Something isn't working

Comments

@tantonini
Copy link

tantonini commented Jan 26, 2024

Verified issue does not already exist?

  • I have searched and found no existing issue

Is this related to GoCardless, Simplefin or another bank-sync provider?

  • I have checked my server logs and could not see any errors there
  • I will be attaching my server logs to this issue
  • I will be attaching my client-side (browser) logs to this issue
  • I understand that this issue will be automatically closed if insufficient information is provided

What happened?

Hello,
When I try to connect to GoCardless, I have the following issue:
image

My credentials are normally ok, I was able to get the banks from the terminal command line on my server.

What error did you receive?

    at re (file:///home/thomas/actual-server/node_modules/nordigen-node/dist/index.esm.js:13:914)
    at IncomingMessage.<anonymous> (file:///home/thomas/actual-server/node_modules/nordigen-node/dist/index.esm.js:17:16270)
    at IncomingMessage.emit (node:events:525:35)
    at endReadableNT (node:internal/streams/readable:1359:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  code: 'ERR_BAD_REQUEST',
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [ 'xhr', 'http' ],
    transformRequest: [ [Function (anonymous)] ],
    transformResponse: [ [Function (anonymous)] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: T [AxiosHeaders] {
      Accept: 'application/json',
      'Content-Type': 'application/json',
      'User-Agent': 'Nordigen-Node-v2',
      'Content-Length': '36',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    method: 'post',
    url: URL {
      href: 'https://ob.gocardless.com/api/v2/token/new/',
      origin: 'https://ob.gocardless.com',
      protocol: 'https:',
      username: '',
      password: '',
      host: 'ob.gocardless.com',
      hostname: 'ob.gocardless.com',
      port: '',
      pathname: '/api/v2/token/new/',
      search: '',
      searchParams: URLSearchParams {},
      hash: ''
    },
    data: '{"secret_key":null,"secret_id":null}'
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: true,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: '36',
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'ob.gocardless.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'ob.gocardless.com',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular *1],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 2404,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(kSetKeepAlive)]: true,
      [Symbol(kSetKeepAliveInitialDelay)]: 60,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object]
    },
    _header: 'POST /api/v2/token/new/ HTTP/1.1\r\n' +
      'Accept: application/json\r\n' +
      'Content-Type: application/json\r\n' +
      'User-Agent: Nordigen-Node-v2\r\n' +
      'Content-Length: 36\r\n' +
      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
      'Host: ob.gocardless.com\r\n' +
      'Connection: close\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'POST',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    path: '/api/v2/token/new/',
    _ended: true,
    res: IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 4,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 400,
      statusMessage: 'Bad Request',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [Circular *1],
      responseUrl: 'https://ob.gocardless.com/api/v2/token/new/',
      redirects: [],
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 22,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'ob.gocardless.com',
    protocol: 'https:',
    _redirectable: Writable {
      _writableState: [WritableState],
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 36,
      _requestBodyBuffers: [],
      _onNativeResponse: [Function (anonymous)],
      _currentRequest: [Circular *1],
      _currentUrl: 'https://ob.gocardless.com/api/v2/token/new/',
      [Symbol(kCapture)]: false
    },
    [Symbol(kCapture)]: false,
    [Symbol(kBytesWritten)]: 0,
    [Symbol(kEndCalled)]: true,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      accept: [Array],
      'content-type': [Array],
      'user-agent': [Array],
      'content-length': [Array],
      'accept-encoding': [Array],
      host: [Array]
    },
    [Symbol(errored)]: null,
    [Symbol(kUniqueHeaders)]: null
  },
  response: {
    status: 400,
    statusText: 'Bad Request',
    headers: T [AxiosHeaders] {
      date: 'Fri, 26 Jan 2024 10:11:56 GMT',
      'content-type': 'application/json',
      'content-length': '108',
      connection: 'close',
      server: 'nginx',
      vary: 'Accept, Accept-Language',
      allow: 'POST, OPTIONS',
      'x-frame-options': 'DENY',
      'content-language': 'en',
      'x-content-type-options': 'nosniff',
      'referrer-policy': 'same-origin'
    },
    config: {
      transitional: [Object],
      adapter: [Array],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      env: [Object],
      validateStatus: [Function: validateStatus],
      headers: [T [AxiosHeaders]],
      method: 'post',
      url: [URL],
      data: '{"secret_key":null,"secret_id":null}'
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: '36',
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'POST /api/v2/token/new/ HTTP/1.1\r\n' +
        'Accept: application/json\r\n' +
        'Content-Type: application/json\r\n' +
        'User-Agent: Nordigen-Node-v2\r\n' +
        'Content-Length: 36\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: ob.gocardless.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/api/v2/token/new/',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'ob.gocardless.com',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kEndCalled)]: true,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kUniqueHeaders)]: null
    },
    data: { secret_id: [Array], secret_key: [Array], status_code: 400 }
  }
}

Where are you hosting Actual?

Locally via Yarn

What browsers are you seeing the problem on?

Firefox

Operating System

Linux

@tantonini tantonini added the bug Something isn't working label Jan 26, 2024
@Kidglove57
Copy link

Kidglove57 commented Jan 26, 2024

I'm not sure if this is the same issue but I am getting an "Internal Error" in Actual when trying to sync Starling Bank via Go Cardless

Other relevant info:

  1. I am using "Edge". All is fine if using "Latest"
  2. American Express (GB) syncs fine.
  3. I do not have the experiment Simple Fin enabled
  4. I just imported my file from "Latest" to "Edge" today. Is there something in the latest Edge that may have broken this?

@Kidglove57
Copy link

I see this on Fly - so looks like a migration issue re edge release (if I read this correctly):
2024-01-26T19:18:56.094 app[3d8dde7ae954e8] lhr [info] Rejection: Error: Missing migration file: 1702667624000-rename-nordigen-secrets.

@twk3
Copy link
Contributor

twk3 commented Jan 29, 2024

I see this on Fly - so looks like a migration issue re edge release (if I read this correctly): 2024-01-26T19:18:56.094 app[3d8dde7ae954e8] lhr [info] Rejection: Error: Missing migration file: 1702667624000-rename-nordigen-secrets.

I'm not seeing this error when updating from latest to edge. The new migration has been in place in edge for over two weeks.

@Kidglove57 can you try using the most recent tag from: https://hub.docker.com/r/actualbudget/actual-server/tags that is in the format sha-xxxxx ? It should match the edge tag exactly, but I wonder if fly.io isn't updating the edge tag once they have it downloaded. So you might be running an old edge version. I suspect they may have a special condition for :latest tags that doesn't work for edge.

@Kidglove57
Copy link

Kidglove57 commented Jan 29, 2024

Thanks @twk3 - appreciate your help. I've now tried that. I cannot see any migration errors in the fly log. However, I am getting the same error message when trying to sync with Go Cardless. I now get this error whatever tag version I use (snd have done since moving from latest).

"There was an internal error please get in touch etc"

I now get this error even if I try to go back to "latest".
EDIT
I have just deleted my Actual file completely from my Fly machine. I then used Fly Deploy to load the l”atest” tag but the deployment stuck again and would not complete. I had to revert to the “edge” tag whereupon things worked again EXCEPT my Starling Bank sync via Go Cardless.

Further update:
In the end I carried on with the Edge version on Fly. I delinked my Starling account from Go Cardless. I then remade the connection which this time synced correctly.
I have not dared try and revert to the “latest” tag!

@twk3
Copy link
Contributor

twk3 commented Jan 30, 2024

I then used Fly Deploy to load the l”atest” tag but the deployment stuck again and would not complete.

@Kidglove57 actual keeps a .migrate hidden file in your data directory to track which migrations you have applied. Unfortunately it also prevents you from rolling back when there was migrations in a new version that successfully ran. If you are starting fresh (no budget files on the server), you can ssh into the machine and delete the .migrate file.

But if you just wait another week, the next released version will include the migration that is likely blocking you anyways and you should be able to swap to it without issue.

@Kidglove57
Copy link

But if you just wait another week, the next released version will include the migration that is likely blocking you anyways and you should be able to swap to it without issue.

Yes that’s makes sense. As a non technical person who dabbles, my observation would be that there is no obvious “flag” when an Edgecupdate includes a migration. But then being non technical (and more and more confused by most of the questions on Discord) I probably ought to play safe and not use Edge!! I keep a daily back up regardless.

Alls well that ends well!

@MatissJanis
Copy link
Member

There are two issues being discussed here:

  1. (the original bug report): this issue will go away with the v24.2.0 release; you currently are running v24.1.0 of actual-server with edge (master) of actual (client). And because of the version mis-match there are some missing migrations that are causing problems. But again: this will go away with v24.2.0 coming in a few days, so nothing to worry about here..
  2. gocardless sync stopping to work for some accounts: should be solved by 🐛 (goCardless) patch incomplete migration #2308

@MatissJanis
Copy link
Member

v24.2.0 is out. All issues should now be addressed.

@tantonini
Copy link
Author

Yes right, everything is fixed. Thanks a lot :)

@Edgaras91
Copy link

Not working for me on v24.2.0.
Have clean local install, bank successfully syncs with GoCardless (can see bank in GoCardless website) but nothing happens on the localhost:5006, faced with same screenshot as in the original question. The console logs do display below after successful linking, but again, nothing changes on the actual app, no account added, sync button does nothing.

Available account properties for new institution integration { account: '{"resourceId":"10000...

@JigSawFr
Copy link

Not working for me on v24.2.0. Have clean local install, bank successfully syncs with GoCardless (can see bank in GoCardless website) but nothing happens on the localhost:5006, faced with same screenshot as in the original question. The console logs do display below after successful linking, but again, nothing changes on the actual app, no account added, sync button does nothing.

Available account properties for new institution integration { account: '{"resourceId":"10000...

Facing the same error/behavior on my side

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

6 participants