移除快手小店以及 api
This commit is contained in:
@@ -6,7 +6,6 @@ import {
|
||||
isPlainObject,
|
||||
pickFirstNonEmpty,
|
||||
resolveCloudtentaclesAdminContext,
|
||||
resolveKuaishouEticketAdminContext,
|
||||
} from './context.js'
|
||||
|
||||
test('pickFirstNonEmpty returns first trimmed non-empty string value', () => {
|
||||
@@ -21,52 +20,6 @@ test('isPlainObject only accepts non-array objects', () => {
|
||||
assert.equal(isPlainObject('x'), false)
|
||||
})
|
||||
|
||||
test('resolveKuaishouEticketAdminContext prefers explicit payload values', () => {
|
||||
const context = resolveKuaishouEticketAdminContext(
|
||||
{
|
||||
baseUrl: ' https://override.example.com ',
|
||||
shopId: ' shop-2 ',
|
||||
cookie: ' cookie-2 ',
|
||||
},
|
||||
{
|
||||
savedSource: { baseUrl: 'https://saved.example.com' },
|
||||
findShopConfig(requestedShopId) {
|
||||
assert.equal(requestedShopId, 'shop-2')
|
||||
return { shopId: 'shop-2', cookie: 'saved-cookie-2' }
|
||||
},
|
||||
getFirstAvailableShop() {
|
||||
throw new Error('should not use first available shop')
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
assert.deepEqual(context, {
|
||||
baseUrl: 'https://override.example.com',
|
||||
cookie: 'cookie-2',
|
||||
shopId: 'shop-2',
|
||||
shop: { shopId: 'shop-2', cookie: 'saved-cookie-2' },
|
||||
})
|
||||
})
|
||||
|
||||
test('resolveKuaishouEticketAdminContext falls back to first available shop', () => {
|
||||
const context = resolveKuaishouEticketAdminContext(
|
||||
{},
|
||||
{
|
||||
savedSource: { baseUrl: ' https://saved.example.com ' },
|
||||
getFirstAvailableShop() {
|
||||
return { shopId: 'shop-1', cookie: 'cookie-1' }
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
assert.deepEqual(context, {
|
||||
baseUrl: 'https://saved.example.com',
|
||||
cookie: 'cookie-1',
|
||||
shopId: 'shop-1',
|
||||
shop: { shopId: 'shop-1', cookie: 'cookie-1' },
|
||||
})
|
||||
})
|
||||
|
||||
test('resolveCloudtentaclesAdminContext merges payload source and persisted session', () => {
|
||||
const context = resolveCloudtentaclesAdminContext(
|
||||
{
|
||||
|
||||
@@ -15,32 +15,6 @@ export function isPlainObject(value: unknown): value is JsonObject {
|
||||
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
||||
}
|
||||
|
||||
export function resolveKuaishouEticketAdminContext(payload: JsonObject = {}, options: JsonObject = {}) {
|
||||
const savedSource = options.savedSource || {};
|
||||
const findShopConfig =
|
||||
(options.findShopConfig || (() => null)) as (shopId: string, source: JsonObject) => unknown;
|
||||
const getFirstAvailableShop =
|
||||
(options.getFirstAvailableShop || (() => null)) as (source: JsonObject) => unknown;
|
||||
const defaultBaseUrl = String(
|
||||
options.defaultBaseUrl || "https://s.kwaixiaodian.com"
|
||||
).trim();
|
||||
const requestedShopId = String(payload.shopId || "").trim();
|
||||
const configuredShop = (requestedShopId
|
||||
? findShopConfig(requestedShopId, savedSource)
|
||||
: getFirstAvailableShop(savedSource)) as JsonObject | null;
|
||||
|
||||
return {
|
||||
baseUrl: pickFirstNonEmpty([
|
||||
payload.baseUrl,
|
||||
savedSource.baseUrl,
|
||||
defaultBaseUrl,
|
||||
]),
|
||||
cookie: pickFirstNonEmpty([payload.cookie, configuredShop?.cookie]),
|
||||
shopId: pickFirstNonEmpty([requestedShopId, configuredShop?.shopId]),
|
||||
shop: configuredShop,
|
||||
};
|
||||
}
|
||||
|
||||
import { getCloudtentaclesSourceByKey } from "../../../platforms/cloudtentacles/source-config-service.js";
|
||||
import { getCloudtentaclesSessionStateByKey } from "../../../platforms/cloudtentacles/session-state-service.js";
|
||||
import {
|
||||
|
||||
@@ -3,7 +3,6 @@ import assert from 'node:assert/strict'
|
||||
|
||||
import {
|
||||
mapAdminCloudtentaclesSession,
|
||||
mapAdminKuaishouEticketSourceConfig,
|
||||
maskPhone,
|
||||
maskSecret,
|
||||
} from './mappers.js'
|
||||
@@ -20,30 +19,6 @@ test('maskPhone hides middle digits for mobile numbers', () => {
|
||||
assert.equal(maskPhone(''), '')
|
||||
})
|
||||
|
||||
test('mapAdminKuaishouEticketSourceConfig maps shops and masks cookies', () => {
|
||||
assert.deepEqual(
|
||||
mapAdminKuaishouEticketSourceConfig(
|
||||
{ enabled: true, baseUrl: ' https://s.kwaixiaodian.com ' },
|
||||
[{ shopId: ' 1 ', kshopName: ' A店 ', cookie: 'cookie-abcdef123456', enabled: true }],
|
||||
),
|
||||
{
|
||||
enabled: true,
|
||||
baseUrl: 'https://s.kwaixiaodian.com',
|
||||
shops: [
|
||||
{
|
||||
shopId: '1',
|
||||
kshopName: 'A店',
|
||||
cookie: 'cookie-abcdef123456',
|
||||
cookieMasked: 'cookie****123456',
|
||||
hasCookie: true,
|
||||
userAvatar: '',
|
||||
enabled: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
test('mapAdminCloudtentaclesSession derives masked fields and token presence', () => {
|
||||
assert.deepEqual(
|
||||
mapAdminCloudtentaclesSession({
|
||||
|
||||
@@ -17,26 +17,6 @@ export function maskPhone(value: unknown) {
|
||||
return maskPhoneValue(value, { maskShort: false });
|
||||
}
|
||||
|
||||
export function mapAdminKuaishouEticketShopItem(item: JsonObject = {}) {
|
||||
return {
|
||||
shopId: String(item.shopId || "").trim(),
|
||||
kshopName: String(item.kshopName || "").trim(),
|
||||
cookie: String(item.cookie || "").trim(),
|
||||
cookieMasked: maskSecret(item.cookie),
|
||||
hasCookie: Boolean(String(item.cookie || "").trim()),
|
||||
userAvatar: String(item.userAvatar || "").trim(),
|
||||
enabled: item.enabled !== false,
|
||||
};
|
||||
}
|
||||
|
||||
export function mapAdminKuaishouEticketSourceConfig(config: JsonObject = {}, shops: JsonObject[] = []) {
|
||||
return {
|
||||
enabled: config.enabled !== false,
|
||||
baseUrl: String(config.baseUrl || "").trim(),
|
||||
shops: shops.map((item) => mapAdminKuaishouEticketShopItem(item)),
|
||||
};
|
||||
}
|
||||
|
||||
export function mapAdminCloudtentaclesSourceConfig(config: JsonObject = {}) {
|
||||
return {
|
||||
key: String(config.key || "").trim(),
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
import {
|
||||
consumeKuaishouEticket,
|
||||
queryKuaishouEticketConsumeDetail,
|
||||
} from '../../platforms/kuaishou-eticket/consume-service.js'
|
||||
import {
|
||||
findKuaishouEticketShopConfig,
|
||||
getFirstAvailableKuaishouEticketShop,
|
||||
getKuaishouEticketSourceConfig,
|
||||
getKuaishouEticketSourceFilePath,
|
||||
listKuaishouEticketShopConfigs,
|
||||
saveKuaishouEticketSourceConfig,
|
||||
} from '../../platforms/kuaishou-eticket/source-config-service.js'
|
||||
import { queryKuaishouEticketStableInfo } from '../../platforms/kuaishou-eticket/info-service.js'
|
||||
import { resolveKuaishouEticketAdminContext } from './cloudtentacles/context.js'
|
||||
import { mapAdminKuaishouEticketSourceConfig } from './cloudtentacles/mappers.js'
|
||||
|
||||
type JsonObject = Record<string, any>
|
||||
|
||||
function resolveAdminKuaishouEticketContext(payload: JsonObject = {}) {
|
||||
return resolveKuaishouEticketAdminContext(payload, {
|
||||
savedSource: getKuaishouEticketSourceConfig(),
|
||||
findShopConfig: findKuaishouEticketShopConfig,
|
||||
getFirstAvailableShop: getFirstAvailableKuaishouEticketShop,
|
||||
})
|
||||
}
|
||||
|
||||
export function getAdminKuaishouEticketSourceConfig() {
|
||||
const config = getKuaishouEticketSourceConfig()
|
||||
|
||||
return {
|
||||
filePath: getKuaishouEticketSourceFilePath(),
|
||||
source: mapAdminKuaishouEticketSourceConfig(config, listKuaishouEticketShopConfigs(config)),
|
||||
}
|
||||
}
|
||||
|
||||
export function updateAdminKuaishouEticketSourceConfig(payload: JsonObject = {}) {
|
||||
const saved = saveKuaishouEticketSourceConfig({
|
||||
enabled: payload.enabled !== false,
|
||||
baseUrl: String(payload.baseUrl || '').trim() || 'https://s.kwaixiaodian.com',
|
||||
shops: Array.isArray(payload.shops) ? payload.shops : [],
|
||||
})
|
||||
|
||||
return {
|
||||
filePath: getKuaishouEticketSourceFilePath(),
|
||||
source: mapAdminKuaishouEticketSourceConfig(saved, listKuaishouEticketShopConfigs(saved)),
|
||||
}
|
||||
}
|
||||
|
||||
export async function queryAdminKuaishouEticketDetail(payload: JsonObject = {}) {
|
||||
const context = resolveAdminKuaishouEticketContext(payload)
|
||||
|
||||
return queryKuaishouEticketConsumeDetail({
|
||||
baseUrl: context.baseUrl,
|
||||
cookie: context.cookie,
|
||||
eTicketId: String(payload.eTicketId || '').trim(),
|
||||
})
|
||||
}
|
||||
|
||||
export async function queryAdminKuaishouEticketShopInfo(payload: JsonObject = {}) {
|
||||
const context = resolveAdminKuaishouEticketContext(payload)
|
||||
|
||||
return queryKuaishouEticketStableInfo({
|
||||
baseUrl: context.baseUrl,
|
||||
cookie: context.cookie,
|
||||
})
|
||||
}
|
||||
|
||||
export async function consumeAdminKuaishouEticket(payload: JsonObject = {}) {
|
||||
const context = resolveAdminKuaishouEticketContext(payload)
|
||||
|
||||
return consumeKuaishouEticket({
|
||||
baseUrl: context.baseUrl,
|
||||
cookie: context.cookie,
|
||||
eTicketId: String(payload.eTicketId || '').trim(),
|
||||
oid: String(payload.oid || '').trim(),
|
||||
formToken: String(payload.formToken || '').trim(),
|
||||
num: payload.num,
|
||||
storeId: String(payload.storeId || '').trim(),
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user