ultimate-jekyll-manager 0.0.117 → 0.0.118

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.
@@ -1,6 +1,7 @@
1
1
  // Security section module
2
- import fetch from 'wonderful-fetch';
2
+ import authorizedFetch from '__main_assets__/js/libs/authorized-fetch.js';
3
3
  import { FormManager } from '__main_assets__/js/libs/form-manager.js';
4
+ import { getPrerenderedIcon } from '__main_assets__/js/libs/prerendered-icons.js';
4
5
 
5
6
  let webManager = null;
6
7
  let firebaseAuth = null;
@@ -98,20 +99,17 @@ async function updateSigninMethods() {
98
99
  // Update Google signin display
99
100
  const $googleEmail = document.getElementById('google-email');
100
101
  const $googleForm = document.getElementById('signin-method-google-form');
101
- const $googleBtn = $googleForm?.querySelector('button[type="submit"]');
102
- const $googleBtnText = $googleBtn?.querySelector('.button-text');
103
- const $googleAction = $googleForm?.querySelector('input[name="action"]');
104
- const $googleIcon = $googleBtn?.querySelector('.fa-icon');
102
+ const $connectButton = $googleForm?.querySelector('button[data-action="connect"]');
103
+ const $disconnectButton = $googleForm?.querySelector('button[data-action="disconnect"]');
105
104
 
106
105
  console.log('[DEBUG] security.js - Google DOM elements:', {
107
106
  $googleEmail: !!$googleEmail,
108
- $googleBtn: !!$googleBtn,
109
- $googleBtnText: !!$googleBtnText,
110
- $googleAction: !!$googleAction,
111
- $googleIcon: !!$googleIcon
107
+ $googleForm: !!$googleForm,
108
+ $connectButton: !!$connectButton,
109
+ $disconnectButton: !!$disconnectButton
112
110
  });
113
111
 
114
- if ($googleEmail && $googleBtn) {
112
+ if ($googleEmail && $connectButton && $disconnectButton) {
115
113
  // Check if user has Google provider using firebaseUser for most up-to-date data
116
114
  const googleProvider = firebaseUser.providerData?.find(provider => provider.providerId === 'google.com');
117
115
 
@@ -119,45 +117,19 @@ async function updateSigninMethods() {
119
117
  console.log('[DEBUG] security.js - googleProvider found:', !!googleProvider);
120
118
 
121
119
  if (googleProvider) {
122
- console.log('[DEBUG] security.js - Setting button to DISCONNECT state');
123
- console.log('[DEBUG] security.js - Button text before:', $googleBtnText?.textContent);
124
- console.log('[DEBUG] security.js - Button classes before:', $googleBtn.className);
120
+ console.log('[DEBUG] security.js - Showing disconnect button');
125
121
 
126
122
  $googleEmail.textContent = googleProvider.email || 'Connected';
127
- if ($googleBtnText) $googleBtnText.textContent = 'Disconnect';
128
- if ($googleAction) $googleAction.value = 'disconnect';
129
- $googleBtn.classList.remove('btn-primary');
130
- $googleBtn.classList.add('btn-outline-danger');
131
-
132
- // Update icon from link to unlink
133
- if ($googleIcon) {
134
- $googleIcon.classList.remove('fa-link');
135
- $googleIcon.classList.add('fa-unlink');
136
- }
137
-
138
- console.log('[DEBUG] security.js - Button text after:', $googleBtnText?.textContent);
139
- console.log('[DEBUG] security.js - Button classes after:', $googleBtn.className);
140
- console.log('[DEBUG] security.js - Action value:', $googleAction?.value);
123
+ // Hide connect button, show disconnect button
124
+ $connectButton.classList.add('d-none');
125
+ $disconnectButton.classList.remove('d-none');
141
126
  } else {
142
- console.log('[DEBUG] security.js - Setting button to CONNECT state');
143
- console.log('[DEBUG] security.js - Button text before:', $googleBtnText?.textContent);
144
- console.log('[DEBUG] security.js - Button classes before:', $googleBtn.className);
127
+ console.log('[DEBUG] security.js - Showing connect button');
145
128
 
146
129
  $googleEmail.textContent = 'Not connected';
147
- if ($googleBtnText) $googleBtnText.textContent = 'Connect';
148
- if ($googleAction) $googleAction.value = 'connect';
149
- $googleBtn.classList.remove('btn-outline-danger');
150
- $googleBtn.classList.add('btn-primary');
151
-
152
- // Update icon from unlink to link
153
- if ($googleIcon) {
154
- $googleIcon.classList.remove('fa-unlink');
155
- $googleIcon.classList.add('fa-link');
156
- }
157
-
158
- console.log('[DEBUG] security.js - Button text after:', $googleBtnText?.textContent);
159
- console.log('[DEBUG] security.js - Button classes after:', $googleBtn.className);
160
- console.log('[DEBUG] security.js - Action value:', $googleAction?.value);
130
+ // Show connect button, hide disconnect button
131
+ $connectButton.classList.remove('d-none');
132
+ $disconnectButton.classList.add('d-none');
161
133
  }
162
134
  }
163
135
  }
@@ -214,16 +186,14 @@ async function updateActiveSessions(account) {
214
186
 
215
187
  // Fetch other active sessions from server
216
188
  try {
217
- const token = await webManager.auth().getIdToken();
218
189
  const serverApiURL = webManager.getApiUrl() + '/backend-manager';
219
190
 
220
- const data = await fetch(serverApiURL, {
191
+ const data = await authorizedFetch(serverApiURL, {
221
192
  method: 'POST',
222
193
  timeout: 60000,
223
194
  response: 'json',
224
195
  tries: 2,
225
196
  body: {
226
- authenticationToken: token,
227
197
  command: 'user:get-active-sessions',
228
198
  payload: {
229
199
  // id: 'app',
@@ -231,14 +201,12 @@ async function updateActiveSessions(account) {
231
201
  },
232
202
  });
233
203
 
234
- console.log('Active sessions data from server:', data);
235
-
236
204
  // Process sessions from server response
237
205
  let sessionData = data || {};
238
206
 
239
- // Add fake data if _test_prefill=true is in query string
207
+ // Add fake data if _dev_prefill=true is in query string
240
208
  const urlParams = new URLSearchParams(window.location.search);
241
- if (urlParams.get('_test_prefill') === 'true') {
209
+ if (urlParams.get('_dev_prefill') === 'true') {
242
210
  console.log('Adding fake session data for testing');
243
211
  const fakeSessions = generateFakeSessions();
244
212
  // Merge fake sessions with existing data (fake sessions don't override real ones)
@@ -308,23 +276,24 @@ async function updateActiveSessions(account) {
308
276
  return;
309
277
  }
310
278
 
311
- const sessionHTML = sessions.map(session => {
279
+ const sessionHTML = sessions.map((session, index) => {
312
280
  const deviceName = session.device || 'Unknown Device';
313
281
  const browserName = session.browser || 'Unknown Browser';
314
282
  const location = formatSessionLocation(session);
283
+ const isLast = index === sessions.length - 1;
315
284
 
316
285
  return `
317
- <div class="list-group-item px-0 bg-body-tertiary">
286
+ <div class="px-0 py-3${isLast ? '' : ' border-bottom'}">
318
287
  <div class="d-flex justify-content-between align-items-start">
319
- <div class="d-flex align-items-start">
320
- <div class="me-3 mt-1">
288
+ <div class="d-flex align-items-center">
289
+ <div class="d-flex align-items-center justify-content-center me-3 flex-shrink-0 text-muted">
321
290
  ${getDeviceIcon(session.platform || deviceName)}
322
291
  </div>
323
292
  <div>
324
- <div class="fw-semibold">${deviceName}</div>
325
- <small class="text-muted d-block">${browserName}${session.mobile !== undefined ? ` • ${session.mobile ? 'Mobile' : 'Desktop'}` : ''}</small>
326
- ${location ? `<small class="text-muted d-block">${location}</small>` : ''}
327
- ${session.ip ? `<small class="text-muted d-block">IP: ${session.ip}</small>` : ''}
293
+ <strong>${deviceName}</strong>
294
+ <div class="text-muted small">${browserName}${session.mobile !== undefined ? ` • ${session.mobile ? 'Mobile' : 'Desktop'}` : ''}</div>
295
+ ${location ? `<div class="text-muted small">${location}</div>` : ''}
296
+ ${session.ip ? `<div class="text-muted small">IP: ${session.ip}</div>` : ''}
328
297
  </div>
329
298
  </div>
330
299
  <div class="text-end">
@@ -385,12 +354,15 @@ function initializeSigninMethodForms() {
385
354
 
386
355
  formManager.addEventListener('submit', async (event) => {
387
356
  event.preventDefault();
388
- const { data } = event.detail;
357
+ const { submitButton } = event.detail;
358
+
359
+ // Determine action from the clicked button's data-action attribute
360
+ const action = submitButton?.getAttribute('data-action');
389
361
 
390
362
  try {
391
- if (data.action === 'disconnect') {
363
+ if (action === 'disconnect') {
392
364
  await disconnectGoogleProvider();
393
- } else {
365
+ } else if (action === 'connect') {
394
366
  await connectGoogleProvider();
395
367
  }
396
368
 
@@ -632,20 +604,25 @@ function getPlatformName(platform) {
632
604
  // Get device icon based on device type
633
605
  function getDeviceIcon(device) {
634
606
  const deviceLower = (device || '').toLowerCase();
607
+ let iconName = 'desktop'; // default
635
608
 
636
- if (deviceLower.includes('iphone') || deviceLower.includes('ipad') || deviceLower.includes('ios') || deviceLower.includes('mac')) {
637
- return '<i class="fa-brands fa-apple fa-lg"></i>';
609
+ if (deviceLower.includes('iphone')
610
+ || deviceLower.includes('ipad')
611
+ || deviceLower.includes('ios')
612
+ || deviceLower.includes('mac')) {
613
+ iconName = 'apple';
638
614
  } else if (deviceLower.includes('android')) {
639
- return '<i class="fa-brands fa-android fa-lg"></i>';
615
+ iconName = 'android';
640
616
  } else if (deviceLower.includes('windows')) {
641
- return '<i class="fa-brands fa-windows fa-lg"></i>';
617
+ iconName = 'windows';
642
618
  } else if (deviceLower.includes('linux')) {
643
- return '<i class="fa-brands fa-linux fa-lg"></i>';
619
+ iconName = 'linux';
644
620
  } else if (deviceLower.includes('chrome')) {
645
- return '<i class="fa-brands fa-chrome fa-lg"></i>';
646
- } else {
647
- return '<i class="fa-solid fa-desktop fa-lg"></i>';
621
+ iconName = 'chrome';
648
622
  }
623
+
624
+ // Get the pre-rendered icon
625
+ return getPrerenderedIcon(iconName);
649
626
  }
650
627
 
651
628
  // Format location from session data
@@ -298,8 +298,8 @@ async function initializeCheckout() {
298
298
  const urlParams = new URLSearchParams(window.location.search);
299
299
  const productId = urlParams.get('product');
300
300
  const frequency = urlParams.get('frequency') || 'annually';
301
- const _test_appId = urlParams.get('_test_appId');
302
- const _test_trialEligible = urlParams.get('_test_trialEligible');
301
+ const _dev_appId = urlParams.get('_dev_appId');
302
+ const _dev_trialEligible = urlParams.get('_dev_trialEligible');
303
303
 
304
304
  // Product ID is required
305
305
  if (!productId) {
@@ -307,7 +307,7 @@ async function initializeCheckout() {
307
307
  }
308
308
 
309
309
  // Check for testing parameters
310
- const appId = _test_appId || webManager.config.brand.id;
310
+ const appId = _dev_appId || webManager.config.brand.id;
311
311
 
312
312
  // Warmup server (fire and forget)
313
313
  warmupServer(webManager);
@@ -331,10 +331,10 @@ async function initializeCheckout() {
331
331
  let trialEligibilityResult = trialEligible;
332
332
 
333
333
  // Override trial eligibility for testing (only in development)
334
- if (_test_trialEligible && webManager.isDevelopment()) {
335
- if (_test_trialEligible === 'false') {
334
+ if (_dev_trialEligible && webManager.isDevelopment()) {
335
+ if (_dev_trialEligible === 'false') {
336
336
  trialEligibilityResult = { status: 'fulfilled', value: false };
337
- } else if (_test_trialEligible === 'true') {
337
+ } else if (_dev_trialEligible === 'true') {
338
338
  trialEligibilityResult = { status: 'fulfilled', value: true };
339
339
  }
340
340
  }
@@ -41,9 +41,9 @@ export class PaymentProcessorManager {
41
41
 
42
42
  // Determine processor based on payment method and available API keys
43
43
  if (paymentMethod === 'card') {
44
- // Check for _test_cardProcessor override in URL params (for testing)
44
+ // Check for _dev_cardProcessor override in URL params (for testing)
45
45
  const urlParams = new URLSearchParams(window.location.search);
46
- const forcedProcessor = urlParams.get('_test_cardProcessor');
46
+ const forcedProcessor = urlParams.get('_dev_cardProcessor');
47
47
 
48
48
  if (forcedProcessor && this.processors[forcedProcessor]) {
49
49
  processorName = forcedProcessor;
@@ -30,7 +30,7 @@ export function buildPaymentIntentData(webManager) {
30
30
  let processorName = state.paymentMethod;
31
31
  if (state.paymentMethod === 'card') {
32
32
  // Determine which processor will be used for card payments
33
- const forcedProcessor = urlParams.get('_test_cardProcessor');
33
+ const forcedProcessor = urlParams.get('_dev_cardProcessor');
34
34
 
35
35
  if (forcedProcessor) {
36
36
  processorName = forcedProcessor;
@@ -46,7 +46,7 @@ export function buildPaymentIntentData(webManager) {
46
46
  // Get UTM parameters from storage
47
47
  const utmData = webManager.storage().get('marketing.utm');
48
48
  let utm = {};
49
-
49
+
50
50
  // Check if stored UTM data exists and is less than 30 days old
51
51
  if (utmData && utmData.timestamp && utmData.tags) {
52
52
  const daysDiff = (new Date() - new Date(utmData.timestamp)) / (1000 * 60 * 60 * 24);
@@ -56,8 +56,8 @@ export function buildPaymentIntentData(webManager) {
56
56
  }
57
57
 
58
58
  // Check for test app ID override
59
- const _test_appId = urlParams.get('_test_appId');
60
- const appId = _test_appId || webManager.config.brand.id;
59
+ const _dev_appId = urlParams.get('_dev_appId');
60
+ const appId = _dev_appId || webManager.config.brand.id;
61
61
 
62
62
  // Build the payment intent data structure
63
63
  const paymentIntentData = {
@@ -35,6 +35,29 @@
35
35
  </div>
36
36
  </div>
37
37
 
38
+ {%- comment -%}
39
+ Icon Pre-rendering System
40
+ Pages can specify which icons to pre-render in their frontmatter:
41
+ prerender_icons:
42
+ - name: "apple"
43
+ class: "fa-3xl"
44
+ - name: "android"
45
+ class: "fa-2xl"
46
+ {%- endcomment -%}
47
+ {%- assign icons = page.resolved.prerender_icons | default: empty -%}
48
+ {%- iftruthy icons -%}
49
+ <!-- Pre-rendered Icon Templates -->
50
+ <div id="prerendered-icons" class="d-none" aria-hidden="true">
51
+ {%- for icon in icons -%}
52
+ {%- assign icon_name = icon.name | default: icon -%}
53
+ {%- assign icon_class = icon.class | default: "fa-3xl" -%}
54
+ <div data-icon="{{ icon_name }}" data-class="{{ icon_class }}">
55
+ {% uj_icon icon_name, icon_class %}
56
+ </div>
57
+ {%- endfor -%}
58
+ </div>
59
+ {%- endiftruthy -%}
60
+
38
61
  <!-- Script to prevent clicks on disabled elements during page load -->
39
62
  <script type="text/javascript">
40
63
  (function() {
@@ -13,6 +13,21 @@ web_manager:
13
13
  config:
14
14
  policy: "authenticated"
15
15
 
16
+ ### ICON PRE-RENDERING ###
17
+ prerender_icons:
18
+ - name: "apple"
19
+ class: "fa-3xl"
20
+ - name: "android"
21
+ class: "fa-3xl"
22
+ - name: "windows"
23
+ class: "fa-3xl"
24
+ - name: "linux"
25
+ class: "fa-3xl"
26
+ - name: "chrome"
27
+ class: "fa-3xl"
28
+ - name: "desktop"
29
+ class: "fa-3xl"
30
+
16
31
  ### PAGE CONFIG ###
17
32
  sections:
18
33
  - id: "profile"
@@ -790,20 +805,24 @@ badges:
790
805
  </div>
791
806
  </div>
792
807
  <div class="flex-shrink-0">
793
- <form id="signin-method-{{ method.id }}-form" class="d-inline" novalidate>
808
+ <form id="signin-method-{{ method.id }}-form" class="d-grid d-sm-inline-block" novalidate>
794
809
  <input type="hidden" name="method" value="{{ method.id }}">
795
810
  {% if method.id == "password" %}
796
- <input type="hidden" name="action" value="change">
797
- <button type="submit" class="btn btn-primary btn-sm w-100 w-sm-auto">
811
+ <button type="submit" class="btn btn-primary btn-sm" data-action="change">
798
812
  {% uj_icon "key", "me-1" %}
799
813
  <span class="button-text">Change</span>
800
814
  </button>
801
815
  {% else %}
802
- <input type="hidden" name="action" value="connect">
803
- <button type="submit" class="btn btn-primary btn-sm w-100 w-sm-auto">
816
+ <!-- Connect button -->
817
+ <button type="submit" class="btn btn-primary btn-sm" data-action="connect">
804
818
  {% uj_icon "link", "me-1" %}
805
819
  <span class="button-text">Connect</span>
806
820
  </button>
821
+ <!-- Disconnect button (hidden by default) -->
822
+ <button type="submit" class="btn btn-sm btn-outline-danger d-none" data-action="disconnect">
823
+ {% uj_icon "unlink", "me-1" %}
824
+ <span class="button-text">Disconnect</span>
825
+ </button>
807
826
  {% endif %}
808
827
  </form>
809
828
  </div>
@@ -828,6 +847,7 @@ badges:
828
847
  <div class="card-body">
829
848
  <h5 class="card-title">Active Sessions</h5>
830
849
  <p class="card-text text-muted">Manage your active sessions across devices. Review and revoke access from unrecognized devices.</p>
850
+
831
851
  <div id="active-sessions-list" class="list-group list-group-flush mb-3">
832
852
  <!-- Sessions will be loaded here -->
833
853
  <div class="text-center py-3">
@@ -884,15 +904,22 @@ badges:
884
904
  </div>
885
905
  </div>
886
906
  <div class="text-start text-sm-end flex-shrink-0">
887
- <form id="connection-form-{{ connection.id }}" class="d-inline" novalidate>
888
- <input type="hidden" name="provider" value="{{ connection.id }}">
889
- <input type="hidden" name="action" value="connect">
890
- <button type="submit" class="btn btn-sm btn-primary w-100 w-sm-auto" data-connect-text="Connect" data-disconnect-text="Disconnect">
891
- {% uj_icon "link", "fa-sm" %}
892
- <span class="button-text">Connect</span>
893
- </button>
894
- </form>
895
- <small class="text-muted d-block mt-1" id="{{ connection.id }}-connection-status"></small>
907
+ <div>
908
+ <form id="connection-form-{{ connection.id }}" class="d-grid d-sm-inline-block" novalidate>
909
+ <input type="hidden" name="provider" value="{{ connection.id }}">
910
+ <!-- Connect button -->
911
+ <button type="submit" class="btn btn-sm btn-primary" data-action="connect">
912
+ {% uj_icon "link", "fa-sm" %}
913
+ <span class="button-text">Connect</span>
914
+ </button>
915
+ <!-- Disconnect button (hidden by default) -->
916
+ <button type="submit" class="btn btn-sm btn-outline-danger d-none" data-action="disconnect">
917
+ {% uj_icon "unlink", "fa-sm" %}
918
+ <span class="button-text">Disconnect</span>
919
+ </button>
920
+ </form>
921
+ <small class="text-muted d-block mt-1" id="{{ connection.id }}-connection-status"></small>
922
+ </div>
896
923
  </div>
897
924
  </div>
898
925
  </div>
@@ -0,0 +1,7 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/pricing
4
+ permalink: /pricing
5
+
6
+ ### REGULAR PAGES ###
7
+ ---
@@ -618,3 +618,129 @@
618
618
  [debug] [2025-11-18T22:25:38.279Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
619
619
  [debug] [2025-11-18T22:25:38.279Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
620
620
  [debug] [2025-11-18T22:25:38.279Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
621
+ [debug] [2025-11-19T02:44:25.020Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
622
+ [debug] [2025-11-19T02:44:25.021Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
623
+ [debug] [2025-11-19T02:44:25.022Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
624
+ [debug] [2025-11-19T02:44:25.022Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
625
+ [debug] [2025-11-19T02:44:25.022Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
626
+ [debug] [2025-11-19T02:44:25.030Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
627
+ [debug] [2025-11-19T02:44:25.031Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
628
+ [debug] [2025-11-19T02:44:25.023Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
629
+ [debug] [2025-11-19T02:44:25.023Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
630
+ [debug] [2025-11-19T02:44:25.023Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
631
+ [debug] [2025-11-19T02:44:25.031Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
632
+ [debug] [2025-11-19T02:44:25.032Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
633
+ [debug] [2025-11-19T02:44:25.076Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
634
+ [debug] [2025-11-19T02:44:25.077Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
635
+ [debug] [2025-11-19T02:44:25.077Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
636
+ [debug] [2025-11-19T02:44:25.078Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
637
+ [debug] [2025-11-19T02:44:25.078Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
638
+ [debug] [2025-11-19T02:44:25.080Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
639
+ [debug] [2025-11-19T02:44:25.080Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
640
+ [debug] [2025-11-19T02:44:25.080Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
641
+ [debug] [2025-11-19T02:44:25.081Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
642
+ [debug] [2025-11-19T02:44:25.077Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
643
+ [debug] [2025-11-19T02:44:25.077Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
644
+ [debug] [2025-11-19T02:44:25.077Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
645
+ [debug] [2025-11-19T02:44:25.079Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
646
+ [debug] [2025-11-19T02:44:25.079Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
647
+ [debug] [2025-11-19T02:44:25.079Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
648
+ [debug] [2025-11-19T02:44:25.079Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
649
+ [debug] [2025-11-19T02:44:30.083Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
650
+ [debug] [2025-11-19T02:44:30.084Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
651
+ [debug] [2025-11-19T02:44:30.085Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
652
+ [debug] [2025-11-19T02:44:30.085Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
653
+ [debug] [2025-11-19T02:44:30.086Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
654
+ [debug] [2025-11-19T02:44:30.094Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
655
+ [debug] [2025-11-19T02:44:30.094Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
656
+ [debug] [2025-11-19T02:44:30.085Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
657
+ [debug] [2025-11-19T02:44:30.085Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
658
+ [debug] [2025-11-19T02:44:30.085Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
659
+ [debug] [2025-11-19T02:44:30.094Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
660
+ [debug] [2025-11-19T02:44:30.095Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
661
+ [debug] [2025-11-19T02:44:30.142Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
662
+ [debug] [2025-11-19T02:44:30.144Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
663
+ [debug] [2025-11-19T02:44:30.142Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
664
+ [debug] [2025-11-19T02:44:30.143Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
665
+ [debug] [2025-11-19T02:44:30.143Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
666
+ [debug] [2025-11-19T02:44:30.145Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
667
+ [debug] [2025-11-19T02:44:30.145Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
668
+ [debug] [2025-11-19T02:44:30.145Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
669
+ [debug] [2025-11-19T02:44:30.145Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
670
+ [debug] [2025-11-19T02:44:30.144Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
671
+ [debug] [2025-11-19T02:44:30.145Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
672
+ [debug] [2025-11-19T02:44:30.145Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
673
+ [debug] [2025-11-19T02:44:30.147Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
674
+ [debug] [2025-11-19T02:44:30.147Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
675
+ [debug] [2025-11-19T02:44:30.148Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
676
+ [debug] [2025-11-19T02:44:30.148Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
677
+ [debug] [2025-11-19T02:44:36.228Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
678
+ [debug] [2025-11-19T02:44:36.230Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
679
+ [debug] [2025-11-19T02:44:36.231Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
680
+ [debug] [2025-11-19T02:44:36.231Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
681
+ [debug] [2025-11-19T02:44:36.239Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
682
+ [debug] [2025-11-19T02:44:36.239Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
683
+ [debug] [2025-11-19T02:44:36.283Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
684
+ [debug] [2025-11-19T02:44:36.283Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
685
+ [debug] [2025-11-19T02:44:36.284Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
686
+ [debug] [2025-11-19T02:44:36.284Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
687
+ [debug] [2025-11-19T02:44:36.286Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
688
+ [debug] [2025-11-19T02:44:36.286Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
689
+ [debug] [2025-11-19T02:44:36.286Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
690
+ [debug] [2025-11-19T02:44:36.286Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
691
+ [debug] [2025-11-19T04:39:08.515Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
692
+ [debug] [2025-11-19T04:39:08.522Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
693
+ [debug] [2025-11-19T04:39:08.518Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
694
+ [debug] [2025-11-19T04:39:08.518Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
695
+ [debug] [2025-11-19T04:39:08.518Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
696
+ [debug] [2025-11-19T04:39:08.527Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
697
+ [debug] [2025-11-19T04:39:08.527Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
698
+ [debug] [2025-11-19T04:39:08.524Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
699
+ [debug] [2025-11-19T04:39:08.524Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
700
+ [debug] [2025-11-19T04:39:08.525Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
701
+ [debug] [2025-11-19T04:39:08.533Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
702
+ [debug] [2025-11-19T04:39:08.533Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
703
+ [debug] [2025-11-19T04:39:08.571Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
704
+ [debug] [2025-11-19T04:39:08.571Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
705
+ [debug] [2025-11-19T04:39:08.572Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
706
+ [debug] [2025-11-19T04:39:08.572Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
707
+ [debug] [2025-11-19T04:39:08.574Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
708
+ [debug] [2025-11-19T04:39:08.574Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
709
+ [debug] [2025-11-19T04:39:08.574Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
710
+ [debug] [2025-11-19T04:39:08.575Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
711
+ [debug] [2025-11-19T04:39:08.575Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
712
+ [debug] [2025-11-19T04:39:08.576Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
713
+ [debug] [2025-11-19T04:39:08.576Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
714
+ [debug] [2025-11-19T04:39:08.576Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
715
+ [debug] [2025-11-19T04:39:08.578Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
716
+ [debug] [2025-11-19T04:39:08.578Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
717
+ [debug] [2025-11-19T04:39:08.578Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
718
+ [debug] [2025-11-19T04:39:08.578Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
719
+ [debug] [2025-11-19T05:48:24.041Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
720
+ [debug] [2025-11-19T05:48:24.043Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
721
+ [debug] [2025-11-19T05:48:24.043Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
722
+ [debug] [2025-11-19T05:48:24.043Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
723
+ [debug] [2025-11-19T05:48:24.044Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
724
+ [debug] [2025-11-19T05:48:24.057Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
725
+ [debug] [2025-11-19T05:48:24.058Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
726
+ [debug] [2025-11-19T05:48:24.045Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
727
+ [debug] [2025-11-19T05:48:24.046Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
728
+ [debug] [2025-11-19T05:48:24.046Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
729
+ [debug] [2025-11-19T05:48:24.063Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
730
+ [debug] [2025-11-19T05:48:24.063Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
731
+ [debug] [2025-11-19T05:48:24.125Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
732
+ [debug] [2025-11-19T05:48:24.126Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
733
+ [debug] [2025-11-19T05:48:24.126Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
734
+ [debug] [2025-11-19T05:48:24.126Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
735
+ [debug] [2025-11-19T05:48:24.126Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
736
+ [debug] [2025-11-19T05:48:24.128Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
737
+ [debug] [2025-11-19T05:48:24.128Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
738
+ [debug] [2025-11-19T05:48:24.129Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
739
+ [debug] [2025-11-19T05:48:24.129Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
740
+ [debug] [2025-11-19T05:48:24.126Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
741
+ [debug] [2025-11-19T05:48:24.127Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
742
+ [debug] [2025-11-19T05:48:24.127Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
743
+ [debug] [2025-11-19T05:48:24.129Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
744
+ [debug] [2025-11-19T05:48:24.129Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
745
+ [debug] [2025-11-19T05:48:24.130Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
746
+ [debug] [2025-11-19T05:48:24.130Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "0.0.117",
3
+ "version": "0.0.118",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -82,7 +82,7 @@
82
82
  "gulp-responsive-modern": "^1.0.0",
83
83
  "gulp-sass": "^6.0.1",
84
84
  "html-minifier-terser": "^7.2.0",
85
- "html-validate": "^10.3.1",
85
+ "html-validate": "^10.4.0",
86
86
  "itwcw-package-analytics": "^1.0.6",
87
87
  "js-yaml": "^3.14.2",
88
88
  "json5": "^2.2.3",
@@ -94,11 +94,11 @@
94
94
  "npm-api": "^1.0.1",
95
95
  "postcss": "^8.5.6",
96
96
  "prettier": "^3.6.2",
97
- "sass": "^1.94.0",
97
+ "sass": "^1.94.1",
98
98
  "spellchecker": "^3.7.1",
99
99
  "through2": "^4.0.2",
100
- "web-manager": "^4.0.23",
101
- "webpack": "^5.102.1",
100
+ "web-manager": "^4.0.25",
101
+ "webpack": "^5.103.0",
102
102
  "wonderful-fetch": "^1.3.4",
103
103
  "wonderful-version": "^1.3.2",
104
104
  "yargs": "^17.7.2"