diff --git a/CloudObjects/SDK/Helpers/SDKLoader.php b/CloudObjects/SDK/Helpers/SDKLoader.php index 2efc6ba..f3f2b81 100644 --- a/CloudObjects/SDK/Helpers/SDKLoader.php +++ b/CloudObjects/SDK/Helpers/SDKLoader.php @@ -27,20 +27,47 @@ class SDKLoader { $this->reader = new NodeReader; } + /** + * Initialize the SDK with the given name and options; used for + * SDKs that are initialized with a function and not a class name. + * + * @param string $sdkName The name of the SDK to initialize. + * @param array $options Additional options for the SDK (if necessary). + * @return mixed The return value of the SDK initialization, which may vary depending on the SDK. + * @throws Exception If the SDK is not supported or cannot be initialized. + */ + public function init(string $sdkName, array $options = []) : mixed { + $namespace = $this->objectRetriever->getAuthenticatingNamespaceCloudObject(); + + switch (strtolower($sdkName)) { + case "sentry": + // --- Sentry (https://sentry.io/) --- + $initFunction = '\Sentry\init'; + return $initFunction(array_merge([ + 'dsn' => $namespace->getString('coid://sentry.io.3rd-party.co/DSN') + ], $options)); + + default: + throw new Exception("No rules defined to initialize SDK with name <".$sdkName.">."); + } + } + /** * Initialize and return the SDK with the given classname. * Throws Exception if the SDK is not supported. * - * @param $classname Classname for the SDK's main class - * @param array $options Additional options for the SDK (if necessary) + * @param string $classname Classname for the SDK's main class. + * @param array $options Additional options for the SDK (if necessary). + * @return mixed The initialized SDK instance. + * @throws Exception If the SDK is not supported or cannot be initialized. */ - public function get($classname, array $options) { + public function get(string $classname, array $options) : mixed { if (!class_exists($classname)) throw new Exception("<".$classname."> is not a valid classname."); $hashkey = md5($classname.serialize($options)); if (!isset($this->classes[$hashkey])) { - $nsNode = $this->objectRetriever->getAuthenticatingNamespaceObject(); + $nsNode = $this->objectRetriever->getAuthenticatingNamespaceObjectNode(); // --- Amazon Web Services (https://aws.amazon.com/) --- // has multiple classnames, so check for common superclass