cloudcommerce 0.0.72 → 0.0.75

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.json +8 -8
  3. package/packages/api/package.json +1 -1
  4. package/packages/apps/correios/package.json +1 -1
  5. package/packages/apps/custom-shipping/package.json +1 -1
  6. package/packages/apps/discounts/package.json +1 -1
  7. package/packages/apps/frenet/package.json +1 -1
  8. package/packages/apps/tiny-erp/package.json +1 -1
  9. package/packages/cli/config/firebase.json +47 -0
  10. package/packages/cli/package.json +1 -1
  11. package/packages/config/package.json +1 -1
  12. package/packages/events/package.json +1 -1
  13. package/packages/firebase/package.json +1 -1
  14. package/packages/modules/lib/firebase/ajv.js +2 -1
  15. package/packages/modules/lib/firebase/ajv.js.map +1 -1
  16. package/packages/modules/lib/firebase/handle-module.js +5 -1
  17. package/packages/modules/lib/firebase/handle-module.js.map +1 -1
  18. package/packages/modules/lib/firebase/serve-modules-api.js +4 -3
  19. package/packages/modules/lib/firebase/serve-modules-api.js.map +1 -1
  20. package/packages/modules/package.json +2 -1
  21. package/packages/modules/schemas/@checkout.cjs +28 -28
  22. package/packages/modules/schemas/apply_discount.cjs +2 -2
  23. package/packages/modules/schemas/calculate_shipping.cjs +4 -4
  24. package/packages/modules/schemas/create_transaction.cjs +30 -30
  25. package/packages/modules/schemas/list_payments.cjs +6 -6
  26. package/packages/modules/src/firebase/ajv.ts +2 -1
  27. package/packages/modules/src/firebase/handle-module.ts +5 -1
  28. package/packages/modules/src/firebase/serve-modules-api.ts +5 -3
  29. package/packages/passport/package.json +1 -1
  30. package/packages/ssr/lib/firebase/serve-storefront.js +13 -32
  31. package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
  32. package/packages/ssr/package.json +1 -1
  33. package/packages/ssr/src/firebase/serve-storefront.ts +13 -37
  34. package/packages/storefront/astro.config.mjs +2 -0
  35. package/packages/storefront/dist/client/LoginModal.d6b935cf.js +1 -0
  36. package/packages/storefront/dist/client/assets/{_...c08e0a75.css → _...27b7eb4d.css} +1 -1
  37. package/packages/storefront/dist/client/assets/_...b3f65c5c.css +1 -0
  38. package/packages/storefront/dist/client/assets/fallback-index.90217cf0.css +1 -0
  39. package/packages/storefront/dist/client/assets/{404.b3ead908.css → fallback.9cd2ed3f.css} +1 -1
  40. package/packages/storefront/dist/client/assets/{index.9745690c.css → index.c5a9ea80.css} +1 -1
  41. package/packages/storefront/dist/client/chunks/index.esm.69f70489.js +1726 -0
  42. package/packages/storefront/dist/client/chunks/index.esm2017.1194d1a1.js +457 -0
  43. package/packages/storefront/dist/client/chunks/runtime-core.esm-bundler.a7337834.js +1 -0
  44. package/packages/storefront/dist/client/client.80b904f3.js +1 -0
  45. package/packages/storefront/dist/client/hoisted.24787260.js +376 -0
  46. package/packages/storefront/dist/server/entry.mjs +466 -221
  47. package/packages/storefront/package.json +9 -7
  48. package/packages/storefront/src/assets/firebaseui.css +648 -0
  49. package/packages/storefront/src/lib/components/LoginModal.vue +42 -9
  50. package/packages/storefront/src/lib/layouts/Layout.astro +24 -0
  51. package/packages/storefront/src/lib/ssr-context.ts +54 -30
  52. package/packages/storefront/src/lib/views/{404.astro → fallback.astro} +1 -1
  53. package/packages/storefront/src/pages/[...slug].astro +7 -2
  54. package/packages/storefront/src/pages/{404.astro → fallback.astro} +2 -2
  55. package/packages/storefront/src/pages/index.astro +7 -2
  56. package/packages/types/package.json +1 -1
  57. package/packages/storefront/dist/client/assets/404-500-_...d4aa8aff.css +0 -1
  58. package/packages/storefront/dist/client/assets/404-500-index.d9230d24.css +0 -1
  59. package/packages/storefront/dist/client/assets/500.d5d7700b.css +0 -1
  60. package/packages/storefront/dist/client/client.6d48c590.js +0 -1
  61. package/packages/storefront/src/lib/views/500.astro +0 -79
  62. package/packages/storefront/src/pages/500.astro +0 -13
@@ -23,8 +23,8 @@ const schema = {
23
23
  },
24
24
  'number': {
25
25
  'type': 'integer',
26
- 'min': 1,
27
- 'max': 9999999,
26
+ 'minimum': 1,
27
+ 'maximum': 9999999,
28
28
  'description': 'House or building street number'
29
29
  },
30
30
  'complement': {
@@ -93,8 +93,8 @@ const schema = {
93
93
  'properties': {
94
94
  'country_code': {
95
95
  'type': 'integer',
96
- 'min': 1,
97
- 'max': 999,
96
+ 'minimum': 1,
97
+ 'maximum': 999,
98
98
  'description': 'Country calling code (without +), defined by standards E.123 and E.164'
99
99
  },
100
100
  'number': {
@@ -306,20 +306,20 @@ const schema = {
306
306
  'properties': {
307
307
  'day': {
308
308
  'type': 'integer',
309
- 'min': 1,
310
- 'max': 31,
309
+ 'minimum': 1,
310
+ 'maximum': 31,
311
311
  'description': 'Day of birth'
312
312
  },
313
313
  'month': {
314
314
  'type': 'integer',
315
- 'min': 1,
316
- 'max': 12,
315
+ 'minimum': 1,
316
+ 'maximum': 12,
317
317
  'description': 'Number of month of birth'
318
318
  },
319
319
  'year': {
320
320
  'type': 'integer',
321
- 'min': 1800,
322
- 'max': 2200,
321
+ 'minimum': 1800,
322
+ 'maximum': 2200,
323
323
  'description': 'Year of birth'
324
324
  }
325
325
  },
@@ -332,8 +332,8 @@ const schema = {
332
332
  'properties': {
333
333
  'country_code': {
334
334
  'type': 'integer',
335
- 'min': 1,
336
- 'max': 999,
335
+ 'minimum': 1,
336
+ 'maximum': 999,
337
337
  'description': 'Country calling code (without +), defined by standards E.123 and E.164'
338
338
  },
339
339
  'number': {
@@ -396,20 +396,20 @@ const schema = {
396
396
  'properties': {
397
397
  'day': {
398
398
  'type': 'integer',
399
- 'min': 1,
400
- 'max': 31,
399
+ 'minimum': 1,
400
+ 'maximum': 31,
401
401
  'description': 'Day of birth'
402
402
  },
403
403
  'month': {
404
404
  'type': 'integer',
405
- 'min': 1,
406
- 'max': 12,
405
+ 'minimum': 1,
406
+ 'maximum': 12,
407
407
  'description': 'Number of month of birth'
408
408
  },
409
409
  'year': {
410
410
  'type': 'integer',
411
- 'min': 1800,
412
- 'max': 2200,
411
+ 'minimum': 1800,
412
+ 'maximum': 2200,
413
413
  'description': 'Year of birth'
414
414
  }
415
415
  },
@@ -422,8 +422,8 @@ const schema = {
422
422
  'properties': {
423
423
  'country_code': {
424
424
  'type': 'integer',
425
- 'min': 1,
426
- 'max': 999,
425
+ 'minimum': 1,
426
+ 'maximum': 999,
427
427
  'description': 'Country calling code (without +), defined by standards E.123 and E.164'
428
428
  },
429
429
  'number': {
@@ -485,8 +485,8 @@ const schema = {
485
485
  },
486
486
  'bin': {
487
487
  'type': 'integer',
488
- 'min': 1,
489
- 'max': 9999999,
488
+ 'minimum': 1,
489
+ 'maximum': 9999999,
490
490
  'description': 'Issuer identification number (IIN), known as bank identification number (BIN)'
491
491
  },
492
492
  'company': {
@@ -507,8 +507,8 @@ const schema = {
507
507
  },
508
508
  'cvv': {
509
509
  'type': 'integer',
510
- 'min': 99,
511
- 'max': 99999,
510
+ 'minimum': 99,
511
+ 'maximum': 99999,
512
512
  'description': 'Credit card CVV number (Card Verification Value)'
513
513
  },
514
514
  'hash': {
@@ -552,8 +552,8 @@ const schema = {
552
552
  },
553
553
  'order_number': {
554
554
  'type': 'integer',
555
- 'min': 1,
556
- 'max': 999999999,
555
+ 'minimum': 1,
556
+ 'maximum': 999999999,
557
557
  'description': 'Number of created order'
558
558
  },
559
559
  'open_payment_id': {
@@ -605,8 +605,8 @@ const schema = {
605
605
  },
606
606
  'channel_id': {
607
607
  'type': 'integer',
608
- 'min': 10000,
609
- 'max': 4294967295,
608
+ 'minimum': 10000,
609
+ 'maximum': 4294967295,
610
610
  'description': 'Channel unique identificator'
611
611
  },
612
612
  'channel_type': {
@@ -723,8 +723,8 @@ exports.response = {
723
723
  },
724
724
  'bin': {
725
725
  'type': 'integer',
726
- 'min': 1,
727
- 'max': 9999999,
726
+ 'minimum': 1,
727
+ 'maximum': 9999999,
728
728
  'description': 'Issuer identification number (IIN), known as bank identification number (BIN)'
729
729
  },
730
730
  'company': {
@@ -250,8 +250,8 @@ const schema = {
250
250
  'properties': {
251
251
  'country_code': {
252
252
  'type': 'integer',
253
- 'min': 1,
254
- 'max': 999,
253
+ 'minimum': 1,
254
+ 'maximum': 999,
255
255
  'description': 'Country calling code (without +), defined by standards E.123 and E.164'
256
256
  },
257
257
  'number': {
@@ -328,8 +328,8 @@ const schema = {
328
328
  },
329
329
  'number': {
330
330
  'type': 'integer',
331
- 'min': 1,
332
- 'max': 9999999,
331
+ 'minimum': 1,
332
+ 'maximum': 9999999,
333
333
  'description': 'House or building street number'
334
334
  },
335
335
  'complement': {
@@ -398,8 +398,8 @@ const schema = {
398
398
  'properties': {
399
399
  'country_code': {
400
400
  'type': 'integer',
401
- 'min': 1,
402
- 'max': 999,
401
+ 'minimum': 1,
402
+ 'maximum': 999,
403
403
  'description': 'Country calling code (without +), defined by standards E.123 and E.164'
404
404
  },
405
405
  'number': {
@@ -1,5 +1,6 @@
1
1
  import type { Response } from 'firebase-functions';
2
2
  import Ajv, { Options, ErrorObject } from 'ajv';
3
+ import addFormats from 'ajv-formats';
3
4
 
4
5
  const ajvOptions: Options = {
5
6
  coerceTypes: false,
@@ -10,7 +11,7 @@ const ajvOptions: Options = {
10
11
  multipleOfPrecision: 5,
11
12
  allowMatchingProperties: true,
12
13
  };
13
- const ajv = new Ajv(ajvOptions);
14
+ const ajv = addFormats(new Ajv(ajvOptions));
14
15
 
15
16
  const parseAjvErrors = (errors?: ErrorObject[] | null, ajvInstance = ajv) => {
16
17
  return ajvInstance.errorsText(errors, { separator: '\n' });
@@ -2,6 +2,7 @@ import type { Request, Response } from 'firebase-functions';
2
2
  import type { Applications, AppModuleName, AppModuleBody } from '@cloudcommerce/types';
3
3
  import { logger } from 'firebase-functions';
4
4
  import Ajv, { ValidateFunction } from 'ajv';
5
+ import addFormats from 'ajv-formats';
5
6
  import api, { ApiError, ApiConfig } from '@cloudcommerce/api';
6
7
  import config from '@cloudcommerce/firebase/lib/config';
7
8
  import {
@@ -12,7 +13,7 @@ import {
12
13
  } from './ajv';
13
14
  import callAppModule from './call-app-module';
14
15
 
15
- const ajvAppsResponse = new Ajv({ ...ajvOptions, allErrors: true });
16
+ const ajvAppsResponse = addFormats(new Ajv({ ...ajvOptions, allErrors: true }));
16
17
 
17
18
  // Cache apps list and no params modules results
18
19
  const appsCache = {};
@@ -46,6 +47,9 @@ async function runModule(
46
47
  appId
47
48
  && (typeof appId === 'number' || (typeof appId === 'string' && /^\d+$/.test(appId)))
48
49
  ) {
50
+ if (typeof appId === 'string') {
51
+ appId = parseInt(appId, 10);
52
+ }
49
53
  canCache = false;
50
54
  listAppsParams.app_id = appId;
51
55
  listAppsParams.limit = 1;
@@ -18,7 +18,9 @@ export default (req: Request, res: Response) => {
18
18
  if (url.endsWith('.json')) {
19
19
  url = url.slice(0, -5);
20
20
  }
21
+ [url] = url.split('?');
21
22
  const modName = url.split('/')[1];
23
+
22
24
  const sendSchema = (isResponseSchema = false) => {
23
25
  return res.status(200)
24
26
  .setHeader('Cache-Control', 'public, max-age=3600')
@@ -41,11 +43,11 @@ export default (req: Request, res: Response) => {
41
43
  if (schemas[modName]) {
42
44
  const { params: schema, response: responseSchema } = schemas[modName];
43
45
  if (!schema.$schema) {
44
- schema.$schema = 'http://json-schema.org/draft-06/schema#';
46
+ schema.$schema = 'http://json-schema.org/draft-07/schema#';
45
47
  schema.title = `Module \`${modName}\`: Params model`;
46
48
  }
47
49
  if (!responseSchema.$schema) {
48
- responseSchema.$schema = 'http://json-schema.org/draft-06/schema#';
50
+ responseSchema.$schema = 'http://json-schema.org/draft-07/schema#';
49
51
  responseSchema.title = `Module \`${modName}\`: App response model`;
50
52
  }
51
53
  if (url === `/${modName}/schema`) {
@@ -55,7 +57,7 @@ export default (req: Request, res: Response) => {
55
57
  return sendSchema(true);
56
58
  }
57
59
  if (url === `/${modName}`) {
58
- return handleModule(modName, schema, responseSchema, req, res);
60
+ return handleModule(modName, schema, responseSchema, req, res)[method]();
59
61
  }
60
62
  }
61
63
  return res.sendStatus(404);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/passport",
3
3
  "type": "module",
4
- "version": "0.0.72",
4
+ "version": "0.0.75",
5
5
  "description": "E-Com Plus Cloud Commerce customers authentication (passport) API",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,10 +1,9 @@
1
1
  import { join as joinPath } from 'path';
2
2
  import { readFile } from 'fs/promises';
3
3
 
4
- const { STOREFRONT_BASE_DIR, STOREFRONT_LONG_CACHE } = process.env;
4
+ const { STOREFRONT_BASE_DIR } = process.env;
5
5
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
6
6
  const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
7
- const isLongCache = String(STOREFRONT_LONG_CACHE).toLowerCase() === 'true';
8
7
 
9
8
  export default (req, res) => {
10
9
  const url = req.url.replace(/\?.*$/, '').replace(/\.html$/, '');
@@ -14,32 +13,16 @@ export default (req, res) => {
14
13
  .set('Cache-Control', (typeof global.cache_control === 'function' && global.cache_control(status))
15
14
  || defaultCache);
16
15
  };
17
- const redirect = (toUrl, status = 302) => {
18
- let sMaxAge = status === 301 ? 360 : 12;
19
- if (isLongCache) {
20
- sMaxAge *= 10;
21
- }
22
- let cacheControl = `public, max-age=30, s-maxage=${sMaxAge}`;
23
- if (status === 302) {
24
- cacheControl += ', proxy-revalidate';
25
- }
26
- setStatusAndCache(status, cacheControl)
27
- .set('Location', toUrl).end();
28
- };
29
- const fallback = (status = 404) => {
30
- const is404 = status === 404;
31
- if (is404 && url.slice(-1) === '/') {
32
- redirect(url.slice(0, -1));
33
- } else if (url !== `/${status}` && (/\/[^/.]+$/.test(url) || /\.x?html$/.test(url))) {
34
- setStatusAndCache(status, `public, max-age=${(isLongCache ? 120 : 30)}`)
16
+ const fallback = (err, status = 500) => {
17
+ if (url !== '/fallback' && (/\/[^/.]+$/.test(url) || /\.x?html$/.test(url))) {
18
+ setStatusAndCache(status, 'public, max-age=120')
35
19
  .send('<html><head>'
36
- + `<meta http-equiv="refresh" content="0; url=/${status}?url=${encodeURIComponent(url)}"/>`
37
- + '</head><body></body></html>');
20
+ + '<meta http-equiv="refresh" content="0; '
21
+ + `url=/fallback?status=${status}&url=${encodeURIComponent(url)}"/>`
22
+ + `</head><body>${err.toString()}</body></html>`);
38
23
  } else {
39
- setStatusAndCache(status, isLongCache && is404
40
- ? 'public, max-age=60, s-maxage=86400'
41
- : 'public, max-age=60, s-maxage=300')
42
- .end();
24
+ setStatusAndCache(status, 'public, max-age=120, s-maxage=600')
25
+ .send(err.toString());
43
26
  }
44
27
  };
45
28
  /*
@@ -49,19 +32,17 @@ export default (req, res) => {
49
32
  */
50
33
  global.ssr_handler(req, res, async (err) => {
51
34
  if (err) {
52
- res.set('X-SSR-Error', err.stack);
53
- fallback(500);
35
+ res.set('X-SSR-Error', err.message);
36
+ fallback(err);
54
37
  return;
55
38
  }
56
39
  const local = new URL(`.${url}`, clientRoot);
57
40
  try {
58
41
  const data = await readFile(local);
59
- setStatusAndCache(200, isLongCache
60
- ? 'public, max-age=60, s-maxage=604800'
61
- : 'public, max-age=60, s-maxage=600, stale-while-revalidate=2592000')
42
+ setStatusAndCache(200, 'public, max-age=60, s-maxage=600')
62
43
  .send(data);
63
44
  } catch {
64
- fallback();
45
+ fallback(err, 404);
65
46
  }
66
47
  });
67
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAC5C,MAAM,OAAO,GAAG,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACrD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/E,eAAe,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEhE,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,YAAoB,EAAE,EAAE;QACjE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;aACtB,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aACtC,GAAG,CACF,eAAe,EACf,CAAC,OAAO,MAAM,CAAC,aAAa,KAAK,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;eACvE,YAAY,CAClB,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE;QAC1C,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAC3E,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,CAAC;iBAC7C,IAAI,CAAC,cAAc;kBAChB,yCAAyC;kBACvC,wBAAwB,MAAM,QAAQ,kBAAkB,CAAC,GAAG,CAAC,KAAK;kBACpE,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;SACvD;aAAM;YACL,iBAAiB,CAAC,MAAM,EAAE,mCAAmC,CAAC;iBAC3D,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;SACzB;IACH,CAAC,CAAC;IAEF;;;;MAIE;IACF,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;QAC9C,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,OAAO;SACR;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,iBAAiB,CAAC,GAAG,EAAE,kCAAkC,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,CAAC;SACf;QAAC,MAAM;YACN,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACpB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/ssr",
3
3
  "type": "module",
4
- "version": "0.0.72",
4
+ "version": "0.0.75",
5
5
  "description": "E-Com Plus Cloud Commerce storefront SSR",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -2,14 +2,9 @@ import type { Request, Response } from 'firebase-functions';
2
2
  import { join as joinPath } from 'path';
3
3
  import { readFile } from 'fs/promises';
4
4
 
5
- const {
6
- STOREFRONT_BASE_DIR,
7
- STOREFRONT_LONG_CACHE,
8
- } = process.env;
9
-
5
+ const { STOREFRONT_BASE_DIR } = process.env;
10
6
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
11
7
  const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
12
- const isLongCache = String(STOREFRONT_LONG_CACHE).toLowerCase() === 'true';
13
8
 
14
9
  export default (req: Request, res: Response) => {
15
10
  const url = req.url.replace(/\?.*$/, '').replace(/\.html$/, '');
@@ -24,33 +19,16 @@ export default (req: Request, res: Response) => {
24
19
  );
25
20
  };
26
21
 
27
- const redirect = (toUrl: string, status = 302) => {
28
- let sMaxAge = status === 301 ? 360 : 12;
29
- if (isLongCache) {
30
- sMaxAge *= 10;
31
- }
32
- let cacheControl = `public, max-age=30, s-maxage=${sMaxAge}`;
33
- if (status === 302) {
34
- cacheControl += ', proxy-revalidate';
35
- }
36
- setStatusAndCache(status, cacheControl)
37
- .set('Location', toUrl).end();
38
- };
39
-
40
- const fallback = (status = 404) => {
41
- const is404 = status === 404;
42
- if (is404 && url.slice(-1) === '/') {
43
- redirect(url.slice(0, -1));
44
- } else if (url !== `/${status}` && (/\/[^/.]+$/.test(url) || /\.x?html$/.test(url))) {
45
- setStatusAndCache(status, `public, max-age=${(isLongCache ? 120 : 30)}`)
22
+ const fallback = (err: any, status = 500) => {
23
+ if (url !== '/fallback' && (/\/[^/.]+$/.test(url) || /\.x?html$/.test(url))) {
24
+ setStatusAndCache(status, 'public, max-age=120')
46
25
  .send('<html><head>'
47
- + `<meta http-equiv="refresh" content="0; url=/${status}?url=${encodeURIComponent(url)}"/>`
48
- + '</head><body></body></html>');
26
+ + '<meta http-equiv="refresh" content="0; '
27
+ + `url=/fallback?status=${status}&url=${encodeURIComponent(url)}"/>`
28
+ + `</head><body>${err.toString()}</body></html>`);
49
29
  } else {
50
- setStatusAndCache(status, isLongCache && is404
51
- ? 'public, max-age=60, s-maxage=86400'
52
- : 'public, max-age=60, s-maxage=300')
53
- .end();
30
+ setStatusAndCache(status, 'public, max-age=120, s-maxage=600')
31
+ .send(err.toString());
54
32
  }
55
33
  };
56
34
 
@@ -61,19 +39,17 @@ export default (req: Request, res: Response) => {
61
39
  */
62
40
  global.ssr_handler(req, res, async (err: any) => {
63
41
  if (err) {
64
- res.set('X-SSR-Error', err.stack);
65
- fallback(500);
42
+ res.set('X-SSR-Error', err.message);
43
+ fallback(err);
66
44
  return;
67
45
  }
68
46
  const local = new URL(`.${url}`, clientRoot);
69
47
  try {
70
48
  const data = await readFile(local);
71
- setStatusAndCache(200, isLongCache
72
- ? 'public, max-age=60, s-maxage=604800'
73
- : 'public, max-age=60, s-maxage=600, stale-while-revalidate=2592000')
49
+ setStatusAndCache(200, 'public, max-age=60, s-maxage=600')
74
50
  .send(data);
75
51
  } catch {
76
- fallback();
52
+ fallback(err, 404);
77
53
  }
78
54
  });
79
55
  };
@@ -4,6 +4,7 @@ import * as dotenv from 'dotenv';
4
4
  import { defineConfig } from 'astro/config';
5
5
  import node from '@astrojs/node';
6
6
  import vue from '@astrojs/vue';
7
+ import image from '@astrojs/image';
7
8
  import partytown from '@astrojs/partytown';
8
9
  import prefetch from '@astrojs/prefetch';
9
10
  import sitemap from '@astrojs/sitemap';
@@ -17,6 +18,7 @@ export default defineConfig({
17
18
  adapter: node(),
18
19
  integrations: [
19
20
  vue(),
21
+ image(),
20
22
  partytown(),
21
23
  prefetch(),
22
24
  sitemap(),
@@ -0,0 +1 @@
1
+ import{r as w,c as j,a as g,t as k,b as T,F as x,o as N}from"./chunks/runtime-core.esm-bundler.a7337834.js";/* empty css */const v="modulepreload",M=function(r){return"/"+r},U={},D=function(c,a,d){return!a||a.length===0?c():Promise.all(a.map(u=>{if(u=M(u),u in U)return;U[u]=!0;const _=u.endsWith(".css"),y=_?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${y}`))return;const i=document.createElement("link");if(i.rel=_?"stylesheet":v,_||(i.as="script",i.crossOrigin=""),i.href=u,document.head.appendChild(i),_)return new Promise((E,A)=>{i.addEventListener("load",E),i.addEventListener("error",()=>A(new Error(`Unable to preload CSS for ${u}`)))})})).then(()=>c())};var C={exports:{}};function R(r){function c(e){return e!=="constructor"&&e!=="prototype"&&e!=="__proto__"}function a(e){let t=0;const n=e.length,o=new Array(n);for(t=0;t<n;++t)o[t]=m(e[t]);return o}function d(e){const t={},n=i(e);let o,s,l;for(o=0,s=n.length;o<s;++o)c(l=n[o])&&(t[l]=m(e[l]));return t}function u(e,t){const n=e.length,o=t.length;let s=0;const l=new Array(n+o);for(s=0;s<n;++s)l[s]=m(e[s]);for(s=0;s<o;++s)l[s+n]=m(t[s]);return l}const _=Object.prototype.propertyIsEnumerable;function y(e){const t=Object.keys(e),n=Object.getOwnPropertySymbols(e);for(let o=0,s=n.length;o<s;++o)_.call(e,n[o])&&t.push(n[o]);return t}const i=r&&r.symbols?y:Object.keys;function E(e){return typeof e=="object"&&e!==null&&!(e instanceof RegExp)&&!(e instanceof Date)}function A(e){return typeof e!="object"||e===null}function I(e){return typeof e!="object"||e===null||e instanceof RegExp||e instanceof Date}const L=r&&typeof r.mergeArray=="function"?r.mergeArray({clone:m,deepmerge:b,getKeys:i,isMergeableObject:E}):u;function m(e){return E(e)?Array.isArray(e)?a(e):d(e):e}function P(e,t){const n={},o=i(e),s=i(t);let l,h,f;for(l=0,h=o.length;l<h;++l)c(f=o[l])&&s.indexOf(f)===-1&&(n[f]=m(e[f]));for(l=0,h=s.length;l<h;++l)c(f=s[l])&&(f in e&&(o.indexOf(f)!==-1&&(n[f]=b(e[f],t[f])),!0)||(n[f]=m(t[f])));return n}function b(e,t){const n=Array.isArray(t),o=Array.isArray(e);return A(t)?t:I(e)?m(t):n&&o?L(e,t):n!==o?m(t):P(e,t)}function S(){switch(arguments.length){case 0:return{};case 1:return m(arguments[0]);case 2:return b(arguments[0],arguments[1])}let e;for(let t=0,n=arguments.length;t<n;++t)e=b(e,arguments[t]);return e}return r&&r.all?S:b}C.exports=R;C.exports.default=R;C.exports.deepmerge=R;const $="pt_br",B="BRL",Y="R$",F="BR",p={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0},K=C.exports(),O=globalThis.__cloudCommerce||{config:{}};globalThis.__cloudCommerce=O;const V={get(){return{lang:p.ECOM_LANG||$,currency:p.ECOM_CURRENCY||B,currencySymbol:p.ECOM_CURRENCY_SYMBOL||Y,countryCode:p.ECOM_COUNTRY_CODE||F,storeId:Number(p.ECOM_STORE_ID),...O.config}},set(r){O.config=K(O.config,r),r.storeId&&(p.ECOM_STORE_ID=r.storeId)}},G=async()=>{const{lang:r}=V.get();D(()=>Promise.resolve({}),[]),await Promise.all([D(()=>import("./chunks/index.esm.69f70489.js"),["chunks/index.esm.69f70489.js","chunks/index.esm2017.1194d1a1.js"]),new Promise((_,y)=>{const i=document.createElement("script");i.src=`https://www.gstatic.com/firebasejs/ui/6.0.1/firebase-ui-auth__${r}.js`,i.onload=_,i.onerror=y,i.async=!0,document.body.appendChild(i)})]);const{firebase:c,firebaseui:a}=window,d=new a.auth.AuthUI(c.auth());console.log(c.auth);const u={signInSuccessUrl:"<url-to-redirect-to-on-success>",signInOptions:[c.auth.EmailAuthProvider.PROVIDER_ID],tosUrl:"<your-tos-url>",privacyPolicyUrl:"<your-privacy-policy-url>"};d.start("#firebaseui-auth-container",u)},q={setup(){G();const r=w(0);return{count:r,add:()=>{r.value+=1},subtract:()=>{r.value-=1}}}},W=(r,c)=>{const a=r.__vccOpts||r;for(const[d,u]of c)a[d]=u;return a},z={class:"counter"},H={class:"counter-message"},J=g("div",{id:"firebaseui-auth-container"},null,-1);function Q(r,c,a,d,u,_){return N(),j(x,null,[g("div",z,[g("button",{onClick:c[0]||(c[0]=y=>d.subtract())},"-"),g("pre",null,k(d.count),1),g("button",{onClick:c[1]||(c[1]=y=>d.add())},"+")]),g("div",H,[T(r.$slots,"default")]),J],64)}const ee=W(q,[["render",Q]]);export{ee as default};
@@ -1 +1 @@
1
- :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-JWBYURAL){margin:2rem 0}main:where(.astro-JWBYURAL){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-JWBYURAL){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-JWBYURAL){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-JWBYURAL) code:where(.astro-JWBYURAL){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-JWBYURAL){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}
1
+ :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-P5QKJ2WB){margin:2rem 0}main:where(.astro-P5QKJ2WB){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-P5QKJ2WB){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-P5QKJ2WB){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-P5QKJ2WB) code:where(.astro-P5QKJ2WB){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-P5QKJ2WB){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}
@@ -0,0 +1 @@
1
+ :root{--font-size-base: clamp(1rem, .34vw + .91rem, 1.19rem);--font-size-lg: clamp(1.2rem, .7vw + 1.2rem, 1.5rem);--font-size-xl: clamp(2.44rem, 2.38vw + 1.85rem, 3.75rem);--color-text: hsl(12, 5%, 4%);--color-bg: hsl(10, 21%, 95%);--color-border: hsl(17, 24%, 90%)}html{font-family:system-ui,sans-serif;font-size:var(--font-size-base);color:var(--color-text);background-color:var(--color-bg)}body{margin:0}h1{font-size:var(--font-size-xl)}h2{font-size:var(--font-size-lg)}code{font-family:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}.counter{display:grid;font-size:2em;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:2em;place-items:center}.counter-message{text-align:center}.firebaseui-container{background-color:#fff;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;color:#000000de;direction:ltr;font:16px Roboto,arial,sans-serif;margin:0 auto;max-width:360px;overflow:visible;position:relative;text-align:left;width:100%}.firebaseui-container.mdl-card{overflow:visible}.firebaseui-card-header{padding:24px 24px 0}.firebaseui-card-content,.firebaseui-card-footer{padding:0 24px}.firebaseui-card-actions{box-sizing:border-box;display:table;font-size:14px;padding:8px 24px 24px;text-align:left;width:100%}.firebaseui-form-links{display:table-cell;vertical-align:middle;width:100%}.firebaseui-form-actions{display:table-cell;text-align:right;white-space:nowrap;width:100%}.firebaseui-title,.firebaseui-subtitle{color:#000000de;direction:ltr;font-size:20px;font-weight:500;line-height:24px;margin:0;padding:0;text-align:left}.firebaseui-title{padding-bottom:16px}.firebaseui-subtitle{margin:16px 0}.firebaseui-text{color:#000000de;direction:ltr;font-size:16px;line-height:24px;text-align:left}.firebaseui-id-page-password-recovery-email-sent p.firebaseui-text{margin:16px 0}.firebaseui-text-emphasis{font-weight:700}.firebaseui-error{color:#dd2c00;direction:ltr;font-size:12px;line-height:16px;margin:0;text-align:left}.firebaseui-text-input-error{margin:-16px 0 16px}.firebaseui-error-wrapper{min-height:16px}.firebaseui-list-item{direction:ltr;margin:0;padding:0;text-align:left}.firebaseui-hidden{display:none}.firebaseui-relative-wrapper{position:relative}.firebaseui-label{color:#0000008a;direction:ltr;font-size:16px;text-align:left}.mdl-textfield--floating-label.is-focused .mdl-textfield__label,.mdl-textfield--floating-label.is-dirty .mdl-textfield__label{color:#757575}.firebaseui-input,.firebaseui-input-invalid{border-radius:0;color:#000000de;direction:ltr;font-size:16px;width:100%}input.firebaseui-input,input.firebaseui-input-invalid{direction:ltr;text-align:left}.firebaseui-input-invalid{border-color:#dd2c00}.firebaseui-textfield{width:100%}.firebaseui-textfield.mdl-textfield .firebaseui-input{border-color:#0000001f}.firebaseui-textfield.mdl-textfield .firebaseui-label:after{background-color:#3f51b5}.firebaseui-textfield-invalid.mdl-textfield .firebaseui-input{border-color:#dd2c00}.firebaseui-textfield-invalid.mdl-textfield .firebaseui-label:after{background-color:#dd2c00}.firebaseui-button{display:inline-block;height:36px;margin-left:8px;min-width:88px}.firebaseui-link{color:#4285f4;font-variant:normal;font-weight:400;text-decoration:none}.firebaseui-link:hover{text-decoration:underline}.firebaseui-indent{margin-left:1em}.firebaseui-tos{color:#757575;direction:ltr;font-size:12px;line-height:16px;margin-bottom:24px;margin-top:0;text-align:left}.firebaseui-provider-sign-in-footer>.firebaseui-tos{text-align:center}.firebaseui-tos-list{list-style:none;text-align:right}.firebaseui-inline-list-item{display:inline-block;margin-left:5px;margin-right:5px}.firebaseui-page-provider-sign-in,.firebaseui-page-select-tenant{background:inherit}.firebaseui-idp-list,.firebaseui-tenant-list{list-style:none;margin:1em 0;padding:0}.firebaseui-idp-button,.firebaseui-tenant-button{direction:ltr;font-weight:500;height:auto;line-height:normal;max-width:220px;min-height:40px;padding:8px 16px;text-align:left;width:100%}.firebaseui-idp-list>.firebaseui-list-item,.firebaseui-tenant-list>.firebaseui-list-item{margin-bottom:15px;text-align:center}.firebaseui-idp-icon-wrapper{display:table-cell;vertical-align:middle}.firebaseui-idp-icon{border:none;display:inline-block;height:18px;vertical-align:middle;width:18px}.firebaseui-idp-favicon{border:none;display:inline-block;height:14px;margin-right:5px;vertical-align:middle;width:14px}.firebaseui-idp-text{color:#fff;display:table-cell;font-size:14px;padding-left:16px;text-transform:none;vertical-align:middle}.firebaseui-idp-text.firebaseui-idp-text-long{display:table-cell}.firebaseui-idp-text.firebaseui-idp-text-short{display:none}@media (max-width: 268px){.firebaseui-idp-text.firebaseui-idp-text-long{display:none}.firebaseui-idp-text.firebaseui-idp-text-short{display:table-cell}}@media (max-width: 320px){.firebaseui-recaptcha-container>div>div{transform:scale(.9);-webkit-transform:scale(.9);transform-origin:0 0;-webkit-transform-origin:0 0}}.firebaseui-idp-google>.firebaseui-idp-text{color:#757575}[data-provider-id="yahoo.com"]>.firebaseui-idp-icon-wrapper>.firebaseui-idp-icon{height:22px;width:22px}.firebaseui-info-bar{background-color:#f9edbe;border:1px solid #f0c36d;box-shadow:0 2px 4px #0003;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);left:10%;padding:8px 16px;position:absolute;right:10%;text-align:center;top:0}.firebaseui-info-bar-message{font-size:12px;margin:0}.firebaseui-dialog{box-sizing:border-box;color:#000000de;font:16px Roboto,arial,sans-serif;height:auto;max-height:fit-content;padding:24px;text-align:left}.firebaseui-dialog-icon-wrapper{display:table-cell;vertical-align:middle}.firebaseui-dialog-icon{float:left;height:40px;margin-right:24px;width:40px}.firebaseui-progress-dialog-message{display:table-cell;font-size:16px;font-weight:400;min-height:40px;vertical-align:middle}.firebaseui-progress-dialog-loading-icon{height:28px;margin:6px 30px 6px 6px;width:28px}.firebaseui-icon-done{background-image:url(https://www.gstatic.com/images/icons/material/system/2x/done_googgreen_36dp.png);background-position:center;background-repeat:no-repeat;background-size:36px 36px}.firebaseui-phone-number{display:flex}.firebaseui-country-selector{background-image:url(https://www.gstatic.com/images/icons/material/system/1x/arrow_drop_down_grey600_18dp.png);background-position:right center;background-repeat:no-repeat;background-size:18px auto;border-radius:0;border-bottom:1px solid rgba(0,0,0,.12);color:#000000de;flex-shrink:0;font-size:16px;font-weight:400;height:initial;line-height:normal;margin:20px 24px 20px 0;padding:4px 20px 4px 0;width:90px}.firebaseui-country-selector-flag{display:inline-block;margin-right:1ex}.firebaseui-flag{background-image:url(https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/flags_sprite_2x.png);background-size:100% auto;filter:drop-shadow(1px 1px 1px rgba(0,0,0,.54));height:14px;width:24px}.firebaseui-list-box-dialog{max-height:90%;overflow:auto;padding:8px 0 0}.firebaseui-list-box-actions{padding-bottom:8px}.firebaseui-list-box-icon-wrapper{display:table-cell;padding-right:24px;vertical-align:top}.firebaseui-list-box-label-wrapper{display:table-cell;vertical-align:top}.firebaseui-list-box-dialog-button{color:#000000de;direction:ltr;font-size:16px;font-weight:400;height:initial;line-height:normal;min-height:48px;padding:14px 24px;text-align:left;text-transform:none;width:100%}.firebaseui-phone-number-error{margin-left:114px}.mdl-progress.firebaseui-busy-indicator{height:2px;left:0;position:absolute;top:55px;width:100%}.mdl-spinner.firebaseui-busy-indicator{direction:initial;height:56px;left:0;margin:auto;position:absolute;right:0;top:30%;width:56px}.firebaseui-callback-indicator-container .firebaseui-busy-indicator{top:0}.firebaseui-callback-indicator-container{height:120px}.firebaseui-new-password-component{display:inline-block;position:relative;width:100%}.firebaseui-input-floating-button{background-position:center;background-repeat:no-repeat;display:block;height:24px;position:absolute;right:0;top:20px;width:24px}.firebaseui-input-toggle-on{background-image:url(https://www.gstatic.com/images/icons/material/system/1x/visibility_black_24dp.png)}.firebaseui-input-toggle-off{background-image:url(https://www.gstatic.com/images/icons/material/system/1x/visibility_off_black_24dp.png)}.firebaseui-input-toggle-focus{opacity:.87}.firebaseui-input-toggle-blur{opacity:.38}.firebaseui-recaptcha-wrapper{display:table;margin:0 auto;padding-bottom:8px}.firebaseui-recaptcha-container{display:table-cell}.firebaseui-recaptcha-error-wrapper{caption-side:bottom;display:table-caption}.firebaseui-change-phone-number-link{display:block}.firebaseui-resend-container{direction:ltr;margin:20px 0;text-align:center}.firebaseui-id-resend-countdown{color:#00000061}.firebaseui-id-page-phone-sign-in-start .firebaseui-form-actions div{float:left}@media (max-width: 480px){.firebaseui-container{box-shadow:none;max-width:none;width:100%}.firebaseui-card-header{border-bottom:1px solid #e0e0e0;margin-bottom:16px;padding:16px 24px 0}.firebaseui-title{padding-bottom:16px}.firebaseui-card-actions{padding-right:24px}.firebaseui-busy-indicator{top:0}}.mdl-textfield__label{font-weight:400;margin-bottom:0}.firebaseui-id-page-blank,.firebaseui-id-page-spinner{background:inherit;height:64px}.firebaseui-email-sent{background-image:url(https://www.gstatic.com/firebasejs/ui/2.0.0/images/auth/success_status.png);background-position:center;background-repeat:no-repeat;background-size:64px 64px;height:64px;margin-top:16px;text-align:center}.firebaseui-text-justify{text-align:justify}
@@ -0,0 +1 @@
1
+ :root{--link-gradient: linear-gradient(45deg, #4F39FA, #DA62C4 30%, var(--color-border) 60%)}.link-card:where(.astro-ZCG72YVN){list-style:none;display:flex;padding:.15rem;background-image:var(--link-gradient);background-size:400%;border-radius:.5rem;background-position:100%;transition:background-position .6s cubic-bezier(.22,1,.36,1)}.link-card:where(.astro-ZCG72YVN)>a:where(.astro-ZCG72YVN){width:100%;text-decoration:none;line-height:1.4;padding:1em 1.3em;border-radius:.35rem;color:var(--text-color);background-color:#fff;opacity:.8}h2:where(.astro-ZCG72YVN){margin:0;transition:color .6s cubic-bezier(.22,1,.36,1)}p:where(.astro-ZCG72YVN){margin-top:.75rem;margin-bottom:0}h2:where(.astro-ZCG72YVN) span:where(.astro-ZCG72YVN){display:inline-block;transition:transform .3s cubic-bezier(.22,1,.36,1)}.link-card:where(.astro-ZCG72YVN):is(:hover,:focus-within){background-position:0}.link-card:where(.astro-ZCG72YVN):is(:hover,:focus-within) h2:where(.astro-ZCG72YVN){color:#4f39fa}.link-card:where(.astro-ZCG72YVN):is(:hover,:focus-within) h2:where(.astro-ZCG72YVN) span:where(.astro-ZCG72YVN){transform:translate(2px)}
@@ -1 +1 @@
1
- :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-DJT3DWAO){margin:2rem 0}main:where(.astro-DJT3DWAO){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-DJT3DWAO){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-DJT3DWAO){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-DJT3DWAO) code:where(.astro-DJT3DWAO){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-DJT3DWAO){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}
1
+ :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-BZIQPEHV){margin:2rem 0}main:where(.astro-BZIQPEHV){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-BZIQPEHV){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-BZIQPEHV){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-BZIQPEHV) code:where(.astro-BZIQPEHV){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-BZIQPEHV){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}
@@ -1 +1 @@
1
- :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-FWWSR4V6){margin:2rem 0}main:where(.astro-FWWSR4V6){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-FWWSR4V6){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-FWWSR4V6){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-FWWSR4V6) code:where(.astro-FWWSR4V6){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-FWWSR4V6){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}
1
+ :root{--astro-gradient: linear-gradient(0deg,#4F39FA, #DA62C4)}h1:where(.astro-EBY2X3Y6){margin:2rem 0}main:where(.astro-EBY2X3Y6){margin:auto;padding:1em;max-width:60ch}.text-gradient:where(.astro-EBY2X3Y6){font-weight:900;background-image:var(--astro-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-size:100% 200%;background-position-y:100%;border-radius:.4rem;animation:pulse 4s ease-in-out infinite}@keyframes pulse{0%,to{background-position-y:0%}50%{background-position-y:80%}}.instructions:where(.astro-EBY2X3Y6){line-height:1.6;margin:1rem 0;background:#4F39FA;padding:1rem;border-radius:.4rem;color:var(--color-bg)}.instructions:where(.astro-EBY2X3Y6) code:where(.astro-EBY2X3Y6){font-size:.875em;border:.1em solid var(--color-border);border-radius:4px;padding:.15em .25em}.link-card-grid:where(.astro-EBY2X3Y6){display:grid;grid-template-columns:repeat(auto-fit,minmax(24ch,1fr));gap:1rem;padding:0}