workato-connector-sdk 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/VERSION +1 -0
  4. data/lib/workato/cli/edit_command.rb +3 -1
  5. data/lib/workato/cli/exec_command.rb +76 -10
  6. data/lib/workato/cli/generate_command.rb +2 -2
  7. data/lib/workato/cli/main.rb +17 -10
  8. data/lib/workato/cli/oauth2_command.rb +4 -4
  9. data/lib/workato/cli/push_command.rb +2 -2
  10. data/lib/workato/cli/schema_command.rb +2 -2
  11. data/lib/workato/connector/sdk/account_properties.rb +2 -2
  12. data/lib/workato/connector/sdk/action.rb +20 -70
  13. data/lib/workato/connector/sdk/block_invocation_refinements.rb +2 -10
  14. data/lib/workato/connector/sdk/connection.rb +36 -19
  15. data/lib/workato/connector/sdk/connector.rb +65 -77
  16. data/lib/workato/connector/sdk/core.rb +62 -0
  17. data/lib/workato/connector/sdk/dsl/aws.rb +3 -3
  18. data/lib/workato/connector/sdk/dsl/call.rb +1 -1
  19. data/lib/workato/connector/sdk/dsl/csv_package.rb +133 -0
  20. data/lib/workato/connector/sdk/dsl/execution_context.rb +1 -0
  21. data/lib/workato/connector/sdk/dsl/http.rb +1 -1
  22. data/lib/workato/connector/sdk/dsl/reinvoke_after.rb +84 -0
  23. data/lib/workato/connector/sdk/dsl/stream_package.rb +65 -0
  24. data/lib/workato/connector/sdk/dsl/time.rb +0 -14
  25. data/lib/workato/connector/sdk/dsl/workato_package.rb +146 -0
  26. data/lib/workato/connector/sdk/dsl.rb +63 -10
  27. data/lib/workato/connector/sdk/errors.rb +28 -11
  28. data/lib/workato/connector/sdk/operation.rb +9 -2
  29. data/lib/workato/connector/sdk/request.rb +63 -25
  30. data/lib/workato/connector/sdk/schema/field/convertors.rb +2 -2
  31. data/lib/workato/connector/sdk/schema/type/unicode_string.rb +1 -1
  32. data/lib/workato/connector/sdk/schema.rb +7 -5
  33. data/lib/workato/connector/sdk/settings.rb +10 -1
  34. data/lib/workato/connector/sdk/stream.rb +243 -0
  35. data/lib/workato/connector/sdk/streams.rb +71 -0
  36. data/lib/workato/connector/sdk/summarize.rb +2 -2
  37. data/lib/workato/connector/sdk/trigger.rb +14 -7
  38. data/lib/workato/connector/sdk/version.rb +1 -1
  39. data/lib/workato/connector/sdk.rb +19 -46
  40. data/lib/workato/extension/array.rb +2 -0
  41. data/lib/workato/extension/case_sensitive_headers.rb +0 -1
  42. data/lib/workato/extension/content_encoding_decoder.rb +2 -0
  43. data/lib/workato/extension/currency/countries.rb +79 -0
  44. data/lib/workato/extension/currency/countries.yml +18433 -0
  45. data/lib/workato/extension/currency/currencies.rb +55 -0
  46. data/lib/workato/extension/currency/currencies.yml +479 -0
  47. data/lib/workato/extension/currency.rb +73 -5
  48. data/lib/workato/extension/enumerable.rb +2 -2
  49. data/lib/workato/extension/metadata_fix_wrap_kw_args.rb +11 -0
  50. data/lib/workato/extension/string.rb +14 -111
  51. data/lib/workato/testing/vcr_encrypted_cassette_serializer.rb +2 -0
  52. data/lib/workato/types/binary.rb +55 -0
  53. metadata +46 -61
  54. data/lib/workato/connector/sdk/dsl/csv.rb +0 -125
  55. data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +0 -167
@@ -1,167 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- require 'jwt'
5
- require_relative './csv'
6
-
7
- using Workato::Extension::HashWithIndifferentAccess
8
-
9
- module Workato
10
- module Connector
11
- module Sdk
12
- module Dsl
13
- module WorkatoCodeLib
14
- JWT_ALGORITHMS = %w[RS256 RS384 RS512].freeze
15
- JWT_RSA_KEY_MIN_LENGTH = 2048
16
-
17
- VERIFY_RCA_ALGORITHMS = %w[SHA SHA1 SHA224 SHA256 SHA384 SHA512].freeze
18
-
19
- def workato
20
- WorkatoCodeLib
21
- end
22
-
23
- def parse_json(source)
24
- WorkatoCodeLib.parse_json(source)
25
- end
26
-
27
- def uuid
28
- WorkatoCodeLib.uuid
29
- end
30
-
31
- def encrypt(text, key)
32
- ::Kernel.require('ruby_rncryptor')
33
-
34
- enc_text = ::RubyRNCryptor.encrypt(text, key)
35
- ::Base64.strict_encode64(enc_text)
36
- end
37
-
38
- def decrypt(text, key)
39
- ::Kernel.require('ruby_rncryptor')
40
-
41
- text = ::Base64.decode64(text)
42
- dec_text = ::RubyRNCryptor.decrypt(text, key)
43
- Workato::Extension::Binary.new(dec_text)
44
- rescue Exception => e # rubocop:disable Lint/RescueException
45
- message = e.message.to_s
46
- case message
47
- when /Password may be incorrect/
48
- ::Kernel.raise 'invalid/corrupt input or key'
49
- when /RubyRNCryptor only decrypts version/
50
- ::Kernel.raise 'invalid/corrupt input'
51
- else
52
- ::Kernel.raise
53
- end
54
- end
55
-
56
- def blank; end
57
-
58
- def clear; end
59
-
60
- def null; end
61
-
62
- def skip; end
63
-
64
- class << self
65
- def jwt_encode_rs256(payload, key, header_fields = {})
66
- jwt_encode(payload, key, 'RS256', header_fields)
67
- end
68
-
69
- def jwt_encode(payload, key, algorithm, header_fields = {})
70
- algorithm = algorithm.to_s.upcase
71
- unless JWT_ALGORITHMS.include?(algorithm)
72
- raise "Unsupported signing method. Supports only #{JWT_ALGORITHMS.join(', ')}. Got: '#{algorithm}'"
73
- end
74
-
75
- rsa_private = OpenSSL::PKey::RSA.new(key)
76
- if rsa_private.n.num_bits < JWT_RSA_KEY_MIN_LENGTH
77
- raise "A RSA key of size #{JWT_RSA_KEY_MIN_LENGTH} bits or larger MUST be used with JWT."
78
- end
79
-
80
- header_fields = HashWithIndifferentAccess.wrap(header_fields).except(:typ, :alg)
81
- ::JWT.encode(payload, rsa_private, algorithm, header_fields)
82
- end
83
-
84
- def verify_rsa(payload, certificate, signature, algorithm = 'SHA256')
85
- algorithm = algorithm.to_s.upcase
86
- unless VERIFY_RCA_ALGORITHMS.include?(algorithm)
87
- raise "Unsupported signing method. Supports only #{VERIFY_RCA_ALGORITHMS.join(', ')}. Got: '#{algorithm}'" # rubocop:disable Layout/LineLength
88
- end
89
-
90
- cert = OpenSSL::X509::Certificate.new(certificate)
91
- digest = OpenSSL::Digest.new(algorithm)
92
- cert.public_key.verify(digest, signature, payload)
93
- rescue OpenSSL::PKey::PKeyError
94
- raise 'An error occurred during signature verification. Check arguments'
95
- rescue OpenSSL::X509::CertificateError
96
- raise 'Invalid certificate format'
97
- end
98
-
99
- def parse_yaml(yaml)
100
- ::Psych.safe_load(yaml)
101
- rescue ::Psych::DisallowedClass => e
102
- raise e.message
103
- end
104
-
105
- def render_yaml(obj)
106
- ::Psych.dump(obj)
107
- end
108
-
109
- def parse_json(source)
110
- JSON.parse(source)
111
- end
112
-
113
- def uuid
114
- SecureRandom.uuid
115
- end
116
-
117
- RANDOM_SIZE = 32
118
-
119
- def random_bytes(len)
120
- unless (len.is_a? ::Integer) && (len <= RANDOM_SIZE)
121
- raise "The requested length or random bytes sequence should be <= #{RANDOM_SIZE}"
122
- end
123
-
124
- Extension::Binary.new(::OpenSSL::Random.random_bytes(len))
125
- end
126
-
127
- ALLOWED_KEY_SIZES = [128, 192, 256].freeze
128
-
129
- def aes_cbc_encrypt(string, key, init_vector = nil)
130
- key_size = key.bytesize * 8
131
- unless ALLOWED_KEY_SIZES.include?(key_size)
132
- raise 'Incorrect key size for AES'
133
- end
134
-
135
- cipher = ::OpenSSL::Cipher.new("AES-#{key_size}-CBC")
136
- cipher.encrypt
137
- cipher.key = key
138
- cipher.iv = init_vector if init_vector.present?
139
- Extension::Binary.new(cipher.update(string) + cipher.final)
140
- end
141
-
142
- def aes_cbc_decrypt(string, key, init_vector = nil)
143
- key_size = key.bytesize * 8
144
- unless ALLOWED_KEY_SIZES.include?(key_size)
145
- raise 'Incorrect key size for AES'
146
- end
147
-
148
- cipher = ::OpenSSL::Cipher.new("AES-#{key_size}-CBC")
149
- cipher.decrypt
150
- cipher.key = key
151
- cipher.iv = init_vector if init_vector.present?
152
- Extension::Binary.new(cipher.update(string) + cipher.final)
153
- end
154
-
155
- def pbkdf2_hmac_sha1(string, salt, iterations = 1000, key_len = 16)
156
- Extension::Binary.new(::OpenSSL::PKCS5.pbkdf2_hmac_sha1(string, salt, iterations, key_len))
157
- end
158
-
159
- def csv
160
- Csv
161
- end
162
- end
163
- end
164
- end
165
- end
166
- end
167
- end