Options
All
  • Public
  • Public/Protected
  • All
Menu

Build Status

Pankkiyhteys

This library is an implementation of Web Services API, a standardised solution used for automated communications between banks and corporate customers.

Currently only Osuuspankki is supported.

For in depth technical documentation about Web Services click here.

Install

Install with npm:

  npm install pankkiyhteys

Usage

Autogenerated docs at: https://hyrsky.github.io/pankkiyhteys

Renewing certificate

function isAboutToExpire(key) {
  const dateToCheck = new Date()
  dateToCheck.setMonth(dateToCheck.getMonth() + 2)
  return key.expires() < dateToCheck
}

const key = new Key(oldPrivateKey, oldCert)
const client = new Osuuspankki('1234567890', key, 'FI')

if (key.isAboutToExpire()) {
  /**
   * You have to:
   *   * generate new key.
   *   * save key to persistent storage before renewal.
   */
  const keys = await Key.generateKey()
  await writeFile('./newkey.pem', keys.privateKey)
  const certificate = await client.getCertificate(keys.privateKey)
  await writeFile('./newcert.pem', certificate)
}

Index

Type aliases

Language

Language: "EN" | "FI" | "SV"

ParsePreprocess

ParsePreprocess: function

Type declaration

    • (xml: string, document: XMLDocument): Promise<void> | void
    • Parameters

      • xml: string
      • document: XMLDocument

      Returns Promise<void> | void

X509Pem

X509Pem: string

Pem encoded string containing X509 key.

Variables

Const DSIG_ENVELOPED_SIGNATURE

DSIG_ENVELOPED_SIGNATURE: "http://www.w3.org/2000/09/xmldsig#enveloped-signature" = "http://www.w3.org/2000/09/xmldsig#enveloped-signature"

Const OPPohjola

OPPohjola: "-----BEGIN CERTIFICATE-----MIIFMzCCAxugAwIBAgICHhkwDQYJKoZIhvcNAQELBQAwKjELMAkGA1UEBhMCRkkxGzAZBgNVBAMTEk9QLVBvaGpvbGEgUm9vdCBDQTAeFw0xMjA2MDcwODQyNDJaFw00MTA2MDcwODQyNDJaMCoxCzAJBgNVBAYTAkZJMRswGQYDVQQDExJPUC1Qb2hqb2xhIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCdFCgwifVV/XdLNmuIAUox7H3RZOyWotq3HUyGWCX/T337wfrbAQWXSa8C4z2Adr0O3P0qMEFRBKt2p4zupD4bkzR1p8tn/K2Y+TVf/ZAjpk3S1/7KZT8DqRCnlb2IuUCeO0OaC0gkXIqkeeoogHhYYdQwI0qai2qk8N3jgTlOXqAHceg+yO0h58VIcCaASfR9zIclmYLKg2pFPoC22+2QlCgSg4M1ceoiie48Nzk+BYA1Qm1TGjox9BGakiSq+pF+6GC+QBjMlnd8rz8lAPqZ7eoukLanOZxo97bG1nIsEyrDTBT+hdkJj4VG+m0Q8oLtBfzadekMdWwjHgRWYcQHrlI5WxTgAT5iDdGMrg05cM8poxy09HoFBKHS1fgaFVddr7MFqZcuz/kyaQevjnsfPXkI3eDqhxnLbRjHrnqBWX7ELyLgcEjX4syTteKp8aAeYdvN8U8AMJ/q56Guob5g/RlDfBXO9aoSyR3bPh6m8sGNgfB38NDKpO6NZK04vLvK3hF0NhWdLqr+ccs1slaWPR2mK0+19o7EjObWGPBxCs17jkd2OV7iXQwt1gaNcIhDDjpH4MdR4FZla64vfuMh1lsVtqi0goCuS6p4aH7VIhjTNVPlQulLgFj2e41z3DmpCo/gfZ65QDYYVzFZmCQFfaeoyfZ6SK/jVjUEthSC8wIDAQABo2MwYTAfBgNVHSMEGDAWgBTJN/SYhJwjwZbTpFuapA8rFyyQvDAdBgNVHQ4EFgQUyTf0mIScI8GW06RbmqQPKxcskLwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAFD28Nl4kdeC54BI7IKtCIflTbFmMRykTEvJsPN6t566FxjKSim4KzJ+aPXz5DNx7bLXBaFePpOYUhnX6ritZv53Y9MqWjon9L48T2LGbtU8wd7+CWvkjx6r37RGOLUAblfj8Av2lt0wwAusy1AtJtYJf3cvxRRLnUgmoEXh19u0LbhB0NXsPUEvjs1UuFTq00/KJq/609R73IjzaStWgBXvEDRVJvAhwqlH+xw/5wo+aCcIpdES9kFUsVFp9iEMIDBjzQiOm39nIpjUr5irrtiO469yfarwP4JgBXGUP+DoWeB+fYQgK0RG/6WN1AZlO+lcChR7k83QeIAnPg698DQNiVMdpXKQKAM+7ri24mtWJOJXAoaA4bhPoUL17kys7/m//n9cjlsc4iH+bLSnzUpronznGgMu6XfFFgAhZsYKLVNGCFwuc2Gc7y/Luj5aXh3C1PEvN/SDNhe0j2q2z0FSpT/NMja/KXydTF4B3j0/eVmAbUP3WXWC11LoUQDo9A9hqejoUu+fc7KXob/iDztnpweabNvrMCvYPsiGfiuUPgI5+nxDCH9BuxHHUhFLF5/QMPKsvyZekaxMDxlWLs7RJeK4f4pGTbOTTnwwcQ791IcgNR2bYOku7nxefQXOs2Z3xFETBfoNkVGiIVf5AyXigVKFyBXIfCOK9RHJMVEq-----END CERTIFICATE-----" = `-----BEGIN CERTIFICATE-----MIIFMzCCAxugAwIBAgICHhkwDQYJKoZIhvcNAQELBQAwKjELMAkGA1UEBhMCRkkxGzAZBgNVBAMTEk9QLVBvaGpvbGEgUm9vdCBDQTAeFw0xMjA2MDcwODQyNDJaFw00MTA2MDcwODQyNDJaMCoxCzAJBgNVBAYTAkZJMRswGQYDVQQDExJPUC1Qb2hqb2xhIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCdFCgwifVV/XdLNmuIAUox7H3RZOyWotq3HUyGWCX/T337wfrbAQWXSa8C4z2Adr0O3P0qMEFRBKt2p4zupD4bkzR1p8tn/K2Y+TVf/ZAjpk3S1/7KZT8DqRCnlb2IuUCeO0OaC0gkXIqkeeoogHhYYdQwI0qai2qk8N3jgTlOXqAHceg+yO0h58VIcCaASfR9zIclmYLKg2pFPoC22+2QlCgSg4M1ceoiie48Nzk+BYA1Qm1TGjox9BGakiSq+pF+6GC+QBjMlnd8rz8lAPqZ7eoukLanOZxo97bG1nIsEyrDTBT+hdkJj4VG+m0Q8oLtBfzadekMdWwjHgRWYcQHrlI5WxTgAT5iDdGMrg05cM8poxy09HoFBKHS1fgaFVddr7MFqZcuz/kyaQevjnsfPXkI3eDqhxnLbRjHrnqBWX7ELyLgcEjX4syTteKp8aAeYdvN8U8AMJ/q56Guob5g/RlDfBXO9aoSyR3bPh6m8sGNgfB38NDKpO6NZK04vLvK3hF0NhWdLqr+ccs1slaWPR2mK0+19o7EjObWGPBxCs17jkd2OV7iXQwt1gaNcIhDDjpH4MdR4FZla64vfuMh1lsVtqi0goCuS6p4aH7VIhjTNVPlQulLgFj2e41z3DmpCo/gfZ65QDYYVzFZmCQFfaeoyfZ6SK/jVjUEthSC8wIDAQABo2MwYTAfBgNVHSMEGDAWgBTJN/SYhJwjwZbTpFuapA8rFyyQvDAdBgNVHQ4EFgQUyTf0mIScI8GW06RbmqQPKxcskLwwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAFD28Nl4kdeC54BI7IKtCIflTbFmMRykTEvJsPN6t566FxjKSim4KzJ+aPXz5DNx7bLXBaFePpOYUhnX6ritZv53Y9MqWjon9L48T2LGbtU8wd7+CWvkjx6r37RGOLUAblfj8Av2lt0wwAusy1AtJtYJf3cvxRRLnUgmoEXh19u0LbhB0NXsPUEvjs1UuFTq00/KJq/609R73IjzaStWgBXvEDRVJvAhwqlH+xw/5wo+aCcIpdES9kFUsVFp9iEMIDBjzQiOm39nIpjUr5irrtiO469yfarwP4JgBXGUP+DoWeB+fYQgK0RG/6WN1AZlO+lcChR7k83QeIAnPg698DQNiVMdpXKQKAM+7ri24mtWJOJXAoaA4bhPoUL17kys7/m//n9cjlsc4iH+bLSnzUpronznGgMu6XfFFgAhZsYKLVNGCFwuc2Gc7y/Luj5aXh3C1PEvN/SDNhe0j2q2z0FSpT/NMja/KXydTF4B3j0/eVmAbUP3WXWC11LoUQDo9A9hqejoUu+fc7KXob/iDztnpweabNvrMCvYPsiGfiuUPgI5+nxDCH9BuxHHUhFLF5/QMPKsvyZekaxMDxlWLs7RJeK4f4pGTbOTTnwwcQ791IcgNR2bYOku7nxefQXOs2Z3xFETBfoNkVGiIVf5AyXigVKFyBXIfCOK9RHJMVEq-----END CERTIFICATE-----`

Const OPPohjolaTest

OPPohjolaTest: "-----BEGIN CERTIFICATE-----MIIFPTCCAyWgAwIBAgICOsswDQYJKoZIhvcNAQELBQAwLzELMAkGA1UEBhMCRkkxIDAeBgNVBAMTF1RFU1QgT1AtUG9oam9sYSBSb290IENBMB4XDTEyMDUzMDEyMzkwN1oXDTQxMDUyODEyMzkwN1owLzELMAkGA1UEBhMCRkkxIDAeBgNVBAMTF1RFU1QgT1AtUG9oam9sYSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8R0TWGkl4v27f9a3ofltWhj5iNOglG0HGLoidcK6eCeqtr82OTXd7oHjIptzV9xBIQTjpBQ/ONdJfLHhs1c1f6cqYizATsssq0XygA8o4K8Mi1KAXDsyOjgNIU8bWN/Q3nloVoE83JdUhnPWRdMjCdebcIFj8TNgLnQFI8xTue76a+Hesvy91v2Og6kUimVayw3RJmRdwxR21d4zk4veRYZji0QbcbZUtMZhvYlm78H0298EfmmockLjIve+w4xWAgzPxfujP7+EBg67ds36GPE/Q8/AZ0gZUbQsZ/TDLeJ0ceLt8woTP4dykuQQXmfGfo6XFWg8HiEVu2EW5fW0K8FIGuawdJ7rOcRRbBGDxJ8uu5hJnx5oUyhgLNo7mferiMPMttgyuJIvg5nt+eqJ/PAqIxKoDFbS7kn7pqWv6QZFP1dVyWaWQfqBkcJ9iJQeDmqOLnQKopPoJ0L005PahWDfVErU/0YNVDC25eFtJELVPP/OjJ8Cqf9bFVDNAh6FoZ0U79AICDT7DGY7y6VFEdqy7jgruyHYnaSe7VXY99iIlGgWRTWu7GjBuypePonM4aJyNe9GE4dNmqI4n7PLZmp9J+lzvdSKLDxaeLs6JXuethJyMhpERK44f/MCECHOEDydnhuZcga84ODUnL9XAIXPdqkE58bU4XsjmBjwTrUCAwEAAaNjMGEwHwYDVR0jBBgwFoAUlCV4xztSGifv03DLZp5uZNNN1KkwHQYDVR0OBBYEFJQleMc7Uhon79Nwy2aebmTTTdSpMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQC3aXtV2qWzW4+U+kuXcMbfA0BcASepywraPF+Nm9YSecKogvbEp59xw9xVbm/BQ3jxh55syv2zf17QOGObf9dzzHMyOxNczaxEBQhABsuK/XBF1DKaZawj68o9xvdPuC3XUT/5XxrMSy2ftpPxQ6mC9iPnbHU+01yBCE/MF2eLjiI8iEqmCGJkrar4HmcworvDfVswuT5IJdj6Dh206pcYZAhN7b6+Wa4BbvHB3kEGkB8j47sDVbd/eY8OWFLYfED+g1J3Q54XeN1hSKGLgMMLQpCullEM6es5Uj0O5gQyG8PSh0p0Ja0Gk21aKZoCYoxuAHgdJjmH5C1iLBINd8asBH7EUHLTJ0MhG1eQe23Zx9ez4QenKmStqI0zUuzV8FsDtphu9StxJ2CEYNRduqfam78JvwUHxByEfaSaIHgfglHcWoI5ZohqcsCDmNXvSneaKF2ZLuAZ8IGr9a2AOmTQpQv36kyc6Uh0koUTeK+9KfPYHBJI0zUNrZA5S3tGo/SjS+g5NrQVbLuLVIil6uAOoiUUWzNcqhT3qrjf3Um8NBtqmNX6rQomeE+3QSh5az0e9+Gpkhg+bcDLhL/dV8yRgids7DnnEvuyEmb9UqSDnMti0N3AQELSZ1HF9EUMIFMQ03hc97g/AI8Aq6O+pNMtBn4zT16EQ31zPxMJGp3mDg==-----END CERTIFICATE-----" = `-----BEGIN CERTIFICATE-----MIIFPTCCAyWgAwIBAgICOsswDQYJKoZIhvcNAQELBQAwLzELMAkGA1UEBhMCRkkxIDAeBgNVBAMTF1RFU1QgT1AtUG9oam9sYSBSb290IENBMB4XDTEyMDUzMDEyMzkwN1oXDTQxMDUyODEyMzkwN1owLzELMAkGA1UEBhMCRkkxIDAeBgNVBAMTF1RFU1QgT1AtUG9oam9sYSBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8R0TWGkl4v27f9a3ofltWhj5iNOglG0HGLoidcK6eCeqtr82OTXd7oHjIptzV9xBIQTjpBQ/ONdJfLHhs1c1f6cqYizATsssq0XygA8o4K8Mi1KAXDsyOjgNIU8bWN/Q3nloVoE83JdUhnPWRdMjCdebcIFj8TNgLnQFI8xTue76a+Hesvy91v2Og6kUimVayw3RJmRdwxR21d4zk4veRYZji0QbcbZUtMZhvYlm78H0298EfmmockLjIve+w4xWAgzPxfujP7+EBg67ds36GPE/Q8/AZ0gZUbQsZ/TDLeJ0ceLt8woTP4dykuQQXmfGfo6XFWg8HiEVu2EW5fW0K8FIGuawdJ7rOcRRbBGDxJ8uu5hJnx5oUyhgLNo7mferiMPMttgyuJIvg5nt+eqJ/PAqIxKoDFbS7kn7pqWv6QZFP1dVyWaWQfqBkcJ9iJQeDmqOLnQKopPoJ0L005PahWDfVErU/0YNVDC25eFtJELVPP/OjJ8Cqf9bFVDNAh6FoZ0U79AICDT7DGY7y6VFEdqy7jgruyHYnaSe7VXY99iIlGgWRTWu7GjBuypePonM4aJyNe9GE4dNmqI4n7PLZmp9J+lzvdSKLDxaeLs6JXuethJyMhpERK44f/MCECHOEDydnhuZcga84ODUnL9XAIXPdqkE58bU4XsjmBjwTrUCAwEAAaNjMGEwHwYDVR0jBBgwFoAUlCV4xztSGifv03DLZp5uZNNN1KkwHQYDVR0OBBYEFJQleMc7Uhon79Nwy2aebmTTTdSpMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQC3aXtV2qWzW4+U+kuXcMbfA0BcASepywraPF+Nm9YSecKogvbEp59xw9xVbm/BQ3jxh55syv2zf17QOGObf9dzzHMyOxNczaxEBQhABsuK/XBF1DKaZawj68o9xvdPuC3XUT/5XxrMSy2ftpPxQ6mC9iPnbHU+01yBCE/MF2eLjiI8iEqmCGJkrar4HmcworvDfVswuT5IJdj6Dh206pcYZAhN7b6+Wa4BbvHB3kEGkB8j47sDVbd/eY8OWFLYfED+g1J3Q54XeN1hSKGLgMMLQpCullEM6es5Uj0O5gQyG8PSh0p0Ja0Gk21aKZoCYoxuAHgdJjmH5C1iLBINd8asBH7EUHLTJ0MhG1eQe23Zx9ez4QenKmStqI0zUuzV8FsDtphu9StxJ2CEYNRduqfam78JvwUHxByEfaSaIHgfglHcWoI5ZohqcsCDmNXvSneaKF2ZLuAZ8IGr9a2AOmTQpQv36kyc6Uh0koUTeK+9KfPYHBJI0zUNrZA5S3tGo/SjS+g5NrQVbLuLVIil6uAOoiUUWzNcqhT3qrjf3Um8NBtqmNX6rQomeE+3QSh5az0e9+Gpkhg+bcDLhL/dV8yRgids7DnnEvuyEmb9UqSDnMti0N3AQELSZ1HF9EUMIFMQ03hc97g/AI8Aq6O+pNMtBn4zT16EQ31zPxMJGp3mDg==-----END CERTIFICATE-----`

Const VERSION_STRING

VERSION_STRING: "pankkiyhteys v0.10" = "pankkiyhteys v0.10"

Const WSS_B64BINARY

WSS_B64BINARY: "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"

Const WSS_X509V3

WSS_X509V3: "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"

Functions

X509ToCertificate

  • X509ToCertificate(data: string): Certificate
  • Load base64 encoded x509 certificate

    Parameters

    • data: string

    Returns Certificate

generateSigningRequest

  • generateSigningRequest(privateKeyPem: string, commonName: string, countryName: string): string
  • Create certificate signing request from pem encoded private key.

    Parameters

    • privateKeyPem: string
    • commonName: string
    • countryName: string

    Returns string

    base der formatted csr.

getSignatureReferences

  • getSignatureReferences(signature: any): any[]
  • Parameters

    • signature: any

    Returns any[]

getSoapCertificate

  • getSoapCertificate(signature: any): Certificate
  • Get certificate soap envelope

    Parameters

    • signature: any

      signature element inside soap envelope

    Returns Certificate

getSoapSignature

  • getSoapSignature(document: any): any
  • Get xmldsig Signature element from document.

    Parameters

    • document: any

      xml document

    Returns any

isElementSigned

  • isElementSigned(element: any, signature: any): boolean
  • Ensure that given xml element is included in the signature.

    This function DOES NOT check validity of the signature.

    If given element is a root node the document must be signed with http://www.w3.org/2000/09/xmldsig#enveloped-signature.

    Parameters

    • element: any

      xml element to test or root node

    • signature: any

      xml signature element

    Returns boolean

isRootElement

  • isRootElement(element: any): boolean
  • Test if given element is xml root element

    Parameters

    • element: any

    Returns boolean

parseApplicationResponse

  • parseApplicationResponse(response: XMLElement, preprocess?: ParsePreprocess): Promise<any>
  • Parse application response

    Parameters

    • response: XMLElement

      Soap envelope body content.

    • Optional preprocess: ParsePreprocess

      Preprocess ApplicationResponse callback

    Returns Promise<any>

parseResponseHeader

sign

  • sign(xml: string, key: Key, references: string[], keyInfoOrOptions?: string | SignOptions, options?: SignOptions): string
  • Sign xml document

    Parameters

    • xml: string

      xml document

    • key: Key

      pem encoded key that the document will be signed with

    • references: string[]

      xpath selectors to elements that will be signed

    • Optional keyInfoOrOptions: string | SignOptions
    • Optional options: SignOptions

    Returns string

    signed xml string

verifyApplicationRequestSignature

  • verifyApplicationRequestSignature(xml: string, document: any, trustStore: TrustStore, noLoading?: boolean): Promise<boolean>
  • Verify xml signature

    In order to protect from some attacks caller must check the content they want to use is the one that has been signed.

    Having a signature makes no sense otherwise.

    throws

    if signature verification fails

    Parameters

    • xml: string

      xml document

    • document: any
    • trustStore: TrustStore
    • Default value noLoading: boolean = false

    Returns Promise<boolean>

verifySignature

  • verifySignature(xml: string, signature: XMLElement, key: Certificate): boolean
  • Verify xml signature

    This does not check if the key itself is trusted.

    In order to protect from some attacks caller must check the content they want to use is the one that has been signed.

    Parameters

    • xml: string

      xml document

    • signature: XMLElement

      signature xml element

    • key: Certificate

      key that the document should be signed with

    Returns boolean

Object literals

Const namespaces

namespaces: object

dsig

dsig: string = "http://www.w3.org/2000/09/xmldsig#"

soap

soap: string = "http://schemas.xmlsoap.org/soap/envelope/"

wsse

wsse: string = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"

wsu

wsu: string = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method

Generated using TypeDoc