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/cjs/index.js CHANGED
@@ -19877,6 +19877,35 @@ var AdsRoute = /** @class */ (function () {
19877
19877
  url: "/ads/campaigns/{campaign_id}/groups/{group_id}/triggers/{trigger_id}",
19878
19878
  method: HTTP_METHODS.DELETE,
19879
19879
  },
19880
+ // REDDIT TARGETING routes
19881
+ getRedditCarriers: {
19882
+ url: "/ads/reddit/targeting/carriers",
19883
+ method: HTTP_METHODS.GET,
19884
+ },
19885
+ getRedditCommunities: {
19886
+ url: "/ads/reddit/targeting/communities",
19887
+ method: HTTP_METHODS.GET,
19888
+ },
19889
+ searchRedditCommunities: {
19890
+ url: "/ads/reddit/targeting/communities/search",
19891
+ method: HTTP_METHODS.GET,
19892
+ },
19893
+ getRedditDevices: {
19894
+ url: "/ads/reddit/targeting/devices",
19895
+ method: HTTP_METHODS.GET,
19896
+ },
19897
+ getRedditGeolocations: {
19898
+ url: "/ads/reddit/targeting/geolocations",
19899
+ method: HTTP_METHODS.GET,
19900
+ },
19901
+ getRedditInterests: {
19902
+ url: "/ads/reddit/targeting/interests",
19903
+ method: HTTP_METHODS.GET,
19904
+ },
19905
+ getRedditThirdPartyAudiences: {
19906
+ url: "/ads/reddit/targeting/third_party_audiences",
19907
+ method: HTTP_METHODS.GET,
19908
+ },
19880
19909
  };
19881
19910
  return AdsRoute;
19882
19911
  }());
@@ -20164,6 +20193,51 @@ var Ads = /** @class */ (function () {
20164
20193
  Ads.listCampaignFundingInstruments = function (campaign_id, params) {
20165
20194
  return Requests.processRoute(AdsRoute.routes.getCampaignFundingInstruments, undefined, { campaign_id: campaign_id }, params);
20166
20195
  };
20196
+ /**
20197
+ * GET /ads/reddit/targeting/carriers
20198
+ *
20199
+ * Example usage:
20200
+ * Ads.listRedditCarriers({ scheduler_id: 'uuid-of-scheduler', 'page.size': 50 })
20201
+ */
20202
+ Ads.listRedditCarriers = function (params) {
20203
+ return Requests.processRoute(AdsRoute.routes.getRedditCarriers, undefined, undefined, params);
20204
+ };
20205
+ /**
20206
+ * GET /ads/reddit/targeting/communities?names=sub1,sub2
20207
+ */
20208
+ Ads.listRedditCommunities = function (params) {
20209
+ return Requests.processRoute(AdsRoute.routes.getRedditCommunities, undefined, undefined, params);
20210
+ };
20211
+ /**
20212
+ * GET /ads/reddit/targeting/communities/search?query=xyz
20213
+ */
20214
+ Ads.searchRedditCommunities = function (params) {
20215
+ return Requests.processRoute(AdsRoute.routes.searchRedditCommunities, undefined, undefined, params);
20216
+ };
20217
+ /**
20218
+ * GET /ads/reddit/targeting/devices
20219
+ */
20220
+ Ads.listRedditDevices = function (params) {
20221
+ return Requests.processRoute(AdsRoute.routes.getRedditDevices, undefined, undefined, params);
20222
+ };
20223
+ /**
20224
+ * GET /ads/reddit/targeting/geolocations
20225
+ */
20226
+ Ads.listRedditGeolocations = function (params) {
20227
+ return Requests.processRoute(AdsRoute.routes.getRedditGeolocations, undefined, undefined, params);
20228
+ };
20229
+ /**
20230
+ * GET /ads/reddit/targeting/interests
20231
+ */
20232
+ Ads.listRedditInterests = function (params) {
20233
+ return Requests.processRoute(AdsRoute.routes.getRedditInterests, undefined, undefined, params);
20234
+ };
20235
+ /**
20236
+ * GET /ads/reddit/targeting/third_party_audiences
20237
+ */
20238
+ Ads.listRedditThirdPartyAudiences = function (params) {
20239
+ return Requests.processRoute(AdsRoute.routes.getRedditThirdPartyAudiences, undefined, undefined, params);
20240
+ };
20167
20241
  return Ads;
20168
20242
  }());
20169
20243
 
@@ -25278,6 +25352,7 @@ var SchedulerRoute = /** @class */ (function () {
25278
25352
  getSchedulePosts: { url: '/schedulers/{scheduler_id}/posts', method: HTTP_METHODS.GET },
25279
25353
  // Title Update Routes
25280
25354
  listUpdates: { url: '/schedulers/{scheduler_id}/updates', method: HTTP_METHODS.GET },
25355
+ searchUpdates: { url: '/schedulers/{scheduler_id}/updates/search', method: HTTP_METHODS.GET },
25281
25356
  createUpdate: { url: '/schedulers/{scheduler_id}/updates', method: HTTP_METHODS.POST },
25282
25357
  getUpdate: { url: '/schedulers/{scheduler_id}/updates/{update_id}', method: HTTP_METHODS.GET },
25283
25358
  updateUpdate: { url: '/schedulers/{scheduler_id}/updates/{update_id}', method: HTTP_METHODS.PUT },
@@ -25295,6 +25370,7 @@ var SchedulerRoute = /** @class */ (function () {
25295
25370
  clearTwitchAuth: { url: '/schedulers/{scheduler_id}/clearTwitchAuth', method: HTTP_METHODS.DELETE },
25296
25371
  clearKickAuth: { url: '/schedulers/{scheduler_id}/clearKickAuth', method: HTTP_METHODS.DELETE },
25297
25372
  clearRedditAuth: { url: '/schedulers/{scheduler_id}/clearRedditAuth', method: HTTP_METHODS.DELETE },
25373
+ clearRedditAdsAuth: { url: '/schedulers/{scheduler_id}/clearRedditAdsAuth', method: HTTP_METHODS.DELETE },
25298
25374
  clearYouTubeAuth: { url: '/schedulers/{scheduler_id}/clearYouTubeAuth', method: HTTP_METHODS.DELETE },
25299
25375
  clearPatreonAuth: { url: '/schedulers/{scheduler_id}/clearPatreonAuth', method: HTTP_METHODS.DELETE },
25300
25376
  clearPinterestAuth: { url: '/schedulers/{scheduler_id}/clearPinterestAuth', method: HTTP_METHODS.DELETE },
@@ -25462,6 +25538,18 @@ var Scheduler = /** @class */ (function () {
25462
25538
  Scheduler.listUpdates = function (scheduler_id, params) {
25463
25539
  return Requests.processRoute(SchedulerRoute.routes.listUpdates, {}, { scheduler_id: scheduler_id }, params);
25464
25540
  };
25541
+ /**
25542
+ * Search the updates related to a promotion schedule.
25543
+ *
25544
+ * @see https://api.glitch.fun/api/documentation#/Scheduler/searchTitleUpdates
25545
+ *
25546
+ * @param scheduler_id The ID of the promotion schedule.
25547
+ *
25548
+ * @returns promise
25549
+ */
25550
+ Scheduler.searchUpdates = function (scheduler_id, params) {
25551
+ return Requests.processRoute(SchedulerRoute.routes.listUpdates, {}, { scheduler_id: scheduler_id }, params);
25552
+ };
25465
25553
  /**
25466
25554
  * Create a new title update for a promotion schedule.
25467
25555
  *
@@ -25601,6 +25689,15 @@ var Scheduler = /** @class */ (function () {
25601
25689
  Scheduler.clearRedditAuth = function (scheduler_id, params) {
25602
25690
  return Requests.processRoute(SchedulerRoute.routes.clearRedditAuth, {}, { scheduler_id: scheduler_id }, params);
25603
25691
  };
25692
+ /**
25693
+ * Clear Reddit Ads OAuth credentials from a promotion schedule.
25694
+ *
25695
+ * @param scheduler_id The ID of the promotion schedule.
25696
+ * @returns promise
25697
+ */
25698
+ Scheduler.clearRedditAdsAuth = function (scheduler_id, params) {
25699
+ return Requests.processRoute(SchedulerRoute.routes.clearRedditAdsAuth, {}, { scheduler_id: scheduler_id }, params);
25700
+ };
25604
25701
  /**
25605
25702
  * Clear YouTube OAuth credentials from a promotion schedule.
25606
25703
  *
@@ -26073,6 +26170,292 @@ var Hashtags = /** @class */ (function () {
26073
26170
  return Hashtags;
26074
26171
  }());
26075
26172
 
26173
+ var WebsiteAnalyticsRoute = /** @class */ (function () {
26174
+ function WebsiteAnalyticsRoute() {
26175
+ }
26176
+ WebsiteAnalyticsRoute.routes = {
26177
+ listSessions: {
26178
+ url: '/analytics/sessions',
26179
+ method: HTTP_METHODS.GET
26180
+ },
26181
+ listPageviews: {
26182
+ url: '/analytics/pageviews',
26183
+ method: HTTP_METHODS.GET
26184
+ },
26185
+ listEvents: {
26186
+ url: '/analytics/events',
26187
+ method: HTTP_METHODS.GET
26188
+ },
26189
+ overview: {
26190
+ url: '/analytics/overview',
26191
+ method: HTTP_METHODS.GET
26192
+ },
26193
+ collect: {
26194
+ url: '/analytics/collect',
26195
+ method: HTTP_METHODS.POST
26196
+ },
26197
+ sessionsAverage: {
26198
+ url: '/analytics/sessions/average',
26199
+ method: HTTP_METHODS.GET
26200
+ },
26201
+ sessionsHistogram: {
26202
+ url: '/analytics/sessions/histogram',
26203
+ method: HTTP_METHODS.GET
26204
+ },
26205
+ pageviewsOverTime: {
26206
+ url: '/analytics/pageviews/over-time',
26207
+ method: HTTP_METHODS.GET
26208
+ },
26209
+ topPages: {
26210
+ url: '/analytics/pageviews/top-pages',
26211
+ method: HTTP_METHODS.GET
26212
+ },
26213
+ eventsSummary: {
26214
+ url: '/analytics/events/summary',
26215
+ method: HTTP_METHODS.GET
26216
+ },
26217
+ popularEvents: {
26218
+ url: '/analytics/events/popular',
26219
+ method: HTTP_METHODS.GET
26220
+ },
26221
+ geoDistribution: {
26222
+ url: '/analytics/geo-distribution',
26223
+ method: HTTP_METHODS.GET
26224
+ },
26225
+ deviceBreakdown: {
26226
+ url: '/analytics/device-breakdown',
26227
+ method: HTTP_METHODS.GET
26228
+ },
26229
+ referrers: {
26230
+ url: '/analytics/referrers',
26231
+ method: HTTP_METHODS.GET
26232
+ },
26233
+ utmPerformance: {
26234
+ url: '/analytics/utm-performance',
26235
+ method: HTTP_METHODS.GET
26236
+ }
26237
+ };
26238
+ return WebsiteAnalyticsRoute;
26239
+ }());
26240
+
26241
+ var WebsiteAnalytics = /** @class */ (function () {
26242
+ function WebsiteAnalytics() {
26243
+ }
26244
+ /**
26245
+ * List website analytics sessions with comprehensive filtering
26246
+ *
26247
+ * @param params Filtering options:
26248
+ * - title_id?: string - Filter by title ID
26249
+ * - start_date?: string - Start date (YYYY-MM-DD)
26250
+ * - end_date?: string - End date (YYYY-MM-DD)
26251
+ * - device_type?: 'desktop'|'mobile'|'tablet'|'bot'|'other'
26252
+ * - country_code?: string - 2-letter country code
26253
+ * - is_bot?: boolean - Filter by bot status
26254
+ * - sort?: 'started_at'|'total_duration'|'pageview_count' - Sort field
26255
+ * - order?: 'asc'|'desc' - Sort order
26256
+ * - per_page?: number - Items per page (max 100)
26257
+ * @returns Promise with paginated sessions data
26258
+ */
26259
+ WebsiteAnalytics.listSessions = function (params) {
26260
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listSessions, {}, undefined, params);
26261
+ };
26262
+ /**
26263
+ * Get a paginated list of pageviews with filtering options
26264
+ *
26265
+ * @param params Filtering options:
26266
+ * - title_id?: string - Filter by title ID
26267
+ * - analytics_session_id?: string - Filter by session ID
26268
+ * - start_date?: string - Start date (YYYY-MM-DD)
26269
+ * - end_date?: string - End date (YYYY-MM-DD)
26270
+ * - is_exit?: boolean - Filter by exit pageviews
26271
+ * - sort?: 'occurred_at'|'load_time_ms'|'dom_complete_ms' - Sort field
26272
+ * - order?: 'asc'|'desc' - Sort order
26273
+ * - per_page?: number - Items per page (max 100)
26274
+ * @returns Promise with paginated pageviews data
26275
+ */
26276
+ WebsiteAnalytics.listPageviews = function (params) {
26277
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listPageviews, {}, undefined, params);
26278
+ };
26279
+ /**
26280
+ * Get a paginated list of events with filtering options
26281
+ *
26282
+ * @param params Filtering options:
26283
+ * - title_id?: string - Filter by title ID
26284
+ * - analytics_session_id?: string - Filter by session ID
26285
+ * - event_name?: string - Filter by event name
26286
+ * - event_category?: string - Filter by event category
26287
+ * - start_date?: string - Start date (YYYY-MM-DD)
26288
+ * - end_date?: string - End date (YYYY-MM-DD)
26289
+ * - sort?: 'occurred_at'|'event_name' - Sort field
26290
+ * - order?: 'asc'|'desc' - Sort order
26291
+ * - per_page?: number - Items per page (max 100)
26292
+ * @returns Promise with paginated events data
26293
+ */
26294
+ WebsiteAnalytics.listEvents = function (params) {
26295
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.listEvents, {}, undefined, params);
26296
+ };
26297
+ /**
26298
+ * Get an analytics overview with summarized metrics
26299
+ *
26300
+ * @param params Overview options:
26301
+ * - title_id: string - Required title ID
26302
+ * - start_date?: string - Start date (YYYY-MM-DD)
26303
+ * - end_date?: string - End date (YYYY-MM-DD)
26304
+ * - group_by?: 'day'|'week'|'month'|'year' - Grouping period
26305
+ * - include_breakdowns?: boolean - Include detailed breakdowns
26306
+ * @returns Promise with overview data
26307
+ */
26308
+ WebsiteAnalytics.overview = function (params) {
26309
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.overview, {}, undefined, params);
26310
+ };
26311
+ /**
26312
+ * Single ingestion endpoint for sessions, pageviews and events
26313
+ *
26314
+ * @param data Analytics data payload with type property:
26315
+ * - type: 'session'|'pageview'|'event' - Type of analytics data
26316
+ * - title_id: string - Title ID
26317
+ * - tracking_token: string - HMAC token for verification
26318
+ * - plus type-specific fields
26319
+ * @returns Promise with acceptance response
26320
+ */
26321
+ WebsiteAnalytics.collect = function (data) {
26322
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.collect, data);
26323
+ };
26324
+ /**
26325
+ * Get average session length data with optional grouping
26326
+ *
26327
+ * @param params Filtering options:
26328
+ * - title_id?: string - Filter by title ID
26329
+ * - start_date?: string - Start date (YYYY-MM-DD)
26330
+ * - end_date?: string - End date (YYYY-MM-DD)
26331
+ * - group_by?: 'day'|'week'|'month' - Grouping period
26332
+ * - device_type?: string - Filter by device type
26333
+ * - country_code?: string - Filter by country
26334
+ * @returns Promise with average session data
26335
+ */
26336
+ WebsiteAnalytics.sessionsAverage = function (params) {
26337
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.sessionsAverage, {}, undefined, params);
26338
+ };
26339
+ /**
26340
+ * Get session duration histogram data
26341
+ *
26342
+ * @param params Filtering options:
26343
+ * - title_id?: string - Filter by title ID
26344
+ * - start_date?: string - Start date (YYYY-MM-DD)
26345
+ * - end_date?: string - End date (YYYY-MM-DD)
26346
+ * - bucket_size?: number - Duration bucket size in seconds
26347
+ * @returns Promise with histogram data
26348
+ */
26349
+ WebsiteAnalytics.sessionsHistogram = function (params) {
26350
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.sessionsHistogram, {}, undefined, params);
26351
+ };
26352
+ /**
26353
+ * Get pageviews over time with optional grouping
26354
+ *
26355
+ * @param params Filtering options:
26356
+ * - title_id?: string - Filter by title ID
26357
+ * - start_date?: string - Start date (YYYY-MM-DD)
26358
+ * - end_date?: string - End date (YYYY-MM-DD)
26359
+ * - group_by?: 'hour'|'day'|'week'|'month' - Grouping period
26360
+ * - path?: string - Filter by specific path
26361
+ * @returns Promise with pageviews over time data
26362
+ */
26363
+ WebsiteAnalytics.pageviewsOverTime = function (params) {
26364
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.pageviewsOverTime, {}, undefined, params);
26365
+ };
26366
+ /**
26367
+ * Get top pages by views
26368
+ *
26369
+ * @param params Filtering options:
26370
+ * - title_id?: string - Filter by title ID
26371
+ * - start_date?: string - Start date (YYYY-MM-DD)
26372
+ * - end_date?: string - End date (YYYY-MM-DD)
26373
+ * - limit?: number - Number of top pages to return
26374
+ * @returns Promise with top pages data
26375
+ */
26376
+ WebsiteAnalytics.topPages = function (params) {
26377
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.topPages, {}, undefined, params);
26378
+ };
26379
+ /**
26380
+ * Get summary of events
26381
+ *
26382
+ * @param params Filtering options:
26383
+ * - title_id?: string - Filter by title ID
26384
+ * - start_date?: string - Start date (YYYY-MM-DD)
26385
+ * - end_date?: string - End date (YYYY-MM-DD)
26386
+ * - event_category?: string - Filter by event category
26387
+ * @returns Promise with events summary data
26388
+ */
26389
+ WebsiteAnalytics.eventsSummary = function (params) {
26390
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.eventsSummary, {}, undefined, params);
26391
+ };
26392
+ /**
26393
+ * Get most popular events
26394
+ *
26395
+ * @param params Filtering options:
26396
+ * - title_id?: string - Filter by title ID
26397
+ * - start_date?: string - Start date (YYYY-MM-DD)
26398
+ * - end_date?: string - End date (YYYY-MM-DD)
26399
+ * - limit?: number - Number of events to return
26400
+ * @returns Promise with popular events data
26401
+ */
26402
+ WebsiteAnalytics.popularEvents = function (params) {
26403
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.popularEvents, {}, undefined, params);
26404
+ };
26405
+ /**
26406
+ * Get geographic distribution of visitors
26407
+ *
26408
+ * @param params Filtering options:
26409
+ * - title_id?: string - Filter by title ID
26410
+ * - start_date?: string - Start date (YYYY-MM-DD)
26411
+ * - end_date?: string - End date (YYYY-MM-DD)
26412
+ * - limit?: number - Number of countries to return
26413
+ * @returns Promise with geo distribution data
26414
+ */
26415
+ WebsiteAnalytics.geoDistribution = function (params) {
26416
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.geoDistribution, {}, undefined, params);
26417
+ };
26418
+ /**
26419
+ * Get device type breakdown
26420
+ *
26421
+ * @param params Filtering options:
26422
+ * - title_id?: string - Filter by title ID
26423
+ * - start_date?: string - Start date (YYYY-MM-DD)
26424
+ * - end_date?: string - End date (YYYY-MM-DD)
26425
+ * @returns Promise with device breakdown data
26426
+ */
26427
+ WebsiteAnalytics.deviceBreakdown = function (params) {
26428
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.deviceBreakdown, {}, undefined, params);
26429
+ };
26430
+ /**
26431
+ * Get top referrers
26432
+ *
26433
+ * @param params Filtering options:
26434
+ * - title_id?: string - Filter by title ID
26435
+ * - start_date?: string - Start date (YYYY-MM-DD)
26436
+ * - end_date?: string - End date (YYYY-MM-DD)
26437
+ * - limit?: number - Number of referrers to return
26438
+ * @returns Promise with referrers data
26439
+ */
26440
+ WebsiteAnalytics.referrers = function (params) {
26441
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.referrers, {}, undefined, params);
26442
+ };
26443
+ /**
26444
+ * Get UTM campaign performance
26445
+ *
26446
+ * @param params Filtering options:
26447
+ * - title_id?: string - Filter by title ID
26448
+ * - start_date?: string - Start date (YYYY-MM-DD)
26449
+ * - end_date?: string - End date (YYYY-MM-DD)
26450
+ * - group_by?: 'source'|'medium'|'campaign' - Grouping field
26451
+ * @returns Promise with UTM performance data
26452
+ */
26453
+ WebsiteAnalytics.utmPerformance = function (params) {
26454
+ return Requests.processRoute(WebsiteAnalyticsRoute.routes.utmPerformance, {}, undefined, params);
26455
+ };
26456
+ return WebsiteAnalytics;
26457
+ }());
26458
+
26076
26459
  var Parser = /** @class */ (function () {
26077
26460
  function Parser() {
26078
26461
  }
@@ -26096,6 +26479,54 @@ var Parser = /** @class */ (function () {
26096
26479
  return Parser;
26097
26480
  }());
26098
26481
 
26482
+ // Browser implementation using crypto-js
26483
+ var BrowserCrypto = /** @class */ (function () {
26484
+ function BrowserCrypto() {
26485
+ }
26486
+ BrowserCrypto.prototype.createHmac = function (algorithm, secret) {
26487
+ var CryptoJS = require('crypto-js');
26488
+ var data = '';
26489
+ var hmac = {
26490
+ update: function (updateData) {
26491
+ data = updateData;
26492
+ return hmac;
26493
+ },
26494
+ digest: function (encoding) {
26495
+ if (encoding !== 'hex') {
26496
+ throw new Error('Only hex encoding is supported in browser implementation');
26497
+ }
26498
+ return CryptoJS.HmacSHA256(data, secret).toString(CryptoJS.enc.Hex);
26499
+ }
26500
+ };
26501
+ return hmac;
26502
+ };
26503
+ return BrowserCrypto;
26504
+ }());
26505
+ // Node.js implementation using native crypto
26506
+ var NodeCrypto = /** @class */ (function () {
26507
+ function NodeCrypto() {
26508
+ this.crypto = require('crypto');
26509
+ }
26510
+ NodeCrypto.prototype.createHmac = function (algorithm, secret) {
26511
+ return this.crypto.createHmac(algorithm, secret);
26512
+ };
26513
+ return NodeCrypto;
26514
+ }());
26515
+ // Determine which crypto implementation to use
26516
+ var getCrypto = function () {
26517
+ try {
26518
+ // Check if we're in Node.js environment
26519
+ if (typeof process !== 'undefined' && process.versions && process.versions.node) {
26520
+ return new NodeCrypto();
26521
+ }
26522
+ // Fall back to browser implementation
26523
+ return new BrowserCrypto();
26524
+ }
26525
+ catch (e) {
26526
+ return new BrowserCrypto();
26527
+ }
26528
+ };
26529
+ var crypto = getCrypto();
26099
26530
  var Session = /** @class */ (function () {
26100
26531
  function Session() {
26101
26532
  }
@@ -26142,6 +26573,31 @@ var Session = /** @class */ (function () {
26142
26573
  Storage.set(Session._email_key, data.email);
26143
26574
  Config.setAuthToken(data.token.access_token);
26144
26575
  };
26576
+ /**
26577
+ * Generate a tracking token for analytics collection
26578
+ * @param titleId The title ID to generate token for
26579
+ * @param secret The secret key (should match server config)
26580
+ * @returns HMAC-SHA256 token
26581
+ * @throws Error if crypto operations fail
26582
+ */
26583
+ Session.generateTrackingToken = function (titleId, secret) {
26584
+ try {
26585
+ if (!titleId) {
26586
+ throw new Error('titleId is required');
26587
+ }
26588
+ if (!secret) {
26589
+ throw new Error('secret is required');
26590
+ }
26591
+ return crypto
26592
+ .createHmac('sha256', secret)
26593
+ .update(titleId)
26594
+ .digest('hex');
26595
+ }
26596
+ catch (error) {
26597
+ console.error('Failed to generate tracking token:', error);
26598
+ throw new Error('Failed to generate tracking token');
26599
+ }
26600
+ };
26145
26601
  Session._id_key = 'user_id';
26146
26602
  Session._first_name_key = 'user_first_name';
26147
26603
  Session._last_name_key = 'user_last_name';
@@ -26502,7 +26958,8 @@ var Glitch = /** @class */ (function () {
26502
26958
  Media: Media,
26503
26959
  Scheduler: Scheduler,
26504
26960
  Funnel: Funnel,
26505
- SocialStats: SocialStats
26961
+ SocialStats: SocialStats,
26962
+ WebsiteAnalytics: WebsiteAnalytics
26506
26963
  };
26507
26964
  Glitch.util = {
26508
26965
  Requests: Requests,