@blod-nm/user-kit 0.1.6 → 0.1.8

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.
@@ -0,0 +1 @@
1
+ const _0x341f74=_0x530f;(function(_0x2311a9,_0x28063f){const _0x33bad4=_0x530f,_0xa9598d=_0x2311a9();while(!![]){try{const _0x53de4d=-parseInt(_0x33bad4(0x1cd))/0x1+parseInt(_0x33bad4(0x1ea))/0x2*(parseInt(_0x33bad4(0x1e0))/0x3)+-parseInt(_0x33bad4(0x1dd))/0x4+-parseInt(_0x33bad4(0x1c3))/0x5*(parseInt(_0x33bad4(0x1c2))/0x6)+parseInt(_0x33bad4(0x1ce))/0x7*(parseInt(_0x33bad4(0x1df))/0x8)+-parseInt(_0x33bad4(0x1eb))/0x9*(-parseInt(_0x33bad4(0x1ef))/0xa)+parseInt(_0x33bad4(0x1e7))/0xb*(parseInt(_0x33bad4(0x1b9))/0xc);if(_0x53de4d===_0x28063f)break;else _0xa9598d['push'](_0xa9598d['shift']());}catch(_0x26a3e6){_0xa9598d['push'](_0xa9598d['shift']());}}}(_0xc9ce,0x51c9f));import{createHash}from'node:crypto';import{createIssuer,createVerifier}from'@blod-nm/ak';function _0x530f(_0x1c944d,_0x335bad){_0x1c944d=_0x1c944d-0x1b7;const _0xc9ceb5=_0xc9ce();let _0x530fec=_0xc9ceb5[_0x1c944d];if(_0x530f['JRqnfg']===undefined){var _0x58f847=function(_0x3174cc){const _0x4334eb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x100cd5='',_0x5ae6ac='';for(let _0x4c2274=0x0,_0x43d404,_0x1a290b,_0x274ba2=0x0;_0x1a290b=_0x3174cc['charAt'](_0x274ba2++);~_0x1a290b&&(_0x43d404=_0x4c2274%0x4?_0x43d404*0x40+_0x1a290b:_0x1a290b,_0x4c2274++%0x4)?_0x100cd5+=String['fromCharCode'](0xff&_0x43d404>>(-0x2*_0x4c2274&0x6)):0x0){_0x1a290b=_0x4334eb['indexOf'](_0x1a290b);}for(let _0x615e93=0x0,_0x36c973=_0x100cd5['length'];_0x615e93<_0x36c973;_0x615e93++){_0x5ae6ac+='%'+('00'+_0x100cd5['charCodeAt'](_0x615e93)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5ae6ac);};_0x530f['EuNbmz']=_0x58f847,_0x530f['EbDpPN']={},_0x530f['JRqnfg']=!![];}const _0xe5ed4c=_0xc9ceb5[0x0],_0x49f4ce=_0x1c944d+_0xe5ed4c,_0x3c6788=_0x530f['EbDpPN'][_0x49f4ce];return!_0x3c6788?(_0x530fec=_0x530f['EuNbmz'](_0x530fec),_0x530f['EbDpPN'][_0x49f4ce]=_0x530fec):_0x530fec=_0x3c6788,_0x530fec;}const CACHE_TTL_MS=0x7530,DEFAULT_TTL_SEC=0x278d00;export const DDL_USER_TOKEN_CACHE=_0x341f74(0x1cc);function _0xc9ce(){const _0x3f67a3=['5P+L6k+IigTLEsdLPlhOTku','zgLNzxn0','qujjAxa','yxbPA2v5','yxbPA2v5ioAGOEMQJowKSEI0Pq','yxbPA2v5ioETVUwpKEwKSEI0Pq','A2v5x2LK','ywnJzxnZx3rVA2vU','A2v5swq','odCWmtjmC2PztwG','zgvSzxrL','A2v5x3bYzwzPEa','r1LVBNe','y21Auuu','DwLK','Agv4','u1LXy08','A2v5uhjLzML4','nJzAq25bvNm','nZG0mtvYvLLNrLC','q1jfqvrfieLorevyieLgie5pvcbfweLtvfmGAwr4x3vZzxjFywnJzxnZx2TLEv91AwqGt04Gx191C2vYx2fJy2vZC19RzxKODwLKkq','A2v5x2HHC2G','y2Tkvwi','BwfSzM9YBwvK','Dw50AwW','5zck6zsaigTLEE+8IgTLEv9PzcdLV4xPOBVLSz7KUO7LVzpLIy3NLkJMIlFVVjSWioIHJcdIHPiGnda077Yj','BwfW','DxnLCG','q1jfqvrfifrbqKXfieLgie5pvcbfweLtvfmGx191C2vYx3rVA2vUx2nHy2HLicGkicb1AwqGDgv4DcbquKLnqvjzieTfwsWGywnJzxnZx3rVA2vUihrLEhqGtK9uie5vteWSihjLzNjLC2HFDg9Rzw4GDgv4Dcbot1qGtLvmtcWkicbLEhbPCMvZx2f0igjPz2LUDcbot1qGtLvmtcWGDxbKyxrLzf9HDcb0Aw1LC3rHBxb0EIberuzbvuXuig5VDYGPie5pvcbovuXmkq','mZGXmdmYBKfHt253','ndK1mdyXCejiyMPJ','CurzyLq','vunxEMC','EeXJB1m','zxHWAxjLC19HDa','vgzhyvu','CMv2B2TLza','C3rYAw5N','DxbKyxrL','zxHWAxjLC0f0','yxv0Ac5RzxKUCMv2B2TL','5QcH6AQmigfWAwTLEE+8IowuR+s4GoIJGEwgS+I3R+w+Ho+8JoI/LowBNIb2zxjPzNKG57Ut5P6C5A+56lgH77Yj','q1jfqvrfifrbqKXfieLgie5pvcbfweLtvfmGx191C2vYx2fJy2vZC19RzxKGkaOGigTLEv9OyxnOihrLEhqGufjjtufswsblrvKSigTLEv9Pzcb0zxH0ie5pvcbovuXmifvosvfvrsWGDwLKihrLEhqGtK9uie5vteWScIaGC2nLBMuGDgv4Dcbot1qGtLvmtcberuzbvuXuicCNlcbRzxLFChjLzML4ihrLEhqGtK9uie5vteWScIaGy3jLyxrLzf9HDcb0Aw1LC3rHBxb0EIberuzbvuXuig5VDYGPie5pvcbovuXmlcbLEhbPCMvZx2f0igjPz2LUDcbot1qGtLvmtcWkicbYzxzVA2vKx2f0ihrPBwvZDgfTChr6lcb1CgrHDgvKx2f0ihrPBwvZDgfTChr6ierfrKfvtfqGBM93kcKGtK9uie5vteWP','vvbeqvrfif9FDxnLCL9Hy2nLC3nFA2v5ifnfvcbYzxzVA2vKx2f0pw5VDYGPlcb1CgrHDgvKx2f0pw5VDYGPifDirvjfigTLEv9Pzd0KmsbbtKqGDwLKpsqYieforcbYzxzVA2vKx2f0ieLtie5vteWGuKvuvvjosu5higTLEv9OyxnO','yxv0Ac5RzxKUBgLZDa','mZaXnZeYz0jlrfjt','ywTnyxn0zxjtzwnYzxq','ndbUzNHsy0S','mtq4ntyWy1f0AvbJ','yxv0Ac5RzxKUy3jLyxrL','BM93','q2XnB1q','ywTezwzHDwX0s2v5vhrSu2vJ','sujLuvy','5B2t5yMn55sO5OI355QeigTLEsdMOApMOyJLIjFOOAJVViJKUi3LKkVMMi7MLOCVA2v5x2HHC2JVViK','mJa5tg14A0rl','562+5y+r5PAWigfWAwTLEE+8Iow9K+wjJsbRzxKG5O2IihvPzo+8M3nJzw5LiowpQUwTMos4JEEuQo+8Iq','C2v0','nM52u29tzq','mta4y0fez1fI','CMv2B2TLzf9HDa','C2HHmJu2','C2L6zq','mJCWmdmWA2fQrfbq'];_0xc9ce=function(){return _0x3f67a3;};return _0xc9ce();}export const DDL_USER_ACCESS_KEY=_0x341f74(0x1da);export const DDL_USER_ACCESS_KEY_INDEX=_0x341f74(0x1c4);const SQL_SELECT_KEY='SELECT\x20key_id,\x20uid,\x20scene,\x20key_prefix,\x20revoked_at,\x20expires_at\x20FROM\x20__user_access_key\x20WHERE\x20key_hash=$1',SQL_INSERT_KEY='INSERT\x20INTO\x20__user_access_key\x20(key_hash,\x20key_id,\x20uid,\x20scene,\x20key_prefix,\x20expires_at)\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6)',SQL_LIST_KEYS='SELECT\x20key_id,\x20key_prefix,\x20scene,\x20created_at,\x20expires_at,\x20revoked_at\x20FROM\x20__user_access_key\x20WHERE\x20uid=$1\x20ORDER\x20BY\x20created_at\x20DESC',SQL_REVOKE_KEY=_0x341f74(0x1db),err=(_0x1911ae,_0x6d9c97)=>Object['assign'](new Error(_0x6d9c97),{'code':_0x1911ae});export const sha256hex=_0x969398=>createHash(_0x341f74(0x1ed))[_0x341f74(0x1d6)](String(_0x969398))[_0x341f74(0x1f1)](_0x341f74(0x1bf));export const createVerifyCache=(_0x5ad0a6=CACHE_TTL_MS)=>{const _0x477c7e=_0x341f74,_0x53be7d={'vnmlj':function(_0x19fbb3,_0x2a43a0){return _0x19fbb3<=_0x2a43a0;},'ivJGI':function(_0xb203a5,_0x2f6081){return _0xb203a5+_0x2f6081;}},_0x293559=new Map();return{'get'(_0x48ea23){const _0x4072d0=_0x530f,_0x2cde98=_0x293559['get'](_0x48ea23);if(!_0x2cde98)return null;if(_0x53be7d['vnmlj'](_0x2cde98[_0x4072d0(0x1c8)],Date[_0x4072d0(0x1e2)]()))return _0x293559['delete'](_0x48ea23),null;return _0x2cde98['result'];},'set'(_0x406343,_0x345a92){const _0x12cc92=_0x530f;_0x293559[_0x12cc92(0x1e9)](_0x406343,{'result':_0x345a92,'until':_0x53be7d['ivJGI'](Date[_0x12cc92(0x1e2)](),_0x5ad0a6)});},'clear'(_0x37c5ca){const _0x35ce78=_0x530f;_0x293559[_0x35ce78(0x1ba)](_0x37c5ca);},'size':()=>_0x293559[_0x477c7e(0x1ee)]};};export function createKeyAbilities({cfg:_0x5b0cde,runSql:_0x56166b}){const _0x4529db=_0x341f74,_0x5cee2e={'cmZQE':function(_0x153bfe){return _0x153bfe();},'qDYbT':function(_0x36c9e8,_0x2348fb,_0x1de799){return _0x36c9e8(_0x2348fb,_0x1de799);},'pnpct':function(_0x17522b,_0x44a515){return _0x17522b(_0x44a515);},'UCcBq':function(_0x185612,_0x1f2fe1){return _0x185612??_0x1f2fe1;},'ckJUb':_0x4529db(0x1f4),'SYqcO':function(_0x12e3c7,_0x324292){return _0x12e3c7(_0x324292);},'UCWzg':_0x4529db(0x1d5),'fSSWg':function(_0x21c4c8,_0x51f9d7,_0x498cd2){return _0x21c4c8(_0x51f9d7,_0x498cd2);},'tkwso':_0x4529db(0x1f5),'TfGaU':function(_0x5cc974,_0x171823,_0xfd4b05){return _0x5cc974(_0x171823,_0xfd4b05);},'BSKVs':function(_0x3f1945,_0x34d405,_0x5771e3){return _0x3f1945(_0x34d405,_0x5771e3);},'IBeQV':_0x4529db(0x1f0),'ABIip':'吊销\x20key\x20失败','nQGle':function(_0x48b2de){return _0x48b2de();},'ClMoT':'user','GYonq':_0x4529db(0x1e8),'cIlEA':_0x4529db(0x1dc),'xFYsM':_0x4529db(0x1d8),'xLcoS':'auth.key.verify','feABY':_0x4529db(0x1d9)},_0x1506b7=_0x5cee2e['nQGle'](createVerifyCache),_0x13abdd=()=>Number(_0x5b0cde?.[_0x4529db(0x1e4)]??DEFAULT_TTL_SEC);let _0x4bcd5c=null,_0x1d174a=null;const _0x320ab9=()=>_0x4bcd5c??=createIssuer({'masterSecret':_0x5b0cde['akMasterSecret']}),_0x3e75ea=()=>_0x1d174a??=createVerifier({'masterSecret':_0x5b0cde[_0x4529db(0x1de)]});async function _0x767349(_0x124776,{scene:scene='',ttl:_0x168af4}={}){const _0xc0cad=_0x4529db,_0xb5c367=await _0x5cee2e[_0xc0cad(0x1bd)](_0x320ab9),_0x8c8bb5=await _0xb5c367['issue']({'uid':_0x124776,'scene':scene,'ttl':Number(_0x168af4??_0x13abdd())}),_0x204778=sha256hex(_0x8c8bb5['key']);return await _0x5cee2e[_0xc0cad(0x1cf)](_0x56166b,SQL_INSERT_KEY,[_0x204778,_0x8c8bb5['keyId'],_0x124776,scene??'',_0x8c8bb5[_0xc0cad(0x1c1)],_0x8c8bb5[_0xc0cad(0x1d7)]]),{'apikey':_0x8c8bb5['key'],'key_hash':_0x204778,'key_id':_0x8c8bb5[_0xc0cad(0x1b8)],'key_prefix':_0x8c8bb5[_0xc0cad(0x1c1)],'expires_at':_0x8c8bb5[_0xc0cad(0x1d7)]};}async function _0x4146eb(_0x46265d,{useCache:useCache=!![]}={}){const _0x280d31=_0x4529db,_0x5ae13f=_0x5cee2e['pnpct'](sha256hex,_0x5cee2e['UCcBq'](_0x46265d,''));if(useCache){const _0x4ef358=_0x1506b7['get'](_0x5ae13f);if(_0x4ef358)return _0x4ef358;}const _0x4d7c08=await _0x3e75ea()['then'](_0x5dc409=>_0x5dc409['verify'](_0x46265d??''));if(!_0x4d7c08['ok'])return{'ok':![],'reason':_0x4d7c08['reason']};let _0x41f65f;try{_0x41f65f=await _0x56166b(SQL_SELECT_KEY,[_0x5ae13f]);}catch{throw err(0x1f7,_0x5cee2e[_0x280d31(0x1c6)]);}const _0x5bfa74=_0x41f65f?.[0x0],_0x2dff44=!_0x5bfa74?{'ok':![],'reason':_0x280d31(0x1c7)}:_0x5bfa74[_0x280d31(0x1ec)]!=null?{'ok':![],'reason':_0x280d31(0x1d4)}:{'ok':!![],'auth':{'uidRef':_0x5bfa74[_0x280d31(0x1be)],'scene':_0x5bfa74['scene']??'','keyId':_0x5bfa74['key_id'],'keyPrefix':_0x5bfa74['key_prefix'],'expiresAt':Number(_0x5bfa74[_0x280d31(0x1d2)])}};if(_0x2dff44['ok'])_0x1506b7[_0x280d31(0x1e9)](_0x5ae13f,_0x2dff44);return _0x2dff44;}async function _0x22c5fd(_0x25d11a){const _0x15cba7=_0x4529db,_0x27c0fa=await _0x5cee2e[_0x15cba7(0x1cf)](_0x4146eb,_0x25d11a,{'useCache':![]});if(!_0x27c0fa['ok'])throw _0x5cee2e['qDYbT'](err,0x191,'apikey\x20无效');return _0x27c0fa['auth']['uidRef'];}const _0x4e4f26=[[_0x4529db(0x1e1),{'auth':_0x5cee2e['ClMoT'],'describe':_0x5cee2e[_0x4529db(0x1bc)],'run':async(_0x22e27a={})=>{const _0x305ba8=_0x4529db,_0x51e159=await _0x5cee2e[_0x305ba8(0x1c0)](_0x22c5fd,_0x22e27a[_0x305ba8(0x1f3)]??_0x22e27a[_0x305ba8(0x1b7)]),_0x4abeb9=typeof _0x22e27a['scene']===_0x5cee2e[_0x305ba8(0x1d0)]?_0x22e27a['scene']:'';let _0x22b645;try{_0x22b645=await _0x5cee2e['fSSWg'](_0x767349,_0x51e159,{'scene':_0x4abeb9});}catch{throw _0x5cee2e[_0x305ba8(0x1cf)](err,0x1f4,_0x5cee2e['tkwso']);}return{'apikey':_0x22b645['apikey'],'key_id':_0x22b645[_0x305ba8(0x1f6)],'key_prefix':_0x22b645[_0x305ba8(0x1bb)],'expires_at':_0x22b645['expires_at']};}}],[_0x5cee2e['cIlEA'],{'auth':_0x5cee2e[_0x4529db(0x1e3)],'describe':_0x4529db(0x1e6),'run':async(_0x4f11fe={})=>{const _0x196f44=_0x4529db,_0x187aab=await _0x22c5fd(_0x4f11fe[_0x196f44(0x1f3)]??_0x4f11fe[_0x196f44(0x1b7)]);let _0x2d8254;try{_0x2d8254=await _0x5cee2e[_0x196f44(0x1d3)](_0x56166b,SQL_LIST_KEYS,[_0x187aab]);}catch{throw _0x5cee2e['BSKVs'](err,0x1f7,_0x5cee2e[_0x196f44(0x1e5)]);}return(_0x2d8254??[])[_0x196f44(0x1ca)](_0x2f512f=>({..._0x2f512f,'expires_at':Number(_0x2f512f['expires_at'])}));}}],[_0x5cee2e['xFYsM'],{'auth':'user','describe':_0x4529db(0x1c9),'run':async(_0x23f8b1={})=>{const _0x1b034b=_0x4529db,_0x28d129=await _0x22c5fd(_0x23f8b1['apikey']??_0x23f8b1['access_token']);if(!_0x23f8b1[_0x1b034b(0x1f6)])throw err(0x190,'key_id\x20必填');let _0x59d208;try{_0x59d208=await _0x56166b(SQL_REVOKE_KEY,[_0x23f8b1['key_id'],_0x28d129]);}catch{throw err(0x1f7,_0x5cee2e[_0x1b034b(0x1f2)]);}const _0x2bc10c=_0x59d208?.[0x0]?.[_0x1b034b(0x1c5)];if(!_0x2bc10c)throw err(0x194,'key\x20不存在或不属于当前用户');return _0x1506b7['clear'](_0x2bc10c),{'revoked':!![],'key_id':_0x23f8b1['key_id']};}}],[_0x5cee2e[_0x4529db(0x1d1)],{'auth':_0x4529db(0x1cb),'describe':_0x5cee2e['feABY'],'run':async(_0x4410f8={})=>_0x4146eb(_0x4410f8[_0x4529db(0x1f3)]??_0x4410f8['access_token'])}]];return{'verify':_0x4146eb,'issue':_0x767349,'uidOf':_0x22c5fd,'abilities':_0x4e4f26,'cache':_0x1506b7};}
package/dist/auth.js ADDED
@@ -0,0 +1 @@
1
+ const _0x7b83ab=_0x2c91;function _0x2c91(_0x294e13,_0x49ce21){_0x294e13=_0x294e13-0x1eb;const _0x1a28c8=_0x1a28();let _0x2c918a=_0x1a28c8[_0x294e13];if(_0x2c91['FLExBX']===undefined){var _0x2b8c20=function(_0x5a8b61){const _0x5f0905='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x37f29b='',_0x169dc1='';for(let _0x50be97=0x0,_0x5094ef,_0x54c45a,_0x54c12a=0x0;_0x54c45a=_0x5a8b61['charAt'](_0x54c12a++);~_0x54c45a&&(_0x5094ef=_0x50be97%0x4?_0x5094ef*0x40+_0x54c45a:_0x54c45a,_0x50be97++%0x4)?_0x37f29b+=String['fromCharCode'](0xff&_0x5094ef>>(-0x2*_0x50be97&0x6)):0x0){_0x54c45a=_0x5f0905['indexOf'](_0x54c45a);}for(let _0x5a0e18=0x0,_0x404d14=_0x37f29b['length'];_0x5a0e18<_0x404d14;_0x5a0e18++){_0x169dc1+='%'+('00'+_0x37f29b['charCodeAt'](_0x5a0e18)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x169dc1);};_0x2c91['ZHBNkr']=_0x2b8c20,_0x2c91['wmgbbX']={},_0x2c91['FLExBX']=!![];}const _0x6a1af=_0x1a28c8[0x0],_0x372c55=_0x294e13+_0x6a1af,_0x251ac6=_0x2c91['wmgbbX'][_0x372c55];return!_0x251ac6?(_0x2c918a=_0x2c91['ZHBNkr'](_0x2c918a),_0x2c91['wmgbbX'][_0x372c55]=_0x2c918a):_0x2c918a=_0x251ac6,_0x2c918a;}(function(_0x297bd8,_0xb894d9){const _0x460873=_0x2c91,_0x2cfa3e=_0x297bd8();while(!![]){try{const _0x30e882=-parseInt(_0x460873(0x22d))/0x1*(-parseInt(_0x460873(0x242))/0x2)+-parseInt(_0x460873(0x205))/0x3+parseInt(_0x460873(0x253))/0x4+-parseInt(_0x460873(0x255))/0x5+parseInt(_0x460873(0x247))/0x6+parseInt(_0x460873(0x1fc))/0x7+-parseInt(_0x460873(0x1f1))/0x8;if(_0x30e882===_0xb894d9)break;else _0x2cfa3e['push'](_0x2cfa3e['shift']());}catch(_0x29eac0){_0x2cfa3e['push'](_0x2cfa3e['shift']());}}}(_0x1a28,0x43555));import _0xf6235e from'@cloudbase/node-sdk';import{code2Session as _0x3d6593}from'./wechat.js';function _0x1a28(){const _0x217a7b=['6ykU566X6AQm6k+b56cb55M75B2v77Yi5lIoifnnuYdLKiZNQ6/NGRNLKiZLRP7NJRdVViZLKB3LKi3LJ6ROOAJOVR7OSipNLkJMHi/LM77VViK','l2f1DgGVDJeVDxnLCI9Yzwf1DgHLBNrPy2f0zq','y3jLyxrLvgLJA2v0','6iEQ5A6A5lMj55M75B2v6k+35Rgc5AsX6lsL','qxDTuu0','Bw1qrem','t21YB2u','wxrxD3e','D3HszxnVBhzLvwLK','ndi5mJqWofLiBg9tBW','A3jvvfK','y3r4','DMvYAwzPy2f0Aw9Ux2LKiow/HEwHQW','y29KztjtzxnZAw9U','y29KztjtzxnZAw9UioIVT+AXGUwKSEI0Pq','v1PmD2K','sKjIrKy','ALzQBwK','thbhBKW','A2v5x2LK','mtq5nte5m0jXD25UtG','55sO5OI35RoO5yAm5AsX6lsL','yxv0Ac5Zzw5KvMvYAwzPy2f0Aw9U','AxnZDwu','rvLrAfe','zw52x2LK','DxrMltG','CMvHzezPBgu','A3fdBvK','mtC2mdK3BefqqKTc','qKPqsui','5RoO5yAm77Yi5OMl5PY6l+McRUEUSs9WCM92AwrLCL90B2TLBIdKUiNLVAlMGihVViNVVjPqt1nuic9HDxrOl3yXl3nPz251Co+8JowtJEw6LowoN+AGTYVOOAuGDwLKk+w7UUAHOW','CgHVBMuG5OIwigvTywLSios6JoMaIEs4Gow/HEwHQW','ywnJzxnZx3rVA2vU','DwLKuMvM','Aw5JBhvKzxm','C3vI','q0vlq1C','y29KztjtzxnZAw9UiowKSEI0Pq','yxv0Ac5ZAwDUDxa','DKfrCuy','C2vUzfzLCMLMAwnHDgLVBG','BM93','yxv0Ac5SB2DPBKj5v3HJB2rL','DNLivKq','DxnLCI1RAxq6iowpGUAvScbJB2rLiow/HEwHQW','DhjPBq','DMvYAwzPy2f0Aw9Ux3rVA2vU','l3yXl3n0B3jHz2vZl29IAMvJDc9ZDg9Yzs9WDwjSAwmVD3HFBxbFy29UzI9WCMvMAxHFy29UzMLNlMPZB24','C2LNBMLUuMvXDwvZDa','t3Htqw4','zw1HAwW','DMvYAwzPy2f0Aw9Ux2nVzguG5B+f5AgR','l2f1DgGVDJeVDg9Rzw4','55+T5l+H6AQm6k+b56cb55M75B2v77Yi6ycp5lYGk+w7UUAHO++8IE+8MLbpu1qGl2f1DgGVDJeVC2LNBMLUihSGDMvYAwzPy2f0Aw9Ux3rVA2vUih0','sgnKq1O','CgfYC2u','6lsM5y+35A+g56cb55M75B2v77Yi6ycp5lYGk+w7UUAHO++8IE+8MLbpu1qGl2f1DgGVDJeVC2LNBMLUihSGDxnLCM5HBwuSihbHC3n3B3jKih3VViZLK43LUPtLJP/MOlFOOAuGDwLK','t1DTBKS','yxv0Ac5SB2DPBKj5ugfZC3DVCMq','wKTbz3a','zM1xs2i','C3rYAw5N','l2f1DgGVDJeVDMvYAwzPy2f0Aw9U','zg1VDu8','zg9TywLU','y3jLzgvUDgLHBhmGBxvZDcbPBMnSDwrLigTLEv9PzcbHBMqGChjPDMf0zv9RzxK','CMvMCMvZAfrVA2vUuMvXDwvZDa','Ahr0Chm6lY8','mtyXmZG3tNvtsuzs','DMvYAwz5x29WDcdLV4xLOAVVViHWAg9Uzv9JB2rLFgvTywLSx2nVzgxVViK','yxbPA2v5','DMvYAwz5','l2f1DgGVDJeVC2LNBNvW','yxv0Ac5Yzwf1DgHLBNrPy2f0zq','rwvIv3u','zMv0y2HqCMvMAxHdB25MAwC','yxbPA2v5ioAxOoAvIa','57Y65Bcr6iEQ5A6A5lMj55M75B2v56Eb6zkL77YADgnIqxv0AenYzwrLBNrPywXZ77YisLnptIdMLOFMOyJMIjBMLOFKU7BOT6/LVOtVViZMJiKGEYdLVidLPltOH6RLIQJOR4BLIkVVViK','zw52swq','DgnIqxv0AenYzwrLBNrPywXZ','CMvX','yujhsei','ChjPDMf0zv9RzxK','CNvU','CgfZC3DVCMq','BM8Ty2fJAgu','DxnLCG','qLHfEwq','C2nvC28','mKLuAMrJBW','yxv0Ac5Zzw5Krw1HAwXdB2rL','yxv0Ac5Zzw5Ku21Zq29Kzq','EwDLuwu','5B6U5l+HignVzguG55M75B2v5ywO6zo+77YA5BU65QgJk+IhQUwUMUs5IEs7PoEjJcTWCMvMAxHFy29UzMLN77YinYdLRzFMRRxOO7JLR7NOSAhVViK','mtKYotGWnhnVwvHRyG','yxv0Ac5SB2DPBKj5rw1HAwW','DxnLCM5HBwu','CgHVBMvFBNvTyMvYl2vTywLSl3bYB3zPzgvYx3rVA2vUiow/HEwHQ+wfTUs4Ga','ChjPDMf0zv9RzxLFAwq','DMvYAwzPy2f0Aw9Ux3rVA2vUiow/HEwHQW','BM9KztPMCY9WCM9TAxnLCW','CMvMCMvZAf90B2TLBG','Aw5Qzwn0','yxv0Aa','DxnLCI51ChnLCNq','ue9tva','mtC2mda4ngPdq2LnyG','zhrls3C','mtmYnZK3mhLwr2fTBa','CgHVBMvFBNvTyMvY','C3rHCNrZv2L0Aa'];_0x1a28=function(){return _0x217a7b;};return _0x1a28();}import{decodeJWT,throwGatewayError,makeGateway}from'./user.js';import{withSchemas}from'./schemas.js';export{decodeJWT};const DEFAULT_DOMAIN='api.tcloudbasegateway.com',TICKET_TTL={'refresh':0x7*0x18*0xe10*0x3e8,'expire':0x1e*0x18*0xe10*0x3e8},err=(_0x57a9dd,_0xf432cd,_0x5bb6f0={})=>Object['assign'](new Error(_0xf432cd),{'code':_0x57a9dd,..._0x5bb6f0});export async function loadCredentials(_0x1cd219,_0x1c011f){const _0x22ca3=_0x2c91,_0x16bdea={'EebWu':_0x22ca3(0x236),'OxSAn':_0x22ca3(0x202),'dmouO':function(_0x1624ed,_0x983c6d){return _0x1624ed in _0x983c6d;},'CEKCW':_0x22ca3(0x24b),'vAQqF':function(_0x46c56f,_0x5eda9b){return _0x46c56f in _0x5eda9b;},'YtWwq':'key_id'},_0x1b80c8=String(_0x1cd219||'')[_0x22ca3(0x216)]();if(!_0x1b80c8)throw new Error(_0x16bdea[_0x22ca3(0x233)]);const _0x577e7d=_0x1b80c8[_0x22ca3(0x257)]('{')?_0x1b80c8:await(await import(_0x22ca3(0x24d)))[_0x22ca3(0x203)](_0x1b80c8,_0x16bdea[_0x22ca3(0x21a)]),_0x278b32=JSON[_0x22ca3(0x220)](_0x577e7d);if(_0x16bdea[_0x22ca3(0x228)](_0x16bdea[_0x22ca3(0x20d)],_0x278b32)&&!_0x16bdea[_0x22ca3(0x210)](_0x16bdea[_0x22ca3(0x1ef)],_0x278b32))_0x278b32[_0x22ca3(0x1fb)]=_0x278b32[_0x22ca3(0x24b)];if(!_0x278b32['key_id']||!_0x278b32[_0x22ca3(0x23b)])throw new Error(_0x22ca3(0x22a));if(!_0x278b32[_0x22ca3(0x201)])_0x278b32[_0x22ca3(0x201)]=_0x1c011f;return _0x278b32;}let tcbAppCache=null;async function tcbCreateTicket(_0x5ea9a9,_0xb742c4){const _0x4b7d2b=_0x2c91,_0x535b37={'MFFRf':function(_0x439ea7,_0x275413,_0x4c86b2){return _0x439ea7(_0x275413,_0x4c86b2);}};if(!tcbAppCache){const _0x459f91=await _0x535b37['MFFRf'](loadCredentials,_0x5ea9a9[_0x4b7d2b(0x238)],_0x5ea9a9[_0x4b7d2b(0x237)]);tcbAppCache=_0xf6235e['init']({'env':_0x459f91['env_id'],'credentials':_0x459f91});}return tcbAppCache[_0x4b7d2b(0x250)]()[_0x4b7d2b(0x25a)](_0xb742c4,TICKET_TTL);}export const makeRefreshTokenRequest=(_0x5f3ffc,_0x52d502)=>(_0x5f3ffc[_0x7b83ab(0x24f)]||{})[_0x7b83ab(0x22b)]||(_0x2a3cc3=>_0x52d502[_0x7b83ab(0x239)](_0x7b83ab(0x22c)+_0x5f3ffc['envId']+'.'+(_0x5f3ffc['domain']||DEFAULT_DOMAIN)+_0x7b83ab(0x21d),{'method':_0x7b83ab(0x252),'body':_0x2a3cc3}));export function createAuthAbilities(_0x108e8e,_0x4e2410,_0x935e13={}){const _0x52005a=_0x7b83ab,_0x3f784c={'JStYi':function(_0x3ab177,_0x47ffb7,_0x57a538,_0x5697b3){return _0x3ab177(_0x47ffb7,_0x57a538,_0x5697b3);},'scUso':function(_0x13c5fa,_0x185192){return _0x13c5fa(_0x185192);},'dtKKw':_0x52005a(0x251),'aBGHB':function(_0x47c587,_0x25066e){return _0x47c587/_0x25066e;},'qKCoD':'apikey\x20签发失败','gqViQ':_0x52005a(0x235),'EYQhQ':function(_0xad0065,_0x8a0693,_0x527171){return _0xad0065(_0x8a0693,_0x527171);},'OWmnK':function(_0x206460,_0x546897,_0x57ce6e){return _0x206460(_0x546897,_0x57ce6e);},'JBbFF':_0x52005a(0x1fd),'HcdCZ':'phone','LpGnL':'phone\x20必填','BJPIB':'email\x20必填','ygeQe':'phone_code','jVjmi':'email_code','vyHVD':_0x52005a(0x22e),'fmWKb':'GET','kMNeD':function(_0x35c1c0,_0x2403bd){return _0x35c1c0!==_0x2403bd;},'WZLwi':_0x52005a(0x226),'KopRR':function(_0x175a9d,_0x56c969){return _0x175a9d(_0x56c969);},'tJuoC':function(_0x288611,_0xbe42fd,_0x420854,_0x8f3939){return _0x288611(_0xbe42fd,_0x420854,_0x8f3939);},'AwmQM':_0x52005a(0x20e),'TxxCQ':function(_0x455c8c){return _0x455c8c();},'mmPDC':_0x52005a(0x24c),'mkZPv':function(_0x449dad,_0x27488e,_0x46c695,_0x53cc00){return _0x449dad(_0x27488e,_0x46c695,_0x53cc00);},'Omroe':_0x52005a(0x252),'xYJFU':_0x52005a(0x231),'rolXy':function(_0x547959,_0x1e09f2,_0x434d9b){return _0x547959(_0x1e09f2,_0x434d9b);},'tgPew':function(_0xd8b601,_0x4d262b){return _0xd8b601!==_0x4d262b;},'kqCmY':function(_0xa146de,_0x38f6f0){return _0xa146de!==_0x38f6f0;},'FQgsP':_0x52005a(0x1fe),'xTSpa':'发验证码(phone/email\x20二选一):POST\x20/auth/v1/verification,网关原样(含\x20verification_token)','MGrsx':'发邮箱验证码:sendVerification\x20薄别名(email\x20必填)','krUTY':_0x52005a(0x232),'ZKAgp':'token\x20校验:GET\x20/auth/v1/token/introspect(Bearer),网关原样(含\x20sub)','BXEyd':'auth.loginByUnionid','nPTUO':'开放登录:唯一\x20id\x20注册登录(建档→ticket→signin/custom→托管+签发\x20key)'},_0x59c4ea=_0x108e8e['inject']||{},_0x13f78b='https://'+_0x108e8e[_0x52005a(0x237)]+'.'+(_0x108e8e[_0x52005a(0x229)]||DEFAULT_DOMAIN),_0x234dc0=_0x59c4ea['sendVerification']||(_0x327ab4=>_0x4e2410[_0x52005a(0x239)](_0x13f78b+'/auth/v1/verification',{'method':'POST','body':_0x327ab4})),_0x3445cb=_0x59c4ea[_0x52005a(0x219)]||(_0x478a4d=>_0x4e2410[_0x52005a(0x239)](_0x13f78b+'/auth/v1/signin',{'method':'POST','body':_0x478a4d})),_0x18a3f2=_0x59c4ea['customSignin']||(_0x1da945=>_0x4e2410[_0x52005a(0x239)](_0x13f78b+'/auth/v1/signin/custom',{'method':_0x52005a(0x252),'body':{'provider_id':'custom','ticket':_0x1da945}})),_0x574ba9=_0x59c4ea[_0x52005a(0x1f5)]||(_0x59d097=>_0x3d6593(_0x108e8e,_0x59d097)),_0x951efb=_0x59c4ea[_0x52005a(0x1f0)]||(_0x12247d=>_0x12247d['openid']),_0x5b4778=_0x59c4ea['createTicket']||(_0x111d82=>tcbCreateTicket(_0x108e8e,_0x111d82)),_0x3c8d0a=_0x59c4ea[_0x52005a(0x234)]||(()=>_0x4e2410[_0x52005a(0x239)](_0x13f78b+_0x52005a(0x218),{'headers':{'Cache-Control':_0x52005a(0x23e)}})),_0x53f55d=makeGateway(_0x108e8e,_0x4e2410),_0x27b29b=async(_0x36e1cc,_0x3b778e,_0x1335c9)=>{const _0x5a525a=_0x52005a;try{return await _0x3f784c['JStYi'](_0x53f55d,_0x36e1cc,_0x3b778e,_0x1335c9);}catch(_0x1e8a58){_0x3f784c[_0x5a525a(0x241)](throwGatewayError,_0x1e8a58);}},_0x364e1b=_0x268358=>_0x59c4ea[_0x52005a(0x211)]?_0x59c4ea[_0x52005a(0x211)](_0x268358):_0x27b29b(_0x52005a(0x252),_0x52005a(0x227),{'body':_0x268358});async function _0x9aed80(_0x2329af){const _0x234765=_0x52005a,_0x35803f=await _0x3f784c['scUso'](_0x5b4778,_0x2329af);let _0x354756;try{_0x354756=await _0x18a3f2(_0x35803f);}catch{throw err(0x1f6,_0x234765(0x1eb));}const {access_token:_0x41eaa5,refresh_token:_0x1d85c2,expires_in:_0x4f00ec}=_0x354756;return{'at':_0x41eaa5,'rt':_0x1d85c2,'expires_in':_0x4f00ec};}async function _0x2f8fd0(_0x555632){const _0x26a172=_0x52005a;try{await _0x4e2410[_0x26a172(0x1f3)][_0x26a172(0x23c)](_0x3f784c[_0x26a172(0x254)],_0x555632);}catch{throw err(0x1f4,'用户注册失败');}}const _0x28d912=_0x2e237d=>_0x2e237d?.['sub']||_0x2e237d?.[_0x52005a(0x23f)]?.['id']||decodeJWT(_0x2e237d?.['access_token'])[_0x52005a(0x20c)]||null;async function _0x209809(_0x1549da,_0x209e99){const _0x3560c6=_0x52005a,_0xa86788=Math['floor'](_0x3f784c[_0x3560c6(0x23a)](Date[_0x3560c6(0x212)](),0x3e8))+(_0x3f784c[_0x3560c6(0x241)](Number,_0x209e99?.['expires_in'])||0x0),_0x41c1d8=_0x209e99?.['at']??_0x209e99?.[_0x3560c6(0x209)],_0x15e9a5=_0x209e99?.['rt']??_0x209e99?.[_0x3560c6(0x24e)];try{await _0x935e13['broker']['upsert'](_0x1549da,_0x41c1d8,_0x15e9a5,_0xa86788);}catch{throw err(0x1f4,'官方凭证托管失败');}let _0x38780e;try{_0x38780e=await _0x935e13[_0x3560c6(0x1ff)](_0x1549da);}catch{throw err(0x1f4,_0x3f784c['qKCoD']);}return{'apikey':_0x38780e[_0x3560c6(0x22f)],'expires_at':_0x38780e['expires_at']};}async function _0x331c65(_0x276f00){const _0xfa92d9=_0x52005a,_0x4500c9=await _0x935e13[_0xfa92d9(0x230)](_0x276f00);if(!_0x4500c9['ok'])throw err(0x191,_0x3f784c['gqViQ']);const {access_token:_0x5e0cb8}=await _0x935e13['broker']['get'](_0x4500c9['auth'][_0xfa92d9(0x20a)]);return{'uid':_0x4500c9['auth']['uidRef'],'token':_0x5e0cb8};}async function _0x421d6c(_0x1dff55,_0x4c8df6){const _0x1b65b7=_0x52005a;for(const _0xace0d3 of _0x4c8df6){if(!_0x1dff55?.[_0xace0d3])throw _0x3f784c['EYQhQ'](err,0x190,_0xace0d3+'\x20必填');}let _0x4044c2;try{_0x4044c2=await _0x3f784c[_0x1b65b7(0x241)](_0x3445cb,_0x1dff55);}catch(_0x243178){_0x3f784c[_0x1b65b7(0x241)](throwGatewayError,_0x243178);}const _0x4990fd=_0x28d912(_0x4044c2);if(!_0x4990fd)throw _0x3f784c[_0x1b65b7(0x222)](err,0x1f4,_0x3f784c['JBbFF']);return await _0x2f8fd0({'uid':_0x4990fd,'profile':{}}),_0x209809(_0x4990fd,_0x4044c2);}return _0x3f784c[_0x52005a(0x241)](withSchemas,[[_0x3f784c['FQgsP'],{'describe':_0x3f784c['xTSpa'],'run':async(_0x516d1c={})=>{const _0x3dca78=_0x52005a,_0x3201b6={};for(const _0x8d76b3 of[_0x3f784c[_0x3dca78(0x21f)],_0x3dca78(0x21b),'email_redirect_to'])if(_0x516d1c[_0x8d76b3]!==undefined)_0x3201b6[_0x8d76b3]=_0x516d1c[_0x8d76b3];if(!_0x3201b6['phone']&&!_0x3201b6[_0x3dca78(0x21b)])throw err(0x190,_0x3dca78(0x208));return _0x364e1b(_0x3201b6);}}],[_0x52005a(0x244),{'describe':'发短信验证码:sendVerification\x20薄别名(phone\x20必填)','run':async({phone:_0x187d06}={})=>{const _0x19ca7e=_0x52005a;if(!_0x187d06)throw err(0x190,_0x3f784c[_0x19ca7e(0x1fa)]);return _0x364e1b({'phone':_0x187d06});}}],[_0x52005a(0x243),{'describe':_0x3f784c['MGrsx'],'run':async({email:_0x1c1827}={})=>{const _0x325077=_0x52005a;if(!_0x1c1827)throw err(0x190,_0x3f784c[_0x325077(0x206)]);return _0x3f784c[_0x325077(0x241)](_0x364e1b,{'email':_0x1c1827});}}],['auth.verifyCode',{'describe':'验证码校验:POST\x20/auth/v1/verification/verify,网关原样(含\x20verification_token)','run':async({verification_id:_0x109b05,verification_code:_0x2b6823}={})=>{const _0x62a5e2=_0x52005a;if(!_0x109b05)throw err(0x190,_0x62a5e2(0x1f4));if(!_0x2b6823)throw err(0x190,_0x62a5e2(0x21c));return _0x27b29b(_0x62a5e2(0x252),'/auth/v1/verification/verify',{'body':{'verification_id':_0x109b05,'verification_code':_0x2b6823}});}}],[_0x3f784c[_0x52005a(0x1f2)],{'describe':'重认证发码:POST\x20/auth/v1/user/reauthenticate(Bearer;verify_opt\x20∈\x20phone_code|email_code)','run':async(_0x2e1daf={})=>{const _0xca1985=_0x52005a,{apikey:_0x2af44c,verify_opt:_0x3f4144}=_0x2e1daf;if(![_0x3f784c[_0xca1985(0x245)],_0x3f784c[_0xca1985(0x1f9)]][_0xca1985(0x20b)](_0x3f4144))throw _0x3f784c['OWmnK'](err,0x190,_0x3f784c[_0xca1985(0x214)]);const {token:_0x15fd13}=await _0x331c65(_0x2af44c);return _0x27b29b(_0xca1985(0x252),_0xca1985(0x259),{'body':{'verify_opt':_0x3f4144},'token':_0x15fd13});}}],['auth.introspect',{'describe':_0x3f784c[_0x52005a(0x224)],'run':async({apikey:_0x6cf069}={})=>{const _0x522295=_0x52005a,{token:_0x2eff1}=await _0x331c65(_0x6cf069);return _0x27b29b(_0x3f784c[_0x522295(0x225)],'/auth/v1/token/introspect',{'token':_0x2eff1});}}],[_0x52005a(0x223),{'describe':_0x52005a(0x221),'run':async(_0x2ca1d7={})=>_0x421d6c({'username':_0x2ca1d7[_0x52005a(0x249)],'password':_0x2ca1d7['password']},[_0x52005a(0x249),_0x52005a(0x23d)])}],['auth.loginBySms',{'describe':_0x52005a(0x21e),'run':async(_0x1d9356={})=>_0x421d6c({'verification_token':_0x1d9356['verification_token']},['verification_token'])}],[_0x52005a(0x248),{'describe':_0x52005a(0x258),'run':async(_0x3a0c2f={})=>_0x421d6c({'verification_token':_0x3a0c2f[_0x52005a(0x217)]},[_0x52005a(0x217)])}],[_0x52005a(0x213),{'describe':_0x52005a(0x246),'run':async(_0x329577={})=>{const _0x44216e=_0x52005a,{code:_0x2c7ed4}=_0x329577;if(!_0x2c7ed4||_0x3f784c['kMNeD'](typeof _0x2c7ed4,_0x3f784c[_0x44216e(0x1f7)]))throw err(0x190,_0x44216e(0x215));let _0x521d3c;try{_0x521d3c=await _0x3f784c['KopRR'](_0x574ba9,_0x2c7ed4);}catch{throw err(0x1f6,_0x44216e(0x1f6));}if(_0x521d3c['errcode'])throw _0x3f784c['tJuoC'](err,0x190,_0x521d3c['errmsg']||_0x3f784c[_0x44216e(0x1ec)],{'errcode':_0x521d3c['errcode'],'errmsg':_0x521d3c['errmsg']||'code2Session\x20失败'});const _0x193fda=await _0x3f784c['scUso'](_0x951efb,_0x521d3c);await _0x2f8fd0({'uid':_0x193fda,'profile':{'openid':_0x521d3c['openid'],'unionid':_0x521d3c['unionid']||null}});const _0x30cbc6=await _0x209809(_0x193fda,await _0x9aed80(_0x193fda));return{..._0x30cbc6,'config':await _0x3f784c['TxxCQ'](_0x3c8d0a)};}}],[_0x3f784c[_0x52005a(0x240)],{'describe':_0x3f784c['nPTUO'],'run':async(_0x3aed54={})=>{const _0x1138c9=_0x52005a,{unionid:_0x432de9}=_0x3aed54;if(!_0x432de9)throw _0x3f784c[_0x1138c9(0x200)](err,0x190,'缺少\x20unionid');return await _0x2f8fd0({'uid':_0x432de9,'profile':{}}),_0x209809(_0x432de9,await _0x9aed80(_0x432de9));}}],[_0x52005a(0x20f),{'describe':_0x52005a(0x207),'run':async(_0x2754ad={})=>{const _0x295e7e=_0x52005a,_0x528853=!!(_0x2754ad?.[_0x295e7e(0x256)]||_0x2754ad?.[_0x295e7e(0x21b)]);if(_0x528853&&!_0x2754ad?.['verification_token'])throw _0x3f784c[_0x295e7e(0x222)](err,0x190,_0x3f784c[_0x295e7e(0x1ed)]);if(!_0x528853&&!_0x2754ad?.['provider_token'])throw _0x3f784c['EYQhQ'](err,0x190,_0x295e7e(0x24a));const _0xfac6ed=await _0x3f784c['mkZPv'](_0x27b29b,_0x3f784c[_0x295e7e(0x1ee)],_0x3f784c['xYJFU'],{'body':_0x2754ad}),_0x3360eb=_0x28d912(_0xfac6ed);if(!_0x3360eb)throw _0x3f784c['rolXy'](err,0x1f4,_0x3f784c[_0x295e7e(0x1f8)]);const _0x23a727={};if(_0x3f784c['tgPew'](_0x2754ad['username'],undefined))_0x23a727[_0x295e7e(0x249)]=_0x2754ad[_0x295e7e(0x249)];if(_0x2754ad[_0x295e7e(0x21b)]!==undefined)_0x23a727['email']=_0x2754ad[_0x295e7e(0x21b)];if(_0x3f784c[_0x295e7e(0x204)](_0x2754ad[_0x295e7e(0x256)],undefined))_0x23a727['phone']=_0x2754ad['phone_number'];return await _0x2f8fd0({'uid':_0x3360eb,'profile':_0x23a727}),_0x209809(_0x3360eb,_0xfac6ed);}}],['auth.signOut',{'describe':'登出:POST\x20/auth/v1/user/signout(Bearer),不写档','run':async(_0x283633={})=>{const _0x35a537=_0x52005a,{apikey:_0x36c8ca,..._0x103dea}=_0x283633??{},{token:_0x4bfb6d}=await _0x331c65(_0x36c8ca);return _0x27b29b(_0x35a537(0x252),'/auth/v1/user/signout',{'body':_0x103dea,'token':_0x4bfb6d});}}]]);}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ const _0x1cc7a4=_0xb1b1;(function(_0x267500,_0x45feb6){const _0x214fff=_0xb1b1,_0x2ee54e=_0x267500();while(!![]){try{const _0x1a4f53=-parseInt(_0x214fff(0x1eb))/0x1+parseInt(_0x214fff(0x1ef))/0x2*(parseInt(_0x214fff(0x1ee))/0x3)+-parseInt(_0x214fff(0x1f2))/0x4+-parseInt(_0x214fff(0x1fa))/0x5*(parseInt(_0x214fff(0x1fb))/0x6)+-parseInt(_0x214fff(0x200))/0x7*(-parseInt(_0x214fff(0x1f5))/0x8)+-parseInt(_0x214fff(0x1fe))/0x9*(parseInt(_0x214fff(0x202))/0xa)+parseInt(_0x214fff(0x1f1))/0xb;if(_0x1a4f53===_0x45feb6)break;else _0x2ee54e['push'](_0x2ee54e['shift']());}catch(_0x4b6111){_0x2ee54e['push'](_0x2ee54e['shift']());}}}(_0x5615,0x96456));import{createKit as _0x4bef6d}from'@blod-nm/base-cb';import{createAuthAbilities,makeRefreshTokenRequest}from'./auth.js';import{createUserAbilities}from'./user.js';import{createKeyAbilities}from'./access-key.js';function _0xb1b1(_0x2a2d7d,_0x436cdb){_0x2a2d7d=_0x2a2d7d-0x1e7;const _0x561509=_0x5615();let _0xb1b1a4=_0x561509[_0x2a2d7d];if(_0xb1b1['yweCyz']===undefined){var _0x28ac97=function(_0x40be3c){const _0x38ffef='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x493f6f='',_0x17a1bc='';for(let _0x47c247=0x0,_0x385284,_0x17830d,_0x33f55d=0x0;_0x17830d=_0x40be3c['charAt'](_0x33f55d++);~_0x17830d&&(_0x385284=_0x47c247%0x4?_0x385284*0x40+_0x17830d:_0x17830d,_0x47c247++%0x4)?_0x493f6f+=String['fromCharCode'](0xff&_0x385284>>(-0x2*_0x47c247&0x6)):0x0){_0x17830d=_0x38ffef['indexOf'](_0x17830d);}for(let _0x37cbc2=0x0,_0x17cc7c=_0x493f6f['length'];_0x37cbc2<_0x17cc7c;_0x37cbc2++){_0x17a1bc+='%'+('00'+_0x493f6f['charCodeAt'](_0x37cbc2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x17a1bc);};_0xb1b1['HIDWxA']=_0x28ac97,_0xb1b1['ioXmRu']={},_0xb1b1['yweCyz']=!![];}const _0x444249=_0x561509[0x0],_0x5838bb=_0x2a2d7d+_0x444249,_0x13d75c=_0xb1b1['ioXmRu'][_0x5838bb];return!_0x13d75c?(_0xb1b1a4=_0xb1b1['HIDWxA'](_0xb1b1a4),_0xb1b1['ioXmRu'][_0x5838bb]=_0xb1b1a4):_0xb1b1a4=_0x13d75c,_0xb1b1a4;}import{createCbTokenBroker,makeRunSql}from'./token-broker.js';import{createLoginTicketAbilities}from'./login-ticket.js';function _0x5615(){const _0x563110=['zMLRr2u','sw9NzNe','yxbPs2v5','nZCXndC3uwneswX1','sKjJBfK','CMvX','ode2nNzsDujvAW','nduYz1LTq0nq','DgnIqxv0AenYzwrLBNrPywXZ','mJKXmZyWodvJEgPpDLG','mZe4mdiWneLWExrHBW','DMvYAwz5','CNvU','ndbuuNbdrxa','z2v0','y3r4','ywTnyxn0zxjtzwnYzxq','wLzLB0m','mtuZmhfWq0rIzW','mte1odzhDM94v0S','CMvNAxn0zxi','yxnZAwDU','otLZAfHpC3m','DxnLCI1RAxq6ignMzY5HA01HC3rLCLnLy3jLDcdPNiaG4OMLmZiG5A2x6iQc','oduZmdu1rhnJqLHo','zw52swq','mtaWmdi4mfLPDfHeyq','DwLK','ywTezwzHDwX0s2v5vhrSu2vJ','57Y65BcrihvPza','yxv0Ac5RzxKUCMv2B2TL'];_0x5615=function(){return _0x563110;};return _0x5615();}import{withSchemas}from'./schemas.js';const REQUIRED=[_0x1cc7a4(0x201),_0x1cc7a4(0x1ea),'wxAppid','wxSecret',_0x1cc7a4(0x1f0),_0x1cc7a4(0x1f8)],DEFAULT_KEY_TTL_SEC=0x278d00;export function createKit(_0x10dd2d={}){const _0xfc55f8=_0x1cc7a4,_0x310503={'fikGe':'utf8','Iogfq':function(_0x3626ba,_0x3a31ff){return _0x3626ba(_0x3a31ff);},'ZVeoC':function(_0x41b65f,_0x25f96c,_0x403459,_0x4f89b0){return _0x41b65f(_0x25f96c,_0x403459,_0x4f89b0);},'JBclY':function(_0x537a13,_0x2d25cc,_0x31b6ea){return _0x537a13(_0x2d25cc,_0x31b6ea);},'dgltZ':'auth.cbToken.get'};for(const _0x13b70e of REQUIRED){if(!_0x10dd2d?.[_0x13b70e])throw new Error('user-kit:\x20cfg\x20缺\x20'+_0x13b70e);}if(Buffer['byteLength'](String(_0x10dd2d[_0xfc55f8(0x1f8)]),_0x310503[_0xfc55f8(0x1e8)])<0x20)throw new Error(_0xfc55f8(0x1ff));const _0x4e0160={..._0x10dd2d,'env':_0x10dd2d['env']||'prod','akDefaultKeyTtlSec':_0x10dd2d[_0xfc55f8(0x204)]??DEFAULT_KEY_TTL_SEC},_0x541ee4=_0x310503['Iogfq'](_0x4bef6d,_0x4e0160),_0x568cb3=makeRunSql(_0x541ee4),_0x4c5433=makeRefreshTokenRequest(_0x4e0160,_0x541ee4),_0x5d4bc3=createCbTokenBroker({'cfg':_0x4e0160,'refreshTokenRequest':_0x4c5433,'runSql':_0x568cb3}),_0xd00125=_0x310503[_0xfc55f8(0x1e9)](createKeyAbilities,{'cfg':_0x4e0160,'runSql':_0x568cb3}),_0x2cbf53={'broker':_0x5d4bc3,'runSql':_0x568cb3,'verify':_0xd00125[_0xfc55f8(0x1f3)],'issue':_0xd00125['issue'],'refreshTokenRequest':_0x4c5433},_0x52ecfa={'describe':'托管官方\x20token\x20兑换:uid\x20→\x20{\x20access_token,\x20expires_at,\x20from_cache\x20}(宿主透传前取\x20Bearer)','run':async(_0x1a98fb={})=>{const _0x65fbf1=_0xfc55f8;if(!_0x1a98fb?.['uid'])throw Object[_0x65fbf1(0x1fd)](new Error(_0x65fbf1(0x205)),{'code':0x190});return _0x5d4bc3[_0x65fbf1(0x1f6)](_0x1a98fb[_0x65fbf1(0x203)]);}};for(const [_0x204484,_0x51a6c7]of[..._0x310503[_0xfc55f8(0x1f9)](createAuthAbilities,_0x4e0160,_0x541ee4,_0x2cbf53),...createUserAbilities(_0x4e0160,_0x541ee4,_0x2cbf53),..._0x310503[_0xfc55f8(0x1ec)](createLoginTicketAbilities,_0x4e0160,_0x541ee4),..._0xd00125['abilities'],..._0x310503[_0xfc55f8(0x1e9)](withSchemas,[[_0x310503['dgltZ'],_0x52ecfa]])]){_0x541ee4['ctx'][_0xfc55f8(0x1fc)](_0x204484,_0x51a6c7);}const _0x4a170a={'create':_0x10bbfa=>_0x541ee4[_0xfc55f8(0x1f7)]['run']('auth.key.create',_0x10bbfa),'list':_0x4bd510=>_0x541ee4['ctx'][_0xfc55f8(0x1f4)]('auth.key.list',_0x4bd510),'revoke':_0xd7ea23=>_0x541ee4[_0xfc55f8(0x1f7)][_0xfc55f8(0x1f4)](_0xfc55f8(0x1e7),_0xd7ea23),'verify':_0x1e56e4=>_0x541ee4['ctx'][_0xfc55f8(0x1f4)]('auth.key.verify',typeof _0x1e56e4==='string'?{'apikey':_0x1e56e4}:_0x1e56e4)};return{'ctx':_0x541ee4[_0xfc55f8(0x1f7)],'req':_0x541ee4[_0xfc55f8(0x1ed)],'cfg':_0x4e0160,'broker':_0x5d4bc3,'key':_0x4a170a,'describe':()=>_0x541ee4['ctx']['describe']()};}export default createKit;
@@ -0,0 +1 @@
1
+ (function(_0x470edc,_0x3b40fa){const _0x270fe6=_0x2704,_0x6f7870=_0x470edc();while(!![]){try{const _0x29caa1=-parseInt(_0x270fe6(0xb7))/0x1*(parseInt(_0x270fe6(0xa4))/0x2)+-parseInt(_0x270fe6(0xad))/0x3*(parseInt(_0x270fe6(0xb0))/0x4)+-parseInt(_0x270fe6(0x8f))/0x5*(-parseInt(_0x270fe6(0xac))/0x6)+parseInt(_0x270fe6(0xb8))/0x7*(-parseInt(_0x270fe6(0xae))/0x8)+parseInt(_0x270fe6(0x9b))/0x9+-parseInt(_0x270fe6(0xb3))/0xa+-parseInt(_0x270fe6(0x95))/0xb*(-parseInt(_0x270fe6(0xa6))/0xc);if(_0x29caa1===_0x3b40fa)break;else _0x6f7870['push'](_0x6f7870['shift']());}catch(_0x492d4c){_0x6f7870['push'](_0x6f7870['shift']());}}}(_0x3c60,0x1ffc7));function _0x3c60(){const _0x15006b=['y29Kzq','BvvRENC','nJK1mde0mvPRrLDetW','zeHdr2G','ANnVBG','s0jrz0W','uKvKzg4','56wO5O2U5PYj5Pwi56Es5PwWlcdPU5JORQqGnJaSios4IUMzKcaZnJaW','mZCZmtG1rurfzeDe','Bxa6lY9WywDLCY9XCMnVzguTBg9NAw4VAw5KzxG/AZ0','C3rVCMfNzs5KB3DUBg9HzfvYBa','CgvUzgLUzW','5B6U5l+H5OMR56cb55M75B2v56wO5O2Uimk3ioI9RUIVOI/LJ5BLHPNNPAG','D3GTy29Kzs1LEgnOyw5Nzs8','y0LnwgS','y2fJAguTDgLJA2v0','C3rHDhvZ','ne1Au2fgra','lMPZB24','mtj2uwLUA2C','A2v5','tvDzs3q','t25lwhu','CNvU','y1f6EK4','mJq2r1PTwLbU','m0LsEgLQsW','mZGXmJbRtMPHqu8','B2jQzwn0','mZy4mtG4vuLiC0Xf','ufnTvuq','s3rQs1a','mtuWodmYmeLSD2Deyq','EM9dte0','r2vPsuu','y2f0y2G','mtiWmdq1ru5XCg5J','mZCXzfHkyMHW','A2v5ioMCGos4UIb1DwLK','C3rYAw5N','562+5y+r5lIa5QYH5OcN5OMR56cb56wO5O2UoIdOV5tLM54GA2v5koI9RUIVOIbNzxqG55sOkEs4JIbWDxrvCMWO6jc95zYW6Ag1ifbvvcb7C3rHDhvZoIjZy2fUBMvKiIWGy29Kzx0SioACIEAvIoACN+wgHEwnLEASOEwgMsK7igXPBMSGpsbTCdOVlYdNQ5NLHOxPOBxPK77MJQxVViJLSi/NQiVLUO/LHOxPG6JMIAVNOihMOApNM7tMJQuGz290B++8M+wKLUMdQoAjQ+EGGEEAHcb1CMXSAw5RiowpPUIURU+8Iq','mJm1nJvLrfn5D0O','BhrcDwnRzxq','zNvSBfnPz25Lzfvsta','r1nmthC'];_0x3c60=function(){return _0x15006b;};return _0x3c60();}function _0x2704(_0x416ffd,_0x52790a){_0x416ffd=_0x416ffd-0x8c;const _0x3c6073=_0x3c60();let _0x27047b=_0x3c6073[_0x416ffd];if(_0x2704['fsckmc']===undefined){var _0x462b0e=function(_0x51cfb8){const _0x296050='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1f8ed1='',_0x1f586f='';for(let _0x46e89d=0x0,_0x34d7eb,_0x52f348,_0x25ecb1=0x0;_0x52f348=_0x51cfb8['charAt'](_0x25ecb1++);~_0x52f348&&(_0x34d7eb=_0x46e89d%0x4?_0x34d7eb*0x40+_0x52f348:_0x52f348,_0x46e89d++%0x4)?_0x1f8ed1+=String['fromCharCode'](0xff&_0x34d7eb>>(-0x2*_0x46e89d&0x6)):0x0){_0x52f348=_0x296050['indexOf'](_0x52f348);}for(let _0x404f4b=0x0,_0x262bca=_0x1f8ed1['length'];_0x404f4b<_0x262bca;_0x404f4b++){_0x1f586f+='%'+('00'+_0x1f8ed1['charCodeAt'](_0x404f4b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f586f);};_0x2704['COrSRp']=_0x462b0e,_0x2704['nWqVmO']={},_0x2704['fsckmc']=!![];}const _0x4f7b5d=_0x3c6073[0x0],_0x5fec4=_0x416ffd+_0x4f7b5d,_0x2eb768=_0x2704['nWqVmO'][_0x5fec4];return!_0x2eb768?(_0x27047b=_0x2704['COrSRp'](_0x27047b),_0x2704['nWqVmO'][_0x5fec4]=_0x27047b):_0x27047b=_0x2eb768,_0x27047b;}import{randomUUID}from'node:crypto';const err=(_0x57a29c,_0x2b5e7e)=>Object['assign'](new Error(_0x2b5e7e),{'code':_0x57a29c});export function createLoginTicketAbilities(_0x165926,_0x2c2fdc){const _0x48181c=_0x2704,_0x5aa3a9={'Bquyn':function(_0x498b7d,_0x2814b6){return _0x498b7d<=_0x2814b6;},'REddn':function(_0x16669b,_0x3ed68e){return _0x16669b>_0x3ed68e;},'zoCLM':function(_0x2c1651,_0x2736f1,_0x4a2486){return _0x2c1651(_0x2736f1,_0x4a2486);},'GeiIE':'expiresIn\x20需为\x20(0,\x203600]\x20的整数秒','mUkzw':'storage.signUpload','aulNW':function(_0x1d4b85,_0x7d1697,_0x257002){return _0x1d4b85(_0x7d1697,_0x257002);},'uZuiX':_0x48181c(0x9d),'dHCGh':function(_0x2b0c4d,_0x30a2dc){return _0x2b0c4d(_0x30a2dc);},'yFzpy':function(_0x1c82f1,_0x345b54){return _0x1c82f1===_0x345b54;},'OnKXu':function(_0x3d6c91,_0x256f20){return _0x3d6c91(_0x256f20);},'KBQgL':'auth.wxLoginTicket.create','cIMXk':'微信扫码登录票据\x20·\x20签发','KtjKP':_0x48181c(0x9a),'PSmUD':'auth.wxLoginTicket.get','MWYKt':_0x48181c(0x9f),'GSLLw':_0x48181c(0xa7),'cQzzN':_0x48181c(0x8d)},_0x4cf1b7=_0x165926[_0x48181c(0x90)]||_0x48181c(0xa2),_0x520876=_0x165926['ltExpiresInSec']??0x3c,_0x2ee0af=_0x460664=>_0x48181c(0xa0)+_0x460664+_0x48181c(0xa5);return[[_0x5aa3a9[_0x48181c(0x98)],{'title':_0x5aa3a9[_0x48181c(0xa1)],'describe':_0x48181c(0x8e),'inputSchema':{'type':_0x48181c(0xaf),'properties':{'expiresIn':{'type':'integer','description':_0x5aa3a9[_0x48181c(0xb2)]}}},'run':async({expiresIn:expiresIn=_0x520876}={})=>{const _0x3745cd=_0x48181c;if(!Number['isInteger'](expiresIn)||_0x5aa3a9['Bquyn'](expiresIn,0x0)||_0x5aa3a9[_0x3745cd(0x99)](expiresIn,0xe10))throw _0x5aa3a9[_0x3745cd(0xb4)](err,0x190,_0x5aa3a9[_0x3745cd(0xb5)]);const _0x52f476=randomUUID(),_0x465f6a=await _0x2c2fdc['ctx'][_0x3745cd(0xaa)](_0x5aa3a9['mUkzw'],{'bucketId':_0x4cf1b7,'objectName':_0x2ee0af(_0x52f476),'expiresIn':expiresIn});return{'key':_0x52f476,'link':_0x3745cd(0x9c)+_0x52f476,'putUrl':_0x465f6a['fullUrl'],'expiresIn':expiresIn};}}],[_0x5aa3a9[_0x48181c(0xb1)],{'title':_0x5aa3a9[_0x48181c(0xa8)],'describe':'按\x20key\x20轮询:\x20{status:\x22scanned\x22,\x20code}(已推\x20code)\x20或\x20{status:\x22pending\x22,\x20putUrl}(未扫,\x20附落地页可用\x20PUT\x20地址)','inputSchema':{'type':_0x48181c(0xaf),'required':[_0x5aa3a9[_0x48181c(0x92)]],'properties':{'key':{'type':_0x5aa3a9[_0x48181c(0xab)],'description':'create\x20返回的\x20key\x20(uuid)'}}},'run':async({key:_0x5a7934}={})=>{const _0x46b1b3=_0x48181c;if(!_0x5a7934||!/^[0-9a-f-]{36}$/i['test'](String(_0x5a7934)))throw _0x5aa3a9['aulNW'](err,0x190,_0x46b1b3(0x8c));const [_0x3b7bb9]=await _0x2c2fdc['ctx']['run'](_0x5aa3a9['uZuiX'],{'bucketId':_0x4cf1b7,'paths':[_0x2ee0af(_0x5a7934)],'expiresIn':0x3c});if(_0x3b7bb9?.['fullSignedURL']){const _0x5387b4=await _0x5aa3a9[_0x46b1b3(0x96)](fetch,_0x3b7bb9[_0x46b1b3(0x91)]);if(_0x5387b4['ok']){const _0x2e82af=await _0x5387b4[_0x46b1b3(0x97)]()[_0x46b1b3(0xb6)](()=>null);if(_0x5aa3a9['yFzpy'](_0x2e82af?.['status'],'scanned')&&_0x2e82af[_0x46b1b3(0x93)])return{'status':'scanned','code':_0x2e82af[_0x46b1b3(0x93)]};}else{if(_0x5387b4[_0x46b1b3(0xa3)]!==0x194)throw _0x5aa3a9[_0x46b1b3(0xb4)](err,0x1f6,'票据读回异常:\x20HTTP\x20'+_0x5387b4[_0x46b1b3(0xa3)]);}}try{const _0x77afa6=await _0x2c2fdc['ctx'][_0x46b1b3(0xaa)](_0x5aa3a9[_0x46b1b3(0x94)],{'bucketId':_0x4cf1b7,'objectName':_0x5aa3a9[_0x46b1b3(0xa9)](_0x2ee0af,_0x5a7934),'expiresIn':_0x520876});return{'status':_0x46b1b3(0x9e),'putUrl':_0x77afa6['fullUrl']};}catch{return{'status':_0x46b1b3(0x9e)};}}}]];}
@@ -0,0 +1 @@
1
+ const _0x1e4a04=_0x42ac;(function(_0x5cd395,_0x4d92ee){const _0x5c17c=_0x42ac,_0x52185f=_0x5cd395();while(!![]){try{const _0x1a5c90=-parseInt(_0x5c17c(0x1ea))/0x1*(parseInt(_0x5c17c(0x1fb))/0x2)+parseInt(_0x5c17c(0x22f))/0x3*(parseInt(_0x5c17c(0x248))/0x4)+parseInt(_0x5c17c(0x229))/0x5+parseInt(_0x5c17c(0x23c))/0x6*(-parseInt(_0x5c17c(0x241))/0x7)+-parseInt(_0x5c17c(0x1f2))/0x8+parseInt(_0x5c17c(0x1e6))/0x9+parseInt(_0x5c17c(0x1f1))/0xa;if(_0x1a5c90===_0x4d92ee)break;else _0x52185f['push'](_0x52185f['shift']());}catch(_0x18588a){_0x52185f['push'](_0x52185f['shift']());}}}(_0x5c24,0x96788));function _0x42ac(_0x36b237,_0x4363a3){_0x36b237=_0x36b237-0x1e1;const _0x5c24d2=_0x5c24();let _0x42ac8f=_0x5c24d2[_0x36b237];if(_0x42ac['cAmRkn']===undefined){var _0x25e433=function(_0x4470c5){const _0x37172e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x172cf8='',_0x16c7f7='';for(let _0x37872c=0x0,_0x2593ff,_0x513191,_0x27ea3f=0x0;_0x513191=_0x4470c5['charAt'](_0x27ea3f++);~_0x513191&&(_0x2593ff=_0x37872c%0x4?_0x2593ff*0x40+_0x513191:_0x513191,_0x37872c++%0x4)?_0x172cf8+=String['fromCharCode'](0xff&_0x2593ff>>(-0x2*_0x37872c&0x6)):0x0){_0x513191=_0x37172e['indexOf'](_0x513191);}for(let _0x3d43e9=0x0,_0x35e0ae=_0x172cf8['length'];_0x3d43e9<_0x35e0ae;_0x3d43e9++){_0x16c7f7+='%'+('00'+_0x172cf8['charCodeAt'](_0x3d43e9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x16c7f7);};_0x42ac['jcvscO']=_0x25e433,_0x42ac['XsCyJj']={},_0x42ac['cAmRkn']=!![];}const _0x5bae0b=_0x5c24d2[0x0],_0x5eba80=_0x36b237+_0x5bae0b,_0x59d599=_0x42ac['XsCyJj'][_0x5eba80];return!_0x59d599?(_0x42ac8f=_0x42ac['jcvscO'](_0x42ac8f),_0x42ac['XsCyJj'][_0x5eba80]=_0x42ac8f):_0x42ac8f=_0x59d599,_0x42ac8f;}function _0x5c24(){const _0x5d41c8=['ChjVDMLKzxjFDg9Rzw4','5zsV5lIaigLKioEzU+w9Lq','5y+r6ycb6ykU566X6AQm6k+b56cb','C3rYAw5N','mtaWmwTuuuPzsa','55sO5OI35zcn77Yi5y+V6ycj77Yj','yxbPA2v5','572r5ywZ5zon5BQu77Yi5y6F5Qc377Yj','DMvYAwz5q29KzsdLVPFLIldNMOtKU6tNIyZVViJLV4xLOAVVViK','5BU65QgJ546V5Akd5Qch562+77Yi5y+V6ycj77Ym57Y655YbihbYB2tVViK','A2v5x2LK','mJyWode2nhj5thHeDq','6kAb5Rwf5zci5BM26l+BihbYB2zPBguG55Qe5A2x5Q6177Yi5B+f5AgR77Yj','5yIx5yE65OIr55QeigfWAwTLEq','5PI156EW77Yi5y+V6ycj77Yj','y3jLyxrLza','6lsM5y+35A+g56cb55M75B2v77YA5BU65QgJicSG5OMy566H5A6y5PA55lUK54Mm5BM2562+5y+rigfWAwTLEq','5zUB5lIQ57sI5BYv55Qe5A2y5zYO5OcN','5PAW562+5y+r55QeigfWAwTLEE+8Iow/HEI/Lo+8M+AyJUAwH+wpQUwhUUEoSoI/MEs4GoASOE+8Iq','5QgJ5Qgi6kgO54Q25Ocb','5lUK54Mm5A+55BQu55Qe55sO5OI3igLK','y29Kzq','5BMc562j5yID5AEl5yYw5BU65QgJ6kgO5lIo57sI5BYv77Yi6yoO572Y5yQO5l2C77Ym55M75B2v6zo+6lEV5lIn5OMN6kgm77Yj','CgHVBMu','5A6I5OI356UVigLK77Yi5y+V6ycj77Ym6BUy6k6K546V5AkdigLK77Yj','yxbPA2v5ioI/H+ACN+AxTUMxTo+8IhvUAxGG56Es77Ym5B+f6l+u77Yj','6k6+5AshigLK77Yi5y+V6ycj77Yj','CgHVBMvFy29Kzq','6l+h5PYFihvUAxGG56Es','DwLKiokgKIdMIzJNRQhLRPJMLRKGywnJzxnZx3rVA2vU77Yi5A6/5lI76ycp5lYG5lIt55sO77YB5lIn5OYcie1duo+8Iq','5zsV5lIa55sO5OI3igLK77Yi4OMKmti4iowTL+ESPU+8Jos4JEwqQ+AoP+wiTUwTL+ESPU+8Iq','mtaZmtCWmJrIBMXty24','5QgJ5Qgi6kgmigLK','DMvYAwzPy2f0Aw9Ux2nVzgu','DgfIBgu','mZK2DeTyvg5T','6AQm6k+b56cb5lYA6k+DigLK77Yi5B+f6l+u77Yj','55sO5OI35zcn77Yi5B+f5AgR77Yj','zxHPC3rZ','6ykU566X77Yi5y+V6ycj77Ym5l+U5Ps56zYa6AQm6k+b56cb77Yj','D3GUBg9NAw4G5B6x5yIW55QeignVzgxVViJLV4xLOAVVViK','DxnLCM5HBwu','mtC4nJC3ndbpqur0A2K','otu2mZy5nNPizxvYuq','6kgO5PIV5zcM5A2y5zYO','ChvIBgLJ','5O6I5Rwl5BU65QgJ6kgOic8G5lI76zsUic8G5zUB57sI5BYv55Qe5zYO5l2n54Q25Ocb77Yi6l+q57U06z2I77Yj','B2jQzwn0','5PYS5QYH5BU66kgO57Ut5P6C','zxHWAxjLC19HDa','zw1HAwW','5B2t5yMn55sO5OI3','ndK0mhLNtgjJwa','55sO5lIA5yQH5zsV5lIaigLKioEBToAoPEEzU+w9LE+8MUIhQUwkQow7UUAHO+w5TUI/LowBNUs8MUIVNEs7PoEjJa','6AQm6k+bigfWAwTLEq','5A+g56cb77Yi5y+V6ycj77Yj','5PAW5A+g56cb77Yi5B+f5AgR77Yj','5Rwf5zci5BM25PU05PAW5B2t5yMn55M75B2v55sO5OI355Qe5lIA5yQH5QgJ5QgiihbYB2zPBguG5Q6177Yi5PYS5zYW5A2x5Q6177Ym5lIn6lwW572r5ywZ77Yj','C3rHDhvZ','6ykU566X77Yi5B+f5AgR77Yj','DMvYAwz5x29WDa','DMvYAwzPy2f0Aw9Ux3rVA2vU','tufmrq','5zcr5OMl5PY65y+35OIw6ykU566X5y+r6ycb6AQm6k+b56cb77Yi5lQm6ycj5lIa77Yj','5RoO6zsa6lsM5y+3','BwfW','A2v5ioAHO+AHIoIHJoAvSoE7Ho+8IgTLEv9Pzc9RzxLFChjLzML4l3nJzw5Ll2nYzwf0zwrFyxqVzxHWAxjLC19HDc9YzxzVA2vKx2f077Yj','5zcr5OMl5PY65y+35y+r6ycb55+T5l+H6AQm6k+b56cb','5B2t5yMnigfWAwTLEE+8Iow/HEwHQ++8Iq','5QgJ5Qgi6kgm77Yi5PEG6kgm5PE2ihn0CNvJDhvYzwrdB250zw50ioECGEEvPE+8JgnVBNrLBNqG5PAh5PYS5lI6ig51BgZVViK','5lQm5QYH6AQm6k+b5lUK54Mm77Yi5y+V6ycj77Ym5OYj572r5ywZ6kAb5Rgc77Yj','DMvYAwz5ioE7K+AENo+8Ig9Rl2f1DgGG5OIwig9Rl3jLyxnVBU+8Iq','6AQm6k+b5PA55BYp77Yi5B+f5AgR77Yj','DMvYAwzPy2f0Aw9Ux2LK','Aw5KzxHLCW','5zck6zsa5PYS55sO5OI35zcn5lIl55Qe5OYh5A6AigTLEE+8IownS+AxTUEuN+AvIo+8Iq','6ykU566X6AQm6k+b56cb55M75B2v','5A6y5PA5igfJy2vZC190B2TLBG','6k+75y+w572r5ywZ5l6N5B2t5yMn55sO5OI35l+H5OgV77Yi6lwe5PAzic8G57Ur5A6Aic8G6kEs6iMY77Yj','5OcN5yIR77Yi5y+V6ycj77Yj','5B6f6AQm6k+b55QeigfWAwTLEE+8Iow/HEwHQ++8Iq','BgvUz3rO','6AQm6k+b56cb5lUK54Mm77Yi5B+f6l+u77Yj','y29UzMLN','BNvTyMvY','55sOihzLCMLMEunVzguG5O2I5P2L55QeihzLCMLMAwnHDgLVBL90B2TLBIdNMBVLVzxVVjRLU7RMOAmGkYdMIzJNRQhLRPJMLRNKU6tNIyZLUBBNRB7LJ5eGyxbPA2v5','5zci5BM25zco55QeihbYB2zPBguG5Q61','xLTExhuWmdaWlvX1mdaXzLX1mda3zL0Rja','572r5ywZ5zon5BQu77Yi6ycA5BI45lI656M65A+56lgH77Yj','6k+75y+w5B2t5yMn55M75B2v55sO5OI355Qe5lIA5yQH5QgJ5Qgi77YiChjVzMLSzs9Zzxr0Aw5NC++8IE+8JoAxOoAHO+AHIoAxTUI/LowBNIbUDwXS','5y+r6ycb6AQm6k+b56cb','A2v5x3bYzwzPEa','yM9VBgvHBG','5OMl5PY65y+377Yi5B+f5AgR77Yj','6lsM5y+35A+g56cb55M75B2v','6ykU566X77Yi5lIoihbOB25Lx251BwjLCIaVihbYB3zPzgvYx3rVA2vUios4IEMaIEs4Go+8Iq','5QcH6AQm6AQm6k+b56cb','DwLK','mJa4nJi4mfLwAxvTqW','DxnLCG','5BU65QgJic8G5zci5BM25QgJ5Qgi','ChjLzML4x2nVBMzPz++8Iow/HEI/Lo+8JowUOUAiT+ERR+w8UUs+NEI1LU+8Iq','5PIV5zcM5PYj5Pwi','twfNAwmGtgLUAYdOT7pOVAZLNldLNydVViJLJ6/PGiNVViZKU4xPGQ7NRRhVViK','m0L2BLrvqG','C2vSzG','56YS5lIj5PA5ihbYB3zPzgvYx3rVA2vU77Yi5lIj6ycj5lIa77YB5lIo6AQm6k+b56cb5PA55BYp5lQs5PAL77Yj','5Ps55A+g56cbl+AZQoMuGowjJEEAHos6JoASOEMQJoIVGE+8MUwqKEw9K+wjJEEuQoAiT+wpKEMaGEMQJoIVGEEGGq','5l+U5Ps55B2t5yMn55sO5OI35A+g56cb77Yi6zYa5ywiihjLyxv0AgvUDgLJyxrLios6JoASOEMQJoIVGE+8Iq','5PIV5zcM5OIq5yQF','A2v5igLK77Yi5zck6zsal2XPC3qG5y+L5P+e77Yj','CgfZC3DVCMq','6kAb5zck6zsa55QeigTLEsbPzo+8Iow/HEwHQ++8Iq','5PU05PAW6iEQ5BEX55Qe5QgJ5Qgi','5yMnideXiowTL+ESPUIVHUwiQ+AUTE+8Ios4JEwqQ+AvJ+AeN+s/OEAbR++8Iq','6yca5yE65B2t5yMn5lYA6k+D77Yi5lUK54Mm5l2C5BQF77Yj','6yca5yE655M75B2v','nta4nZrWDNLdyMC'];_0x5c24=function(){return _0x5d41c8;};return _0x5c24();}const str=(_0x172cf8,_0x16c7f7={})=>({'type':_0x1e4a04(0x240),'description':_0x172cf8,..._0x16c7f7}),uidField={'type':_0x1e4a04(0x240),'description':_0x1e4a04(0x1e5),'maxLength':0x80,'pattern':_0x1e4a04(0x21e)},freeObj=_0x37872c=>({'type':_0x1e4a04(0x1f6),'description':_0x37872c,'additionalProperties':!![]}),obj=(_0x2593ff={},{required:required=[],anyOf:_0x513191,additionalProperties:additionalProperties=!![]}={})=>({'type':'object','properties':_0x2593ff,...required[_0x1e4a04(0x218)]?{'required':required}:{},..._0x513191?{'anyOf':_0x513191}:{},'additionalProperties':additionalProperties}),apikeyField=str('apikey(必填;a1_\x20前缀)'),apikeyIn={'apikey':apikeyField},sessionProps={'apikey':str(_0x1e4a04(0x24f)),'expires_at':{'type':_0x1e4a04(0x21b),'description':_0x1e4a04(0x256)}},sessionOut={'type':_0x1e4a04(0x1f6),'properties':{...sessionProps},'required':['apikey',_0x1e4a04(0x1f8)],'additionalProperties':![]};export const SCHEMAS={'auth.loginByWxcode':{'auth':'public','title':'微信小程序登录','description':'用\x20wx.login\x20的\x20code\x20登录:自动建档并返回会话令牌与下发配置','inputSchema':obj({'code':str(_0x1e4a04(0x1ef))},{'required':[_0x1e4a04(0x252)],'additionalProperties':![]}),'outputSchema':obj({...sessionProps,'config':{'type':'object','description':_0x1e4a04(0x22c)}},{'required':[_0x1e4a04(0x243),_0x1e4a04(0x1f8),_0x1e4a04(0x21a)],'additionalProperties':![]}),'annotations':{'openWorldHint':!![]}},'auth.loginByUnionid':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x23e),'description':_0x1e4a04(0x1fc),'inputSchema':obj({'unionid':str('调用方唯一用户\x20id(必填)')},{'required':['unionid'],'additionalProperties':![]}),'outputSchema':sessionOut,'annotations':{'openWorldHint':!![]}},'auth.loginByPassword':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x225),'description':_0x1e4a04(0x24d),'inputSchema':obj({'username':str(_0x1e4a04(0x1ec)),'password':str('密码(必填)')},{'required':[_0x1e4a04(0x1f0),'password']}),'outputSchema':sessionOut,'annotations':{'openWorldHint':!![]}},'auth.loginBySms':{'auth':_0x1e4a04(0x1f4),'title':'短信验证码登录','description':_0x1e4a04(0x21c),'inputSchema':obj({'verification_token':str(_0x1e4a04(0x245))},{'required':['verification_token']}),'outputSchema':sessionOut,'annotations':{'openWorldHint':!![]}},'auth.loginByEmail':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x213),'description':'用\x20verifyCode\x20换来的\x20verification_token\x20登录(邮箱):建档\x20+\x20托管官方令牌并签发\x20apikey','inputSchema':obj({'verification_token':str('verifyCode\x20得到的令牌(必填)')},{'required':['verification_token']}),'outputSchema':sessionOut,'annotations':{'openWorldHint':!![]}},'auth.signup':{'auth':_0x1e4a04(0x1f4),'title':'注册','description':'注册新用户:手机号+验证码\x20/\x20邮箱+验证码\x20/\x20第三方\x20provider_token\x20三选一,自动建档','inputSchema':obj({'phone_number':str('手机号(与\x20email\x20/\x20provider_token\x20三选一)'),'email':str(_0x1e4a04(0x226)),'provider_token':str(_0x1e4a04(0x231)),'verification_token':str('验证码令牌(手机/邮箱方式必填;provider_token\x20方式不需要)'),'username':str('用户名(可选)'),'password':str(_0x1e4a04(0x1fe))},{'anyOf':[{'required':['verification_token','phone_number']},{'required':['verification_token',_0x1e4a04(0x1f9)]},{'required':[_0x1e4a04(0x23d)]}]}),'outputSchema':sessionOut,'annotations':{'openWorldHint':!![]}},'auth.sendVerification':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x221),'description':_0x1e4a04(0x206),'inputSchema':obj({'phone':str('手机号(与\x20email\x20二选一)'),'email':str('邮箱(与\x20phone\x20二选一)'),'email_redirect_to':str(_0x1e4a04(0x22e))},{'anyOf':[{'required':['phone']},{'required':[_0x1e4a04(0x1f9)]}]}),'outputSchema':obj({'verification_id':str(_0x1e4a04(0x1eb))},{'required':['verification_id']})},'auth.sendSmsCode':{'auth':'public','title':'发送短信验证码','description':_0x1e4a04(0x20a),'inputSchema':obj({'phone':str(_0x1e4a04(0x224))},{'required':[_0x1e4a04(0x254)],'additionalProperties':![]}),'outputSchema':obj({'verification_id':str(_0x1e4a04(0x1eb))},{'required':[_0x1e4a04(0x210)]})},'auth.sendEmailCode':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x23f),'description':'向邮箱发送验证码','inputSchema':obj({'email':str(_0x1e4a04(0x202))},{'required':['email'],'additionalProperties':![]}),'outputSchema':obj({'verification_id':str(_0x1e4a04(0x1eb))},{'required':['verification_id']})},'auth.verifyCode':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x227),'description':'校验用户输入的验证码,换取登录用的\x20verification_token','inputSchema':obj({'verification_id':str('验证码会话\x20id(必填)'),'verification_code':str('用户输入的验证码(必填)')},{'required':[_0x1e4a04(0x210),_0x1e4a04(0x1e8)],'additionalProperties':![]}),'outputSchema':obj({'verification_token':str(_0x1e4a04(0x219))},{'required':[_0x1e4a04(0x204)]})},'auth.reauthenticate':{'auth':'user','title':'敏感操作二次验证','description':_0x1e4a04(0x232),'inputSchema':obj({...apikeyIn,'verify_opt':{'type':'string','enum':[_0x1e4a04(0x1e2),'email_code'],'description':_0x1e4a04(0x20f)}},{'required':['apikey',_0x1e4a04(0x203)],'additionalProperties':![]}),'outputSchema':obj({'verification_id':str(_0x1e4a04(0x1eb))})},'auth.introspect':{'auth':_0x1e4a04(0x22a),'title':'校验令牌','description':'校验当前\x20apikey\x20对应的官方令牌是否有效,返回用户\x20sub','inputSchema':obj({...apikeyIn},{'required':['apikey'],'additionalProperties':![]}),'outputSchema':obj({'sub':str(_0x1e4a04(0x251)),'active':{'type':_0x1e4a04(0x223),'description':_0x1e4a04(0x22d)}}),'annotations':{'readOnlyHint':!![],'openWorldHint':!![]}},'auth.signOut':{'auth':_0x1e4a04(0x22a),'title':_0x1e4a04(0x23b),'description':_0x1e4a04(0x23a),'inputSchema':obj({...apikeyIn,'client_id':str(_0x1e4a04(0x255)),'x_device_id':str(_0x1e4a04(0x1e1))},{'required':[_0x1e4a04(0x243)],'additionalProperties':!![]}),'outputSchema':{'type':'object','description':_0x1e4a04(0x21f)},'annotations':{'destructiveHint':!![]}},'user.upsert':{'mcp':![],'auth':_0x1e4a04(0x22a),'title':_0x1e4a04(0x22b),'description':'建档或刷新\x20updated_at(登录链路内部步,登录时自动执行)','inputSchema':obj({'uid':uidField,'profile':freeObj('要合并进档案\x20profile\x20段的字段(可选)'),'env':str(_0x1e4a04(0x246))},{'required':[_0x1e4a04(0x228)],'additionalProperties':![]}),'outputSchema':obj({'id':str(_0x1e4a04(0x1e7)),'data':{'type':'object','description':'档案\x20data\x20段'}},{'additionalProperties':![]})},'user.get':{'auth':_0x1e4a04(0x230),'title':'读取自己的档案','description':_0x1e4a04(0x220),'inputSchema':obj({},{'additionalProperties':![]}),'outputSchema':{'type':'object','description':_0x1e4a04(0x20c),'properties':{'id':str(_0x1e4a04(0x1e7)),'data':{'type':_0x1e4a04(0x1f6)},'status':str('状态'),'deleted_at':{'type':[_0x1e4a04(0x240),'null']}},'additionalProperties':!![]},'annotations':{'readOnlyHint':!![]}},'user.patchProfile':{'auth':_0x1e4a04(0x230),'title':_0x1e4a04(0x238),'description':_0x1e4a04(0x200),'inputSchema':obj({'patch':freeObj(_0x1e4a04(0x249))},{'required':['patch'],'additionalProperties':![]}),'outputSchema':obj({'section':{'type':['object','null'],'description':_0x1e4a04(0x21d)}})},'user.schemaStatus':{'mcp':![],'auth':_0x1e4a04(0x22a),'title':_0x1e4a04(0x250),'description':_0x1e4a04(0x1f5),'inputSchema':obj({},{'required':[],'additionalProperties':![]}),'outputSchema':obj({'table':{'type':_0x1e4a04(0x223),'description':_0x1e4a04(0x1f3)},'primaryKey':{'type':_0x1e4a04(0x223),'description':'主键是否存在'},'indexes':{'type':_0x1e4a04(0x1f6),'description':_0x1e4a04(0x24e)}},{'required':[_0x1e4a04(0x1e9),'primaryKey',_0x1e4a04(0x211)],'additionalProperties':![]}),'annotations':{'readOnlyHint':!![]}},'user.ensureSchema':{'mcp':![],'auth':_0x1e4a04(0x22a),'title':'初始化档案表','description':_0x1e4a04(0x253),'inputSchema':obj({},{'required':[],'additionalProperties':![]}),'outputSchema':obj({'table':{'type':_0x1e4a04(0x240),'enum':[_0x1e4a04(0x24c),_0x1e4a04(0x1ed)],'description':_0x1e4a04(0x1f7)},'indexes':{'type':_0x1e4a04(0x1f6),'description':'{\x20created:\x20string[],\x20existing:\x20string[]\x20}'},'status':{'type':'object','description':'执行后的探测结果'}},{'required':[_0x1e4a04(0x1e9),_0x1e4a04(0x211),_0x1e4a04(0x201)],'additionalProperties':![]}),'annotations':{'readOnlyHint':!![],'idempotentHint':!![]}},'user.me':{'auth':'user','title':_0x1e4a04(0x1fa),'description':_0x1e4a04(0x215),'inputSchema':obj({...apikeyIn},{'required':[_0x1e4a04(0x243)],'additionalProperties':![]}),'outputSchema':{'type':'object','description':'网关用户信息(原样)'},'annotations':{'readOnlyHint':!![]}},'user.updateBasic':{'auth':_0x1e4a04(0x22a),'title':'修改资料(含手机号/邮箱)','description':'修改网关侧用户资料;改手机号/邮箱需先\x20reauthenticate\x20拿验证码令牌;成功后自动同步本地档案','inputSchema':obj({...apikeyIn,'nickname':str(_0x1e4a04(0x24b)),'username':str(_0x1e4a04(0x242)),'phone':str('手机号(可选,修改需验证码)'),'email':str(_0x1e4a04(0x1ee)),'avatar_url':str('头像\x20URL(可选)'),'gender':{'type':_0x1e4a04(0x240),'enum':[_0x1e4a04(0x205),'FEMALE'],'description':_0x1e4a04(0x216)},'description':str('个人简介(可选)'),'verification_token':str('手机号/邮箱变更的验证码令牌(可选,改手机/邮箱时需要)')},{'required':['apikey'],'additionalProperties':!![]}),'outputSchema':{'type':'object','description':_0x1e4a04(0x244)}},'user.changePassword':{'auth':'user','title':'修改密码','description':_0x1e4a04(0x233),'inputSchema':obj({...apikeyIn,'password':str(_0x1e4a04(0x1ff)),'verification_token':str(_0x1e4a04(0x20d))},{'required':['apikey',_0x1e4a04(0x236)]}),'outputSchema':{'type':_0x1e4a04(0x1f6),'description':_0x1e4a04(0x21f)},'annotations':{'destructiveHint':!![]}},'user.deleteMe':{'auth':_0x1e4a04(0x22a),'title':_0x1e4a04(0x207),'description':'注销当前用户(需先\x20reauthenticate\x20二次验证)','inputSchema':obj({...apikeyIn,'verification_token':str(_0x1e4a04(0x20d))},{'required':[_0x1e4a04(0x243)],'additionalProperties':!![]}),'outputSchema':{'type':'object','description':_0x1e4a04(0x21f)},'annotations':{'destructiveHint':!![]}},'auth.key.create':{'auth':_0x1e4a04(0x22a),'title':'签发新\x20apikey','description':'用当前\x20apikey\x20换\x20uid\x20再签发一个新\x20apikey(多设备/多场景);key\x20明文只在本次响应出现一次','inputSchema':obj({'apikey':str(_0x1e4a04(0x20b)),'scene':str('场景标签(可选,缺省空串)')},{'required':[_0x1e4a04(0x243)],'additionalProperties':![]}),'outputSchema':obj({'apikey':str('新\x20apikey\x20明文(必返,仅此一次)'),'key_id':str(_0x1e4a04(0x235)),'key_prefix':str(_0x1e4a04(0x239)),'expires_at':{'type':'number','description':_0x1e4a04(0x1e3)}},{'required':['apikey','key_id',_0x1e4a04(0x222),_0x1e4a04(0x1f8)],'additionalProperties':![]})},'auth.key.list':{'auth':_0x1e4a04(0x22a),'title':_0x1e4a04(0x24a),'description':'当前\x20apikey\x20所属用户的全部\x20key\x20档案(不含\x20key\x20明文)','inputSchema':obj({'apikey':str(_0x1e4a04(0x20b))},{'required':['apikey'],'additionalProperties':![]}),'outputSchema':{'type':'array','description':_0x1e4a04(0x209)},'annotations':{'readOnlyHint':!![]}},'auth.key.revoke':{'auth':'user','title':'吊销\x20apikey','description':_0x1e4a04(0x212),'inputSchema':obj({'apikey':str('当前\x20apikey(必填)'),'key_id':str(_0x1e4a04(0x237))},{'required':[_0x1e4a04(0x243),_0x1e4a04(0x247)],'additionalProperties':![]}),'outputSchema':obj({'revoked':{'type':_0x1e4a04(0x223),'description':_0x1e4a04(0x234)},'key_id':str('被吊销的\x20key\x20id')},{'required':['revoked',_0x1e4a04(0x247)],'additionalProperties':![]}),'annotations':{'destructiveHint':!![]}},'auth.key.verify':{'auth':_0x1e4a04(0x1f4),'title':_0x1e4a04(0x1fd),'description':'验证\x20apikey\x20合法性:通过返回\x20{\x20ok,\x20auth\x20},失败返回\x20{\x20ok:false,\x20reason\x20}','inputSchema':obj({'apikey':str(_0x1e4a04(0x217))},{'required':['apikey'],'additionalProperties':![]}),'outputSchema':{'type':'object','description':_0x1e4a04(0x20e)},'annotations':{'readOnlyHint':!![]}},'auth.cbToken.get':{'mcp':![],'auth':_0x1e4a04(0x22a),'title':'官方\x20token\x20托管兑换','description':_0x1e4a04(0x1e4),'inputSchema':obj({'uid':uidField},{'required':['uid'],'additionalProperties':![]}),'outputSchema':obj({'access_token':str(_0x1e4a04(0x214)),'expires_at':{'type':_0x1e4a04(0x21b),'description':'过期\x20unix\x20秒'},'from_cache':{'type':'boolean','description':'是否命中托管缓存'}},{'required':['access_token',_0x1e4a04(0x1f8),'from_cache'],'additionalProperties':![]})}};export const withSchemas=_0x27ea3f=>_0x27ea3f[_0x1e4a04(0x208)](([_0x3d43e9,_0x35e0ae])=>[_0x3d43e9,{..._0x35e0ae,...SCHEMAS[_0x3d43e9]??{}}]);
@@ -0,0 +1 @@
1
+ const _0x1fcfbf=_0xc255;(function(_0x133227,_0x133b47){const _0x4d6672=_0xc255,_0x10b04b=_0x133227();while(!![]){try{const _0x3ba61b=parseInt(_0x4d6672(0x101))/0x1+parseInt(_0x4d6672(0x100))/0x2+parseInt(_0x4d6672(0xf8))/0x3*(-parseInt(_0x4d6672(0xf4))/0x4)+parseInt(_0x4d6672(0xfe))/0x5*(-parseInt(_0x4d6672(0x103))/0x6)+parseInt(_0x4d6672(0xfd))/0x7*(parseInt(_0x4d6672(0xf3))/0x8)+-parseInt(_0x4d6672(0xff))/0x9+parseInt(_0x4d6672(0x107))/0xa;if(_0x3ba61b===_0x133b47)break;else _0x10b04b['push'](_0x10b04b['shift']());}catch(_0xb9267e){_0x10b04b['push'](_0x10b04b['shift']());}}}(_0x5d31,0xf4227));const SQL_SELECT=_0x1fcfbf(0x106),SQL_UPSERT=_0x1fcfbf(0xfc),SQL_DELETE='DELETE\x20FROM\x20__user_token_cache\x20WHERE\x20uid=$1',err=(_0x3ca27f,_0x342aa6)=>Object['assign'](new Error(_0x342aa6),{'code':_0x3ca27f}),nowSec=()=>Math['floor'](Date[_0x1fcfbf(0x108)]()/0x3e8);function _0xc255(_0x577223,_0x12c8ea){_0x577223=_0x577223-0xf1;const _0x5d31ff=_0x5d31();let _0xc2551c=_0x5d31ff[_0x577223];if(_0xc255['CixNvG']===undefined){var _0x5ce7c2=function(_0x31b191){const _0x462c6b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x423370='',_0x2eb5eb='';for(let _0x15eb5b=0x0,_0x43fef7,_0x2df751,_0x8b359a=0x0;_0x2df751=_0x31b191['charAt'](_0x8b359a++);~_0x2df751&&(_0x43fef7=_0x15eb5b%0x4?_0x43fef7*0x40+_0x2df751:_0x2df751,_0x15eb5b++%0x4)?_0x423370+=String['fromCharCode'](0xff&_0x43fef7>>(-0x2*_0x15eb5b&0x6)):0x0){_0x2df751=_0x462c6b['indexOf'](_0x2df751);}for(let _0x328dc1=0x0,_0x193cb1=_0x423370['length'];_0x328dc1<_0x193cb1;_0x328dc1++){_0x2eb5eb+='%'+('00'+_0x423370['charCodeAt'](_0x328dc1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2eb5eb);};_0xc255['FOAoEL']=_0x5ce7c2,_0xc255['ChrtRn']={},_0xc255['CixNvG']=!![];}const _0x15db43=_0x5d31ff[0x0],_0x4afd84=_0x577223+_0x15db43,_0x389dec=_0xc255['ChrtRn'][_0x4afd84];return!_0x389dec?(_0xc2551c=_0xc255['FOAoEL'](_0xc2551c),_0xc255['ChrtRn'][_0x4afd84]=_0xc2551c):_0xc2551c=_0x389dec,_0xc2551c;}export const makeRunSql=_0x290ddb=>(_0x426377,_0xc995ed=[])=>_0x290ddb[_0x1fcfbf(0xf2)][_0x1fcfbf(0x105)](_0x1fcfbf(0xf1),{'sql':_0x426377,'parameters':_0xc995ed,'role':'cloudbase_postgres'});export function createCbTokenBroker({cfg:_0x42b15e,refreshTokenRequest:_0x52d43c,runSql:_0xb80d92}){const _0x1fa818={'gdVBM':'refresh_token','zbSVb':function(_0x526b0b,_0x2c1cdd,_0x12bb68){return _0x526b0b(_0x2c1cdd,_0x12bb68);},'RflpI':function(_0x61575f,_0x54d409,_0xbf437b){return _0x61575f(_0x54d409,_0xbf437b);},'AAkzw':function(_0x31b7e7,_0x5d7853){return _0x31b7e7+_0x5d7853;},'zoBEX':function(_0x47c4f1,_0x3e575f,_0x367d0a){return _0x47c4f1(_0x3e575f,_0x367d0a);},'brBJu':function(_0xd9ec8c,_0x8c1f65){return _0xd9ec8c>_0x8c1f65;},'vhYlH':function(_0x39923f,_0x12062a,_0xf6aba3){return _0x39923f(_0x12062a,_0xf6aba3);}},_0x234e7d=new Map();async function _0x5dfb59(_0xe2a234,_0x2a4d41){const _0x52470b=_0xc255;let _0x19d5c0;try{_0x19d5c0=await _0x52d43c({'grant_type':_0x1fa818['gdVBM'],'refresh_token':_0x2a4d41[_0x52470b(0xf5)],'client_id':_0x42b15e[_0x52470b(0xf7)]});}catch{await _0x1fa818[_0x52470b(0xfb)](_0xb80d92,SQL_DELETE,[_0xe2a234])[_0x52470b(0x102)](()=>{});throw _0x1fa818['RflpI'](err,0x191,_0x52470b(0xfa));}const _0x218bfa=_0x1fa818['AAkzw'](nowSec(),Number(_0x19d5c0?.['expires_in'])||0x0);return await _0xb80d92(SQL_UPSERT,[_0xe2a234,_0x19d5c0['access_token'],_0x19d5c0['refresh_token'],_0x218bfa]),{'access_token':_0x19d5c0[_0x52470b(0xf6)],'expires_at':_0x218bfa,'from_cache':![]};}async function _0x1e8182(_0x4a1bbe){const _0x1ddbb6=_0xc255,_0x21e68a=await _0x1fa818['zoBEX'](_0xb80d92,SQL_SELECT,[_0x4a1bbe]),_0x55ddcd=_0x21e68a?.[0x0];if(_0x55ddcd&&_0x1fa818[_0x1ddbb6(0xf9)](Number(_0x55ddcd[_0x1ddbb6(0x104)]),nowSec()))return{'access_token':_0x55ddcd[_0x1ddbb6(0xf6)],'expires_at':Number(_0x55ddcd[_0x1ddbb6(0x104)]),'from_cache':!![]};if(!_0x55ddcd)throw _0x1fa818['RflpI'](err,0x191,'官方凭证已失效,请重新登录');if(_0x234e7d['has'](_0x4a1bbe))return _0x234e7d[_0x1ddbb6(0x10b)](_0x4a1bbe);const _0x40b411=_0x1fa818[_0x1ddbb6(0x10a)](_0x5dfb59,_0x4a1bbe,_0x55ddcd)[_0x1ddbb6(0x109)](()=>_0x234e7d['delete'](_0x4a1bbe));return _0x234e7d['set'](_0x4a1bbe,_0x40b411),_0x40b411;}const _0x1c7970=async(_0x44f74b,_0x579d9a,_0x4c2bb8,_0x27f219)=>{return await _0xb80d92(SQL_UPSERT,[_0x44f74b,_0x579d9a,_0x4c2bb8,_0x27f219]),{'uid':_0x44f74b,'expires_at':_0x27f219};},_0x569ae9=async _0xbdc0a8=>{return await _0xb80d92(SQL_DELETE,[_0xbdc0a8]),{'uid':_0xbdc0a8};};return{'get':_0x1e8182,'upsert':_0x1c7970,'markInvalid':_0x569ae9};}function _0x5d31(){const _0x3d15df=['su5trvjuieLove8Gx191C2vYx3rVA2vUx2nHy2HLicH1AwqSigfJy2vZC190B2TLBIWGCMvMCMvZAf90B2TLBIWGzxHWAxjLC19HDcKkicaGicbwquXvrvmGkcqXlcaKmIWGjdmSicq0kqOGicaGie9oienptKzmsunuicH1AwqPierpifvqrefursbtrvqGywnJzxnZx3rVA2vUid0GrvHdtfveruqUywnJzxnZx3rVA2vUlaOGicaGicaGCMvMCMvZAf90B2TLBIa9ievyq0XvrevelNjLzNjLC2HFDg9Rzw4Sigv4CgLYzxnFyxqGpsbfwenmvurfrc5LEhbPCMvZx2f0lcb1CgrHDgvKx2f0id0GBM93kcK','mJfvtM5HwKK','nJy2nJbXtMDpqKK','mtuZodGWmJLyBMnlD2q','mtmYmdG2zfnlAKny','odq3mdKWCuT1Cen3','y2f0y2G','nJi0vfHVBMn6','zxHWAxjLC19HDa','CNvU','u0vmrunuihvPzcWGywnJzxnZx3rVA2vUlcbYzwzYzxnOx3rVA2vUlcbLEhbPCMvZx2f0iezst00Gx191C2vYx3rVA2vUx2nHy2HLifDirvjfihvPzd0Kmq','mJi3mZK0ndbkshnQq1K','BM93','zMLUywXSEq','DMHzBeG','z2v0','CgCUzxHLyW','y3r4','nte3nJuZnKjAzunZCa','mtuYodG4yw5Orejh','CMvMCMvZAf90B2TLBG','ywnJzxnZx3rVA2vU','zw52swq','odfytvn6q2W','yNjcsNu','5A6y5PA55yET6k+b5BEY5AsX5Pwi77Ym6k+36yEn5PAW55M75B2v','EMjtvMi'];_0x5d31=function(){return _0x3d15df;};return _0x5d31();}
package/dist/user.js ADDED
@@ -0,0 +1 @@
1
+ const _0x5dd215=_0x342f;(function(_0x182893,_0x94eb15){const _0x46cad2=_0x342f,_0x577ebe=_0x182893();while(!![]){try{const _0x34f14f=parseInt(_0x46cad2(0xa1))/0x1*(-parseInt(_0x46cad2(0xbd))/0x2)+-parseInt(_0x46cad2(0x9b))/0x3+parseInt(_0x46cad2(0x97))/0x4+parseInt(_0x46cad2(0xad))/0x5*(parseInt(_0x46cad2(0x85))/0x6)+parseInt(_0x46cad2(0x79))/0x7+-parseInt(_0x46cad2(0x94))/0x8+parseInt(_0x46cad2(0x88))/0x9*(parseInt(_0x46cad2(0x6e))/0xa);if(_0x34f14f===_0x94eb15)break;else _0x577ebe['push'](_0x577ebe['shift']());}catch(_0x5d3fd7){_0x577ebe['push'](_0x577ebe['shift']());}}}(_0x4693,0xe847c));import{withSchemas}from'./schemas.js';import{DDL_USER_TOKEN_CACHE,DDL_USER_ACCESS_KEY,DDL_USER_ACCESS_KEY_INDEX}from'./access-key.js';const DEFAULT_DOMAIN='api.tcloudbasegateway.com';function _0x342f(_0x4406aa,_0x31724c){_0x4406aa=_0x4406aa-0x69;const _0x4693a9=_0x4693();let _0x342fc0=_0x4693a9[_0x4406aa];if(_0x342f['temPjf']===undefined){var _0x14f705=function(_0x366585){const _0x472d2d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x13ad98='',_0x34ec33='';for(let _0x94f9c5=0x0,_0x282de3,_0x4a47ad,_0x2fb357=0x0;_0x4a47ad=_0x366585['charAt'](_0x2fb357++);~_0x4a47ad&&(_0x282de3=_0x94f9c5%0x4?_0x282de3*0x40+_0x4a47ad:_0x4a47ad,_0x94f9c5++%0x4)?_0x13ad98+=String['fromCharCode'](0xff&_0x282de3>>(-0x2*_0x94f9c5&0x6)):0x0){_0x4a47ad=_0x472d2d['indexOf'](_0x4a47ad);}for(let _0x201670=0x0,_0x3e4890=_0x13ad98['length'];_0x201670<_0x3e4890;_0x201670++){_0x34ec33+='%'+('00'+_0x13ad98['charCodeAt'](_0x201670)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x34ec33);};_0x342f['ZhPhwE']=_0x14f705,_0x342f['TOAiUL']={},_0x342f['temPjf']=!![];}const _0x133ec9=_0x4693a9[0x0],_0x3cc5b3=_0x4406aa+_0x133ec9,_0x22767e=_0x342f['TOAiUL'][_0x3cc5b3];return!_0x22767e?(_0x342fc0=_0x342f['ZhPhwE'](_0x342fc0),_0x342f['TOAiUL'][_0x3cc5b3]=_0x342fc0):_0x342fc0=_0x22767e,_0x342fc0;}export function decodeJWT(_0xa9829e){const _0x27b332=_0x342f,_0x13b973={'jpUSh':_0x27b332(0xca)};try{return JSON[_0x27b332(0x6d)](Buffer['from'](String(_0xa9829e)[_0x27b332(0x98)]('.')[0x1],_0x27b332(0xcb))[_0x27b332(0xa4)](_0x13b973[_0x27b332(0xb9)]));}catch{return{};}}export function uidFromToken(_0x5270f2){const _0x573625=_0x342f,_0x561c8e={'IRpyI':function(_0x1d5ae2,_0x5c8415){return _0x1d5ae2(_0x5c8415);},'EpOWw':_0x573625(0xac)},_0x3058f7=_0x561c8e['IRpyI'](decodeJWT,_0x5270f2)?.['sub'];if(!_0x3058f7)throw Object[_0x573625(0xab)](new Error(_0x561c8e[_0x573625(0x8e)]),{'code':0x190});return _0x3058f7;}export const throwGatewayError=_0x353de0=>{const _0x45e910=_0x342f;throw _0x353de0?.[_0x45e910(0x77)]?Object[_0x45e910(0xab)](new Error(_0x353de0[_0x45e910(0x95)]),{'code':_0x353de0['status'],'payload':_0x353de0['payload']}):Object[_0x45e910(0xab)](new Error('登录请求失败'),{'code':0x1f6});};export function makeGateway(_0x14f9e2,_0x11f8a9){const _0x13ded2=_0x342f;return _0x14f9e2['inject']?.['gateway']||((_0x1db557,_0x45abbd,{body:_0x5cffc8,token:_0x54697f}={})=>_0x11f8a9[_0x13ded2(0x93)](_0x13ded2(0xcd)+_0x14f9e2['envId']+'.'+(_0x14f9e2['domain']||DEFAULT_DOMAIN)+_0x45abbd,{'method':_0x1db557,..._0x5cffc8!==undefined?{'body':_0x5cffc8}:{},..._0x54697f?{'headers':{'Authorization':'Bearer\x20'+_0x54697f}}:{}}));}export const assertUid=_0x386cdd=>{const _0x13c26f=_0x342f,_0x7766cd={'fOtyy':function(_0x3d7c8b,_0x452e55){return _0x3d7c8b!==_0x452e55;},'KQIHN':_0x13c26f(0xbf),'sBKHa':function(_0x313186,_0x4a8a54){return _0x313186>_0x4a8a54;}};if(_0x7766cd[_0x13c26f(0xc9)](typeof _0x386cdd,'string')||_0x386cdd==='')throw Object[_0x13c26f(0xab)](new Error(_0x7766cd[_0x13c26f(0x84)]),{'code':0x190});if(_0x7766cd[_0x13c26f(0x7d)](_0x386cdd['length'],0x80)||/[\u0000-\u001f\u007f]/['test'](_0x386cdd))throw Object['assign'](new Error(_0x7766cd[_0x13c26f(0x84)]),{'code':0x190});return _0x386cdd;};export function buildUpsertUserQuery(_0x901812,_0x12c828,_0x5d93fd){const _0x10beab=_0x342f,_0xf4b7f8={'QDeKN':function(_0x37edd9,_0xb635cb){return _0x37edd9??_0xb635cb;}};return{'sql':_0x10beab(0xa0),'parameters':[JSON['stringify']({'profile':_0xf4b7f8[_0x10beab(0x92)](_0x12c828,{})}),[],_0x5d93fd||'prod',_0x901812]};}function _0x4693(){const _0x1cdc15=['DxnLCI5KzwXLDgvnzq','C0jlsge','ywnJzxnZx3rVA2vU','rLrWvgC','5Ps55A+g77Yi5yMn572UihjLyxv0AgvUDgLJyxrL77Yj77YAuefuq0GGl2f1DgGVDJeVDxnLCI9WyxnZD29Yzo+8JoE9KEwfS+woN+AGT++8Ios4JEwgMEAHO++8Iq','yKTNC0y','teXPsgq','ywX0zxiGDgfIBguGChvIBgLJlMnYBv91C2vYx2rLDgfPBcbHzgqGy29UC3rYywLUDcbJCM1FDxnLCL9KzxrHAwXFCgTLEsbWCMLTyxj5igTLEsaOAwqP','s1fjse4','ndG0odz5rvLnvK4','DMvYAwzPy2f0Aw9Ux3rVA2vU','yxv0Aa','mZiWnenMsxz4BG','qu9ftK0','Ew1gvwy','ChjPBwfYEuTLEq','l2f1DgGVDJeVDxnLCI9IyxnPyY9LzgL0','ue9tva','rxbpv3C','DxnLCI51CgrHDgvcyxnPyW','zgvSzxrLzf9HDa','CurMvvm','uurLs04','CMvX','mtm0mtu2ofD2twHWuW','BwvZC2fNzq','Dg9Rzw5dywnOzq','nteZmJG0uezksfjV','C3bSAxq','BxPwww0','ywn0AxzL','ndy2ndCZnKPvDe1Rva','yNjVA2vY','l2f1DgGVDJeVDxnLCI9Tzq','DxnLCI5JAgfUz2vqyxnZD29Yza','Awr4x2nYBv91C2vYx2rLDgfPBf9UC191BMLXDwu','su5trvjuieLove8GChvIBgLJlMnYBv91C2vYx2rLDgfPBcbbuYb0icHUCYWGzgf0ysWGzxH0lcb0ywCSihn0yxr1CYKkicaGicbwquXvrvmGkefsuKfzwYD1Awq6jYb8FcaKnf06oNrLEhrBxsWGjde6oMPZB25IlcbovuXmlcaKmJO6Dgv4DfTDihX8iefsuKfzwYDMCM9Tx2vUDJONFhWKm106oNrLEhrBxsWGj2fJDgL2zsCPcIaGicaGt04Gq09orKXjq1qGkg5ZksbxsevsrsaOzgvSzxrLzf9HDcbjuYbovuXmkqOGicaGierpifvqrefursbtrvqkicaGicaGigrHDgeGpsbdqvnfifDiru4GrvHdtfveruqUzgf0ysa/icDWCM9MAwXLjYbusevocIaGicaGicaGicHdt0fmrvndrsH0lMrHDgeSj3T9jZO6ANnVBMiPihX8ievyq0XvrevelMrHDgePcIaGicaGicaGihX8igPZB25Ix2j1AwXKx29IAMvJDcGNChjVzMLSzsCSienpquXfu0nfkhqUzgf0ys0+j3bYB2zPBguNlcD7FsC6oMPZB25Iksb8Fcbdt0fmrvndrsHfwenmvurfrc5KyxrHlt4NChjVzMLSzsCSj3T9jZO6ANnVBMiPkqOGicaGicaGruXtrsbdt0fmrvndrsH0lMrHDgeSj3T9jZO6ANnVBMiPihX8ievyq0XvrevelMrHDgeGru5elaOGicaGicaGDxbKyxrLzf9HDca9ie5pvYGPcIaGicaGuKvuvvjosu5higLKlcbKyxrH','mZG0mdfLANrZC1e','BMLJA25HBwu','BgvUz3rO','Dg9tDhjPBMC','uefuq0G','DwLKoG','DxnLCI51ChnLCNq','zhruDvC','y3r4','DxnLCI5Zy2HLBwftDgf0Dxm','yxnZAwDU','ywnJzxnZx3rVA2vUioAxOoAvIa','ndK1Awrvtu5z','Cgf5Bg9Hza','quj6wMq','CgHVBMu','CNvU','Cgf0y2G','zgvZy3jPChrPB24','zMLSDgvY','revmrvrf','vvbeqvrfihb1yMXPyY5JCM1FDxnLCL9KzxrHAwWkicaGicbtrvqGzgf0ysa9igPZB25Ix3nLDcGkicaGicaGicaGicbdt0fmrvndrsHKyxrHlcaNE30NoJPQC29UyIKScIaGicaGicaGicaGqvjsqvLBj3bYB2zPBguNxsWkicaGicaGicaGicbdt0fmrvndrsHKyxrHlt4NChjVzMLSzsCSicD7FsC6oMPZB25Iksb8FcaKmJO6ANnVBMiScIaGicaGicaGicaGDhj1zqOGicaGicaGicaPlaOGicaGicaGicb1CgrHDgvKx2f0id0GtK9xkcKkicaGicbxsevsrsaKmsa9iefowsHUCYKkicaGicaGieforcbZDgf0DxmGpsaNywn0AxzLjWOGicaGicaGqu5eigrLBgv0zwrFyxqGsvmGtLvmtaOGicaGifjfvfvstKLorYbPzcWGzgf0yq','wgrlC0O','C3fS','ANbvu2G','C3rYAw5NAwz5','EujRqwS','vNvbDhG','mZzXy3fry3K','Awr4x2nYBv91C2vYx2rLDgfPBf9PzgvUDgL0Ev90ExbL','57Y65BcrihvPza','y3jLyxrLihvUAxf1zsbPBMrLEcbPzIbUB3qGzxHPC3rZigLKEf9JCM1FDxnLCL9KzxrHAwXFBNnFDw5PCxvLig9Uihb1yMXPyY5JCM1FDxnLCL9KzxrHAwWGDxnPBMCGyNrYzwuGkg5Zksb3AgvYzsaOzgvSzxrLzf9HDcbPCYbUDwXSkq','tffOvKu','Awr4x2nYBv91C2vYx2rLDgfPBf9VD25LCG','ELfiDhC','swDJzfy','C2vSzwn0ihrVx3jLz2nSyxnZkcDWDwjSAwmUy3jTx3vZzxjFzgv0ywLSjYKGAxmGBM90ig51BgWGyxmGiNrHyMXLiIWGDg9FCMvNy2XHC3mOj3b1yMXPyY5Fx3vZzxjFDg9Rzw5Fy2fJAguNksbPCYbUB3qGBNvSBcbHCYaIDg9Rzw5Fy2fJAguIlcb0B19YzwDJBgfZCYGNChvIBgLJlL9FDxnLCL9Hy2nLC3nFA2v5jYKGAxmGBM90ig51BgWGyxmGiMfJy2vZC19RzxKI','yxzHDgfYx3vYBa','BeHWD0S','zNjVBuvUDhjPzxm','zK90ExK','DxrMoa','yMfZzty0DxjS','C2vSzwn0ideGzNjVBsbWz19JB25ZDhjHAw50ihDOzxjLignVBNjLBgLKpsDWDwjSAwmUy3jTx3vZzxjFzgv0ywLSjZO6CMvNy2XHC3mGyw5KignVBNr5Cgu9j3aN','Ahr0Chm6lY8','y3jLyxrLigLUzgv4igLMig5VDcbLEgLZDhmGAwr4x2nYBv91C2vYx2rLDgfPBf9PzgvUDgL0Ev90ExbLig9Uihb1yMXPyY5JCM1FDxnLCL9KzxrHAwWGDxnPBMCGyNrYzwuGkcGOzgf0ysaJpJ4Gj3TPzgvUDgL0EsX0ExbLFsC6oNrLEhrBxsKPksb3AgvYzsaOzgvSzxrLzf9HDcbPCYbUDwXSkq','5QgJ5Qgi5Q615PU05PAW77YiChjVzMLSzsdMTyxLKiJLUBBVVjSWioIHJokgKUw7UUAHO+kgKUMhJEIVLEs4GoASOEkgKJqWmYdNLkJMIlFKUi3LJ6/NLkJVViK','DxnLCM5HBwu','quTyBum','z250rfC','CgfYC2u','ntK5nZbXwhncr1i','DxnLCI5Nzxq','BwfW','y2XVDwrIyxnLx3bVC3rNCMvZ','ChvZAa','DwLKuMvM','y3jLyxrLza','zxHPC3rZ','5B2t5yMn55sO5OI377Yi6lwe5PAzl+E7KEwUMI/OP5lOIBlVViNVVjPhrvqGl2f1DgGVDJeVDxnLCI9TzE+8JoE9KEwfS+woN+AGTW','C3rHDhvZ','yMzXweG','mJeXmZGXoePfChvRqW','y3jLyxrLigLUzgv4igLMig5VDcbLEgLZDhmGAwr4x2nYBv91C2vYx2rLDgfPBf9UCYbVBIbWDwjSAwmUy3jTx3vZzxjFzgv0ywLSihvZAw5NigDPBIaOBNmP','zvz2C1m'];_0x4693=function(){return _0x1cdc15;};return _0x4693();}export function buildSelectUserQuery(_0xfed1eb){const _0x1e151d=_0x342f,_0x1ae992={'qDfUS':function(_0x1d4e66,_0x5dc345){return _0x1d4e66+_0x5dc345;}};return{'sql':'SELECT\x20id,\x20data,\x20status,\x20deleted_at\x0a\x20\x20\x20\x20\x20FROM\x20public.crm_user_detail\x0a\x20\x20\x20\x20\x20WHERE\x20$1\x20=\x20ANY(ns)\x0a\x20\x20\x20\x20\x20ORDER\x20BY\x20created_at\x20ASC\x0a\x20\x20\x20\x20\x20LIMIT\x201','parameters':[_0x1ae992[_0x1e151d(0x91)](_0x1e151d(0xa6),_0xfed1eb)]};}export function buildPatchProfileQuery(_0x2c0793,_0x45a715){const _0x53f286=_0x342f,_0x504f93={'AKXmC':_0x53f286(0xa6)};return{'sql':_0x53f286(0xb6),'parameters':[_0x504f93[_0x53f286(0x6b)]+_0x2c0793,JSON[_0x53f286(0xba)](_0x45a715??{})]};}const PROBE_TABLE=_0x5dd215(0xc5),PROBE_INDEXES='select\x20indexname\x20from\x20pg_indexes\x20where\x20schemaname=\x27public\x27\x20and\x20tablename=\x27crm_user_detail\x27',PROBE_PKEY=_0x5dd215(0xcc),DDL_TABLE='create\x20table\x20if\x20not\x20exists\x20public.crm_user_detail\x20(id\x20uuid\x20default\x20gen_random_uuid()\x20not\x20null,\x20ns\x20text[]\x20not\x20null,\x20data\x20jsonb\x20default\x20\x27{}\x27::jsonb\x20not\x20null,\x20ext\x20jsonb,\x20tag\x20text[]\x20default\x20\x27{}\x27::text[],\x20status\x20text\x20default\x20\x27active\x27\x20not\x20null,\x20created_at\x20timestamptz\x20default\x20now()\x20not\x20null,\x20updated_at\x20timestamptz\x20default\x20now()\x20not\x20null,\x20deleted_at\x20timestamptz)',DDL_PKEY=_0x5dd215(0x83),DDL_INDEXES={'idx_crm_user_detail_ns_unique':_0x5dd215(0xc0),'idx_crm_user_detail_ns':_0x5dd215(0x7a),'idx_crm_user_detail_owner':'create\x20index\x20if\x20not\x20exists\x20idx_crm_user_detail_owner\x20on\x20public.crm_user_detail\x20using\x20btree\x20(((data\x20#>>\x20\x27{identity,owner_uid}\x27::text[])))\x20where\x20(deleted_at\x20is\x20null)','idx_crm_user_detail_identity_type':_0x5dd215(0xce)},INDEX_ORDER=[_0x5dd215(0x9f),'idx_crm_user_detail_ns',_0x5dd215(0xc2),_0x5dd215(0xbe)],EDIT_BODY=[_0x5dd215(0xa2),_0x5dd215(0x6a),'phone','email',_0x5dd215(0xc6),'gender','description',_0x5dd215(0x86)],ARCHIVABLE=[_0x5dd215(0xa2),'username',_0x5dd215(0xb0),'email',_0x5dd215(0xc6),'gender',_0x5dd215(0xb3)];export function createUserAbilities(_0x2b531d,_0x3dc1c7,_0x39e34d={}){const _0x443201=_0x5dd215,_0x5b121a={'HDikI':'apikey\x20无效','bKgsF':function(_0x3e78c6,_0x3f78a3){return _0x3e78c6(_0x3f78a3);},'LQhVE':function(_0x1d4444,_0x1856e7){return _0x1d4444(_0x1856e7);},'ssePU':function(_0x9fa8b4,_0x426772,_0x2c94c4,_0x23586c){return _0x9fa8b4(_0x426772,_0x2c94c4,_0x23586c);},'VuAtx':function(_0x51ef34,_0x121004){return _0x51ef34(_0x121004);},'aJaxD':function(_0xbe782b,_0xb4beaf,_0x1b1897){return _0xbe782b(_0xb4beaf,_0x1b1897);},'zQHtw':_0x443201(0xa7),'FTpTg':function(_0x42b639,_0x259229,_0xbe175d){return _0x42b639(_0x259229,_0xbe175d);},'IgcdV':'用户不可用','PcyQt':function(_0x112a80,_0x4ac960){return _0x112a80(_0x4ac960);},'ABzZd':'GET','gntDW':function(_0x23b6d3,_0x2bafa){return _0x23b6d3(_0x2bafa);},'DaZCX':function(_0x4d448d,_0x590cc8){return _0x4d448d(_0x590cc8);},'XdKsJ':_0x443201(0xa5),'yBkAk':'/auth/v1/user/password','bIZMD':_0x443201(0xb5),'AOENM':function(_0x3d0191,_0x200fb1){return _0x3d0191(_0x200fb1);},'mzVYm':'created','LLiHd':function(_0x448722){return _0x448722();},'eVvsS':function(_0x3805d5,_0x39dbc6,_0x539151){return _0x3805d5(_0x39dbc6,_0x539151);},'bfqXH':function(_0x52b76a,_0x4c27f5){return _0x52b76a(_0x4c27f5);},'iTjGv':'建档/刷\x20updated_at(crm_user_detail;写走\x20cloudbase_postgres)','ymFUf':'user.patchProfile','lHpwK':'资料/手机/邮箱变更:POST\x20/auth/v1/user/basic/edit(body\x20只发传入字段)→\x20成功\x20patchProfile','dtTuW':_0x443201(0x80),'QnNqU':'建档表幂等初始化:缺什么补什么(DDL\x20逐条\x20pg.exec;调用方显式执行,登录不做\x20DDL)'},_0x4d5023=_0x5b121a[_0x443201(0x7b)](makeGateway,_0x2b531d,_0x3dc1c7),_0x42264c=async(_0x580848,_0x1cf8cc,_0x13c118)=>{try{return await _0x4d5023(_0x580848,_0x1cf8cc,_0x13c118);}catch(_0x2ceac5){throwGatewayError(_0x2ceac5);}},_0x4729bd=async _0xa8b91b=>{const _0x1b715a=_0x443201,_0x52cf01=await _0x39e34d['verify'](_0xa8b91b);if(!_0x52cf01['ok'])throw Object['assign'](new Error(_0x5b121a['HDikI']),{'code':0x191});const _0x25c4ca=await _0x39e34d[_0x1b715a(0x9c)]['get'](_0x52cf01['auth']['uidRef']);return{'uid':_0x52cf01[_0x1b715a(0x87)][_0x1b715a(0x73)],'access_token':_0x25c4ca[_0x1b715a(0x7e)]};},_0x4b2fbd=_0x3e4d07=>_0x3dc1c7['ctx'][_0x443201(0xb1)]('pg.exec',{'sql':_0x3e4d07[_0x443201(0xb8)],'parameters':_0x3e4d07['parameters'],'role':_0x443201(0x71)}),_0x4b875e=async()=>{const _0x295563=_0x443201,[_0x83333f,_0x625cf8,_0x45ea4f]=[await _0x5b121a[_0x295563(0x81)](_0x4b2fbd,{'sql':PROBE_TABLE,'parameters':[]}),await _0x4b2fbd({'sql':PROBE_INDEXES,'parameters':[]}),await _0x5b121a[_0x295563(0xc1)](_0x4b2fbd,{'sql':PROBE_PKEY,'parameters':[]})],_0x3e42f2=new Set(_0x625cf8[_0x295563(0x70)](_0x37c5cc=>_0x37c5cc['indexname']));return{'table':!!_0x83333f[0x0]?.['table'],'tokenCache':!!_0x83333f[0x0]?.['token_cache'],'accessKey':!!_0x83333f[0x0]?.['access_key'],'indexes':Object[_0x295563(0xc8)](INDEX_ORDER[_0x295563(0x70)](_0x4dfcb9=>[_0x4dfcb9,_0x3e42f2['has'](_0x4dfcb9)])),'primaryKey':_0x45ea4f['length']>0x0};};return _0x5b121a[_0x443201(0x78)](withSchemas,[['user.upsert',{'describe':_0x5b121a['iTjGv'],'run':async(_0xde37f0={})=>{const {uid:_0x179b44,profile:_0x36284c,env:_0x32ceb7}=_0xde37f0,_0x4f8c6b=await _0x4b2fbd(_0x5b121a['ssePU'](buildUpsertUserQuery,assertUid(_0x179b44),_0x36284c,_0x32ceb7??_0x2b531d['env']));return _0x4f8c6b?.[0x0]??null;}}],[_0x443201(0x6f),{'describe':'查档(不过滤\x20status/deleted_at;无行\x20→\x20null)','run':async(_0xc326ba={})=>{const _0xfba0ed=await _0x4b2fbd(_0x5b121a['VuAtx'](buildSelectUserQuery,assertUid(_0xc326ba['uid'])));return _0xfba0ed?.[0x0]??null;}}],[_0x5b121a[_0x443201(0x8a)],{'describe':_0x443201(0x69),'run':async(_0x44472e={})=>{const _0x2cb3fd=_0x443201,_0xe2125d=assertUid(_0x44472e['uid']),_0x2f3fbb=await _0x5b121a[_0x2cb3fd(0xbc)](_0x4b2fbd,_0x5b121a['aJaxD'](buildPatchProfileQuery,_0xe2125d,_0x44472e['patch']));if(_0x2f3fbb?.[_0x2cb3fd(0xa3)])return _0x2f3fbb[0x0];await _0x3dc1c7['ctx']['run'](_0x5b121a[_0x2cb3fd(0xc3)],{'uid':_0xe2125d});const _0x51939c=await _0x3dc1c7[_0x2cb3fd(0xa9)][_0x2cb3fd(0xb1)](_0x2cb3fd(0x6f),{'uid':_0xe2125d});if(_0x51939c?.[_0x2cb3fd(0x77)]===_0x2cb3fd(0x9a)&&!_0x51939c[_0x2cb3fd(0x90)]){const _0x154a6c=await _0x4b2fbd(_0x5b121a[_0x2cb3fd(0x7f)](buildPatchProfileQuery,_0xe2125d,_0x44472e[_0x2cb3fd(0xb2)]));if(_0x154a6c?.[_0x2cb3fd(0xa3)])return _0x154a6c[0x0];}throw Object['assign'](new Error(_0x5b121a[_0x2cb3fd(0xc4)]),{'code':0x193});}}],['user.me',{'describe':_0x443201(0x76),'run':async({apikey:_0x197fd8}={})=>{const _0xaea494=_0x443201,{access_token:_0x4d8c85}=await _0x5b121a['PcyQt'](_0x4729bd,_0x197fd8);return _0x42264c(_0x5b121a[_0xaea494(0xaf)],_0xaea494(0x9d),{'token':_0x4d8c85});}}],[_0x443201(0x8f),{'describe':_0x5b121a[_0x443201(0xc7)],'run':async(_0x40efba={})=>{const _0x2651f6=_0x443201,{uid:_0x41c738,access_token:_0x36b768}=await _0x5b121a[_0x2651f6(0x6c)](_0x4729bd,_0x40efba['apikey']),_0x29a996={};for(const _0x4bfa71 of EDIT_BODY)if(_0x40efba[_0x4bfa71]!==undefined)_0x29a996[_0x4bfa71]=_0x40efba[_0x4bfa71];const _0x1ff0bf=await _0x42264c(_0x2651f6(0x8d),_0x2651f6(0x8c),{'body':_0x29a996,'token':_0x36b768}),_0x243420={};for(const _0x98d704 of ARCHIVABLE)if(_0x98d704 in _0x29a996)_0x243420[_0x98d704]=_0x29a996[_0x98d704];return await _0x3dc1c7['ctx'][_0x2651f6(0xb1)]('user.patchProfile',{'uid':_0x41c738,'patch':_0x243420}),_0x1ff0bf;}}],[_0x443201(0x9e),{'describe':_0x5b121a[_0x443201(0xa8)],'run':async(_0x4382fb={})=>{const _0x5762fe=_0x443201,{apikey:_0x816dbe,..._0x208ea8}=_0x4382fb,{access_token:_0x1bb60f}=await _0x5b121a['DaZCX'](_0x4729bd,_0x816dbe);return _0x42264c(_0x5b121a[_0x5762fe(0xb7)],_0x5b121a[_0x5762fe(0xbb)],{'body':_0x208ea8,'token':_0x1bb60f});}}],[_0x443201(0x7c),{'describe':'删号(前置\x20reauthenticate):DELETE\x20/auth/v1/user/me,网关原样(不自行标删/不写档)','run':async(_0x5764d4={})=>{const _0x51c3c1=_0x443201,{apikey:_0x1b2002,..._0x1d0f2e}=_0x5764d4,{access_token:_0x407345}=await _0x5b121a[_0x51c3c1(0x81)](_0x4729bd,_0x1b2002);return _0x42264c(_0x5b121a['bIZMD'],_0x51c3c1(0x9d),{'body':_0x1d0f2e,'token':_0x407345});}}],[_0x443201(0xaa),{'describe':'建档表只读探测:表/四索引/主键在位状态','run':async()=>_0x4b875e()}],['user.ensureSchema',{'describe':_0x5b121a['QnNqU'],'run':async()=>{const _0x125a05=_0x443201,_0x523229=await _0x4b875e(),_0x29f183=[];if(!_0x523229['table'])_0x29f183[_0x125a05(0x72)](DDL_TABLE);if(!_0x523229[_0x125a05(0x96)])_0x29f183[_0x125a05(0x72)](DDL_USER_TOKEN_CACHE);if(!_0x523229['accessKey'])_0x29f183['push'](DDL_USER_ACCESS_KEY,DDL_USER_ACCESS_KEY_INDEX);if(!_0x523229[_0x125a05(0x8b)])_0x29f183[_0x125a05(0x72)](DDL_PKEY);const _0x1bf2ee=INDEX_ORDER[_0x125a05(0xb4)](_0x530ea=>!_0x523229['indexes'][_0x530ea]);for(const _0x2a4889 of _0x1bf2ee)_0x29f183[_0x125a05(0x72)](DDL_INDEXES[_0x2a4889]);for(const _0x50fbae of _0x29f183){try{await _0x5b121a[_0x125a05(0x89)](_0x4b2fbd,{'sql':_0x50fbae,'parameters':[]});}catch(_0xd8b75d){throw _0xd8b75d?.[_0x125a05(0x77)]?Object[_0x125a05(0xab)](new Error(_0xd8b75d[_0x125a05(0x95)]),{'code':_0xd8b75d[_0x125a05(0x77)],'payload':_0xd8b75d[_0x125a05(0xae)]}):_0xd8b75d;}}return{'table':_0x523229['table']?_0x125a05(0x75):'created','tokenCache':_0x523229[_0x125a05(0x96)]?'exists':_0x5b121a[_0x125a05(0x99)],'accessKey':_0x523229['accessKey']?'exists':_0x125a05(0x74),'indexes':{'created':_0x1bf2ee,'existing':INDEX_ORDER[_0x125a05(0xb4)](_0x34a89b=>!_0x1bf2ee['includes'](_0x34a89b))},'status':await _0x5b121a[_0x125a05(0x82)](_0x4b875e)};}}]]);}
package/dist/wechat.js ADDED
@@ -0,0 +1 @@
1
+ (function(_0x1ff19b,_0x1e3bff){const _0x3803ad=_0x1ae0,_0x518d7b=_0x1ff19b();while(!![]){try{const _0x4f2d00=parseInt(_0x3803ad(0x1f1))/0x1*(-parseInt(_0x3803ad(0x1fb))/0x2)+-parseInt(_0x3803ad(0x1f9))/0x3*(parseInt(_0x3803ad(0x1f3))/0x4)+parseInt(_0x3803ad(0x1fe))/0x5+-parseInt(_0x3803ad(0x1fd))/0x6*(parseInt(_0x3803ad(0x1fa))/0x7)+-parseInt(_0x3803ad(0x1f7))/0x8+-parseInt(_0x3803ad(0x1f0))/0x9+parseInt(_0x3803ad(0x1ff))/0xa;if(_0x4f2d00===_0x1e3bff)break;else _0x518d7b['push'](_0x518d7b['shift']());}catch(_0x3074f7){_0x518d7b['push'](_0x518d7b['shift']());}}}(_0x2d14,0xa7d71));export async function code2Session(_0x591bd0,_0x3fc7e9){const _0x4af98a=_0x1ae0,_0x1b179c={'YWDBl':'authorization_code','HZyhH':function(_0x48bdf7,_0x1b4de3){return _0x48bdf7(_0x1b4de3);}},_0x58181c=new URLSearchParams({'appid':_0x591bd0['wxAppid'],'secret':_0x591bd0[_0x4af98a(0x1f5)],'js_code':_0x3fc7e9,'grant_type':_0x1b179c[_0x4af98a(0x1f2)]}),_0x4ee080=await _0x1b179c[_0x4af98a(0x1f4)](fetch,_0x4af98a(0x1fc)+_0x58181c);if(!_0x4ee080['ok'])throw new Error('code2Session\x20request\x20failed\x20with\x20status\x20'+_0x4ee080[_0x4af98a(0x1f6)]);return await _0x4ee080[_0x4af98a(0x1f8)]();}function _0x1ae0(_0x4504a4,_0x462b54){_0x4504a4=_0x4504a4-0x1f0;const _0x2d1474=_0x2d14();let _0x1ae012=_0x2d1474[_0x4504a4];if(_0x1ae0['uEQFmw']===undefined){var _0x292b57=function(_0x41dc17){const _0x463a9c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x306118='',_0x28a4ca='';for(let _0x25faa6=0x0,_0x2ba7b3,_0xc550b,_0x3c154e=0x0;_0xc550b=_0x41dc17['charAt'](_0x3c154e++);~_0xc550b&&(_0x2ba7b3=_0x25faa6%0x4?_0x2ba7b3*0x40+_0xc550b:_0xc550b,_0x25faa6++%0x4)?_0x306118+=String['fromCharCode'](0xff&_0x2ba7b3>>(-0x2*_0x25faa6&0x6)):0x0){_0xc550b=_0x463a9c['indexOf'](_0xc550b);}for(let _0x3236ca=0x0,_0x18a6ab=_0x306118['length'];_0x3236ca<_0x18a6ab;_0x3236ca++){_0x28a4ca+='%'+('00'+_0x306118['charCodeAt'](_0x3236ca)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x28a4ca);};_0x1ae0['FFXpdq']=_0x292b57,_0x1ae0['gyEAMT']={},_0x1ae0['uEQFmw']=!![];}const _0x5620ed=_0x2d1474[0x0],_0x4fc13b=_0x4504a4+_0x5620ed,_0x317068=_0x1ae0['gyEAMT'][_0x4fc13b];return!_0x317068?(_0x1ae012=_0x1ae0['FFXpdq'](_0x1ae012),_0x1ae0['gyEAMT'][_0x4fc13b]=_0x1ae012):_0x1ae012=_0x317068,_0x1ae012;}function _0x2d14(){const _0x1a8288=['nZeXmZi1r2rpCg5T','mZiXntKZmJbvEe9xyuu','mZe2otGYn2PNufHeDa','mJbvC3rnyw0','wvDeqMW','oeDbEwHRwa','sfP5AeG','D3HtzwnYzxq','C3rHDhvZ','mtyWndKWneHxA2LnuG','ANnVBG','mtKZmJmWnNfnrNPZqq','n0f4u3rnCG','nZC0mtbqBK9kAuu','Ahr0Chm6lY9HCgKUD2vPEgLUlNfXlMnVBs9ZBNmVANnJB2rLmNnLC3nPB24/','mZmZnJi0r0jXu1bn'];_0x2d14=function(){return _0x1a8288;};return _0x2d14();}
package/package.json CHANGED
@@ -1,16 +1,15 @@
1
1
  {
2
2
  "name": "@blod-nm/user-kit",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "CloudBase user-center kit: auth (wechat code / unionid / password / sms / email / signup) + crm_user_detail archive on @blod-nm/base-cb.",
7
7
  "license": "MIT",
8
8
  "exports": {
9
- ".": "./src/index.js"
9
+ ".": "./dist/index.js"
10
10
  },
11
11
  "files": [
12
- "src",
13
- "README.md"
12
+ "dist"
14
13
  ],
15
14
  "engines": {
16
15
  "node": ">=18"
@@ -25,11 +24,21 @@
25
24
  "dependencies": {
26
25
  "@blod-nm/base-ctx": "^0.1.1",
27
26
  "@blod-nm/base-cb": "^0.2.0",
28
- "@cloudbase/node-sdk": "^3"
27
+ "@cloudbase/node-sdk": "^3",
28
+ "@blod-nm/ak": "^0.1.0"
29
29
  },
30
30
  "scripts": {
31
31
  "test": "bun test test/",
32
32
  "test:e2e": "bun test e2e/",
33
- "test:e2e:proxy": "CBKIT_E2E=proxy bun test e2e/"
33
+ "test:e2e:proxy": "CBKIT_E2E=proxy bun test e2e/",
34
+ "build": "bun scripts/build.mjs",
35
+ "prepack": "bun run build"
36
+ },
37
+ "devDependencies": {
38
+ "javascript-obfuscator": "^4.2.2"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "registry": "https://registry.npmjs.org"
34
43
  }
35
44
  }
package/src/access-key.js DELETED
@@ -1,130 +0,0 @@
1
- /**
2
- * access-key.js — apikey 签发 / verify(+30s 进程缓存)/ key 域能力(spec §3.1 · §3.4 · §3.5 · §3.7)
3
- *
4
- * 形态: key='a1_'+b64u(randomBytes(32))(只在签发响应出现一次)· key_hash=sha256hex(key)(档案表主键,库内不存明文)
5
- * key_id='k_'+key_hash[0:12](展示/吊销句柄)· key_prefix=key[0:11](识别用,不含敏感信息)
6
- * expires_at=unix 秒(now + (ttl ?? cfg.akDefaultKeyTtlSec))
7
- * 两张表: __user_token_cache(token 托管,broker 读写)/ __user_access_key(key 档案,本文件读写)
8
- * verify: 一条 SQL 查 key_hash → 四分支(malformed/revoked/expired/ok);ok 结果进程内 Map 缓存 30s;
9
- * revoke 用 RETURNING key_hash 主动清缓存;DB 异常 → 503(fail-closed,查不到=拒绝)。
10
- * key 域: create(当前 key 换 uid → 签发新 key)/ list(不含明文与 hash)/ revoke(他人 key → 404)/ verify。
11
- * 禁止: 任何官方网关调用 / HMAC / masterSecret(查表派:档案表是唯一真相)。
12
- */
13
- import { createHash, randomBytes } from 'node:crypto'
14
-
15
- const CACHE_TTL_MS = 30_000
16
- const DEFAULT_TTL_SEC = 2592000
17
-
18
- export const DDL_USER_TOKEN_CACHE = `CREATE TABLE IF NOT EXISTS __user_token_cache (
19
- uid text PRIMARY KEY, access_token text NOT NULL, refresh_token text NOT NULL,
20
- expires_at bigint NOT NULL, updated_at timestamptz DEFAULT now() NOT NULL)`
21
-
22
- export const DDL_USER_ACCESS_KEY = `CREATE TABLE IF NOT EXISTS __user_access_key (
23
- key_hash text PRIMARY KEY, key_id text NOT NULL UNIQUE, uid text NOT NULL,
24
- scene text NOT NULL DEFAULT '', key_prefix text NOT NULL,
25
- created_at timestamptz DEFAULT now() NOT NULL, expires_at bigint NOT NULL,
26
- revoked_at timestamptz, updated_at timestamptz DEFAULT now() NOT NULL)`
27
-
28
- export const DDL_USER_ACCESS_KEY_INDEX = 'CREATE INDEX IF NOT EXISTS idx_user_access_key_uid ON __user_access_key(uid)'
29
-
30
- const SQL_SELECT_KEY = 'SELECT key_id, uid, scene, key_prefix, revoked_at, expires_at FROM __user_access_key WHERE key_hash=$1'
31
- const SQL_INSERT_KEY = 'INSERT INTO __user_access_key (key_hash, key_id, uid, scene, key_prefix, expires_at) VALUES ($1, $2, $3, $4, $5, $6)'
32
- const SQL_LIST_KEYS = 'SELECT key_id, key_prefix, scene, created_at, expires_at, revoked_at FROM __user_access_key WHERE uid=$1 ORDER BY created_at DESC'
33
- const SQL_REVOKE_KEY = 'UPDATE __user_access_key SET revoked_at=now(), updated_at=now() WHERE key_id=$1 AND uid=$2 AND revoked_at IS NULL RETURNING key_hash'
34
-
35
- const err = (code, message) => Object.assign(new Error(message), { code })
36
- const nowSec = () => Math.floor(Date.now() / 1000)
37
- export const sha256hex = s => createHash('sha256').update(String(s)).digest('hex')
38
-
39
- /** 进程内 verify 缓存(key_hash → { result, until });只缓存 ok 结果,写路径不读 */
40
- export const createVerifyCache = (ttlMs = CACHE_TTL_MS) => {
41
- const store = new Map()
42
- return {
43
- get(hash) {
44
- const hit = store.get(hash)
45
- if (!hit) return null
46
- if (hit.until <= Date.now()) { store.delete(hash); return null }
47
- return hit.result
48
- },
49
- set(hash, result) { store.set(hash, { result, until: Date.now() + ttlMs }) },
50
- clear(hash) { store.delete(hash) },
51
- size: () => store.size,
52
- }
53
- }
54
-
55
- /**
56
- * key 域工厂:verify / issue 闭包共享缓存与 runSql 接缝;abilities 为 auth.key.* 四条注册项。
57
- * runSql(sql, parameters) 是本文件唯一表读写入口(§3.7,pg 适配器由 index.js 注入)。
58
- */
59
- export function createKeyAbilities({ cfg, runSql }) {
60
- const cache = createVerifyCache()
61
- const ttlSec = () => Number(cfg?.akDefaultKeyTtlSec ?? DEFAULT_TTL_SEC)
62
-
63
- // 签发:生成明文 + 落档(只返回 hash 供内部使用,明文仅由调用方取走一次性响应)
64
- async function issue(uid, { scene = '', ttl } = {}) {
65
- const apikey = 'a1_' + randomBytes(32).toString('base64url')
66
- const keyHash = sha256hex(apikey)
67
- const keyId = 'k_' + keyHash.slice(0, 12)
68
- const keyPrefix = apikey.slice(0, 11)
69
- const expiresAt = nowSec() + Number(ttl ?? ttlSec())
70
- await runSql(SQL_INSERT_KEY, [keyHash, keyId, uid, scene ?? '', keyPrefix, expiresAt])
71
- return { apikey, key_hash: keyHash, key_id: keyId, key_prefix: keyPrefix, expires_at: expiresAt }
72
- }
73
-
74
- // 唯一裁决路径:sha256(key) → 一行 SQL → 四分支;ok 结果 30s 缓存
75
- async function verify(apikey, { useCache = true } = {}) {
76
- const keyHash = sha256hex(apikey ?? '')
77
- if (useCache) {
78
- const hit = cache.get(keyHash)
79
- if (hit) return hit
80
- }
81
- let rows
82
- try { rows = await runSql(SQL_SELECT_KEY, [keyHash]) } catch { throw err(503, 'apikey 校验失败') }
83
- const row = rows?.[0]
84
- const result = !row ? { ok: false, reason: 'malformed' }
85
- : row.revoked_at != null ? { ok: false, reason: 'revoked' }
86
- : Number(row.expires_at) <= nowSec() ? { ok: false, reason: 'expired' }
87
- : { ok: true, auth: { uidRef: row.uid, scene: row.scene ?? '', keyId: row.key_id, keyPrefix: row.key_prefix, expiresAt: Number(row.expires_at) } }
88
- if (result.ok) cache.set(keyHash, result)
89
- return result
90
- }
91
-
92
- // 凭证类能力共用:verify → 401 / 返回 uid(内部调用无缓存,避免读到过期判定)
93
- async function uidOf(apikey) {
94
- const v = await verify(apikey, { useCache: false })
95
- if (!v.ok) throw err(401, 'apikey 无效')
96
- return v.auth.uidRef
97
- }
98
-
99
- const abilities = [
100
- ['auth.key.create', { describe: '签发新 apikey(当前 key 换 uid;scene 只存不用)', run: async (args = {}) => {
101
- const uid = await uidOf(args.apikey)
102
- const scene = typeof args.scene === 'string' ? args.scene : ''
103
- let issued
104
- try { issued = await issue(uid, { scene }) } catch { throw err(500, 'apikey 签发失败') }
105
- return { apikey: issued.apikey, key_id: issued.key_id, key_prefix: issued.key_prefix, expires_at: issued.expires_at }
106
- } }],
107
-
108
- ['auth.key.list', { describe: '当前用户的 key 档案列表(不含明文/key_hash)', run: async (args = {}) => {
109
- const uid = await uidOf(args.apikey)
110
- let rows
111
- try { rows = await runSql(SQL_LIST_KEYS, [uid]) } catch { throw err(503, '查询 key 失败') }
112
- return (rows ?? []).map(r => ({ ...r, expires_at: Number(r.expires_at) }))
113
- } }],
114
-
115
- ['auth.key.revoke', { describe: '吊销 key(key_id 必须属于当前用户;0 行 → 404)', run: async (args = {}) => {
116
- const uid = await uidOf(args.apikey)
117
- if (!args.key_id) throw err(400, 'key_id 必填')
118
- let rows
119
- try { rows = await runSql(SQL_REVOKE_KEY, [args.key_id, uid]) } catch { throw err(503, '吊销 key 失败') }
120
- const keyHash = rows?.[0]?.key_hash
121
- if (!keyHash) throw err(404, 'key 不存在或不属于当前用户')
122
- cache.clear(keyHash) // 写路径不读缓存;成功即失效该 key
123
- return { revoked: true, key_id: args.key_id }
124
- } }],
125
-
126
- ['auth.key.verify', { describe: '校验 apikey(唯一裁决路径,返回 verify 结果对象)', run: async (args = {}) => verify(args.apikey) }],
127
- ]
128
-
129
- return { verify, issue, uidOf, abilities, cache }
130
- }