@patch-adams/core 1.5.22 → 1.5.24

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/index.cjs CHANGED
@@ -119,7 +119,9 @@ var PatchAdamsConfigSchema = zod.z.object({
119
119
  /** Plugin configurations - each plugin is keyed by its name */
120
120
  plugins: PluginsConfigSchema,
121
121
  /** Optional skin name — adds 'pa-skinned' + skin class to <html>, loads skin CSS/JS after core files */
122
- skin: zod.z.string().min(1).optional()
122
+ skin: zod.z.string().min(1).optional(),
123
+ /** URL for server-controlled asset cache version (e.g., https://api.example.com/create/skin/version) */
124
+ assetVersionUrl: zod.z.string().url().optional()
123
125
  });
124
126
 
125
127
  // src/config/defaults.ts
@@ -261,7 +263,8 @@ html.${htmlClass}.${loadingClass} body {
261
263
  <script data-pa="css-before-loader">
262
264
  (function() {
263
265
  'use strict';
264
- var REMOTE_URL = "${remoteUrl}";
266
+ var v = window.__pa_v || '';
267
+ var REMOTE_URL = "${remoteUrl}" + (v ? "?v=" + v : "");
265
268
  var LOCAL_PATH = "${localPath}";
266
269
 
267
270
  function loadCSSSync(url) {
@@ -304,7 +307,7 @@ function generateCssAfterLoader(options) {
304
307
  <script data-pa="css-after-loader">
305
308
  (function() {
306
309
  'use strict';
307
- var REMOTE_URL = "${remoteUrl}";
310
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
308
311
  var LOCAL_PATH = "${localPath}";
309
312
  var TIMEOUT = ${timeout};
310
313
 
@@ -5202,7 +5205,7 @@ function escapeJs(str) {
5202
5205
  return str.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r");
5203
5206
  }
5204
5207
  function generateJsBeforeLoader(options) {
5205
- const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin } = options;
5208
+ const { remoteUrl, localPath, htmlClass, loadingClass, metadata, lrsBridge, skin, assetVersionUrl } = options;
5206
5209
  const lrsBridgeCode = generateLrsBridgeCode(lrsBridge);
5207
5210
  const courseLines = [];
5208
5211
  if (metadata) {
@@ -5305,7 +5308,21 @@ window.pa_patcher = window.pa_patcher || {
5305
5308
 
5306
5309
  (function() {
5307
5310
  'use strict';
5308
- var REMOTE_URL = "${remoteUrl}";
5311
+ // Fetch server-controlled cache version (sync, once)
5312
+ var ASSET_VERSION_URL = "${assetVersionUrl || ""}";
5313
+ window.__pa_v = '';
5314
+ if (ASSET_VERSION_URL) {
5315
+ try {
5316
+ var xhr = new XMLHttpRequest();
5317
+ xhr.open('GET', ASSET_VERSION_URL, false);
5318
+ xhr.send();
5319
+ if (xhr.status === 200) {
5320
+ window.__pa_v = JSON.parse(xhr.responseText).v || '1';
5321
+ }
5322
+ } catch(e) { window.__pa_v = '1'; }
5323
+ }
5324
+
5325
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5309
5326
  var LOCAL_PATH = "${localPath}";
5310
5327
 
5311
5328
  function loadJSSync(url) {
@@ -5374,7 +5391,8 @@ function buildJsBeforeOptions(config, metadata) {
5374
5391
  loadingClass: config.loadingClass,
5375
5392
  metadata: metadata ?? null,
5376
5393
  lrsBridge,
5377
- skin: config.skin
5394
+ skin: config.skin,
5395
+ assetVersionUrl: config.assetVersionUrl
5378
5396
  };
5379
5397
  }
5380
5398
 
@@ -5385,7 +5403,7 @@ function generateJsAfterLoader(options) {
5385
5403
  <script data-pa="js-after-loader">
5386
5404
  (function() {
5387
5405
  'use strict';
5388
- var REMOTE_URL = "${remoteUrl}";
5406
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "");
5389
5407
  var LOCAL_PATH = "${localPath}";
5390
5408
  var TIMEOUT = ${timeout};
5391
5409
  var LOADING_CLASS = "${loadingClass}";
@@ -5495,7 +5513,7 @@ function generateSkinCssLoader(options) {
5495
5513
  <script data-pa="skin-css-loader">
5496
5514
  (function() {
5497
5515
  'use strict';
5498
- var REMOTE_URL = "${remoteUrl}";
5516
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5499
5517
  var LOCAL_PATH = "${localPath}";
5500
5518
  var TIMEOUT = ${timeout};
5501
5519
 
@@ -5569,9 +5587,8 @@ function generateSkinCssLoader(options) {
5569
5587
  }
5570
5588
  function buildSkinCssOptions(config) {
5571
5589
  if (!config.skin) return null;
5572
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5573
5590
  return {
5574
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css?v=${cacheBuster}`,
5591
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/style.css`,
5575
5592
  localPath: `skin/${config.skin}/style.css`,
5576
5593
  timeout: config.cssAfter.timeout
5577
5594
  // reuse cssAfter timeout
@@ -5585,7 +5602,7 @@ function generateSkinJsLoader(options) {
5585
5602
  <script data-pa="skin-js-loader">
5586
5603
  (function() {
5587
5604
  'use strict';
5588
- var REMOTE_URL = "${remoteUrl}";
5605
+ var REMOTE_URL = "${remoteUrl}" + (window.__pa_v ? "?v=" + window.__pa_v : "?v=" + Date.now().toString(36));
5589
5606
  var LOCAL_PATH = "${localPath}";
5590
5607
  var TIMEOUT = ${timeout};
5591
5608
 
@@ -5671,9 +5688,8 @@ function generateSkinJsLoader(options) {
5671
5688
  }
5672
5689
  function buildSkinJsOptions(config) {
5673
5690
  if (!config.skin) return null;
5674
- const cacheBuster = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
5675
5691
  return {
5676
- remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js?v=${cacheBuster}`,
5692
+ remoteUrl: `${config.remoteDomain}/skin/${config.skin}/script.js`,
5677
5693
  localPath: `skin/${config.skin}/script.js`,
5678
5694
  timeout: config.jsAfter.timeout
5679
5695
  // reuse jsAfter timeout