glitch-javascript-sdk 1.8.0 → 1.8.2

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.
package/dist/esm/index.js CHANGED
@@ -6693,6 +6693,35 @@ var AdsRoute = /** @class */ (function () {
6693
6693
  url: "/ads/campaigns/{campaign_id}/groups/{group_id}/triggers/{trigger_id}",
6694
6694
  method: HTTP_METHODS.DELETE,
6695
6695
  },
6696
+ // REDDIT TARGETING routes
6697
+ getRedditCarriers: {
6698
+ url: "/ads/reddit/targeting/carriers",
6699
+ method: HTTP_METHODS.GET,
6700
+ },
6701
+ getRedditCommunities: {
6702
+ url: "/ads/reddit/targeting/communities",
6703
+ method: HTTP_METHODS.GET,
6704
+ },
6705
+ searchRedditCommunities: {
6706
+ url: "/ads/reddit/targeting/communities/search",
6707
+ method: HTTP_METHODS.GET,
6708
+ },
6709
+ getRedditDevices: {
6710
+ url: "/ads/reddit/targeting/devices",
6711
+ method: HTTP_METHODS.GET,
6712
+ },
6713
+ getRedditGeolocations: {
6714
+ url: "/ads/reddit/targeting/geolocations",
6715
+ method: HTTP_METHODS.GET,
6716
+ },
6717
+ getRedditInterests: {
6718
+ url: "/ads/reddit/targeting/interests",
6719
+ method: HTTP_METHODS.GET,
6720
+ },
6721
+ getRedditThirdPartyAudiences: {
6722
+ url: "/ads/reddit/targeting/third_party_audiences",
6723
+ method: HTTP_METHODS.GET,
6724
+ },
6696
6725
  };
6697
6726
  return AdsRoute;
6698
6727
  }());
@@ -6980,6 +7009,51 @@ var Ads = /** @class */ (function () {
6980
7009
  Ads.listCampaignFundingInstruments = function (campaign_id, params) {
6981
7010
  return Requests.processRoute(AdsRoute.routes.getCampaignFundingInstruments, undefined, { campaign_id: campaign_id }, params);
6982
7011
  };
7012
+ /**
7013
+ * GET /ads/reddit/targeting/carriers
7014
+ *
7015
+ * Example usage:
7016
+ * Ads.listRedditCarriers({ scheduler_id: 'uuid-of-scheduler', 'page.size': 50 })
7017
+ */
7018
+ Ads.listRedditCarriers = function (params) {
7019
+ return Requests.processRoute(AdsRoute.routes.getRedditCarriers, undefined, undefined, params);
7020
+ };
7021
+ /**
7022
+ * GET /ads/reddit/targeting/communities?names=sub1,sub2
7023
+ */
7024
+ Ads.listRedditCommunities = function (params) {
7025
+ return Requests.processRoute(AdsRoute.routes.getRedditCommunities, undefined, undefined, params);
7026
+ };
7027
+ /**
7028
+ * GET /ads/reddit/targeting/communities/search?query=xyz
7029
+ */
7030
+ Ads.searchRedditCommunities = function (params) {
7031
+ return Requests.processRoute(AdsRoute.routes.searchRedditCommunities, undefined, undefined, params);
7032
+ };
7033
+ /**
7034
+ * GET /ads/reddit/targeting/devices
7035
+ */
7036
+ Ads.listRedditDevices = function (params) {
7037
+ return Requests.processRoute(AdsRoute.routes.getRedditDevices, undefined, undefined, params);
7038
+ };
7039
+ /**
7040
+ * GET /ads/reddit/targeting/geolocations
7041
+ */
7042
+ Ads.listRedditGeolocations = function (params) {
7043
+ return Requests.processRoute(AdsRoute.routes.getRedditGeolocations, undefined, undefined, params);
7044
+ };
7045
+ /**
7046
+ * GET /ads/reddit/targeting/interests
7047
+ */
7048
+ Ads.listRedditInterests = function (params) {
7049
+ return Requests.processRoute(AdsRoute.routes.getRedditInterests, undefined, undefined, params);
7050
+ };
7051
+ /**
7052
+ * GET /ads/reddit/targeting/third_party_audiences
7053
+ */
7054
+ Ads.listRedditThirdPartyAudiences = function (params) {
7055
+ return Requests.processRoute(AdsRoute.routes.getRedditThirdPartyAudiences, undefined, undefined, params);
7056
+ };
6983
7057
  return Ads;
6984
7058
  }());
6985
7059
 
@@ -12094,6 +12168,7 @@ var SchedulerRoute = /** @class */ (function () {
12094
12168
  getSchedulePosts: { url: '/schedulers/{scheduler_id}/posts', method: HTTP_METHODS.GET },
12095
12169
  // Title Update Routes
12096
12170
  listUpdates: { url: '/schedulers/{scheduler_id}/updates', method: HTTP_METHODS.GET },
12171
+ searchUpdates: { url: '/schedulers/{scheduler_id}/updates/search', method: HTTP_METHODS.GET },
12097
12172
  createUpdate: { url: '/schedulers/{scheduler_id}/updates', method: HTTP_METHODS.POST },
12098
12173
  getUpdate: { url: '/schedulers/{scheduler_id}/updates/{update_id}', method: HTTP_METHODS.GET },
12099
12174
  updateUpdate: { url: '/schedulers/{scheduler_id}/updates/{update_id}', method: HTTP_METHODS.PUT },
@@ -12111,6 +12186,7 @@ var SchedulerRoute = /** @class */ (function () {
12111
12186
  clearTwitchAuth: { url: '/schedulers/{scheduler_id}/clearTwitchAuth', method: HTTP_METHODS.DELETE },
12112
12187
  clearKickAuth: { url: '/schedulers/{scheduler_id}/clearKickAuth', method: HTTP_METHODS.DELETE },
12113
12188
  clearRedditAuth: { url: '/schedulers/{scheduler_id}/clearRedditAuth', method: HTTP_METHODS.DELETE },
12189
+ clearRedditAdsAuth: { url: '/schedulers/{scheduler_id}/clearRedditAdsAuth', method: HTTP_METHODS.DELETE },
12114
12190
  clearYouTubeAuth: { url: '/schedulers/{scheduler_id}/clearYouTubeAuth', method: HTTP_METHODS.DELETE },
12115
12191
  clearPatreonAuth: { url: '/schedulers/{scheduler_id}/clearPatreonAuth', method: HTTP_METHODS.DELETE },
12116
12192
  clearPinterestAuth: { url: '/schedulers/{scheduler_id}/clearPinterestAuth', method: HTTP_METHODS.DELETE },
@@ -12278,6 +12354,18 @@ var Scheduler = /** @class */ (function () {
12278
12354
  Scheduler.listUpdates = function (scheduler_id, params) {
12279
12355
  return Requests.processRoute(SchedulerRoute.routes.listUpdates, {}, { scheduler_id: scheduler_id }, params);
12280
12356
  };
12357
+ /**
12358
+ * Search the updates related to a promotion schedule.
12359
+ *
12360
+ * @see https://api.glitch.fun/api/documentation#/Scheduler/searchTitleUpdates
12361
+ *
12362
+ * @param scheduler_id The ID of the promotion schedule.
12363
+ *
12364
+ * @returns promise
12365
+ */
12366
+ Scheduler.searchUpdates = function (scheduler_id, params) {
12367
+ return Requests.processRoute(SchedulerRoute.routes.listUpdates, {}, { scheduler_id: scheduler_id }, params);
12368
+ };
12281
12369
  /**
12282
12370
  * Create a new title update for a promotion schedule.
12283
12371
  *
@@ -12417,6 +12505,15 @@ var Scheduler = /** @class */ (function () {
12417
12505
  Scheduler.clearRedditAuth = function (scheduler_id, params) {
12418
12506
  return Requests.processRoute(SchedulerRoute.routes.clearRedditAuth, {}, { scheduler_id: scheduler_id }, params);
12419
12507
  };
12508
+ /**
12509
+ * Clear Reddit Ads OAuth credentials from a promotion schedule.
12510
+ *
12511
+ * @param scheduler_id The ID of the promotion schedule.
12512
+ * @returns promise
12513
+ */
12514
+ Scheduler.clearRedditAdsAuth = function (scheduler_id, params) {
12515
+ return Requests.processRoute(SchedulerRoute.routes.clearRedditAdsAuth, {}, { scheduler_id: scheduler_id }, params);
12516
+ };
12420
12517
  /**
12421
12518
  * Clear YouTube OAuth credentials from a promotion schedule.
12422
12519
  *
@@ -12889,6 +12986,292 @@ var Hashtags = /** @class */ (function () {
12889
12986
  return Hashtags;
12890
12987
  }());
12891
12988
 
12989
+ var WebsiteAnalyticsRoute = /** @class */ (function () {
12990
+ function WebsiteAnalyticsRoute() {
12991
+ }
12992
+ WebsiteAnalyticsRoute.routes = {
12993
+ listSessions: {
12994
+ url: '/analytics/sessions',
12995
+ method: HTTP_METHODS.GET
12996
+ },
12997
+ listPageviews: {
12998
+ url: '/analytics/pageviews',
12999
+ method: HTTP_METHODS.GET
13000
+ },
13001
+ listEvents: {
13002
+ url: '/analytics/events',
13003
+ method: HTTP_METHODS.GET
13004
+ },
13005
+ overview: {
13006
+ url: '/analytics/overview',
13007
+ method: HTTP_METHODS.GET
13008
+ },
13009
+ collect: {
13010
+ url: '/analytics/collect',
13011
+ method: HTTP_METHODS.POST
13012
+ },
13013
+ sessionsAverage: {
13014
+ url: '/analytics/sessions/average',
13015
+ method: HTTP_METHODS.GET
13016
+ },
13017
+ sessionsHistogram: {
13018
+ url: '/analytics/sessions/histogram',
13019
+ method: HTTP_METHODS.GET
13020
+ },
13021
+ pageviewsOverTime: {
13022
+ url: '/analytics/pageviews/over-time',
13023
+ method: HTTP_METHODS.GET
13024
+ },
13025
+ topPages: {
13026
+ url: '/analytics/pageviews/top-pages',
13027
+ method: HTTP_METHODS.GET
13028
+ },
13029
+ eventsSummary: {
13030
+ url: '/analytics/events/summary',
13031
+ method: HTTP_METHODS.GET
13032
+ },
13033
+ popularEvents: {
13034
+ url: '/analytics/events/popular',
13035
+ method: HTTP_METHODS.GET
13036
+ },
13037
+ geoDistribution: {
13038
+ url: '/analytics/geo-distribution',
13039
+ method: HTTP_METHODS.GET
13040
+ },
13041
+ deviceBreakdown: {
13042
+ url: '/analytics/device-breakdown',
13043
+ method: HTTP_METHODS.GET
13044
+ },
13045
+ referrers: {
13046
+ url: '/analytics/referrers',
13047
+ method: HTTP_METHODS.GET
13048
+ },
13049
+ utmPerformance: {
13050
+ url: '/analytics/utm-performance',
13051
+ method: HTTP_METHODS.GET
13052
+ }
13053
+ };
13054
+ return WebsiteAnalyticsRoute;
13055
+ }());
13056
+
13057
+ var WebsiteAnalytics = /** @class */ (function () {
13058
+ function WebsiteAnalytics() {
13059
+ }
13060
+ /**
13061
+ * List website analytics sessions with comprehensive filtering
13062
+ *
13063
+ * @param params Filtering options:
13064
+ * - title_id?: string - Filter by title ID
13065
+ * - start_date?: string - Start date (YYYY-MM-DD)
13066
+ * - end_date?: string - End date (YYYY-MM-DD)
13067
+ * - device_type?: 'desktop'|'mobile'|'tablet'|'bot'|'other'
13068
+ * - country_code?: string - 2-letter country code
13069
+ * - is_bot?: boolean - Filter by bot status
13070
+ * - sort?: 'started_at'|'total_duration'|'pageview_count' - Sort field
13071
+ * - order?: 'asc'|'desc' - Sort order
13072
+ * - per_page?: number - Items per page (max 100)
13073
+ * @returns Promise with paginated sessions data
13074
+ */
13075
+ WebsiteAnalytics.listSessions = function (params) {
13076
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listSessions, {}, undefined, params);
13077
+ };
13078
+ /**
13079
+ * Get a paginated list of pageviews with filtering options
13080
+ *
13081
+ * @param params Filtering options:
13082
+ * - title_id?: string - Filter by title ID
13083
+ * - analytics_session_id?: string - Filter by session ID
13084
+ * - start_date?: string - Start date (YYYY-MM-DD)
13085
+ * - end_date?: string - End date (YYYY-MM-DD)
13086
+ * - is_exit?: boolean - Filter by exit pageviews
13087
+ * - sort?: 'occurred_at'|'load_time_ms'|'dom_complete_ms' - Sort field
13088
+ * - order?: 'asc'|'desc' - Sort order
13089
+ * - per_page?: number - Items per page (max 100)
13090
+ * @returns Promise with paginated pageviews data
13091
+ */
13092
+ WebsiteAnalytics.listPageviews = function (params) {
13093
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listPageviews, {}, undefined, params);
13094
+ };
13095
+ /**
13096
+ * Get a paginated list of events with filtering options
13097
+ *
13098
+ * @param params Filtering options:
13099
+ * - title_id?: string - Filter by title ID
13100
+ * - analytics_session_id?: string - Filter by session ID
13101
+ * - event_name?: string - Filter by event name
13102
+ * - event_category?: string - Filter by event category
13103
+ * - start_date?: string - Start date (YYYY-MM-DD)
13104
+ * - end_date?: string - End date (YYYY-MM-DD)
13105
+ * - sort?: 'occurred_at'|'event_name' - Sort field
13106
+ * - order?: 'asc'|'desc' - Sort order
13107
+ * - per_page?: number - Items per page (max 100)
13108
+ * @returns Promise with paginated events data
13109
+ */
13110
+ WebsiteAnalytics.listEvents = function (params) {
13111
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listEvents, {}, undefined, params);
13112
+ };
13113
+ /**
13114
+ * Get an analytics overview with summarized metrics
13115
+ *
13116
+ * @param params Overview options:
13117
+ * - title_id: string - Required title ID
13118
+ * - start_date?: string - Start date (YYYY-MM-DD)
13119
+ * - end_date?: string - End date (YYYY-MM-DD)
13120
+ * - group_by?: 'day'|'week'|'month'|'year' - Grouping period
13121
+ * - include_breakdowns?: boolean - Include detailed breakdowns
13122
+ * @returns Promise with overview data
13123
+ */
13124
+ WebsiteAnalytics.overview = function (params) {
13125
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.overview, {}, undefined, params);
13126
+ };
13127
+ /**
13128
+ * Single ingestion endpoint for sessions, pageviews and events
13129
+ *
13130
+ * @param data Analytics data payload with type property:
13131
+ * - type: 'session'|'pageview'|'event' - Type of analytics data
13132
+ * - title_id: string - Title ID
13133
+ * - tracking_token: string - HMAC token for verification
13134
+ * - plus type-specific fields
13135
+ * @returns Promise with acceptance response
13136
+ */
13137
+ WebsiteAnalytics.collect = function (data) {
13138
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.collect, data);
13139
+ };
13140
+ /**
13141
+ * Get average session length data with optional grouping
13142
+ *
13143
+ * @param params Filtering options:
13144
+ * - title_id?: string - Filter by title ID
13145
+ * - start_date?: string - Start date (YYYY-MM-DD)
13146
+ * - end_date?: string - End date (YYYY-MM-DD)
13147
+ * - group_by?: 'day'|'week'|'month' - Grouping period
13148
+ * - device_type?: string - Filter by device type
13149
+ * - country_code?: string - Filter by country
13150
+ * @returns Promise with average session data
13151
+ */
13152
+ WebsiteAnalytics.sessionsAverage = function (params) {
13153
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.sessionsAverage, {}, undefined, params);
13154
+ };
13155
+ /**
13156
+ * Get session duration histogram data
13157
+ *
13158
+ * @param params Filtering options:
13159
+ * - title_id?: string - Filter by title ID
13160
+ * - start_date?: string - Start date (YYYY-MM-DD)
13161
+ * - end_date?: string - End date (YYYY-MM-DD)
13162
+ * - bucket_size?: number - Duration bucket size in seconds
13163
+ * @returns Promise with histogram data
13164
+ */
13165
+ WebsiteAnalytics.sessionsHistogram = function (params) {
13166
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.sessionsHistogram, {}, undefined, params);
13167
+ };
13168
+ /**
13169
+ * Get pageviews over time with optional grouping
13170
+ *
13171
+ * @param params Filtering options:
13172
+ * - title_id?: string - Filter by title ID
13173
+ * - start_date?: string - Start date (YYYY-MM-DD)
13174
+ * - end_date?: string - End date (YYYY-MM-DD)
13175
+ * - group_by?: 'hour'|'day'|'week'|'month' - Grouping period
13176
+ * - path?: string - Filter by specific path
13177
+ * @returns Promise with pageviews over time data
13178
+ */
13179
+ WebsiteAnalytics.pageviewsOverTime = function (params) {
13180
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.pageviewsOverTime, {}, undefined, params);
13181
+ };
13182
+ /**
13183
+ * Get top pages by views
13184
+ *
13185
+ * @param params Filtering options:
13186
+ * - title_id?: string - Filter by title ID
13187
+ * - start_date?: string - Start date (YYYY-MM-DD)
13188
+ * - end_date?: string - End date (YYYY-MM-DD)
13189
+ * - limit?: number - Number of top pages to return
13190
+ * @returns Promise with top pages data
13191
+ */
13192
+ WebsiteAnalytics.topPages = function (params) {
13193
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.topPages, {}, undefined, params);
13194
+ };
13195
+ /**
13196
+ * Get summary of events
13197
+ *
13198
+ * @param params Filtering options:
13199
+ * - title_id?: string - Filter by title ID
13200
+ * - start_date?: string - Start date (YYYY-MM-DD)
13201
+ * - end_date?: string - End date (YYYY-MM-DD)
13202
+ * - event_category?: string - Filter by event category
13203
+ * @returns Promise with events summary data
13204
+ */
13205
+ WebsiteAnalytics.eventsSummary = function (params) {
13206
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.eventsSummary, {}, undefined, params);
13207
+ };
13208
+ /**
13209
+ * Get most popular events
13210
+ *
13211
+ * @param params Filtering options:
13212
+ * - title_id?: string - Filter by title ID
13213
+ * - start_date?: string - Start date (YYYY-MM-DD)
13214
+ * - end_date?: string - End date (YYYY-MM-DD)
13215
+ * - limit?: number - Number of events to return
13216
+ * @returns Promise with popular events data
13217
+ */
13218
+ WebsiteAnalytics.popularEvents = function (params) {
13219
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.popularEvents, {}, undefined, params);
13220
+ };
13221
+ /**
13222
+ * Get geographic distribution of visitors
13223
+ *
13224
+ * @param params Filtering options:
13225
+ * - title_id?: string - Filter by title ID
13226
+ * - start_date?: string - Start date (YYYY-MM-DD)
13227
+ * - end_date?: string - End date (YYYY-MM-DD)
13228
+ * - limit?: number - Number of countries to return
13229
+ * @returns Promise with geo distribution data
13230
+ */
13231
+ WebsiteAnalytics.geoDistribution = function (params) {
13232
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.geoDistribution, {}, undefined, params);
13233
+ };
13234
+ /**
13235
+ * Get device type breakdown
13236
+ *
13237
+ * @param params Filtering options:
13238
+ * - title_id?: string - Filter by title ID
13239
+ * - start_date?: string - Start date (YYYY-MM-DD)
13240
+ * - end_date?: string - End date (YYYY-MM-DD)
13241
+ * @returns Promise with device breakdown data
13242
+ */
13243
+ WebsiteAnalytics.deviceBreakdown = function (params) {
13244
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.deviceBreakdown, {}, undefined, params);
13245
+ };
13246
+ /**
13247
+ * Get top referrers
13248
+ *
13249
+ * @param params Filtering options:
13250
+ * - title_id?: string - Filter by title ID
13251
+ * - start_date?: string - Start date (YYYY-MM-DD)
13252
+ * - end_date?: string - End date (YYYY-MM-DD)
13253
+ * - limit?: number - Number of referrers to return
13254
+ * @returns Promise with referrers data
13255
+ */
13256
+ WebsiteAnalytics.referrers = function (params) {
13257
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.referrers, {}, undefined, params);
13258
+ };
13259
+ /**
13260
+ * Get UTM campaign performance
13261
+ *
13262
+ * @param params Filtering options:
13263
+ * - title_id?: string - Filter by title ID
13264
+ * - start_date?: string - Start date (YYYY-MM-DD)
13265
+ * - end_date?: string - End date (YYYY-MM-DD)
13266
+ * - group_by?: 'source'|'medium'|'campaign' - Grouping field
13267
+ * @returns Promise with UTM performance data
13268
+ */
13269
+ WebsiteAnalytics.utmPerformance = function (params) {
13270
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.utmPerformance, {}, undefined, params);
13271
+ };
13272
+ return WebsiteAnalytics;
13273
+ }());
13274
+
12892
13275
  var Parser = /** @class */ (function () {
12893
13276
  function Parser() {
12894
13277
  }
@@ -12912,6 +13295,54 @@ var Parser = /** @class */ (function () {
12912
13295
  return Parser;
12913
13296
  }());
12914
13297
 
13298
+ // Browser implementation using crypto-js
13299
+ var BrowserCrypto = /** @class */ (function () {
13300
+ function BrowserCrypto() {
13301
+ }
13302
+ BrowserCrypto.prototype.createHmac = function (algorithm, secret) {
13303
+ var CryptoJS = require('crypto-js');
13304
+ var data = '';
13305
+ var hmac = {
13306
+ update: function (updateData) {
13307
+ data = updateData;
13308
+ return hmac;
13309
+ },
13310
+ digest: function (encoding) {
13311
+ if (encoding !== 'hex') {
13312
+ throw new Error('Only hex encoding is supported in browser implementation');
13313
+ }
13314
+ return CryptoJS.HmacSHA256(data, secret).toString(CryptoJS.enc.Hex);
13315
+ }
13316
+ };
13317
+ return hmac;
13318
+ };
13319
+ return BrowserCrypto;
13320
+ }());
13321
+ // Node.js implementation using native crypto
13322
+ var NodeCrypto = /** @class */ (function () {
13323
+ function NodeCrypto() {
13324
+ this.crypto = require('crypto');
13325
+ }
13326
+ NodeCrypto.prototype.createHmac = function (algorithm, secret) {
13327
+ return this.crypto.createHmac(algorithm, secret);
13328
+ };
13329
+ return NodeCrypto;
13330
+ }());
13331
+ // Determine which crypto implementation to use
13332
+ var getCrypto = function () {
13333
+ try {
13334
+ // Check if we're in Node.js environment
13335
+ if (typeof process !== 'undefined' && process.versions && process.versions.node) {
13336
+ return new NodeCrypto();
13337
+ }
13338
+ // Fall back to browser implementation
13339
+ return new BrowserCrypto();
13340
+ }
13341
+ catch (e) {
13342
+ return new BrowserCrypto();
13343
+ }
13344
+ };
13345
+ var crypto = getCrypto();
12915
13346
  var Session = /** @class */ (function () {
12916
13347
  function Session() {
12917
13348
  }
@@ -12958,6 +13389,31 @@ var Session = /** @class */ (function () {
12958
13389
  Storage.set(Session._email_key, data.email);
12959
13390
  Config.setAuthToken(data.token.access_token);
12960
13391
  };
13392
+ /**
13393
+ * Generate a tracking token for analytics collection
13394
+ * @param titleId The title ID to generate token for
13395
+ * @param secret The secret key (should match server config)
13396
+ * @returns HMAC-SHA256 token
13397
+ * @throws Error if crypto operations fail
13398
+ */
13399
+ Session.generateTrackingToken = function (titleId, secret) {
13400
+ try {
13401
+ if (!titleId) {
13402
+ throw new Error('titleId is required');
13403
+ }
13404
+ if (!secret) {
13405
+ throw new Error('secret is required');
13406
+ }
13407
+ return crypto
13408
+ .createHmac('sha256', secret)
13409
+ .update(titleId)
13410
+ .digest('hex');
13411
+ }
13412
+ catch (error) {
13413
+ console.error('Failed to generate tracking token:', error);
13414
+ throw new Error('Failed to generate tracking token');
13415
+ }
13416
+ };
12961
13417
  Session._id_key = 'user_id';
12962
13418
  Session._first_name_key = 'user_first_name';
12963
13419
  Session._last_name_key = 'user_last_name';
@@ -13318,7 +13774,8 @@ var Glitch = /** @class */ (function () {
13318
13774
  Media: Media,
13319
13775
  Scheduler: Scheduler,
13320
13776
  Funnel: Funnel,
13321
- SocialStats: SocialStats
13777
+ SocialStats: SocialStats,
13778
+ WebsiteAnalytics: WebsiteAnalytics
13322
13779
  };
13323
13780
  Glitch.util = {
13324
13781
  Requests: Requests,