From 62d904423fa2092150c78822fc71f5abbf0f931d Mon Sep 17 00:00:00 2001 From: Felipe Lima Date: Wed, 4 Dec 2024 10:11:26 -0800 Subject: [PATCH 1/2] fix: Use base64 polyfill instead of Buffer --- src/events/sdk-key-decoder.spec.ts | 10 +++++++++- src/events/sdk-key-decoder.ts | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/events/sdk-key-decoder.spec.ts b/src/events/sdk-key-decoder.spec.ts index d2a3ca6..bf65ce3 100644 --- a/src/events/sdk-key-decoder.spec.ts +++ b/src/events/sdk-key-decoder.spec.ts @@ -1,14 +1,22 @@ import SdkKeyDecoder from './sdk-key-decoder'; describe('SdkKeyDecoder', () => { + const decoder = new SdkKeyDecoder(); it('should decode the event ingestion hostname from the SDK key', () => { - const decoder = new SdkKeyDecoder(); const hostname = decoder.decodeEventIngestionHostName( 'zCsQuoHJxVPp895.ZWg9MTIzNDU2LmUudGVzdGluZy5lcHBvLmNsb3Vk', ); expect(hostname).toEqual('123456.e.testing.eppo.cloud'); }); + it('should decode strings with non URL-safe characters', () => { + // this is not a really valid ingestion URL, but it's useful for testing the decoder + const invalidUrl = 'eh=12+3456/.e.testing.eppo.cloud'; + const encoded = Buffer.from(invalidUrl).toString('base64url'); + const hostname = decoder.decodeEventIngestionHostName(`zCsQuoHJxVPp895.${encoded}`); + expect(hostname).toEqual('12 3456/.e.testing.eppo.cloud'); + }); + it("should return null if the SDK key doesn't contain the event ingestion hostname", () => { const decoder = new SdkKeyDecoder(); expect(decoder.decodeEventIngestionHostName('zCsQuoHJxVPp895')).toBeNull(); diff --git a/src/events/sdk-key-decoder.ts b/src/events/sdk-key-decoder.ts index 8f01ac7..6853b8c 100644 --- a/src/events/sdk-key-decoder.ts +++ b/src/events/sdk-key-decoder.ts @@ -1,3 +1,5 @@ +import { Base64 } from 'js-base64'; + export default class SdkKeyDecoder { /** * Decodes and returns the event ingestion hostname from the provided Eppo SDK key string. @@ -7,7 +9,7 @@ export default class SdkKeyDecoder { const encodedPayload = sdkKey.split('.')[1]; if (!encodedPayload) return null; - const decodedPayload = Buffer.from(encodedPayload, 'base64url').toString('utf-8'); + const decodedPayload = Base64.decode(encodedPayload); const params = new URLSearchParams(decodedPayload); return params.get('eh'); } From bf8c04da5a50401aa704e2430dbf9a5f8ce9c23b Mon Sep 17 00:00:00 2001 From: Felipe Lima Date: Wed, 4 Dec 2024 10:14:57 -0800 Subject: [PATCH 2/2] version bump --- package.json | 2 +- src/events/sdk-key-decoder.spec.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index c2c01d0..4197aee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eppo/js-client-sdk-common", - "version": "4.5.3", + "version": "4.5.4", "description": "Eppo SDK for client-side JavaScript applications (base for both web and react native)", "main": "dist/index.js", "files": [ diff --git a/src/events/sdk-key-decoder.spec.ts b/src/events/sdk-key-decoder.spec.ts index bf65ce3..db6ea4d 100644 --- a/src/events/sdk-key-decoder.spec.ts +++ b/src/events/sdk-key-decoder.spec.ts @@ -18,7 +18,6 @@ describe('SdkKeyDecoder', () => { }); it("should return null if the SDK key doesn't contain the event ingestion hostname", () => { - const decoder = new SdkKeyDecoder(); expect(decoder.decodeEventIngestionHostName('zCsQuoHJxVPp895')).toBeNull(); expect(decoder.decodeEventIngestionHostName('zCsQuoHJxVPp895.xxxxxx')).toBeNull(); });