guanwei 1.2.5 → 1.2.7

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.html CHANGED
@@ -6,7 +6,7 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>观微 · 玄学问道 —— 九术参详,观微知著</title>
8
8
  <meta name="description" content="以纸墨留白为骨,融四柱八字、紫微斗数、奇门遁甲、梅花易数、六爻、大六壬、小六壬、星盘、塔罗九术于一体。观微知著,以术问道。" />
9
- <script type="module" crossorigin src="/assets/index-CjLUvkh9.js"></script>
9
+ <script type="module" crossorigin src="/assets/index-O2O9peYE.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="/assets/index-hLV3S-Cj.css">
11
11
  </head>
12
12
  <body>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "guanwei",
3
3
  "private": false,
4
- "version": "1.2.5",
4
+ "version": "1.2.7",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -6278,9 +6278,9 @@
6278
6278
  "records": []
6279
6279
  },
6280
6280
  {
6281
- "username": "联调2179",
6282
- "passHash": "scrypt$a51ae5b7ef7ef2aefc5dd7c51adfaa2d$fa9362e9b80497e5955137670334e733bc9c13509e10bde8ac259f5f786ef558d4ebf14c7406a1cb1022a613d87d36f66171b6e1e8c80c4c0cb0e1e7ec0a45c2",
6283
- "createdAt": 1787974772299,
6281
+ "username": "联调7754",
6282
+ "passHash": "scrypt$ed8423b10c4ba0b503c4603d9e587f07$ce6d083e8c98f079e7a9070ce4ab32db901a7e9eea277504716bfa63851da17ed55180d2fae2fb4441965135ae2e3e30e356e2fe7ab9fe6b141f3b819dffa80a",
6283
+ "createdAt": 1788614637809,
6284
6284
  "profile": {
6285
6285
  "birthDate": "1996-09-09",
6286
6286
  "birthHourIndex": 5,
@@ -6297,146 +6297,95 @@
6297
6297
  }
6298
6298
  }
6299
6299
  ],
6300
- "token": "55efbbaeaa550c9966f04dda52f998095e463738eb645048c2cdd49701a2627e"
6300
+ "token": "f9a48b552d6187d72f1417821c94d7446cdf1160cc75b419db533be065cfe682",
6301
+ "tokenExpires": 1791206637867
6301
6302
  },
6302
6303
  {
6303
- "username": "鉴权2490",
6304
- "passHash": "scrypt$bee1f62b05efb97d0af677b90f3569e0$641c60c1aed8e610ce18365ca7d894ca9570e34736695c041bf53be1f7216e7ddadce34fc47291512d73106ca4c8ce1fccfb02be4389cbcbfaa43226efeab9a8",
6305
- "createdAt": 1787974772532,
6304
+ "username": "鉴权7969",
6305
+ "passHash": "scrypt$a7726dd9df24bb3c73b8219911323a55$098463367b1f5afc51a410f5624094420e1e7da6b40d1d1e088b9ccc2a4212916471db032a5d4c0a531e72580470d142252536784254934de2a006f6062df571",
6306
+ "createdAt": 1788614638000,
6306
6307
  "profile": {
6307
6308
  "birthDate": "1999-01-01"
6308
6309
  },
6309
6310
  "samples": [],
6310
6311
  "records": [],
6311
- "token": "a8ad6a5ebb99a49abc167b0473daf56293ec89b0071a24ed58b37651ab864bf4"
6312
+ "token": "cde6e4e6573cbdaba56974a8906f7c9a764216c9320fd28135143c25e0973d68",
6313
+ "tokenExpires": 1791206638000
6312
6314
  },
6313
6315
  {
6314
- "username": "他人2562",
6315
- "passHash": "scrypt$c277c3c2d4cc8a620bba42fc8798bc31$47edb65dae757c4b46d42b18fa3c444fc83f430e69b76dcb5981bf940107ced5652853f401106830a224615cf1250514e57413b41cabf9435af116c1c66d7d29",
6316
- "createdAt": 1787974772603,
6316
+ "username": "他人8027",
6317
+ "passHash": "scrypt$4552edb5957aae12ccb6fd6bf1144f18$dd4dd1e750e861ac8fd1f9f090c3298fcedd13781aa7fe45efa93f9acc69eb84dc3c28884f5fc5bfede8ccdb2fa882aa71e557abfaedebaef4631ec56ae1a6ea",
6318
+ "createdAt": 1788614638059,
6317
6319
  "profile": {},
6318
6320
  "samples": [],
6319
6321
  "records": [],
6320
- "token": "4cc7aa02a8fc745eefc12a6027e73348874b5aba79e68137b807108c86198b41"
6322
+ "token": "4d4e82e60b1bdb5b5d60fcdfedab050e3ec03ec11a6e7b9998cb98531dbd33b7",
6323
+ "tokenExpires": 1791206638059
6321
6324
  },
6322
6325
  {
6323
- "username": "登鉴2612",
6324
- "passHash": "scrypt$33289372a690e4aff8ce7de07c568905$32b21c770d232278481f71fbade740c225e69598f7d9a945e630c5b2d1aee6d06fe1d04b1d8b7aee51d17e102df0053d4083fc844a4b231b31e540524d37d4cc",
6325
- "createdAt": 1787974772654,
6326
+ "username": "轮换8066",
6327
+ "passHash": "scrypt$3dc3a1e312fb61407c8f52d45a2a66d4$786369c0c664776519c40050fcbee763e081ff129d9105473367a78f544e680cb1873db86f96651608451d28e60631c70915b581e466803410bedc64c055f40a",
6328
+ "createdAt": 1788614638097,
6326
6329
  "profile": {},
6327
6330
  "samples": [],
6328
6331
  "records": [],
6329
- "token": "3c6f698637cd4f3f40c7e9d4e44768b1f11127c9efda7358abed5f154ea66ef1"
6332
+ "token": "c65837f97cb3d9a1ec4c3b5f4c294842afce4c1d331acbe83c16fabffdff4ed2",
6333
+ "tokenExpires": 1791206638136
6330
6334
  },
6331
6335
  {
6332
- "username": "占位2705",
6333
- "passHash": "scrypt$15ad8f4b87fec28b3eee34257285fc84$c96d3c49363c3ada5a17ed8060e25c7adcc8f4123d38e44677cc3e0a7fa6a5501fa214367a31b96ddfa462c6ef9af1b6d4bd096add513db153d73bd06fdee43f",
6334
- "createdAt": 1787974772709,
6336
+ "username": "占位8150",
6337
+ "passHash": "scrypt$7a9c083543645f030f3e5e7184ae9359$d66022734ece177b03c3727222653c97b94b3b58993345476987f5deed02748790b6582637f23e06b9b832c40762f0bd8b0739d14004aa235eca989e992907f1",
6338
+ "createdAt": 1788614638154,
6335
6339
  "profile": {},
6336
6340
  "samples": [],
6337
6341
  "records": [],
6338
- "token": "65a178f8a72ce1c416c2b438f1a8e43cbf92414384a50fe455fb2e2598c06a8e"
6342
+ "token": "fbc6b8b91580245167f8fc3a32d00eab3c2b356949a3faf6da105b23aa8c588d",
6343
+ "tokenExpires": 1791206638241
6339
6344
  },
6340
6345
  {
6341
- "username": "甲2793",
6342
- "passHash": "scrypt$d7292baa21ca8284048bd112f3f22ed2$488c76756d9d27ca895fe122076d2dfb63421542f7b4c801b6d7c1880758bee7ea2f167e576bbb1d4791735c1fe8fbffb35bad503c2d062a3ae942ce508ef356",
6343
- "createdAt": 1787974772837,
6346
+ "username": "甲8243",
6347
+ "passHash": "scrypt$2eecd489b7ee51b51ca11a6bbd303bbe$26b975e88d907dbf5c6023c8f46c239a3b26ea127c12e77cbc85c5905a571eeadd79e4eb74c08c5c18b857872428ac0fcad558b9b76b3d2d21daef79f24bb86a",
6348
+ "createdAt": 1788614638284,
6344
6349
  "profile": {},
6345
6350
  "samples": [],
6346
6351
  "records": [],
6347
- "token": "fd1624569025003dd839884a49d8422adf8c37ce14bcfef385873d8c94e9de12"
6352
+ "token": "1910fb13df4f15b166598b35ed033ad06f5c3bf13b6e925e82a7d12d11493a20",
6353
+ "tokenExpires": 1791206638284
6348
6354
  },
6349
6355
  {
6350
- "username": "乙2793",
6351
- "passHash": "scrypt$241e46222657b2758766400c314c273d$5ee351f2e508dcfb2865b8cc641d063ae04bbb10e94b5d86a958a7ccbbc51d8960d6f5825b327f941f6f0d691ba43bc705a0042afe44fe83e50bc37563373739",
6352
- "createdAt": 1787974772889,
6356
+ "username": "乙8243",
6357
+ "passHash": "scrypt$a8a89e9a08fa8715963f3c9aae9d847a$d7192563877537ce9c7ab6c08cf186c4e7a69d36820e436d29b32423316a1e1ff737cdfb0fc7a10f0df5d9e916b3a616f55082c9f3675be0421f476b6406da92",
6358
+ "createdAt": 1788614638319,
6353
6359
  "profile": {},
6354
6360
  "samples": [],
6355
6361
  "records": [],
6356
- "token": "58ce37d6f2e75f23d7307663b26afa7f459cfdf80744d9f43c4a5f83fefb0a85"
6362
+ "token": "3271392e2b971af8d8ecd782f864f3cd95fa54f6acbd25062833ed0a82b5b506",
6363
+ "tokenExpires": 1791206638319
6357
6364
  },
6358
6365
  {
6359
- "username": "联调1815",
6360
- "passHash": "scrypt$7c8e52d78fc5c72c15dd5fd1376cad2f$302ee9e4004dc6bc4de15cc38ca5cc091b9133e7fd0880c2b6aa5a7f2d63bbf2846be2b5ac268f3e76f36fde5aa31e3418be5a3101d6d8d9499b99aae62e3889",
6361
- "createdAt": 1787974791902,
6362
- "profile": {
6363
- "birthDate": "1996-09-09",
6364
- "birthHourIndex": 5,
6365
- "gender": "男",
6366
- "location": null
6367
- },
6368
- "samples": [],
6369
- "records": [
6370
- {
6371
- "artId": "bazi",
6372
- "createdAt": 1,
6373
- "result": {
6374
- "dayGZ": "壬申"
6375
- }
6376
- }
6377
- ],
6378
- "token": "873d8e6fb689c0a759eb24489302d902d9c582cf63b6eed253efcb7dd289c7eb"
6379
- },
6380
- {
6381
- "username": "鉴权2044",
6382
- "passHash": "scrypt$a7d28897ecebf00429e38530a1be3ddb$1d05f31b71b52ed3233ebbb1d9c17ea189faf66cdcbed57969a79131efe75f744fd48dde8c807740e200e7f6738aacd0fc142c3377de02cafde91381b6c99a2a",
6383
- "createdAt": 1787974792091,
6384
- "profile": {
6385
- "birthDate": "1999-01-01"
6386
- },
6387
- "samples": [],
6388
- "records": [],
6389
- "token": "2d9fe3339c4a239c03ec747c5b6a2eb526bec03d4204c692421ede018dc92757"
6390
- },
6391
- {
6392
- "username": "他人2114",
6393
- "passHash": "scrypt$ab67c3c80a2c62c559cbe399d0643c63$fa0f39676d8e12ac0e613c00b100564c55b3153bc074cef3e665773b62f23bc6d6d67873543563fac68d59b490055b309e1d371a33c74e52ea13a0d150928b84",
6394
- "createdAt": 1787974792156,
6395
- "profile": {},
6396
- "samples": [],
6397
- "records": [],
6398
- "token": "cd08fe94f891fe49b43106684b342cfba169ffd920bf9f72558842a91bb86b67"
6399
- },
6400
- {
6401
- "username": "登鉴2165",
6402
- "passHash": "scrypt$8fd7b88e6f63f16bd355a799c1fdb507$4d82632c56bf3657bfb1395726d3014272a8dbd61206010f809533b4561a9727e5e4041b6a076c7ae0f70eda21ff4b63bc415a92bbad29538a974e0dc9aa029d",
6403
- "createdAt": 1787974792209,
6404
- "profile": {},
6405
- "samples": [],
6406
- "records": [],
6407
- "token": "4e69bfef54a7c816bf22357687720d112062d7cda9e0a3e483668a5d0ffae04b"
6408
- },
6409
- {
6410
- "username": "占位2262",
6411
- "passHash": "scrypt$9b030e5b8d1c475f3700534c0cea8bcc$5dcff5dd3abe675650bc5c8d7a0bb7402893cb6a7b20582a399dbbb39b5afea61c12525ce6beb080acf26dccb801f707d6c48434689cad680fcc2c37932cecfc",
6412
- "createdAt": 1787974792265,
6413
- "profile": {},
6414
- "samples": [],
6415
- "records": [],
6416
- "token": "06b5d6f063dc265a4ab0181dbeeabfaedd815bcf44a481c5817a84e3403162bd"
6417
- },
6418
- {
6419
- "username": "甲2362",
6420
- "passHash": "scrypt$e0a1334c2e39079fe996d50550b296ac$22b689d05605618743ed4de49781e4920c813fe9773c66b1ffcfd841202e5eea8654bca1cb0722fdd4121abe997fe0d3b2ce6ea52b1b72f616ae4373ca92be42",
6421
- "createdAt": 1787974792397,
6366
+ "username": "列删8349",
6367
+ "passHash": "scrypt$06995fe5edd7133d9650f6914faae958$aad505b6d3efde72709c7080ff29bc00e78851ad31630e376d57ab81501b1be489592340f412fab243fd01b5d6a3d698c1cbe0a70a813f3e766d555f69c73c69",
6368
+ "createdAt": 1788614638388,
6422
6369
  "profile": {},
6423
6370
  "samples": [],
6424
6371
  "records": [],
6425
- "token": "dcb5ab3832984ddb12f1e4c0934a6ec109677cac4c744ee0f43877c6265ff0ce"
6372
+ "token": "4dbe05c16dd5b7eed5553e1464dd6a2439c44fe32b1b0f477341857dce48c4c1",
6373
+ "tokenExpires": 1791206638388
6426
6374
  },
6427
6375
  {
6428
- "username": "乙2362",
6429
- "passHash": "scrypt$65bc82b0a841f543f17cdd4db4f06419$5e7609d3c5c1dbc632489007cab5c5aaf1400652b61cb45aa20876ebb1f8274bca0cde13a11e9670beab60613a5676cc7afc82d0c31043df85700e41efe38335",
6430
- "createdAt": 1787974792452,
6376
+ "username": "删乙8349",
6377
+ "passHash": "scrypt$99bb3a60ac73b17954c81313913f3e98$2b5f0bfe2477b5b009378e3a2843950cd5b0d421ecc849232c3a8bfbe86d525f2e7a5d0d386b990c503a75af6fef640d46a34b464d12ca825a6b6f298d062699",
6378
+ "createdAt": 1788614638423,
6431
6379
  "profile": {},
6432
6380
  "samples": [],
6433
6381
  "records": [],
6434
- "token": "a4c67d7d395086f836811508e9199d007487ad24f3f92db0492163bcef07ed44"
6382
+ "token": "ddaf3cf93ef84d7bfdf61ee9296c98fef51f67f728d93c5db721f5f65e761c45",
6383
+ "tokenExpires": 1791206638423
6435
6384
  },
6436
6385
  {
6437
- "username": "联调4720",
6438
- "passHash": "scrypt$3f5d6299295a3a9918e0416c626bcdef$67f7d06f536c2dcf312ea7ae15b50565916f97e200b904476ab96b3c4ef5d9fe3bd093734fbcf27a271682972fff3b9dff32bf02c671c496c338cf0df82c95a3",
6439
- "createdAt": 1787978014815,
6386
+ "username": "联调7895",
6387
+ "passHash": "scrypt$7640ba9283ac00bc8867d8d6d649a82b$b1d3ddc7a6f3be15f5738ab89a27c41e94f397bc32ad84f01e718d10626a2091efb48469b938c5e4fd0aacbf7bc0626658491450202739265c6680e6ff9a1f42",
6388
+ "createdAt": 1788614667970,
6440
6389
  "profile": {
6441
6390
  "birthDate": "1996-09-09",
6442
6391
  "birthHourIndex": 5,
@@ -6453,141 +6402,90 @@
6453
6402
  }
6454
6403
  }
6455
6404
  ],
6456
- "token": "5acff6d1a3d077e1043b57bfd0e7b197b554e6895c3c5ad7aab91eb6c5e055dd"
6405
+ "token": "93e3194d137d1099512ecb958f9be8a8b6ce73991025865c0d482b4385ee0673",
6406
+ "tokenExpires": 1791206668033
6457
6407
  },
6458
6408
  {
6459
- "username": "鉴权5000",
6460
- "passHash": "scrypt$4abab2b41008b858f4f0d57083e0b00d$1af134638bb86539577633e60e77bae1c31125bc041f7ff372877984ab00c9b917c2b52fb9b2a283a2e0a57576471e879f625ea44bbdd0ab525b95ea15ffaaa9",
6461
- "createdAt": 1787978015042,
6409
+ "username": "鉴权8118",
6410
+ "passHash": "scrypt$05f3be2246b4f1db1b0486e9021c65b5$d70fbc06f6ae9950ea355ec09c3618783f7bf057ddfc23b0760b453ebd284e005d3519d59a8848582405de12e84587ae94620ef164bebe94b26724785aa13c3c",
6411
+ "createdAt": 1788614668154,
6462
6412
  "profile": {
6463
6413
  "birthDate": "1999-01-01"
6464
6414
  },
6465
6415
  "samples": [],
6466
6416
  "records": [],
6467
- "token": "c483184079880cc968ca31607701d9dcdafbe6a97302345a5193ab6ac4c97a18"
6417
+ "token": "a74f08dc94bca01f02547f68206b666a927dd2fe176a524fd050a1a212ab60a2",
6418
+ "tokenExpires": 1791206668154
6468
6419
  },
6469
6420
  {
6470
- "username": "他人5082",
6471
- "passHash": "scrypt$51321757c7a676de91f379a812ad7bce$e1750ec9daf3b5f19c8213c9fb51420746986cbabd9ecd507d805fc957942996011489220975566de6782616b614212a7755f507ae31d21946864c6e3458650b",
6472
- "createdAt": 1787978015129,
6421
+ "username": "他人8180",
6422
+ "passHash": "scrypt$4956d4dd093994f5f7a14893a3a6e2c2$4fe63b500fbf5a75087cb2b66e14349db16b9bc2b821290477c0b4158fe3c2518905c7e40786a89431dcdb3ca96467f071d26870c816e756814df61f8c1aeedb",
6423
+ "createdAt": 1788614668219,
6473
6424
  "profile": {},
6474
6425
  "samples": [],
6475
6426
  "records": [],
6476
- "token": "07a612c8e5de4e8982efedd10cb9084b446bb3c5ece03bfcd3392a075997b7b0"
6427
+ "token": "eee7aa4ad7323d65931b647c7b09707b27cb122b9b9648405938cc249d63946f",
6428
+ "tokenExpires": 1791206668219
6477
6429
  },
6478
6430
  {
6479
- "username": "登鉴5138",
6480
- "passHash": "scrypt$10094d85734baa9671128fc10c5e8d83$ec7d061fac3f81efb0ef5b1e8297372ef9165f2221492185a6d19a8158bf0677ea664d935fb4ccd7742f0e3c1b5caaab715c860b5c4c8fd0c1368ea53eb21521",
6481
- "createdAt": 1787978015183,
6431
+ "username": "轮换8224",
6432
+ "passHash": "scrypt$ef3e785238565addd1caa5c5d9d3f3b9$7f716295518764448f54d9ce664e1234bb00639953ce161ad45fb5bd5e411d377738907a2a7cb95a85b8b865baf64167d29c9391fed67efd117611aa87d320ed",
6433
+ "createdAt": 1788614668262,
6482
6434
  "profile": {},
6483
6435
  "samples": [],
6484
6436
  "records": [],
6485
- "token": "a6c1d3612e8f34e83d735e8dddaa5fadba775fa79b85f2cfc1e0720063b92ad9"
6486
- },
6487
- {
6488
- "username": "占位5233",
6489
- "passHash": "scrypt$86ce84ec1222fe4888a75d2b19324c83$0316d5c423c34fa2bcf1088670bbbe35617ee2f501451af7ec8e3bad915eda8ed49cadf9836f2127b0b72f043a0d24ba9bad598b79d3ff19f451e89a7e8b33d2",
6490
- "createdAt": 1787978015236,
6491
- "profile": {},
6492
- "samples": [],
6493
- "records": [],
6494
- "token": "267fd8173c3e0536a66bf6432ca5b07ed8e87e044be6c33edf41b3d55abb0748"
6495
- },
6496
- {
6497
- "username": "甲5347",
6498
- "passHash": "scrypt$bb2c32b24b75e33435eb8c6910f5ab2f$20a91be38796f811012fb1879a4ffb9da462049340994af0df150206388879c1d34e76ca7b9b9024870b42311062b2c3915c7102e55e74a31a819892f268f0f0",
6499
- "createdAt": 1787978015397,
6500
- "profile": {},
6501
- "samples": [],
6502
- "records": [],
6503
- "token": "ba249a40c22dbc4c5a6b9068d3ebc3e1d1afe5212821dbffd0d2b192abf543be"
6504
- },
6505
- {
6506
- "username": "乙5347",
6507
- "passHash": "scrypt$cfe4fd0384b866b77abed2746d6c882d$c275b3373db1986865e430a392f771e29ed776006d4a7e1a9cef7afe583d81158b0dcb2b86361e863b2fae7273da61d86bbad0c8cadf06eba268b22c14f667b1",
6508
- "createdAt": 1787978015472,
6509
- "profile": {},
6510
- "samples": [],
6511
- "records": [],
6512
- "token": "e12f06635335a7d365dca3dc5f4d3c87f0c0c0989199100e3cd40fb1f51b563b"
6513
- },
6514
- {
6515
- "username": "联调1046",
6516
- "passHash": "scrypt$9212a84cc0e275b12e32aba82966195f$943a2029711318c91a68ca0e9f3393a128d753b6ad00936ad9f08d14ae0abf033b6b0b808f2defecc2f284bccdbe7da6e4624ce15e75c7eb670d6d8486380dd1",
6517
- "createdAt": 1787978041147,
6518
- "profile": {
6519
- "birthDate": "1996-09-09",
6520
- "birthHourIndex": 5,
6521
- "gender": "男",
6522
- "location": null
6523
- },
6524
- "samples": [],
6525
- "records": [
6526
- {
6527
- "artId": "bazi",
6528
- "createdAt": 1,
6529
- "result": {
6530
- "dayGZ": "壬申"
6531
- }
6532
- }
6533
- ],
6534
- "token": "2b8f9cdcbeae6f368028bbdac2171f56975d41542f440b98faea51ea24348eb0"
6535
- },
6536
- {
6537
- "username": "鉴权1356",
6538
- "passHash": "scrypt$d1c69b653d8c59bac97a60cc564a2812$85b38421cc4a8449957a390bea3fafedbec2f1426a3c59a17fd60045a67ea25840da9c03e49159012a18bae42ea997ad98b585a504cfaf1dba41d159c91a6a88",
6539
- "createdAt": 1787978041401,
6540
- "profile": {
6541
- "birthDate": "1999-01-01"
6542
- },
6543
- "samples": [],
6544
- "records": [],
6545
- "token": "03ae064372554daa1be328b5f435b7a9aa9f5eb5f57d3fdf0e1775de05a42c8f"
6437
+ "token": "2bb1d6f637ba7cf40f12e6da31bd6a5e03b840a04ca0bd10a7e2abb1e99789af",
6438
+ "tokenExpires": 1791206668309
6546
6439
  },
6547
6440
  {
6548
- "username": "他人1429",
6549
- "passHash": "scrypt$d0ff8f7529212c5927843355c53719da$1fa2d57a5ee18124b8752222f5587a02372060f2b2b9faba6ed4ff0b77a90b0c7178f9d182dedd9c8ae300dd20ce1e5f7ec79f368ed21610f5f8756ff2d7da35",
6550
- "createdAt": 1787978041467,
6441
+ "username": "占位8317",
6442
+ "passHash": "scrypt$600c2361de0d350eca1fe0c27b55ec66$dcdd20c8d655bd23e3de2fefab1dcbae4e7aa5fe7b9d40fdaee1be089cc0bbd32e7692e5d2088b46792d0d150cfa85004563de1ae58240c11bb0314a35ec697a",
6443
+ "createdAt": 1788614668322,
6551
6444
  "profile": {},
6552
6445
  "samples": [],
6553
6446
  "records": [],
6554
- "token": "611138970fc695680cbaf59a4e85dc1a121c58aad81a540111b6f548eb607784"
6447
+ "token": "39e3d4ef68e7aa6bedd21d9792c79f74a6ac5fc40b4453faca25f2dfe3ce9467",
6448
+ "tokenExpires": 1791206668405
6555
6449
  },
6556
6450
  {
6557
- "username": "登鉴1475",
6558
- "passHash": "scrypt$faf0d6d072301c2442a54f390f47e6f3$6f5727c69f5164d10607626e7197c4a0532945f9f881a7f9d8526188b106836c274d1e9d0552d4d8b4ae3c2627014fdc7423ee99a81bb61049845ab6e96d8738",
6559
- "createdAt": 1787978041510,
6451
+ "username": "甲8408",
6452
+ "passHash": "scrypt$9bb1c3c868b3795437b26546be8a4fd2$094d476f40b17e6e7d0ece5357c16e83a715621a502ac5862dcccbcd4cfef91832d884a91f03df6e81c46eaf6b91a9015c0fc4d745b61f8ebe56d67430cdde37",
6453
+ "createdAt": 1788614668448,
6560
6454
  "profile": {},
6561
6455
  "samples": [],
6562
6456
  "records": [],
6563
- "token": "c315d05d8d733976a00e43a89b62fc324251051badbb2ab7921b14f168bc2fe8"
6457
+ "token": "71a0d09279d8e82ec8770f202249f29862a551e15f0d9995763eb3a16f8740a7",
6458
+ "tokenExpires": 1791206668448
6564
6459
  },
6565
6460
  {
6566
- "username": "占位1550",
6567
- "passHash": "scrypt$95a6313661da39b23785cc467c9e6acc$d40d094d3f0c92b9d3382640fcc073163aa45aaaaa13dc3adc8379e25239e4aae0ff4a8f85c4115e8ad50e72fff0a317aaeb648c8e5b5fff76b93a08e5f8b38d",
6568
- "createdAt": 1787978041553,
6461
+ "username": "乙8408",
6462
+ "passHash": "scrypt$d0ec773bf18ac60e0ab6d5179e605173$758b65cd16d53df50ff97964f975f7522c9b73b0ed23726d5bce738a35452e0cd1d97d79a58dd28860b8752cbc4954d0e8ad7608501b017f52e23f2ad624de9a",
6463
+ "createdAt": 1788614668492,
6569
6464
  "profile": {},
6570
6465
  "samples": [],
6571
6466
  "records": [],
6572
- "token": "0ad1e0459861b10d3c123ff5e8738ab688b31c258b418f19a11ed55ccc83b365"
6467
+ "token": "e206da173678d1667f114b3c96f87b3347e5bec9cffd716fd954e7bacb2b7f71",
6468
+ "tokenExpires": 1791206668492
6573
6469
  },
6574
6470
  {
6575
- "username": "甲1644",
6576
- "passHash": "scrypt$b2815193a5c0e718566dabbb6beb7387$3663b9efe26b1e02eac7b5130920f6709847853d06b80857ff09205b9757d1ce9534d8da5bd440763f45c16cbdd1078099c8f76e9e6672fd039b35936cb813d3",
6577
- "createdAt": 1787978041683,
6471
+ "username": "列删8526",
6472
+ "passHash": "scrypt$cc8e6121c7dfb1ac88e2a2b13b776ef3$ae7120938d48f82db11aca7319ff63c1820de06516b76a4f099e7dca208fb7c7aa3b3f0814be50994be092abbf4250c226a81402f2fe4b00a4c8ec866f3cc59b",
6473
+ "createdAt": 1788614668565,
6578
6474
  "profile": {},
6579
6475
  "samples": [],
6580
6476
  "records": [],
6581
- "token": "586d4a39d7b0cd5d4a4196ccacf8225459e94c9b07947988640e41ebfb0fe390"
6477
+ "token": "e314804d9681b15b4fe304268da90a454f3c7af066c48d592235641afa953f14",
6478
+ "tokenExpires": 1791206668565
6582
6479
  },
6583
6480
  {
6584
- "username": "乙1644",
6585
- "passHash": "scrypt$f22718cad108fe66f6c2e822a15d80b2$833ac84622054781111427dff13b732a5fb2f68f01fa95d7176ac3d6c168bd4a314e566e232b6481fa77e431e6feae1f0878ebfe909a0c062429247fb6e9ee49",
6586
- "createdAt": 1787978041733,
6481
+ "username": "删乙8526",
6482
+ "passHash": "scrypt$6de77518ade7fb7afd8c0b0aba9d258b$12a6656fb9c176baaad51f6096151728e4ef82a680846b3a88840e4755503c84e243e019c9ec936941f2bf0cbe989278fdfeac97a385fb63b11280737821a8d6",
6483
+ "createdAt": 1788614668608,
6587
6484
  "profile": {},
6588
6485
  "samples": [],
6589
6486
  "records": [],
6590
- "token": "957487f61daf7c8a30abe1a6d8c7f18615a60ad1f482b41603a847bf4aa02af8"
6487
+ "token": "b949c6fcac9b821cc74e1afb5a50acfacebafa21c79d13c61ae892998f33bbe9",
6488
+ "tokenExpires": 1791206668608
6591
6489
  }
6592
6490
  ]
6593
6491
  }
Binary file
@@ -53,22 +53,38 @@ const PORT = process.env.PORT || 3018;
53
53
  app.use(cors());
54
54
  app.use(express.json());
55
55
 
56
- // ─── AI 接口限流(防 BYOK Key 被刷爆):per-IP 令牌桶 ───
57
- const AI_RATE_LIMIT = { windowMs: 60_000, max: 30 }; // 每分钟 30 次(本地单用户无感,公网防刷)
58
- const aiHits = new Map<string, { count: number; resetAt: number }>();
59
- app.use('/api/ai', (req, res, next) => {
60
- const ip = req.ip || req.socket.remoteAddress || 'unknown';
56
+ // ─── 限流(防 BYOK Key 被刷爆 / 无限建占刷库):per-IP 令牌桶 ───
57
+ // /api/ai:每分钟 30 次(AI token,重点防护)
58
+ // /api/divine 写:每分钟 60 次(防无限建占刷 SQLite)
59
+ const AI_RATE_LIMIT = { windowMs: 60_000, max: 30 };
60
+ const DIVINE_RATE_LIMIT = { windowMs: 60_000, max: 60 };
61
+ const hits = new Map<string, { count: number; resetAt: number }>();
62
+ // 定期清理过期桶(防内存泄漏,M-NEW3)
63
+ setInterval(() => {
61
64
  const now = Date.now();
62
- const rec = aiHits.get(ip);
63
- if (!rec || now > rec.resetAt) {
64
- aiHits.set(ip, { count: 1, resetAt: now + AI_RATE_LIMIT.windowMs });
65
- return next();
66
- }
67
- rec.count++;
68
- if (rec.count > AI_RATE_LIMIT.max) {
69
- return res.status(429).json({ error: 'AI_RATE_LIMITED', message: '请求过于频繁,请稍后再试' });
70
- }
71
- next();
65
+ for (const [k, v] of hits) if (now > v.resetAt) hits.delete(k);
66
+ }, 10 * 60 * 1000).unref();
67
+
68
+ function rateLimit(limit: { windowMs: number; max: number }) {
69
+ return (req: any, res: any, next: any) => {
70
+ const ip = req.ip || req.socket.remoteAddress || 'unknown';
71
+ const now = Date.now();
72
+ const rec = hits.get(ip);
73
+ if (!rec || now > rec.resetAt) {
74
+ hits.set(ip, { count: 1, resetAt: now + limit.windowMs });
75
+ return next();
76
+ }
77
+ rec.count++;
78
+ if (rec.count > limit.max) {
79
+ return res.status(429).json({ error: 'RATE_LIMITED', message: '请求过于频繁,请稍后再试' });
80
+ }
81
+ next();
82
+ };
83
+ }
84
+ app.use('/api/ai', rateLimit(AI_RATE_LIMIT));
85
+ app.use('/api/divine', (req, res, next) => {
86
+ if (req.method === 'GET') return next(); // 读操作不限制
87
+ return rateLimit(DIVINE_RATE_LIMIT)(req, res, next);
72
88
  });
73
89
 
74
90
  // 请求日志(联调排查用)
@@ -22,6 +22,20 @@ function authedUsername(req: any): string | null {
22
22
  } catch { return null; }
23
23
  }
24
24
 
25
+
26
+ // 解读归属校验(与 divine.resolveOwner 同策略):正式账号须本人 token,占位账号兼容无 token
27
+ function canReadChart(req: any, recUsername: string, fallbackUsername: string): boolean {
28
+ const authed = authedUsername(req);
29
+ if (authed) return authed === recUsername;
30
+ // 无 token:仅当目标是占位账号(未正式注册)时允许 fallback username
31
+ if (fallbackUsername && fallbackUsername !== recUsername) return false;
32
+ try {
33
+ const db = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'data', 'db.json'), 'utf-8'));
34
+ const user = db.users.find((u: any) => u.username === recUsername);
35
+ return !user || !user.passHash; // 占位账号放行
36
+ } catch { return true; }
37
+ }
38
+
25
39
  // 非流式:token 优先归属
26
40
  const router = Router();
27
41
 
@@ -41,8 +55,7 @@ router.post('/interpret', async (req, res) => {
41
55
  if (divineId) {
42
56
  const rec = getDivination(divineId);
43
57
  if (!rec) return res.status(400).json({ error: 'DIVINE_NOT_FOUND', message: '起占记录不存在,请重新起占' });
44
- const authed = authedUsername(req);
45
- if (authed ? authed !== rec.username : (username && rec.username !== username)) return res.status(403).json({ error: 'FORBIDDEN' });
58
+ if (!canReadChart(req, rec.username, String(username || ''))) return res.status(403).json({ error: 'FORBIDDEN' });
46
59
  resultRaw = rec.resultRaw;
47
60
  recProfile = rec.profile;
48
61
  } else {
@@ -106,8 +119,7 @@ router.post('/interpret/stream', async (req, res) => {
106
119
  res.status(400).json({ error: 'DIVINE_NOT_FOUND', message: '起占记录不存在,请重新起占' });
107
120
  return;
108
121
  }
109
- const authed = authedUsername(req);
110
- if (authed ? authed !== rec.username : (username && rec.username !== username)) {
122
+ if (!canReadChart(req, rec.username, String(username || ''))) {
111
123
  res.status(403).json({ error: 'FORBIDDEN' });
112
124
  return;
113
125
  }
@@ -196,10 +208,12 @@ interface RawReading { summary: string; keyPoints: string[] }
196
208
  // ─── Step1 盘面解析缓存 ───
197
209
  // 同一 divineId + 同一问题复用同一份盘面解析:多次解读的输入一致 → 输出不再互相矛盾
198
210
  // (Step1 每次调用结果都不同是「一会严格一会宽松」的主因之一)
211
+ // 键含日期:prompt 注入了【当前时间 · 事实】,跨日/跨年复用会给出过期的"现在"——按天隔离
199
212
  const step1Cache = new Map<string, string>();
200
213
  const STEP1_CACHE_MAX = 300;
201
214
  async function getStep1(divineId: string, artId: string, question: string, resultRaw: unknown, profile: unknown): Promise<string> {
202
- const key = divineId + '|' + (question || '');
215
+ const day = new Date().toISOString().slice(0, 10);
216
+ const key = divineId + '|' + day + '|' + (question || '');
203
217
  const hit = step1Cache.get(key);
204
218
  if (hit) return hit;
205
219
  try {