factpulse 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -4
  3. data/Gemfile.lock +2 -2
  4. data/README.md +12 -0
  5. data/docs/AFNORPDPPAApi.md +9 -2
  6. data/docs/AsyncTasksApi.md +6 -1
  7. data/docs/ChorusProApi.md +96 -16
  8. data/docs/ClientManagementApi.md +359 -13
  9. data/docs/ConvertResumeRequest.md +5 -1
  10. data/docs/DownloadsApi.md +12 -2
  11. data/docs/ElectronicSignatureApi.md +24 -4
  12. data/docs/FacturXConversionApi.md +101 -4
  13. data/docs/FacturXGenerationApi.md +18 -3
  14. data/docs/FacturXPDFXMLVerificationApi.md +18 -3
  15. data/docs/FacturXValidationApi.md +18 -3
  16. data/docs/FactureElectroniqueRestApiSchemasValidationValidationErrorResponse.md +18 -0
  17. data/docs/Flux10EReportingApi.md +36 -6
  18. data/docs/Flux6InvoiceLifecycleCDARApi.md +18 -3
  19. data/docs/HealthApi.md +6 -1
  20. data/docs/KeyRotationRequest.md +20 -0
  21. data/docs/KeyRotationResponse.md +24 -0
  22. data/docs/PDPConfigResponse.md +2 -0
  23. data/docs/PDPConfigUpdateRequest.md +3 -1
  24. data/docs/SecretStatus.md +5 -1
  25. data/docs/ValidateCDARResponse.md +2 -2
  26. data/docs/ValidationErrorResponse.md +8 -2
  27. data/docs/WebhookSecretDeleteResponse.md +20 -0
  28. data/docs/WebhookSecretGenerateResponse.md +24 -0
  29. data/docs/WebhookSecretStatusResponse.md +20 -0
  30. data/lib/factpulse/api/afnorpdppa_api.rb +4 -1
  31. data/lib/factpulse/api/async_tasks_api.rb +1 -1
  32. data/lib/factpulse/api/chorus_pro_api.rb +16 -16
  33. data/lib/factpulse/api/client_management_api.rb +276 -10
  34. data/lib/factpulse/api/downloads_api.rb +2 -2
  35. data/lib/factpulse/api/electronic_signature_api.rb +4 -4
  36. data/lib/factpulse/api/factur_x_conversion_api.rb +78 -4
  37. data/lib/factpulse/api/factur_x_generation_api.rb +3 -3
  38. data/lib/factpulse/api/factur_x_validation_api.rb +3 -3
  39. data/lib/factpulse/api/factur_xpdfxml_verification_api.rb +3 -3
  40. data/lib/factpulse/api/flux10_e_reporting_api.rb +6 -6
  41. data/lib/factpulse/api/flux6_invoice_lifecycle_cdar_api.rb +3 -3
  42. data/lib/factpulse/api/health_api.rb +1 -1
  43. data/lib/factpulse/configuration.rb +7 -0
  44. data/lib/factpulse/models/convert_resume_request.rb +27 -5
  45. data/lib/factpulse/models/facture_electronique_rest_api_schemas_validation_validation_error_response.rb +168 -0
  46. data/lib/factpulse/models/key_rotation_request.rb +211 -0
  47. data/lib/factpulse/models/key_rotation_response.rb +232 -0
  48. data/lib/factpulse/models/pdp_config_response.rb +11 -1
  49. data/lib/factpulse/models/pdp_config_update_request.rb +49 -5
  50. data/lib/factpulse/models/secret_status.rb +24 -4
  51. data/lib/factpulse/models/validate_cdar_response.rb +2 -2
  52. data/lib/factpulse/models/validation_error_response.rb +67 -20
  53. data/lib/factpulse/models/{facture_electronique_rest_api_schemas_cdar_validation_error_response.rb → webhook_secret_delete_response.rb} +25 -47
  54. data/lib/factpulse/models/webhook_secret_generate_response.rb +247 -0
  55. data/lib/factpulse/models/webhook_secret_status_response.rb +176 -0
  56. data/lib/factpulse/version.rb +1 -1
  57. data/lib/factpulse.rb +6 -1
  58. metadata +14 -4
  59. data/docs/FactureElectroniqueRestApiSchemasCdarValidationErrorResponse.md +0 -24
@@ -4,7 +4,10 @@
4
4
 
5
5
  | Name | Type | Description | Notes |
6
6
  | ---- | ---- | ----------- | ----- |
7
- | **detail** | **Array<String>** | List of detected validation errors. | |
7
+ | **field** | **String** | Champ concerné | |
8
+ | **message** | **String** | Message d'erreur | |
9
+ | **rule** | **String** | | [optional] |
10
+ | **severity** | **String** | Sévérité (error/warning) | [optional][default to 'error'] |
8
11
 
9
12
  ## Example
10
13
 
@@ -12,7 +15,10 @@
12
15
  require 'factpulse'
13
16
 
14
17
  instance = FactPulse::ValidationErrorResponse.new(
15
- detail: null
18
+ field: null,
19
+ message: null,
20
+ rule: null,
21
+ severity: null
16
22
  )
17
23
  ```
18
24
 
@@ -0,0 +1,20 @@
1
+ # FactPulse::WebhookSecretDeleteResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **success** | **Boolean** | Whether the secret was deleted successfully | |
8
+ | **message** | **String** | Result message | |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'factpulse'
14
+
15
+ instance = FactPulse::WebhookSecretDeleteResponse.new(
16
+ success: null,
17
+ message: null
18
+ )
19
+ ```
20
+
@@ -0,0 +1,24 @@
1
+ # FactPulse::WebhookSecretGenerateResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **success** | **Boolean** | Whether the secret was generated successfully | |
8
+ | **webhook_secret** | **String** | The generated webhook secret (save it, it will never be shown again) | |
9
+ | **message** | **String** | Result message | |
10
+ | **created_at** | **Time** | When the secret was created | |
11
+
12
+ ## Example
13
+
14
+ ```ruby
15
+ require 'factpulse'
16
+
17
+ instance = FactPulse::WebhookSecretGenerateResponse.new(
18
+ success: null,
19
+ webhook_secret: null,
20
+ message: null,
21
+ created_at: null
22
+ )
23
+ ```
24
+
@@ -0,0 +1,20 @@
1
+ # FactPulse::WebhookSecretStatusResponse
2
+
3
+ ## Properties
4
+
5
+ | Name | Type | Description | Notes |
6
+ | ---- | ---- | ----------- | ----- |
7
+ | **has_secret** | **Boolean** | Whether a webhook secret is configured | |
8
+ | **created_at** | **Time** | | [optional] |
9
+
10
+ ## Example
11
+
12
+ ```ruby
13
+ require 'factpulse'
14
+
15
+ instance = FactPulse::WebhookSecretStatusResponse.new(
16
+ has_secret: null,
17
+ created_at: null
18
+ )
19
+ ```
20
+
@@ -24,6 +24,7 @@ module FactPulse
24
24
  # @param flow_id [String] AFNOR flow ID (UUID format)
25
25
  # @param [Hash] opts the optional parameters
26
26
  # @option opts [Boolean] :include_document Include base64-encoded document in response (default to false)
27
+ # @option opts [String] :x_encryption_key Client encryption key for double encryption mode. Must be a base64-encoded AES-256 key (32 bytes). Required only when accessing resources encrypted with encryption_mode='double'.
27
28
  # @return [IncomingInvoice]
28
29
  def get_flux_entrant_api_v1_afnor_incoming_flows_flow_id_get(flow_id, opts = {})
29
30
  data, _status_code, _headers = get_flux_entrant_api_v1_afnor_incoming_flows_flow_id_get_with_http_info(flow_id, opts)
@@ -35,6 +36,7 @@ module FactPulse
35
36
  # @param flow_id [String] AFNOR flow ID (UUID format)
36
37
  # @param [Hash] opts the optional parameters
37
38
  # @option opts [Boolean] :include_document Include base64-encoded document in response (default to false)
39
+ # @option opts [String] :x_encryption_key Client encryption key for double encryption mode. Must be a base64-encoded AES-256 key (32 bytes). Required only when accessing resources encrypted with encryption_mode='double'.
38
40
  # @return [Array<(IncomingInvoice, Integer, Hash)>] IncomingInvoice data, response status code and response headers
39
41
  def get_flux_entrant_api_v1_afnor_incoming_flows_flow_id_get_with_http_info(flow_id, opts = {})
40
42
  if @api_client.config.debugging
@@ -55,6 +57,7 @@ module FactPulse
55
57
  header_params = opts[:header_params] || {}
56
58
  # HTTP header 'Accept' (if needed)
57
59
  header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
60
+ header_params[:'X-Encryption-Key'] = opts[:'x_encryption_key'] if !opts[:'x_encryption_key'].nil?
58
61
 
59
62
  # form parameters
60
63
  form_params = opts[:form_params] || {}
@@ -66,7 +69,7 @@ module FactPulse
66
69
  return_type = opts[:debug_return_type] || 'IncomingInvoice'
67
70
 
68
71
  # auth_names
69
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
72
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
70
73
 
71
74
  new_options = opts.merge(
72
75
  :operation => :"AFNORPDPPAApi.get_flux_entrant_api_v1_afnor_incoming_flows_flow_id_get",
@@ -63,7 +63,7 @@ module FactPulse
63
63
  return_type = opts[:debug_return_type] || 'AsyncTaskStatus'
64
64
 
65
65
  # auth_names
66
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
66
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
67
67
 
68
68
  new_options = opts.merge(
69
69
  :operation => :"AsyncTasksApi.get_task_status_api_v1_processing_tasks_task_id_status_get",
@@ -68,7 +68,7 @@ module FactPulse
68
68
  return_type = opts[:debug_return_type] || 'Object'
69
69
 
70
70
  # auth_names
71
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
71
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
72
72
 
73
73
  new_options = opts.merge(
74
74
  :operation => :"ChorusProApi.ajouter_fichier_api_v1_chorus_pro_transverses_ajouter_fichier_post",
@@ -136,7 +136,7 @@ module FactPulse
136
136
  return_type = opts[:debug_return_type] || 'Object'
137
137
 
138
138
  # auth_names
139
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
139
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
140
140
 
141
141
  new_options = opts.merge(
142
142
  :operation => :"ChorusProApi.completer_facture_api_v1_chorus_pro_factures_completer_post",
@@ -204,7 +204,7 @@ module FactPulse
204
204
  return_type = opts[:debug_return_type] || 'GetInvoiceResponse'
205
205
 
206
206
  # auth_names
207
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
207
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
208
208
 
209
209
  new_options = opts.merge(
210
210
  :operation => :"ChorusProApi.consulter_facture_api_v1_chorus_pro_factures_consulter_post",
@@ -272,7 +272,7 @@ module FactPulse
272
272
  return_type = opts[:debug_return_type] || 'GetStructureResponse'
273
273
 
274
274
  # auth_names
275
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
275
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
276
276
 
277
277
  new_options = opts.merge(
278
278
  :operation => :"ChorusProApi.consulter_structure_api_v1_chorus_pro_structures_consulter_post",
@@ -335,7 +335,7 @@ module FactPulse
335
335
  return_type = opts[:debug_return_type] || 'SearchServicesResponse'
336
336
 
337
337
  # auth_names
338
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
338
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
339
339
 
340
340
  new_options = opts.merge(
341
341
  :operation => :"ChorusProApi.lister_services_structure_api_v1_chorus_pro_structures_id_structure_cpp_services_get",
@@ -403,7 +403,7 @@ module FactPulse
403
403
  return_type = opts[:debug_return_type] || 'GetChorusProIdResponse'
404
404
 
405
405
  # auth_names
406
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
406
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
407
407
 
408
408
  new_options = opts.merge(
409
409
  :operation => :"ChorusProApi.obtenir_id_chorus_pro_depuis_siret_api_v1_chorus_pro_structures_obtenir_id_depuis_siret_post",
@@ -471,7 +471,7 @@ module FactPulse
471
471
  return_type = opts[:debug_return_type] || 'Object'
472
472
 
473
473
  # auth_names
474
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
474
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
475
475
 
476
476
  new_options = opts.merge(
477
477
  :operation => :"ChorusProApi.rechercher_factures_destinataire_api_v1_chorus_pro_factures_rechercher_destinataire_post",
@@ -539,7 +539,7 @@ module FactPulse
539
539
  return_type = opts[:debug_return_type] || 'Object'
540
540
 
541
541
  # auth_names
542
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
542
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
543
543
 
544
544
  new_options = opts.merge(
545
545
  :operation => :"ChorusProApi.rechercher_factures_fournisseur_api_v1_chorus_pro_factures_rechercher_fournisseur_post",
@@ -607,7 +607,7 @@ module FactPulse
607
607
  return_type = opts[:debug_return_type] || 'SearchStructureResponse'
608
608
 
609
609
  # auth_names
610
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
610
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
611
611
 
612
612
  new_options = opts.merge(
613
613
  :operation => :"ChorusProApi.rechercher_structures_api_v1_chorus_pro_structures_rechercher_post",
@@ -675,7 +675,7 @@ module FactPulse
675
675
  return_type = opts[:debug_return_type] || 'Object'
676
676
 
677
677
  # auth_names
678
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
678
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
679
679
 
680
680
  new_options = opts.merge(
681
681
  :operation => :"ChorusProApi.recycler_facture_api_v1_chorus_pro_factures_recycler_post",
@@ -743,7 +743,7 @@ module FactPulse
743
743
  return_type = opts[:debug_return_type] || 'SubmitInvoiceResponse'
744
744
 
745
745
  # auth_names
746
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
746
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
747
747
 
748
748
  new_options = opts.merge(
749
749
  :operation => :"ChorusProApi.soumettre_facture_api_v1_chorus_pro_factures_soumettre_post",
@@ -811,7 +811,7 @@ module FactPulse
811
811
  return_type = opts[:debug_return_type] || 'Object'
812
812
 
813
813
  # auth_names
814
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
814
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
815
815
 
816
816
  new_options = opts.merge(
817
817
  :operation => :"ChorusProApi.telecharger_groupe_factures_api_v1_chorus_pro_factures_telecharger_groupe_post",
@@ -879,7 +879,7 @@ module FactPulse
879
879
  return_type = opts[:debug_return_type] || 'Object'
880
880
 
881
881
  # auth_names
882
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
882
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
883
883
 
884
884
  new_options = opts.merge(
885
885
  :operation => :"ChorusProApi.traiter_facture_recue_api_v1_chorus_pro_factures_traiter_facture_recue_post",
@@ -947,7 +947,7 @@ module FactPulse
947
947
  return_type = opts[:debug_return_type] || 'Object'
948
948
 
949
949
  # auth_names
950
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
950
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
951
951
 
952
952
  new_options = opts.merge(
953
953
  :operation => :"ChorusProApi.valideur_consulter_facture_api_v1_chorus_pro_factures_valideur_consulter_post",
@@ -1015,7 +1015,7 @@ module FactPulse
1015
1015
  return_type = opts[:debug_return_type] || 'Object'
1016
1016
 
1017
1017
  # auth_names
1018
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
1018
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
1019
1019
 
1020
1020
  new_options = opts.merge(
1021
1021
  :operation => :"ChorusProApi.valideur_rechercher_factures_api_v1_chorus_pro_factures_valideur_rechercher_post",
@@ -1083,7 +1083,7 @@ module FactPulse
1083
1083
  return_type = opts[:debug_return_type] || 'Object'
1084
1084
 
1085
1085
  # auth_names
1086
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
1086
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
1087
1087
 
1088
1088
  new_options = opts.merge(
1089
1089
  :operation => :"ChorusProApi.valideur_traiter_facture_api_v1_chorus_pro_factures_valideur_traiter_post",
@@ -63,7 +63,7 @@ module FactPulse
63
63
  return_type = opts[:debug_return_type] || 'ClientActivateResponse'
64
64
 
65
65
  # auth_names
66
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
66
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
67
67
 
68
68
  new_options = opts.merge(
69
69
  :operation => :"ClientManagementApi.activate_client_api_v1_clients_uid_activer_post",
@@ -131,7 +131,7 @@ module FactPulse
131
131
  return_type = opts[:debug_return_type] || 'ClientDetail'
132
132
 
133
133
  # auth_names
134
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
134
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
135
135
 
136
136
  new_options = opts.merge(
137
137
  :operation => :"ClientManagementApi.create_client_api_v1_clients_post",
@@ -194,7 +194,7 @@ module FactPulse
194
194
  return_type = opts[:debug_return_type] || 'ClientActivateResponse'
195
195
 
196
196
  # auth_names
197
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
197
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
198
198
 
199
199
  new_options = opts.merge(
200
200
  :operation => :"ClientManagementApi.deactivate_client_api_v1_clients_uid_desactiver_post",
@@ -213,6 +213,132 @@ module FactPulse
213
213
  return data, status_code, headers
214
214
  end
215
215
 
216
+ # Delete webhook secret
217
+ # Delete the webhook secret for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **After deletion**: Webhooks for this client will use the global server key for HMAC signature instead of a client-specific key.
218
+ # @param uid [String]
219
+ # @param [Hash] opts the optional parameters
220
+ # @return [WebhookSecretDeleteResponse]
221
+ def delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete(uid, opts = {})
222
+ data, _status_code, _headers = delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete_with_http_info(uid, opts)
223
+ data
224
+ end
225
+
226
+ # Delete webhook secret
227
+ # Delete the webhook secret for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **After deletion**: Webhooks for this client will use the global server key for HMAC signature instead of a client-specific key.
228
+ # @param uid [String]
229
+ # @param [Hash] opts the optional parameters
230
+ # @return [Array<(WebhookSecretDeleteResponse, Integer, Hash)>] WebhookSecretDeleteResponse data, response status code and response headers
231
+ def delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete_with_http_info(uid, opts = {})
232
+ if @api_client.config.debugging
233
+ @api_client.config.logger.debug 'Calling API: ClientManagementApi.delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete ...'
234
+ end
235
+ # verify the required parameter 'uid' is set
236
+ if @api_client.config.client_side_validation && uid.nil?
237
+ fail ArgumentError, "Missing the required parameter 'uid' when calling ClientManagementApi.delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete"
238
+ end
239
+ # resource path
240
+ local_var_path = '/api/v1/clients/{uid}/webhook-secret'.sub('{' + 'uid' + '}', CGI.escape(uid.to_s))
241
+
242
+ # query parameters
243
+ query_params = opts[:query_params] || {}
244
+
245
+ # header parameters
246
+ header_params = opts[:header_params] || {}
247
+ # HTTP header 'Accept' (if needed)
248
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
249
+
250
+ # form parameters
251
+ form_params = opts[:form_params] || {}
252
+
253
+ # http body (model)
254
+ post_body = opts[:debug_body]
255
+
256
+ # return_type
257
+ return_type = opts[:debug_return_type] || 'WebhookSecretDeleteResponse'
258
+
259
+ # auth_names
260
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
261
+
262
+ new_options = opts.merge(
263
+ :operation => :"ClientManagementApi.delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete",
264
+ :header_params => header_params,
265
+ :query_params => query_params,
266
+ :form_params => form_params,
267
+ :body => post_body,
268
+ :auth_names => auth_names,
269
+ :return_type => return_type
270
+ )
271
+
272
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
273
+ if @api_client.config.debugging
274
+ @api_client.config.logger.debug "API called: ClientManagementApi#delete_webhook_secret_api_v1_clients_uid_webhook_secret_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
275
+ end
276
+ return data, status_code, headers
277
+ end
278
+
279
+ # Generate webhook secret
280
+ # Generate or regenerate the webhook secret for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Important**: Save the returned secret immediately - it will never be shown again. The secret is used to sign webhooks sent by the server (HMAC-SHA256). **If a secret already exists**: It will be replaced by the new one.
281
+ # @param uid [String]
282
+ # @param [Hash] opts the optional parameters
283
+ # @return [WebhookSecretGenerateResponse]
284
+ def generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post(uid, opts = {})
285
+ data, _status_code, _headers = generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post_with_http_info(uid, opts)
286
+ data
287
+ end
288
+
289
+ # Generate webhook secret
290
+ # Generate or regenerate the webhook secret for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Important**: Save the returned secret immediately - it will never be shown again. The secret is used to sign webhooks sent by the server (HMAC-SHA256). **If a secret already exists**: It will be replaced by the new one.
291
+ # @param uid [String]
292
+ # @param [Hash] opts the optional parameters
293
+ # @return [Array<(WebhookSecretGenerateResponse, Integer, Hash)>] WebhookSecretGenerateResponse data, response status code and response headers
294
+ def generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post_with_http_info(uid, opts = {})
295
+ if @api_client.config.debugging
296
+ @api_client.config.logger.debug 'Calling API: ClientManagementApi.generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post ...'
297
+ end
298
+ # verify the required parameter 'uid' is set
299
+ if @api_client.config.client_side_validation && uid.nil?
300
+ fail ArgumentError, "Missing the required parameter 'uid' when calling ClientManagementApi.generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post"
301
+ end
302
+ # resource path
303
+ local_var_path = '/api/v1/clients/{uid}/webhook-secret/generate'.sub('{' + 'uid' + '}', CGI.escape(uid.to_s))
304
+
305
+ # query parameters
306
+ query_params = opts[:query_params] || {}
307
+
308
+ # header parameters
309
+ header_params = opts[:header_params] || {}
310
+ # HTTP header 'Accept' (if needed)
311
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
312
+
313
+ # form parameters
314
+ form_params = opts[:form_params] || {}
315
+
316
+ # http body (model)
317
+ post_body = opts[:debug_body]
318
+
319
+ # return_type
320
+ return_type = opts[:debug_return_type] || 'WebhookSecretGenerateResponse'
321
+
322
+ # auth_names
323
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
324
+
325
+ new_options = opts.merge(
326
+ :operation => :"ClientManagementApi.generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post",
327
+ :header_params => header_params,
328
+ :query_params => query_params,
329
+ :form_params => form_params,
330
+ :body => post_body,
331
+ :auth_names => auth_names,
332
+ :return_type => return_type
333
+ )
334
+
335
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
336
+ if @api_client.config.debugging
337
+ @api_client.config.logger.debug "API called: ClientManagementApi#generate_webhook_secret_api_v1_clients_uid_webhook_secret_generate_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
338
+ end
339
+ return data, status_code, headers
340
+ end
341
+
216
342
  # Get client details
217
343
  # Get details of a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Security**: If the JWT contains a client_uid, it must match the {uid} in the URL, otherwise a 403 error is returned.
218
344
  # @param uid [String]
@@ -257,7 +383,7 @@ module FactPulse
257
383
  return_type = opts[:debug_return_type] || 'ClientDetail'
258
384
 
259
385
  # auth_names
260
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
386
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
261
387
 
262
388
  new_options = opts.merge(
263
389
  :operation => :"ClientManagementApi.get_client_api_v1_clients_uid_get",
@@ -320,7 +446,7 @@ module FactPulse
320
446
  return_type = opts[:debug_return_type] || 'PDPConfigResponse'
321
447
 
322
448
  # auth_names
323
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
449
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
324
450
 
325
451
  new_options = opts.merge(
326
452
  :operation => :"ClientManagementApi.get_pdp_config_api_v1_clients_uid_pdp_config_get",
@@ -339,6 +465,69 @@ module FactPulse
339
465
  return data, status_code, headers
340
466
  end
341
467
 
468
+ # Get webhook secret status
469
+ # Check if a webhook secret is configured for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Response**: - `hasSecret`: Whether a webhook secret is configured - `createdAt`: When the secret was created (if exists) **Note**: The secret value is never returned, only its status.
470
+ # @param uid [String]
471
+ # @param [Hash] opts the optional parameters
472
+ # @return [WebhookSecretStatusResponse]
473
+ def get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get(uid, opts = {})
474
+ data, _status_code, _headers = get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get_with_http_info(uid, opts)
475
+ data
476
+ end
477
+
478
+ # Get webhook secret status
479
+ # Check if a webhook secret is configured for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Response**: - &#x60;hasSecret&#x60;: Whether a webhook secret is configured - &#x60;createdAt&#x60;: When the secret was created (if exists) **Note**: The secret value is never returned, only its status.
480
+ # @param uid [String]
481
+ # @param [Hash] opts the optional parameters
482
+ # @return [Array<(WebhookSecretStatusResponse, Integer, Hash)>] WebhookSecretStatusResponse data, response status code and response headers
483
+ def get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get_with_http_info(uid, opts = {})
484
+ if @api_client.config.debugging
485
+ @api_client.config.logger.debug 'Calling API: ClientManagementApi.get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get ...'
486
+ end
487
+ # verify the required parameter 'uid' is set
488
+ if @api_client.config.client_side_validation && uid.nil?
489
+ fail ArgumentError, "Missing the required parameter 'uid' when calling ClientManagementApi.get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get"
490
+ end
491
+ # resource path
492
+ local_var_path = '/api/v1/clients/{uid}/webhook-secret/status'.sub('{' + 'uid' + '}', CGI.escape(uid.to_s))
493
+
494
+ # query parameters
495
+ query_params = opts[:query_params] || {}
496
+
497
+ # header parameters
498
+ header_params = opts[:header_params] || {}
499
+ # HTTP header 'Accept' (if needed)
500
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
501
+
502
+ # form parameters
503
+ form_params = opts[:form_params] || {}
504
+
505
+ # http body (model)
506
+ post_body = opts[:debug_body]
507
+
508
+ # return_type
509
+ return_type = opts[:debug_return_type] || 'WebhookSecretStatusResponse'
510
+
511
+ # auth_names
512
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
513
+
514
+ new_options = opts.merge(
515
+ :operation => :"ClientManagementApi.get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get",
516
+ :header_params => header_params,
517
+ :query_params => query_params,
518
+ :form_params => form_params,
519
+ :body => post_body,
520
+ :auth_names => auth_names,
521
+ :return_type => return_type
522
+ )
523
+
524
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
525
+ if @api_client.config.debugging
526
+ @api_client.config.logger.debug "API called: ClientManagementApi#get_webhook_secret_status_api_v1_clients_uid_webhook_secret_status_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
527
+ end
528
+ return data, status_code, headers
529
+ end
530
+
342
531
  # List clients
343
532
  # Paginated list of clients for the account. **Scope**: Account level (JWT without client_uid) **Pagination**: - `page`: Page number (default: 1) - `pageSize`: Page size (default: 20, max: 100)
344
533
  # @param [Hash] opts the optional parameters
@@ -395,7 +584,7 @@ module FactPulse
395
584
  return_type = opts[:debug_return_type] || 'ClientListResponse'
396
585
 
397
586
  # auth_names
398
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
587
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
399
588
 
400
589
  new_options = opts.merge(
401
590
  :operation => :"ClientManagementApi.list_clients_api_v1_clients_get",
@@ -414,6 +603,80 @@ module FactPulse
414
603
  return data, status_code, headers
415
604
  end
416
605
 
606
+ # Rotate client encryption key
607
+ # Rotate the client encryption key for all secrets in double encryption mode. **Scope**: Client level (JWT with client_uid that must match {uid}) **What this does**: 1. Decrypts all secrets (PDP, Chorus Pro) using the old key 2. Re-encrypts them using the new key 3. Saves to database **Important notes**: - Both keys must be base64-encoded AES-256 keys (32 bytes each) - The old key becomes invalid immediately after rotation - Only secrets encrypted with `encryptionMode: \"double\"` are affected - If the client has no double-encrypted secrets, returns 404 **Security**: - The old key must be valid (decryption is verified) - If decryption fails, rotation is aborted (atomic operation) - Neither key is logged or stored by the server
608
+ # @param uid [String]
609
+ # @param key_rotation_request [KeyRotationRequest]
610
+ # @param [Hash] opts the optional parameters
611
+ # @return [KeyRotationResponse]
612
+ def rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post(uid, key_rotation_request, opts = {})
613
+ data, _status_code, _headers = rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post_with_http_info(uid, key_rotation_request, opts)
614
+ data
615
+ end
616
+
617
+ # Rotate client encryption key
618
+ # Rotate the client encryption key for all secrets in double encryption mode. **Scope**: Client level (JWT with client_uid that must match {uid}) **What this does**: 1. Decrypts all secrets (PDP, Chorus Pro) using the old key 2. Re-encrypts them using the new key 3. Saves to database **Important notes**: - Both keys must be base64-encoded AES-256 keys (32 bytes each) - The old key becomes invalid immediately after rotation - Only secrets encrypted with &#x60;encryptionMode: \&quot;double\&quot;&#x60; are affected - If the client has no double-encrypted secrets, returns 404 **Security**: - The old key must be valid (decryption is verified) - If decryption fails, rotation is aborted (atomic operation) - Neither key is logged or stored by the server
619
+ # @param uid [String]
620
+ # @param key_rotation_request [KeyRotationRequest]
621
+ # @param [Hash] opts the optional parameters
622
+ # @return [Array<(KeyRotationResponse, Integer, Hash)>] KeyRotationResponse data, response status code and response headers
623
+ def rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post_with_http_info(uid, key_rotation_request, opts = {})
624
+ if @api_client.config.debugging
625
+ @api_client.config.logger.debug 'Calling API: ClientManagementApi.rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post ...'
626
+ end
627
+ # verify the required parameter 'uid' is set
628
+ if @api_client.config.client_side_validation && uid.nil?
629
+ fail ArgumentError, "Missing the required parameter 'uid' when calling ClientManagementApi.rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post"
630
+ end
631
+ # verify the required parameter 'key_rotation_request' is set
632
+ if @api_client.config.client_side_validation && key_rotation_request.nil?
633
+ fail ArgumentError, "Missing the required parameter 'key_rotation_request' when calling ClientManagementApi.rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post"
634
+ end
635
+ # resource path
636
+ local_var_path = '/api/v1/clients/{uid}/rotate-encryption-key'.sub('{' + 'uid' + '}', CGI.escape(uid.to_s))
637
+
638
+ # query parameters
639
+ query_params = opts[:query_params] || {}
640
+
641
+ # header parameters
642
+ header_params = opts[:header_params] || {}
643
+ # HTTP header 'Accept' (if needed)
644
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
645
+ # HTTP header 'Content-Type'
646
+ content_type = @api_client.select_header_content_type(['application/json'])
647
+ if !content_type.nil?
648
+ header_params['Content-Type'] = content_type
649
+ end
650
+
651
+ # form parameters
652
+ form_params = opts[:form_params] || {}
653
+
654
+ # http body (model)
655
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(key_rotation_request)
656
+
657
+ # return_type
658
+ return_type = opts[:debug_return_type] || 'KeyRotationResponse'
659
+
660
+ # auth_names
661
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
662
+
663
+ new_options = opts.merge(
664
+ :operation => :"ClientManagementApi.rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post",
665
+ :header_params => header_params,
666
+ :query_params => query_params,
667
+ :form_params => form_params,
668
+ :body => post_body,
669
+ :auth_names => auth_names,
670
+ :return_type => return_type
671
+ )
672
+
673
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
674
+ if @api_client.config.debugging
675
+ @api_client.config.logger.debug "API called: ClientManagementApi#rotate_encryption_key_api_v1_clients_uid_rotate_encryption_key_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
676
+ end
677
+ return data, status_code, headers
678
+ end
679
+
417
680
  # Update a client
418
681
  # Update client information (partial update). **Scope**: Client level (JWT with client_uid that must match {uid}) **Updatable fields**: - `name`: Client name - `description`: Description - `siret`: SIRET (14 digits) Only provided fields are updated.
419
682
  # @param uid [String]
@@ -469,7 +732,7 @@ module FactPulse
469
732
  return_type = opts[:debug_return_type] || 'ClientDetail'
470
733
 
471
734
  # auth_names
472
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
735
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
473
736
 
474
737
  new_options = opts.merge(
475
738
  :operation => :"ClientManagementApi.update_client_api_v1_clients_uid_patch",
@@ -489,10 +752,11 @@ module FactPulse
489
752
  end
490
753
 
491
754
  # Configure client PDP
492
- # Configure or update the PDP (PA/PDP) configuration for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Required fields**: - `flowServiceUrl`: PDP Flow Service URL - `tokenUrl`: PDP OAuth token URL - `oauthClientId`: OAuth Client ID - `clientSecret`: OAuth Client Secret (sent but NEVER returned) **Optional fields**: - `isActive`: Enable/disable the config (default: true) - `modeSandbox`: Sandbox mode (default: false) **Security**: The `clientSecret` is stored encrypted on Django side and is never returned in API responses.
755
+ # Configure or update the PDP (PA/PDP) configuration for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Required fields**: - `flowServiceUrl`: PDP Flow Service URL - `tokenUrl`: PDP OAuth token URL - `oauthClientId`: OAuth Client ID - `clientSecret`: OAuth Client Secret (sent but NEVER returned) **Optional fields**: - `isActive`: Enable/disable the config (default: true) - `modeSandbox`: Sandbox mode (default: false) - `encryptionMode`: Encryption mode (default: \"fernet\") - \"fernet\": Server-side encryption only - \"double\": Client AES-256-GCM + Server Fernet (requires X-Encryption-Key header) **Double Encryption Mode**: When `encryptionMode` is set to \"double\", you MUST also provide the `X-Encryption-Key` header containing a base64-encoded AES-256 key (32 bytes). This key is used to encrypt the `clientSecret` on the client side before the server encrypts it again with Fernet. The server cannot decrypt the secret without the client key. **Security**: The `clientSecret` is stored encrypted on Django side and is never returned in API responses.
493
756
  # @param uid [String]
494
757
  # @param pdp_config_update_request [PDPConfigUpdateRequest]
495
758
  # @param [Hash] opts the optional parameters
759
+ # @option opts [String] :x_encryption_key Client encryption key for double encryption mode. Must be a base64-encoded AES-256 key (32 bytes). Required only when accessing resources encrypted with encryption_mode&#x3D;&#39;double&#39;.
496
760
  # @return [PDPConfigResponse]
497
761
  def update_pdp_config_api_v1_clients_uid_pdp_config_put(uid, pdp_config_update_request, opts = {})
498
762
  data, _status_code, _headers = update_pdp_config_api_v1_clients_uid_pdp_config_put_with_http_info(uid, pdp_config_update_request, opts)
@@ -500,10 +764,11 @@ module FactPulse
500
764
  end
501
765
 
502
766
  # Configure client PDP
503
- # Configure or update the PDP (PA/PDP) configuration for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Required fields**: - &#x60;flowServiceUrl&#x60;: PDP Flow Service URL - &#x60;tokenUrl&#x60;: PDP OAuth token URL - &#x60;oauthClientId&#x60;: OAuth Client ID - &#x60;clientSecret&#x60;: OAuth Client Secret (sent but NEVER returned) **Optional fields**: - &#x60;isActive&#x60;: Enable/disable the config (default: true) - &#x60;modeSandbox&#x60;: Sandbox mode (default: false) **Security**: The &#x60;clientSecret&#x60; is stored encrypted on Django side and is never returned in API responses.
767
+ # Configure or update the PDP (PA/PDP) configuration for a client. **Scope**: Client level (JWT with client_uid that must match {uid}) **Required fields**: - &#x60;flowServiceUrl&#x60;: PDP Flow Service URL - &#x60;tokenUrl&#x60;: PDP OAuth token URL - &#x60;oauthClientId&#x60;: OAuth Client ID - &#x60;clientSecret&#x60;: OAuth Client Secret (sent but NEVER returned) **Optional fields**: - &#x60;isActive&#x60;: Enable/disable the config (default: true) - &#x60;modeSandbox&#x60;: Sandbox mode (default: false) - &#x60;encryptionMode&#x60;: Encryption mode (default: \&quot;fernet\&quot;) - \&quot;fernet\&quot;: Server-side encryption only - \&quot;double\&quot;: Client AES-256-GCM + Server Fernet (requires X-Encryption-Key header) **Double Encryption Mode**: When &#x60;encryptionMode&#x60; is set to \&quot;double\&quot;, you MUST also provide the &#x60;X-Encryption-Key&#x60; header containing a base64-encoded AES-256 key (32 bytes). This key is used to encrypt the &#x60;clientSecret&#x60; on the client side before the server encrypts it again with Fernet. The server cannot decrypt the secret without the client key. **Security**: The &#x60;clientSecret&#x60; is stored encrypted on Django side and is never returned in API responses.
504
768
  # @param uid [String]
505
769
  # @param pdp_config_update_request [PDPConfigUpdateRequest]
506
770
  # @param [Hash] opts the optional parameters
771
+ # @option opts [String] :x_encryption_key Client encryption key for double encryption mode. Must be a base64-encoded AES-256 key (32 bytes). Required only when accessing resources encrypted with encryption_mode&#x3D;&#39;double&#39;.
507
772
  # @return [Array<(PDPConfigResponse, Integer, Hash)>] PDPConfigResponse data, response status code and response headers
508
773
  def update_pdp_config_api_v1_clients_uid_pdp_config_put_with_http_info(uid, pdp_config_update_request, opts = {})
509
774
  if @api_client.config.debugging
@@ -532,6 +797,7 @@ module FactPulse
532
797
  if !content_type.nil?
533
798
  header_params['Content-Type'] = content_type
534
799
  end
800
+ header_params[:'X-Encryption-Key'] = opts[:'x_encryption_key'] if !opts[:'x_encryption_key'].nil?
535
801
 
536
802
  # form parameters
537
803
  form_params = opts[:form_params] || {}
@@ -543,7 +809,7 @@ module FactPulse
543
809
  return_type = opts[:debug_return_type] || 'PDPConfigResponse'
544
810
 
545
811
  # auth_names
546
- auth_names = opts[:debug_auth_names] || ['HTTPBearer']
812
+ auth_names = opts[:debug_auth_names] || ['APIKeyHeader', 'HTTPBearer']
547
813
 
548
814
  new_options = opts.merge(
549
815
  :operation => :"ClientManagementApi.update_pdp_config_api_v1_clients_uid_pdp_config_put",