
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
ibm-eventnotifications
Advanced tools
Python client library to interact with various IBM Cloud Event Notifications APIs.
The IBM Cloud Event Notifications Python SDK allows developers to programmatically interact with Event Notifications service in IBM cloud.
Service Name | Module Name | Imported Class Name |
---|---|---|
Event Notifications Service | ibm_eventnotifications | EventNotificationsV1 |
To install, use pip or easy_install:
pip install --upgrade "ibm_eventnotifications>=0.19.0"
or
easy_install --upgrade "ibm_eventnotifications>=0.19.0"
Initialize the sdk to connect with your Event Notifications service instance.
from ibm_eventnotifications.event_notifications_v1 import EventNotificationsV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
# Create an IAM authenticator.
authenticator = IAMAuthenticator('<iam-api-key>')
# Construct the service client.
event_notifications_service = EventNotificationsV1(authenticator=authenticator)
# Set our custom service URL (optional)
event_notifications_service.set_service_url('https://' + region + '.event-notifications.cloud.ibm.com/event-notifications')
To configure service URL for Private Endpoint
If you enabled service endpoints in your account, you can send API requests over the IBM Cloud private network. In the initialisation, the base endpoint URLs of the IAM(authenticator) & Event Notification(service) should be modified to point to private endpoints.
# Create an IAM authenticator.
authenticator = IAMAuthenticator('<iam-api-key>', 'https://private.iam.cloud.ibm.com')
# Construct the service client.
event_notifications_service = EventNotificationsV1(authenticator=authenticator)
# To configure service URL for Private Endpoint
event_notifications_service.set_service_url('https://private.' + region + '.event-notifications.cloud.ibm.com/event-notifications')
EVENT_NOTIFICATIONS_AUTH_URL = https://private.iam.cloud.ibm.com/identity/token
SDK Methods to consume
source_response = event_notifications_service.create_sources(
<instance-id>, # Event notifications service instance GUID
name=<source-name>,
description=<source-description>,
enabled=False
).get_result()
print(json.dumps(source_response, indent=2))
source_list = event_notifications_service.list_sources(
<instance-id>, # Event notifications service instance GUID
).get_result()
print(json.dumps(source_list, indent=2))
source = event_notifications_service.get_source(
<instance-id>, # Event notifications service instance GUID
id=<source-id>, # Event notifications service instance Source ID
).get_result()
print(json.dumps(source, indent=2))
source = event_notifications_service.update_source(
<instance-id>, # Event notifications service instance GUID
id=<source-id>, # Event notifications service instance Source ID
name=<source-name>,
description=<source-description>,
enabled=True
).get_result()
print(json.dumps(source, indent=2))
response = event_notifications_service.delete_source(
<instance-id>, # Event notifications service instance GUID
id=<source-id>, # Event notifications service instance Source ID
)
Filters applied in case of periodic-timer as source. EventTypeFilter, NotificationFilter are mutually exclusive with EventScheduleFilter
event_schedule_filter_attributes_model = {
'starts_at': '2025-01-01T05:15:00.000Z',
'ends_at': '2025-01-01T05:15:00.000Z',
'expression': '* * * * *'
}
rules_model = {
"enabled": True,
"event_schedule_filter": event_schedule_filter_attributes_model,
}
rules_model = {
'enabled': False,
'event_type_filter': '$.notification_event_info.event_type == \'cert_manager\'', #Add your event type filter here.
'notification_filter': '$.notification.findings[0].severity == \'MODERATE\'', #Add your notification filter here.
}
# Construct a dict representation of a TopicUpdateSourcesItem model
topic_update_sources_item_model = {
'id': <source_id>,
'rules': [rules_model],
}
topic_response = event_notifications_service.create_topic(
<instance_id>,
name=<topic-name>,
description=<topic-description>,
sources=[topic_update_sources_item_model]
)
print(json.dumps(topic_response, indent=2))
topic_list = event_notifications_service.list_topics(
<instance-id>,
).get_result()
print(json.dumps(topic_list, indent=2))
topic = event_notifications_service.get_topic(
<instance-id>, # Event notifications service instance GUID
id=<topic-id>, # Event notifications service instance Topic ID
).get_result()
print(json.dumps(topic, indent=2))
rules_model = {
'enabled': True,
'event_type_filter': '$.notification_event_info.event_type == \'core_cert_manager\'',
'notification_filter': '$.notification.findings[0].severity == \'SEVERE\'',
}
# Construct a dict representation of a TopicUpdateSourcesItem model
topic_update_sources_item_model = {
'id': <source-id>, # Event notifications service instance Source ID
'rules': [rules_model],
}
description = "Updated Topic for GCM notifications"
name = 'Updated Admin Topic Compliance'
topic = event_notifications_service.replace_topic(
<instance-id>, # Event notifications service instance GUID
id=<topic-id>, # Event notifications service instance Topic ID
name=<topic-update-name> # Event notifications service instance Topic Name
description=<topic-update-description> # Event notifications service instance Topic description
sources=[topic_update_sources_item_model]
)
print(json.dumps(topic, indent=2))
rulesModel := &eventnotificationsv1.Rules{
Enabled: core.BoolPtr(true),
EventTypeFilter: core.StringPtr("$.notification_event_info.event_type == 'core_cert_manager'"), # Add your event type filter here.
NotificationFilter: core.StringPtr("$.notification.findings[0].severity == 'SEVERE'"), # Add your notification filter here.
}
response = event_notifications_service.delete_topic(
<instance-id>,
id=<topic-id>,
)
destination_config_params_model = {
'url': '<destination-config-url>',
'verb': '<destination-config-verb>',
'custom_headers': {'<header-key>': '<header-value>', },
'sensitive_headers': ['<header-key>'],
}
# Construct a dict representation of a DestinationConfig model
destination_config_model = {
'params': destination_config_params_model,
}
destination = event_notifications_service.create_destination(
<instance-id>,
<destination-name>,
type=<destination-type>,
description=description,
config=destination_config_model
).get_result()
print(json.dumps(destination, indent=2))
Among the supported destinations, if you need to create Push Notification destinations, you have the additional option of choosing a destination of production type or pre-production type.
Set pre_prod
boolean parameter to true to configure destination as pre-production destination else set the value as false.
Supported destinations are Android, iOS, Chrome, Firefox, and Safari.
destination_list = event_notifications_service.list_destinations(
<instance-id>,
).get_result()
print(json.dumps(destination_list, indent=2))
destination = event_notifications_service.get_destination(
<instance-id>, # Event notifications service instance GUID
id=<destination-id>, # Event notifications service instance Destination ID
).get_result()
print(json.dumps(destination, indent=2))
# Construct a dict representation of a DestinationConfigParamsWebhookDestinationConfig model
destination_config_params_model = {
'url': '<destination-config-update-url>',
'verb': '<destination-config-update-verb>',
'sensitive_headers': ['<header-key>'],
}
# Construct a dict representation of a DestinationConfig model
destination_config_model = {
'params': destination_config_params_model,
}
destination = event_notifications_service.update_destination(
<instance-id>, # Event notifications service instance GUID
id=<destination-id>, # Event notifications service instance Destination ID
name=<destination-update-name>,
description=<destination-update-description>,
config=destination_config_model
).get_result()
print(json.dumps(destination, indent=2))
response = event_notifications_service.delete_destination(
<instance-id>, # Event notifications service instance GUID
id=<destination-id>, # Event notifications service instance Destination ID
)
This functionality allows you to test a destination. The feature simplifies the process of verifying whether a destination is functioning correctly. Currently, this functionality supports following destinations:
test_destination_response = event_notifications_service.test_destination(
<instance-id>,
id=<destination-id>
)
Once the test is completed, you will be presented with the results. These results will typically include:
In case of webhook
destination test response also returns notification_id, the status of notification_id will represent the webhook test result. Follow below additional steps to get status result of webhook destination test
webhook_notification_status = event_notifications_service.get_notifications_status(
instance_id,
id=<notification-id>
)
webhook_status = webhook_notification_status.get_result()
The response of get_notifications_status
will have success, failed or inprogress status. The Notification ID will be valid only for 1 minute to fetch the status of test. The status response as success will conclude successful test of webhook destination
After creation of the custom email destination with your domain name, make sure its validated for the right ownership. This can be done with SPF and DKIM verification.
verification_response = event_notifications_service.update_verify_destination(
<instance-id>, # Event notifications service instance GUID
id=<destination-id>, # Event notifications service instance Destination ID
type=<verification-type>, # verification type spf/dkim
).get_result()
Template is a pre-defined layout, that may include content like images, text and dynamic content based on event. Rather than creating a new content from scratch each time, you can use a template as a base and configure them in subscription. supports the following templates:
template_config_model = {
'body': 'base 64 encoded html content',
'subject': 'Hi this is invitation for invitation message',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For custom email supported template type values: smtp_custom.invitation, smtp_custom.notification
template_config_model = {
'body': 'base 64 encoded json body',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For slack template supported template type value: slack.notification
template_config_model = {
'body': 'base 64 encoded json body',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For webhook template supported template type value: webhook.notification
template_config_model = {
'body': 'base 64 encoded json body',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For pagerduty template supported template type value: pagerduty.notification
template_config_model = {
'body': 'base 64 encoded json body',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For Event Streams template supported template type value: event_streams.notification
template_config_model = {
'body': 'base 64 encoded json body',
}
create_template_response = event_notifications_service.create_template(
instance_id=<instance-id>,
name=<template-name>,
type=<template-type>,
params=template_config_model,
description=<template-description>
).get_result()
For Code Engine template supported template type values: ibmceapp.notification and ibmcejob.notification
list_templates_response = event_notifications_service.list_templates(
instance_id=<instance-id>,
limit=<limit>,
offset=<offset>,
search=<search>
)
templates_list = list_templates_response.get_result()
get_template_response = event_notifications_service.get_template(
instance_id=<instance-id>,
id=<template_id>
).get_result()
list_predefined_templates_response = self.event_notifications_service.list_pre_defined_templates(
instance_id=<instance-id>,
source=<source-type>,
type=<destination-type>,
)
list_predefined_templates = list_predefined_templates_response.get_result()
get_predefined_template_response = self.event_notifications_service.get_pre_defined_template(
instance_id=<instance-id>,
id=<template_id>,
)
get_predefined_template = get_predefined_template_response.get_result()
template_config_model = {
'body': 'base 64 encode html content',
'subject': 'Hi this is invitation for invitation message',
}
replace_template_response = event_notifications_service.replace_template(
instance_id=<instance-id>,
id=<template_id>
name=<template_name>,
type=<template-type>,
description=<template-description>,
params=template_config_model
).get_result()
template_config_model = {
'body': 'base 64 encode json content',
}
replace_template_response = event_notifications_service.replace_template(
instance_id=<instance-id>,
id=<template_id>
name=<template_name>,
type=<template-type>,
description=<template-description>,
params=template_config_model
).get_result()
For webhook template supported template type value: webhook.notification For pagerduty template supported template type value: pagerduty.notification
template_config_model = {
'body': 'base 64 encode json content',
}
replace_template_response = event_notifications_service.replace_template(
instance_id=<instance-id>,
id=<template_id>
name=<template_name>,
type=<template-type>,
description=<template-description>,
params=template_config_model
).get_result()
For Event Streams template supported template type value: event_streams.notification
template_config_model = {
'body': 'base 64 encode json content',
}
replace_template_response = event_notifications_service.replace_template(
instance_id=<instance-id>,
id=<template_id>
name=<template_name>,
type=<template-type>,
description=<template-description>,
params=template_config_model
).get_result()
For Code Engine template supported template type values: ibmceapp.notification and ibmcejob.notification
delete_template_response = event_notifications_service.delete_template(
instance_id=<instance-id>,
id=<template_id>
).get_result()
tag_subscription = _event_notifications_service.create_tags_subscription(
<instance-id>, # Event notifications service instance GUID
<destination-id>, # Event notifications service Destintaion ID
<device_id>, # Event notifications service Device ID
<tag_name> # Event notifications service Tag Name
).get_result()
print(json.dumps(tag_subscription, indent=2))
subscription = _event_notifications_service.list_tags_subscription(
<instance-id>, # Event notifications service instance GUID
<destination-id> # Event notifications service Destintaion ID
).get_result()
print(json.dumps(subscription, indent=2))
response = _event_notifications_service.delete_tags_subscription(
<instance-id>, # Event notifications service instance GUID
<destination-id>, # Event notifications service Destintaion ID
<device_id>, # Event notifications service Device ID
<tag_name> # Event notifications service Tag Name
).get_result()
print(json.dumps(response, indent=2))
#`While Creating Subscription use any of one option from webhook, or email`
subscription_create_attributes_model = {
'signing_enabled': False,
'template_id_notification': '<webhook-template-id>',
}
subscription = event_notifications_service.create_subscription(
<instance-id>, # Event notifications service instance GUID
name,
<destination-id>, # Event notifications service instance Destination ID
<topic-id> # Event notifications service instance Topic ID
attributes=subscription_create_attributes_model,
description=<subscription-description>
).get_result()
print(json.dumps(subscription, indent=2))
subscription_list = event_notifications_service.list_subscriptions(
<instance-id>, # Event notifications service instance GUID
).get_result()
print(json.dumps(subscription_list, indent=2))
subscription = event_notifications_service.get_subscription(
<instance-id>, # Event notifications service instance GUID
id=<subscription-id>, # Event notifications service instance Subscription ID
).get_result()
print(json.dumps(subscription, indent=2))
subscription_update_attributes_model = {
'signing_enabled': True,
'template_id_notification': '<webhook-template-id>',
}
subscription = event_notifications_service.update_subscription(
<instance-id>, # Event notifications service instance GUID
id=<subscription-id>, # Event notifications service instance Subscription ID
name=<subscription-update-name>,
description=<subscription-update-description>,
attributes=subscription_update_attributes_model
).get_result()
print(json.dumps(subscription, indent=2))
response = event_notifications_service.delete_subscription(
<instance-id>, # Event notifications service instance GUID
id=<subscription-id>, # Event notifications service instance Subscriptions ID
)
integration_metadata = {
"endpoint": cos_end_point,
"crn": cos_instance_crn,
"bucket_name": cos_bucket_name,
}
create_integration_response = self.event_notifications_service.create_integration(
instance_id,
type="collect_failed_events",
metadata=integration_metadata,
)
integration_response = create_integration_response.get_result()
list_integrations_response = event_notifications_service.list_integrations(
<instance-id>,
<limit>,
<offset>,
<search>,
)
integration_response = list_integrations_response.get_result()
get_integration_response = event_notifications_service.get_integration(
<instance_id>,
id=<integration_id>
)
integration_response = get_integration_response.get_result()
For kms/hs-crypto
integration_metadata = {
'endpoint': '<end-point>',
'crn': '<crn>',
'root_key_id': '<root-key-id>'
}
update_integration_response = event_notifications_service.replace_integration(
<instance_id>,
type="kms/hs-crypto",
id=<integration_id>,
metadata=integration_metadata
)
integration_response = update_integration_response.get_result()
For Cloud Object Storage
integration_metadata = {
'endpoint': '<end-point>',
'crn': '<crn>',
'bucket-name': '<cos-bucket-name>'
}
update_integration_response = event_notifications_service.replace_integration(
<instance_id>,
type="collect_failed_events",
id=<integration_id>,
metadata=integration_metadata
)
integration_response = update_integration_response.get_result()
create_smtp_config_response = self.event_notifications_service.create_smtp_configuration(
instance_id=<instance_id>,
name=<smtp-config-name>,
domain=<smtp-domain-name>,
description=<smtp-description>
)
smtp_response = create_smtp_config_response.get_result()
create_smtp_user_response = self.event_notifications_service.create_smtp_user(
instance_id=<instance-id>,
id=<smtp-config-id>,
description=<smtp-description>
)
create_user_response = create_smtp_user_response.get_result()
get_smtp_config_response = self.event_notifications_service.get_smtp_configuration(
instance_id=<instance-id>,
id=<smtp_config_id>,
)
get_smtp_config_response = get_smtp_config_response.get_result()
get_smtp_user_response = self.event_notifications_service.get_smtp_user(
instance_id=<instance-id>,
id=<smtp_config_id>,
user_id=<smtp_user_id>
)
get_smtp_user_response = get_smtp_user_response.get_result()
get_smtp_allowed_ip_response = self.event_notifications_service.get_smtp_allowed_ips(
instance_id=<instance-id>,
id=<smtp_config_id>,
)
get_smtp_allowed_ip_response = get_smtp_allowed_ip_response.get_result()
list_smtp_config_response = self.event_notifications_service.list_smtp_configurations(
instance_id=<instance-id>,
limit=<limit>,
offset=<offset>,
search=<search>,
)
list_smtp_config_response = list_smtp_config_response.get_result()
list_smtp_user_response = self.event_notifications_service.list_smtp_users(
instance_id=<instance-id>,
id=<smtp_config_id>,
limit=<limit>,
offset=<offset>,
search=<search>,
)
list_smtp_user_response = list_smtp_user_response.get_result()
update_smtp_config_response = self.event_notifications_service.update_smtp_configuration(
instance_id=<instance-id>,
id=<smtp_config_id>,
name=<smtp-name>,
description=<smtp-description>,
)
update_smtp_config_response = update_smtp_config_response.get_result()
update_smtp_user_response = self.event_notifications_service.update_smtp_user(
instance_id=<instance-id>,
id=<smtp_config_id>,
user_id=<smtp_user_id>,
description=<smtp-description>,
)
update_smtp_user_response = update_smtp_user_response.get_result()
delete_smtp_user_response = self.event_notifications_service.delete_smtp_user(
instance_id=<instance-id>,
id=<smtp_config_id>,
user_id=<user-id>
)
print(json.dumps(delete_smtp_user_response, indent=2))
delete_smtp_config_response = self.event_notifications_service.delete_smtp_configuration(
instance_id=<instance-id>,
id=<smtp_config_id>,
)
print(json.dumps(delete_smtp_config_response, indent=2))
update_verify_smtp_response = self.event_notifications_service.update_verify_smtp(
instance_id=<instance-id>,
type=<verification-type>,
id=<smtp_config_id>
)
verify_response = update_verify_smtp_response.get_result()
supported verification types are dkim,spf and en_authorization.
get_metrics_response = self.event_notifications_service.get_metrics(
instance_id=<instance-id>,
destination_type="smtp_custom",
gte=<gte-timestamp>,
lte=<lte-timestamp>,
destination_id=<destination-id>,
email_to=<email-to>,
notification_id=<notification-id>,
subject=<subject>
)
metric_response = get_metrics_response.get_result()
notification_devices_model = {
'fcm_devices': ['<fcm-device-ids>'],
'apns_devices': ['<apns-device-ids>'],
'user_ids': ['<user-ids>'],
'tags': ['<tag-names>'],
'platforms': ['<device-platforms>'],
}
notification_apns_body_model = {
"aps": {
"alert": "<notification-message>",
"badge": 5,
},
}
notification_fcm_body_model = {
'message': {
'android': {
'notification': {
'title': '<notification-title>',
'body': '<notification-message>',
},
'data': {
'name': 'Robert',
'description': 'notification for the Poker',
},
},
},
}
message_apns_headers = {
"apns-collapse-id": "<apns-apns-collapse-id-value>",
}
notificationSafariBodymodel = {
'saf': {
'alert': 'Game Request',
'badge': 5,
},
}
notification_id = "<notification-id>"
notification_severity = "<notification-severity>"
type_value = "<notification-type>"
notifications_source = "<notification-source>"
htmlbody = '"Hi ,<br/>Certificate expiring in 90 days.<br/><br/>Please login to ' \
'<a href="https: //cloud.ibm.com/security-compliance/dashboard">' \
'Security and Complaince dashboard</a> to find more information<br/>"'
mailto = '[\"abc@ibm.com\", \"def@us.ibm.com\"]'
smsto = '[\"+911234567890\", \"+911224567890\"]'
slackto = '[\"C07FALXBH4G\"]'
mms = '{"content": "akajdklahl", "content_type": "image/png"}'
templates = '["149b0e11-8a7c-4fda-a847-5d79e01b71dc"]'
markdown_content = "**Event Summary** \n\n**Toolchain ID:** `4414af34-a5c7-47d3-8f05-add4af6d78a6` \n**Content Type:** `application/json`\n\n---\n\n *Pipeline Run Details*\n\n- **Namespace:** `PR`\n- **Trigger Name:** `manual`\n- **Triggered By:** `nitish.kulkarni3@ibm.com`\n- **Build Number:** `343`\n- **Pipeline Link:** [View Pipeline Run](https://cloud.ibm.com/devops/pipelines/tekton/e9cd5aa3-a3f2-4776-8acc-26a35922386e/runs/f29ac6f5-bd2f-4a26-abb8-4249be8dbab7?env_id=ibm:yp:us-south)"
notification_create_model = {
'ibmenseverity': notification_severity,
'ibmenfcmbody': json.dumps(notification_fcm_body_model),
'ibmenpushto': json.dumps(notification_devices_model),
'ibmenapnsbody': json.dumps(notification_apns_body_model),
'ibmensourceid': source_id,
'ibmendefaultshort': 'short info',
'ibmendefaultlong': 'long info',
'ibmensafaribody': json.dumps(notificationSafariBodymodel),
'ibmenhtmlbody': htmlbody,
"ibmenmarkdown": markdown_content,
'ibmensubject': 'Findings on IBM Cloud Security Advisor',
'ibmenmailto': mailto,
'ibmensmsto': smsto,
'ibmenslackto': slackto,
'ibmenmms': mms,
"ibmentemplates": templates,
'id': notification_id,
'source': notifications_source,
'type': type_value,
'specversion': '1.0',
'time': '2019-01-01T12:00:00.000Z',
}
send_notifications_response = event_notifications_service.send_notifications(
instance_id,
body=notification_create_model
).get_result()
1.0
.Note: variable with * represents the mandatory attribute.
Find event_notifications_v1.env.hide
in the repo and rename it to event_notifications_v1.env
. After that add the values for,
EVENT_NOTIFICATIONS_URL
- Add the Event Notifications service instance Url.EVENT_NOTIFICATIONS_APIKEY
- Add the Event Notifications service instance apikey.EVENT_NOTIFICATIONS_GUID
- Add the Event Notifications service instance GUID.Optional
EVENT_NOTIFICATIONS_AUTH_URL
- Add the IAM url if you are using IBM test cloud.
EVENT_NOTIFICATIONS_FCM_KEY
- Add firebase server key for Android FCM destination.
EVENT_NOTIFICATIONS_FCM_ID
- Add firebase sender Id for Android FCM destination.
EVENT_NOTIFICATIONS_FCM_PROJECT_ID
- fcm project id
EVENT_NOTIFICATIONS_FCM_CLIENT_EMAIL
- fcm client email
EVENT_NOTIFICATIONS_FCM_PRIVATE_KEY
- fcm private key
EVENT_NOTIFICATIONS_SAFARI_CERTIFICATE
- safari certificate path
EVENT_NOTIFICATIONS_SNOW_CLIENT_ID
- service now client id
EVENT_NOTIFICATIONS_SNOW_CLIENT_SECRET
- service now client secret
EVENT_NOTIFICATIONS_SNOW_USER_NAME
- service now user name
EVENT_NOTIFICATIONS_SNOW_PASSWORD
- service now password
EVENT_NOTIFICATIONS_SNOW_INSTANCE_NAME
- service now instance name
EVENT_NOTIFICATIONS_COS_BUCKET_NAME
- cloud object storage bucket name
EVENT_NOTIFICATIONS_COS_INSTANCE
- cloud object storage instance id
EVENT_NOTIFICATIONS_COS_INSTANCE_CRN
- cloud object storage instance crn
EVENT_NOTIFICATIONS_COS_ENDPOINT
- cloud object storage end point
EVENT_NOTIFICATIONS_CODE_ENGINE_URL
- code engine app url
EVENT_NOTIFICATIONS_CODE_ENGINE_PROJECT_CRN
- code engine project crn
EVENT_NOTIFICATIONS_HUAWEI_CLIENT_SECRET
- huawei client secret
EVENT_NOTIFICATIONS_HUAWEI_CLIENT_ID
- huawei client id
EVENT_NOTIFICATIONS_SLACK_URL
- slack webhook url
EVENT_NOTIFICATIONS_MS_TEAMS_URL
- msteams webhook url
EVENT_NOTIFICATIONS_PD_ROUTING_KEY
- pagerduty routing key
EVENT_NOTIFICATIONS_PD_API_KEY
- pagerduty api key
EVENT_NOTIFICATIONS_TEMPLATE_BODY
- base 64 encoded html content
EVENT_NOTIFICATIONS_SLACK_TEMPLATE_BODY
- base 64 encoded json body
EVENT_NOTIFICATIONS_WEBHOOK_TEMPLATE_BODY
- base 64 encoded json body
EVENT_NOTIFICATIONS_SCHEDULER_SOURCE_ID
- periodic timer source id
EVENT_NOTIFICATIONS_PAGERDUTY_TEMPLATE_BODY
- base 64 encoded json body for pagerduty destination
EVENT_NOTIFICATIONS_EVENT_STREAMS_TEMPLATE_BODY
- base 64 encoded json body for event streams destination
EVENT_NOTIFICATIONS_EVENT_STREAMS_CRN
- Event Streams instance CRN
EVENT_NOTIFICATIONS_EVENT_STREAMS_TOPIC
- Event Streams instance Topic name
EVENT_NOTIFICATIONS_EVENT_STREAMS_ENDPOINT
- Event streams end point
EVENT_NOTIFICATIONS_CODE_ENGINE_APP_TEMPLATE_BODY
- base 64 encoded json body for Code Engine Application
EVENT_NOTIFICATIONS_CODE_ENGINE_JOB_TEMPLATE_BODY
- base 64 encoded json body for Code Engine Job
If you are having difficulties using this SDK or have a question about the IBM Cloud services, please ask a question Stack Overflow.
If you encounter an issue with the project, you are welcome to submit a bug report. Before that, please search for similar issues. It's possible that someone has already reported the problem.
The following attribute from interface DestinationConfigOneOfPagerDutyDestinationConfig is deprecated and will be removed in a future release:
api_key
This attribute no longer recommended for use and may not be supported in upcoming versions of the SDK. Only routing_key
is expected to be passed.
Find more open source projects on the IBM Github Page
See CONTRIBUTING.md.
This SDK is released under the Apache 2.0 license. The license's full text can be found in LICENSE.
FAQs
Python server SDK for IBM Cloud Event Notifications service
We found that ibm-eventnotifications demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.