@be-link/vitality-cli-nodejs 0.0.42 → 0.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -1
- package/index.d.ts +5 -0
- package/index.js +109 -102
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/vs/advisorBusinessError.d.ts +9 -0
- package/vs/advisorBusinessError.js +39 -0
- package/vs/advisorBusinessError.js.map +1 -0
- package/vs/advisorHttpSender.d.ts +7 -0
- package/vs/advisorHttpSender.js +131 -0
- package/vs/advisorHttpSender.js.map +1 -0
- package/vs/advisorProtection.d.ts +77 -0
- package/vs/advisorProtection.js +255 -0
- package/vs/advisorProtection.js.map +1 -0
- package/vs/modules/api/adjustment/advisor/readProjection.d.ts +9 -0
- package/vs/modules/api/adjustment/advisor/readProjection.js +72 -0
- package/vs/modules/api/adjustment/advisor/readProjection.js.map +1 -0
- package/vs/modules/api/adjustment/advisor/service.d.ts +19 -0
- package/vs/modules/api/adjustment/advisor/service.js +163 -0
- package/vs/modules/api/adjustment/advisor/service.js.map +1 -0
- package/vs/modules/api/adjustment/advisor/type.d.ts +89 -0
- package/vs/modules/api/adjustment/advisor/type.js +3 -0
- package/vs/modules/api/adjustment/advisor/type.js.map +1 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { KeyObject } from 'crypto';
|
|
3
|
+
export declare const advisorActionPaths: {
|
|
4
|
+
readonly capabilities: "/api/adjustment/advisor/capabilities";
|
|
5
|
+
readonly list: "/api/adjustment/advisor/list";
|
|
6
|
+
readonly create: "/api/adjustment/advisor/create";
|
|
7
|
+
readonly shareContext: "/api/adjustment/advisor/share-context";
|
|
8
|
+
readonly operationsList: "/api/adjustment/advisor/operations-list";
|
|
9
|
+
};
|
|
10
|
+
export type AdvisorAction = keyof typeof advisorActionPaths;
|
|
11
|
+
export type AdvisorResponseEnvelope = {
|
|
12
|
+
success: true;
|
|
13
|
+
data: unknown;
|
|
14
|
+
message: string;
|
|
15
|
+
requestId?: string;
|
|
16
|
+
};
|
|
17
|
+
export type AdvisorProtectedTransport = (request: {
|
|
18
|
+
method: string;
|
|
19
|
+
url: string;
|
|
20
|
+
action: AdvisorAction;
|
|
21
|
+
body: Readonly<Record<string, unknown>>;
|
|
22
|
+
}) => Promise<AdvisorResponseEnvelope>;
|
|
23
|
+
export type AdvisorCaller = 'DistributionService';
|
|
24
|
+
export type AdvisorActor = Readonly<{
|
|
25
|
+
advisorId: string;
|
|
26
|
+
name: string;
|
|
27
|
+
}>;
|
|
28
|
+
export type AdvisorSignedRequest = {
|
|
29
|
+
method: string;
|
|
30
|
+
path: string;
|
|
31
|
+
action: AdvisorAction;
|
|
32
|
+
body: Readonly<Record<string, unknown>>;
|
|
33
|
+
};
|
|
34
|
+
export type AdvisorVerifiedContext = {
|
|
35
|
+
issuer: AdvisorCaller;
|
|
36
|
+
audience: 'VitalityService';
|
|
37
|
+
actor: AdvisorActor;
|
|
38
|
+
action: AdvisorAction;
|
|
39
|
+
expiresAt: number;
|
|
40
|
+
};
|
|
41
|
+
export type AdvisorVerificationConfig = {
|
|
42
|
+
audience: string;
|
|
43
|
+
environment: string;
|
|
44
|
+
maxTtlSeconds: number;
|
|
45
|
+
clockSkewSeconds: number;
|
|
46
|
+
keys: ReadonlyArray<{
|
|
47
|
+
issuer: AdvisorCaller;
|
|
48
|
+
kid: string;
|
|
49
|
+
publicKey: KeyObject;
|
|
50
|
+
}>;
|
|
51
|
+
now: () => number;
|
|
52
|
+
};
|
|
53
|
+
export declare function canonicalAdvisorJson(input: unknown): string;
|
|
54
|
+
export declare function createAdvisorRequestSigner(config: {
|
|
55
|
+
issuer: AdvisorCaller;
|
|
56
|
+
kid: string;
|
|
57
|
+
audience: string;
|
|
58
|
+
environment: string;
|
|
59
|
+
privateKey: KeyObject;
|
|
60
|
+
ttlSeconds: number;
|
|
61
|
+
now: () => number;
|
|
62
|
+
}): (request: AdvisorSignedRequest, identity: AdvisorActor) => string;
|
|
63
|
+
export declare function createAdvisorRequestVerifier(config: AdvisorVerificationConfig): (request: AdvisorSignedRequest, assertion: string) => AdvisorVerifiedContext;
|
|
64
|
+
export type AdvisorAssertionSender = (request: Readonly<{
|
|
65
|
+
method: 'POST';
|
|
66
|
+
url: string;
|
|
67
|
+
body: Readonly<Record<string, unknown>>;
|
|
68
|
+
headers: Readonly<{
|
|
69
|
+
'x-advisor-assertion': string;
|
|
70
|
+
}>;
|
|
71
|
+
}>) => Promise<AdvisorResponseEnvelope>;
|
|
72
|
+
export declare function createSignedAdvisorTransport(options: {
|
|
73
|
+
origin: string;
|
|
74
|
+
actor: AdvisorActor;
|
|
75
|
+
signer: ReturnType<typeof createAdvisorRequestSigner>;
|
|
76
|
+
send: AdvisorAssertionSender;
|
|
77
|
+
}): AdvisorProtectedTransport;
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSignedAdvisorTransport = exports.createAdvisorRequestVerifier = exports.createAdvisorRequestSigner = exports.canonicalAdvisorJson = exports.advisorActionPaths = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const advisorBusinessError_1 = require("./advisorBusinessError");
|
|
6
|
+
// Protocol infrastructure only. These paths do not register or expose SDK business methods.
|
|
7
|
+
exports.advisorActionPaths = {
|
|
8
|
+
capabilities: '/api/adjustment/advisor/capabilities',
|
|
9
|
+
list: '/api/adjustment/advisor/list',
|
|
10
|
+
create: '/api/adjustment/advisor/create',
|
|
11
|
+
shareContext: '/api/adjustment/advisor/share-context',
|
|
12
|
+
operationsList: '/api/adjustment/advisor/operations-list',
|
|
13
|
+
};
|
|
14
|
+
function reject() { throw new Error('ADVISOR_PROTECTED_REQUEST_REJECTED'); }
|
|
15
|
+
function object(value) {
|
|
16
|
+
if (!value || typeof value !== 'object' || Array.isArray(value) ||
|
|
17
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value)))
|
|
18
|
+
reject();
|
|
19
|
+
if (Object.getOwnPropertySymbols(value).length)
|
|
20
|
+
reject();
|
|
21
|
+
for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value))) {
|
|
22
|
+
if (!descriptor.enumerable || !('value' in descriptor))
|
|
23
|
+
reject();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function text(value) {
|
|
27
|
+
if (typeof value !== 'string' || !value || value.trim() !== value)
|
|
28
|
+
reject();
|
|
29
|
+
}
|
|
30
|
+
function exact(value, keys) {
|
|
31
|
+
if (Object.keys(value).sort().join(',') !== keys.sort().join(','))
|
|
32
|
+
reject();
|
|
33
|
+
}
|
|
34
|
+
function actor(value) {
|
|
35
|
+
object(value);
|
|
36
|
+
exact(value, ['advisorId', 'name']);
|
|
37
|
+
text(value.advisorId);
|
|
38
|
+
if (typeof value.name !== 'string')
|
|
39
|
+
reject();
|
|
40
|
+
return Object.freeze({ advisorId: value.advisorId, name: value.name });
|
|
41
|
+
}
|
|
42
|
+
function caller(value) {
|
|
43
|
+
if (value !== 'DistributionService')
|
|
44
|
+
reject();
|
|
45
|
+
}
|
|
46
|
+
// Protocol v1: plain JSON only, UTF-16 key ordering, no omitted/undefined values,
|
|
47
|
+
// accessors, symbols, sparse arrays, cycles, non-finite numbers or unsafe integers.
|
|
48
|
+
function canonicalAdvisorJson(input) {
|
|
49
|
+
const ancestors = new Set();
|
|
50
|
+
function visit(value) {
|
|
51
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
52
|
+
return JSON.stringify(value);
|
|
53
|
+
if (typeof value === 'number') {
|
|
54
|
+
if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value)))
|
|
55
|
+
reject();
|
|
56
|
+
return JSON.stringify(value);
|
|
57
|
+
}
|
|
58
|
+
if (typeof value !== 'object' || !value || ancestors.has(value))
|
|
59
|
+
reject();
|
|
60
|
+
ancestors.add(value);
|
|
61
|
+
try {
|
|
62
|
+
if (Array.isArray(value)) {
|
|
63
|
+
if (Object.getOwnPropertySymbols(value).length ||
|
|
64
|
+
Object.keys(value).length !== value.length)
|
|
65
|
+
reject();
|
|
66
|
+
const entries = [];
|
|
67
|
+
for (let i = 0; i < value.length; i++) {
|
|
68
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(i));
|
|
69
|
+
if (!descriptor?.enumerable || !('value' in descriptor))
|
|
70
|
+
reject();
|
|
71
|
+
entries.push(visit(descriptor.value));
|
|
72
|
+
}
|
|
73
|
+
return `[${entries.join(',')}]`;
|
|
74
|
+
}
|
|
75
|
+
object(value);
|
|
76
|
+
return `{${Object.keys(value).sort().map((key) => {
|
|
77
|
+
if (['__proto__', 'constructor', 'prototype'].includes(key))
|
|
78
|
+
reject();
|
|
79
|
+
return `${JSON.stringify(key)}:${visit(Object.getOwnPropertyDescriptor(value, key)?.value)}`;
|
|
80
|
+
}).join(',')}}`;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
ancestors.delete(value);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return visit(input);
|
|
87
|
+
}
|
|
88
|
+
exports.canonicalAdvisorJson = canonicalAdvisorJson;
|
|
89
|
+
function digest(body) {
|
|
90
|
+
return (0, crypto_1.createHash)('sha256').update(canonicalAdvisorJson(body), 'utf8').digest('hex');
|
|
91
|
+
}
|
|
92
|
+
function actionAllowed(issuer, action) {
|
|
93
|
+
if (!Object.prototype.hasOwnProperty.call(exports.advisorActionPaths, action))
|
|
94
|
+
reject();
|
|
95
|
+
caller(issuer);
|
|
96
|
+
}
|
|
97
|
+
function requestCheck(request, issuer, identity) {
|
|
98
|
+
actionAllowed(issuer, request.action);
|
|
99
|
+
if (request.method !== 'POST' || request.path !== exports.advisorActionPaths[request.action])
|
|
100
|
+
reject();
|
|
101
|
+
object(request.body);
|
|
102
|
+
const bodyActor = actor(request.body.actor);
|
|
103
|
+
if (bodyActor.advisorId !== identity.advisorId || bodyActor.name !== identity.name)
|
|
104
|
+
reject();
|
|
105
|
+
}
|
|
106
|
+
function seconds(now) {
|
|
107
|
+
const value = now();
|
|
108
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
109
|
+
reject();
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
function encode(value) { return value.toString('base64url'); }
|
|
113
|
+
function decode(value) {
|
|
114
|
+
if (!/^[A-Za-z0-9_-]+$/.test(value))
|
|
115
|
+
reject();
|
|
116
|
+
const result = Buffer.from(value, 'base64url');
|
|
117
|
+
if (encode(result) !== value)
|
|
118
|
+
reject();
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
function keyCheck(key, type) {
|
|
122
|
+
if (!(key instanceof crypto_1.KeyObject) || key.type !== type || key.asymmetricKeyType !== 'ed25519')
|
|
123
|
+
reject();
|
|
124
|
+
}
|
|
125
|
+
function createAdvisorRequestSigner(config) {
|
|
126
|
+
caller(config?.issuer);
|
|
127
|
+
text(config.kid);
|
|
128
|
+
text(config.environment);
|
|
129
|
+
if (config.audience !== 'VitalityService')
|
|
130
|
+
reject();
|
|
131
|
+
keyCheck(config.privateKey, 'private');
|
|
132
|
+
if (!Number.isSafeInteger(config.ttlSeconds) || config.ttlSeconds < 1 || typeof config.now !== 'function')
|
|
133
|
+
reject();
|
|
134
|
+
// Capture all configuration and key material before any asynchronous sender runs.
|
|
135
|
+
const { issuer, kid, audience, environment, ttlSeconds, now } = config;
|
|
136
|
+
const key = (0, crypto_1.createPrivateKey)({ key: config.privateKey.export({ format: 'der', type: 'pkcs8' }), format: 'der', type: 'pkcs8' });
|
|
137
|
+
return (request, identity) => {
|
|
138
|
+
const identitySnapshot = actor(identity);
|
|
139
|
+
requestCheck(request, issuer, identitySnapshot);
|
|
140
|
+
const iat = seconds(now);
|
|
141
|
+
const exp = iat + ttlSeconds;
|
|
142
|
+
if (!Number.isSafeInteger(exp))
|
|
143
|
+
reject();
|
|
144
|
+
const payload = {
|
|
145
|
+
version: 1, kid, issuer, audience, environment, actor: identitySnapshot,
|
|
146
|
+
action: request.action, method: request.method, path: request.path,
|
|
147
|
+
bodyDigest: digest(request.body), iat, exp,
|
|
148
|
+
};
|
|
149
|
+
const value = `v1.${encode(Buffer.from(canonicalAdvisorJson(payload)))}`;
|
|
150
|
+
return `${value}.${encode((0, crypto_1.sign)(null, Buffer.from(`vs:advisor-request:${value}`), key))}`;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
exports.createAdvisorRequestSigner = createAdvisorRequestSigner;
|
|
154
|
+
function createAdvisorRequestVerifier(config) {
|
|
155
|
+
if (config?.audience !== 'VitalityService')
|
|
156
|
+
reject();
|
|
157
|
+
text(config.environment);
|
|
158
|
+
if (!Number.isSafeInteger(config.maxTtlSeconds) || config.maxTtlSeconds < 1 ||
|
|
159
|
+
!Number.isSafeInteger(config.clockSkewSeconds) || config.clockSkewSeconds < 0 ||
|
|
160
|
+
typeof config.now !== 'function' || !Array.isArray(config.keys) || !config.keys.length)
|
|
161
|
+
reject();
|
|
162
|
+
const { audience, environment, maxTtlSeconds, clockSkewSeconds, now } = config;
|
|
163
|
+
const trusted = new Map();
|
|
164
|
+
for (const entry of config.keys) {
|
|
165
|
+
caller(entry?.issuer);
|
|
166
|
+
text(entry.kid);
|
|
167
|
+
keyCheck(entry.publicKey, 'public');
|
|
168
|
+
const key = JSON.stringify([entry.issuer, entry.kid]);
|
|
169
|
+
if (trusted.has(key))
|
|
170
|
+
reject();
|
|
171
|
+
trusted.set(key, (0, crypto_1.createPublicKey)({ key: entry.publicKey.export({ format: 'der', type: 'spki' }), format: 'der', type: 'spki' }));
|
|
172
|
+
}
|
|
173
|
+
return (request, assertion) => {
|
|
174
|
+
try {
|
|
175
|
+
if (typeof assertion !== 'string')
|
|
176
|
+
reject();
|
|
177
|
+
const parts = assertion.split('.');
|
|
178
|
+
if (parts.length !== 3 || parts[0] !== 'v1')
|
|
179
|
+
reject();
|
|
180
|
+
const serialized = decode(parts[1]).toString('utf8');
|
|
181
|
+
const claim = JSON.parse(serialized);
|
|
182
|
+
object(claim);
|
|
183
|
+
exact(claim, ['version', 'kid', 'issuer', 'audience', 'environment', 'actor', 'action', 'method', 'path', 'bodyDigest', 'iat', 'exp']);
|
|
184
|
+
if (canonicalAdvisorJson(claim) !== serialized)
|
|
185
|
+
reject();
|
|
186
|
+
caller(claim.issuer);
|
|
187
|
+
text(claim.kid);
|
|
188
|
+
const key = trusted.get(JSON.stringify([claim.issuer, claim.kid]));
|
|
189
|
+
if (!key || !(0, crypto_1.verify)(null, Buffer.from(`vs:advisor-request:${parts[0]}.${parts[1]}`), key, decode(parts[2])))
|
|
190
|
+
reject();
|
|
191
|
+
if (claim.version !== 1 || claim.audience !== audience || claim.environment !== environment)
|
|
192
|
+
reject();
|
|
193
|
+
const current = seconds(now);
|
|
194
|
+
if (typeof claim.iat !== 'number' || typeof claim.exp !== 'number' ||
|
|
195
|
+
!Number.isSafeInteger(claim.iat) || !Number.isSafeInteger(claim.exp) || claim.iat < 0 ||
|
|
196
|
+
claim.exp <= claim.iat || claim.exp - claim.iat > maxTtlSeconds ||
|
|
197
|
+
claim.iat > current + clockSkewSeconds || claim.exp <= current - clockSkewSeconds)
|
|
198
|
+
reject();
|
|
199
|
+
const identity = actor(claim.actor);
|
|
200
|
+
requestCheck(request, claim.issuer, identity);
|
|
201
|
+
if (claim.action !== request.action || claim.method !== request.method || claim.path !== request.path ||
|
|
202
|
+
claim.bodyDigest !== digest(request.body))
|
|
203
|
+
reject();
|
|
204
|
+
return Object.freeze({ issuer: claim.issuer, audience: 'VitalityService', actor: identity, action: request.action, expiresAt: claim.exp });
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return reject();
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
exports.createAdvisorRequestVerifier = createAdvisorRequestVerifier;
|
|
212
|
+
function createSignedAdvisorTransport(options) {
|
|
213
|
+
if (typeof options?.signer !== 'function' || typeof options.send !== 'function')
|
|
214
|
+
reject();
|
|
215
|
+
const endpoint = new URL(options.origin);
|
|
216
|
+
if (endpoint.protocol !== 'https:' || endpoint.username || endpoint.password ||
|
|
217
|
+
endpoint.search || endpoint.hash || endpoint.pathname !== '/')
|
|
218
|
+
reject();
|
|
219
|
+
const origin = endpoint.origin;
|
|
220
|
+
const identity = actor(options.actor);
|
|
221
|
+
const { signer, send } = options;
|
|
222
|
+
return async (request) => {
|
|
223
|
+
const path = exports.advisorActionPaths[request.action];
|
|
224
|
+
// Only an exact protocol path or its exact same-origin absolute URL is admitted.
|
|
225
|
+
// Validate before URL parsing so normalization cannot hide dot segments or escapes.
|
|
226
|
+
if (typeof path !== 'string' || (request.url !== path && request.url !== origin + path))
|
|
227
|
+
reject();
|
|
228
|
+
const url = new URL(path, origin);
|
|
229
|
+
// Serialize then parse a private snapshot: the sender receives no caller-owned references.
|
|
230
|
+
const body = JSON.parse(canonicalAdvisorJson(request.body));
|
|
231
|
+
const assertion = signer({ method: request.method, path: url.pathname, action: request.action, body }, identity);
|
|
232
|
+
try {
|
|
233
|
+
return await send(Object.freeze({ method: 'POST', url: url.href, body: deepFreeze(body),
|
|
234
|
+
headers: Object.freeze({ 'x-advisor-assertion': assertion }) }));
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
// Only locally branded, allowlisted native rejections survive this boundary.
|
|
238
|
+
const rejection = (0, advisorBusinessError_1.copyAdvisorBusinessError)(error);
|
|
239
|
+
if (rejection)
|
|
240
|
+
throw rejection;
|
|
241
|
+
// A failed create may have committed. Never retry or infer that it did not execute.
|
|
242
|
+
throw new Error(request.action === 'create' ? 'RESULT_UNKNOWN' : 'DEPENDENCY_UNAVAILABLE');
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
exports.createSignedAdvisorTransport = createSignedAdvisorTransport;
|
|
247
|
+
function deepFreeze(value) {
|
|
248
|
+
if (value && typeof value === 'object') {
|
|
249
|
+
for (const child of Object.values(value))
|
|
250
|
+
deepFreeze(child);
|
|
251
|
+
Object.freeze(value);
|
|
252
|
+
}
|
|
253
|
+
return value;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=advisorProtection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisorProtection.js","sourceRoot":"","sources":["../../src/vs/advisorProtection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AdvisorCapability, AdvisorInternalAdjustment, AdvisorOperationPage, AdvisorShareContext } from './type';
|
|
2
|
+
export declare function capabilities(value: unknown, ids: readonly string[]): {
|
|
3
|
+
list: AdvisorCapability[];
|
|
4
|
+
};
|
|
5
|
+
export declare function adjustments(value: unknown, mainOrderId: string): {
|
|
6
|
+
list: AdvisorInternalAdjustment[];
|
|
7
|
+
};
|
|
8
|
+
export declare function share(value: unknown, adjustmentOrderId: string): AdvisorShareContext;
|
|
9
|
+
export declare function operations(value: unknown, pageSize: number): AdvisorOperationPage;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.operations = exports.share = exports.adjustments = exports.capabilities = void 0;
|
|
4
|
+
function fail() { throw new Error('DEPENDENCY_UNAVAILABLE'); }
|
|
5
|
+
function object(value) {
|
|
6
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
7
|
+
return fail();
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
function text(value) { if (typeof value !== 'string')
|
|
11
|
+
return fail(); return value; }
|
|
12
|
+
function id(value) { const result = text(value); if (!result || result.trim() !== result)
|
|
13
|
+
return fail(); return result; }
|
|
14
|
+
function integer(value) { if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0)
|
|
15
|
+
return fail(); return value; }
|
|
16
|
+
function boolean(value) { if (typeof value !== 'boolean')
|
|
17
|
+
return fail(); return value; }
|
|
18
|
+
function nullableText(value) { return value === null ? null : text(value); }
|
|
19
|
+
function nullableTime(value) { return value === null ? null : integer(value); }
|
|
20
|
+
function operator(value) { if (value === null)
|
|
21
|
+
return null; if (![1, 2, 3, 4].includes(value))
|
|
22
|
+
return fail(); return value; }
|
|
23
|
+
function array(value) { if (!Array.isArray(value))
|
|
24
|
+
return fail(); return Array.from(value); }
|
|
25
|
+
function capabilities(value, ids) {
|
|
26
|
+
const list = array(object(value).list).map(entry => {
|
|
27
|
+
const row = object(entry);
|
|
28
|
+
return { orderId: id(row.orderId), isAdjustable: boolean(row.isAdjustable), reason: nullableText(row.reason),
|
|
29
|
+
allowedAdjustmentTypes: array(row.allowedAdjustmentTypes).map(type => { const item = object(type); return { value: id(item.value), label: text(item.label) }; }) };
|
|
30
|
+
});
|
|
31
|
+
if (list.length !== ids.length || list.some((row, index) => row.orderId !== ids[index]))
|
|
32
|
+
return fail();
|
|
33
|
+
return { list };
|
|
34
|
+
}
|
|
35
|
+
exports.capabilities = capabilities;
|
|
36
|
+
function adjustments(value, mainOrderId) {
|
|
37
|
+
const list = array(object(value).list).map(entry => {
|
|
38
|
+
const row = object(entry), refund = object(row.refundSummary);
|
|
39
|
+
if (row.mainOrderId !== mainOrderId)
|
|
40
|
+
return fail();
|
|
41
|
+
return { adjustmentOrderId: id(row.adjustmentOrderId), mainOrderId, type: id(row.type), typeLabel: text(row.typeLabel), status: id(row.status),
|
|
42
|
+
unitFeeCent: integer(row.unitFeeCent), quantity: integer(row.quantity), feeCent: integer(row.feeCent), description: nullableText(row.description),
|
|
43
|
+
creatorName: text(row.creatorName), creatorType: operator(row.creatorType), creatorId: nullableText(row.creatorId), createdAt: integer(row.createdAt),
|
|
44
|
+
paidAt: nullableTime(row.paidAt), completedAt: nullableTime(row.completedAt), expiresAt: nullableTime(row.expiresAt), canShare: boolean(row.canShare),
|
|
45
|
+
refundSummary: { refundedFeeCent: integer(refund.refundedFeeCent), refundedQuantity: integer(refund.refundedQuantity), hasPendingRefund: boolean(refund.hasPendingRefund), hasRefunding: boolean(refund.hasRefunding) } };
|
|
46
|
+
});
|
|
47
|
+
if (new Set(list.map(row => row.adjustmentOrderId)).size !== list.length)
|
|
48
|
+
return fail();
|
|
49
|
+
return { list };
|
|
50
|
+
}
|
|
51
|
+
exports.adjustments = adjustments;
|
|
52
|
+
function share(value, adjustmentOrderId) {
|
|
53
|
+
const row = object(value), mainOrderId = id(row.mainOrderId);
|
|
54
|
+
if (row.adjustmentOrderId !== adjustmentOrderId || row.path !== `/subPackages/adjustmentOrder/adjustmentOrderDetail/adjustmentOrderDetail?mainOrderId=${encodeURIComponent(mainOrderId)}` || row.title !== '差价单')
|
|
55
|
+
return fail();
|
|
56
|
+
return { mainOrderId, adjustmentOrderId, path: row.path, title: row.title };
|
|
57
|
+
}
|
|
58
|
+
exports.share = share;
|
|
59
|
+
function operations(value, pageSize) {
|
|
60
|
+
const result = object(value);
|
|
61
|
+
const list = array(result.list).map(entry => {
|
|
62
|
+
const row = object(entry);
|
|
63
|
+
return { id: id(row.id), action: id(row.action), operatorType: operator(row.operatorType), operatorId: nullableText(row.operatorId), operatorName: nullableText(row.operatorName),
|
|
64
|
+
source: id(row.source), beforeStatus: nullableText(row.beforeStatus), afterStatus: nullableText(row.afterStatus), occurredAt: integer(row.occurredAt), summary: text(row.summary) };
|
|
65
|
+
});
|
|
66
|
+
const hasMore = boolean(result.hasMore), nextCursor = result.nextCursor === null ? null : id(result.nextCursor);
|
|
67
|
+
if (list.length > pageSize || new Set(list.map(row => row.id)).size !== list.length || hasMore !== (nextCursor !== null) || (hasMore && !list.length))
|
|
68
|
+
return fail();
|
|
69
|
+
return { list, nextCursor, hasMore };
|
|
70
|
+
}
|
|
71
|
+
exports.operations = operations;
|
|
72
|
+
//# sourceMappingURL=readProjection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readProjection.js","sourceRoot":"","sources":["../../../../../../src/vs/modules/api/adjustment/advisor/readProjection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import BaseService from '../../../baseService';
|
|
2
|
+
import { AdvisorProtectedTransport } from '../../../../advisorProtection';
|
|
3
|
+
import type { AdvisorAdjustmentCreateRequest, AdvisorAdjustmentCreateResponse, AdvisorCapabilitiesRequest, AdvisorAdjustmentListRequest, AdvisorAdjustmentShareRequest, AdvisorAdjustmentOperationsRequest } from './type';
|
|
4
|
+
export declare class AdvisorAdjustmentService extends BaseService {
|
|
5
|
+
private readonly transport?;
|
|
6
|
+
prefixUrl: string;
|
|
7
|
+
constructor(transport?: AdvisorProtectedTransport | undefined);
|
|
8
|
+
private readRequest;
|
|
9
|
+
private read;
|
|
10
|
+
capabilities(input: AdvisorCapabilitiesRequest): Promise<{
|
|
11
|
+
list: import("./type").AdvisorCapability[];
|
|
12
|
+
}>;
|
|
13
|
+
list(input: AdvisorAdjustmentListRequest): Promise<{
|
|
14
|
+
list: import("./type").AdvisorInternalAdjustment[];
|
|
15
|
+
}>;
|
|
16
|
+
shareContext(input: AdvisorAdjustmentShareRequest): Promise<import("./type").AdvisorShareContext>;
|
|
17
|
+
operationsList(input: AdvisorAdjustmentOperationsRequest): Promise<import("./type").AdvisorOperationPage>;
|
|
18
|
+
create(input: AdvisorAdjustmentCreateRequest): Promise<AdvisorAdjustmentCreateResponse>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.AdvisorAdjustmentService = void 0;
|
|
30
|
+
const baseService_1 = __importDefault(require("../../../baseService"));
|
|
31
|
+
const advisorProtection_1 = require("../../../../advisorProtection");
|
|
32
|
+
const advisorProtection_2 = require("../../../../advisorProtection");
|
|
33
|
+
const advisorBusinessError_1 = require("../../../../advisorBusinessError");
|
|
34
|
+
const projection = __importStar(require("./readProjection"));
|
|
35
|
+
function invalid() { throw new Error('INVALID_ARGUMENT'); }
|
|
36
|
+
function id(value) {
|
|
37
|
+
if (typeof value !== 'string' || !value || value.trim() !== value)
|
|
38
|
+
invalid();
|
|
39
|
+
}
|
|
40
|
+
// Only create is registered by the server. No legacy callApi/inside-token fallback.
|
|
41
|
+
class AdvisorAdjustmentService extends baseService_1.default {
|
|
42
|
+
constructor(transport) {
|
|
43
|
+
super();
|
|
44
|
+
this.transport = transport;
|
|
45
|
+
this.prefixUrl = '/api/adjustment/advisor';
|
|
46
|
+
}
|
|
47
|
+
readRequest(input, allowed) {
|
|
48
|
+
if (typeof this.transport !== 'function')
|
|
49
|
+
throw new Error('ADVISOR_PROTECTED_TRANSPORT_REQUIRED');
|
|
50
|
+
let request;
|
|
51
|
+
try {
|
|
52
|
+
request = JSON.parse((0, advisorProtection_1.canonicalAdvisorJson)(input));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
invalid();
|
|
56
|
+
}
|
|
57
|
+
if (!request || typeof request !== 'object' || Array.isArray(request) ||
|
|
58
|
+
Object.keys(request).some(key => !allowed.includes(key)))
|
|
59
|
+
invalid();
|
|
60
|
+
const actor = request.actor;
|
|
61
|
+
if (!actor || typeof actor !== 'object' || Array.isArray(actor) || Object.keys(actor).sort().join(',') !== 'advisorId,name')
|
|
62
|
+
invalid();
|
|
63
|
+
id(actor.advisorId);
|
|
64
|
+
if (typeof actor.name !== 'string')
|
|
65
|
+
invalid();
|
|
66
|
+
Object.freeze(actor);
|
|
67
|
+
return request;
|
|
68
|
+
}
|
|
69
|
+
async read(action, request, project) {
|
|
70
|
+
try {
|
|
71
|
+
const transport = this.transport;
|
|
72
|
+
if (typeof transport !== 'function')
|
|
73
|
+
throw new Error('ADVISOR_PROTECTED_TRANSPORT_REQUIRED');
|
|
74
|
+
// The protected transport owns the explicit origin; legacy host selection is not used.
|
|
75
|
+
const url = advisorProtection_2.advisorActionPaths[action];
|
|
76
|
+
const response = await transport(Object.freeze({ method: 'POST', url, action, body: Object.freeze(request) }));
|
|
77
|
+
if (response?.success !== true || typeof response.message !== 'string' || response.data == null)
|
|
78
|
+
throw new Error('DEPENDENCY_UNAVAILABLE');
|
|
79
|
+
return project(response.data);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const business = (0, advisorBusinessError_1.copyAdvisorBusinessError)(error);
|
|
83
|
+
if (business)
|
|
84
|
+
throw business;
|
|
85
|
+
throw new Error('DEPENDENCY_UNAVAILABLE');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async capabilities(input) {
|
|
89
|
+
const request = this.readRequest(input, ['orderIds', 'actor']);
|
|
90
|
+
if (!Array.isArray(request.orderIds) || !request.orderIds.length || request.orderIds.length > 50)
|
|
91
|
+
invalid();
|
|
92
|
+
const ids = Array.from(request.orderIds);
|
|
93
|
+
ids.forEach(id);
|
|
94
|
+
if (new Set(ids).size !== ids.length)
|
|
95
|
+
invalid();
|
|
96
|
+
request.orderIds = Object.freeze(ids);
|
|
97
|
+
return this.read('capabilities', request, value => projection.capabilities(value, ids));
|
|
98
|
+
}
|
|
99
|
+
async list(input) {
|
|
100
|
+
const request = this.readRequest(input, ['orderId', 'actor']);
|
|
101
|
+
id(request.orderId);
|
|
102
|
+
return this.read('list', request, value => projection.adjustments(value, request.orderId));
|
|
103
|
+
}
|
|
104
|
+
async shareContext(input) {
|
|
105
|
+
const request = this.readRequest(input, ['adjustmentOrderId', 'actor']);
|
|
106
|
+
id(request.adjustmentOrderId);
|
|
107
|
+
return this.read('shareContext', request, value => projection.share(value, request.adjustmentOrderId));
|
|
108
|
+
}
|
|
109
|
+
async operationsList(input) {
|
|
110
|
+
const request = this.readRequest(input, ['adjustmentOrderId', 'actor', 'cursor', 'pageSize']);
|
|
111
|
+
id(request.adjustmentOrderId);
|
|
112
|
+
if (request.cursor !== undefined)
|
|
113
|
+
id(request.cursor);
|
|
114
|
+
const pageSize = request.pageSize ?? 20;
|
|
115
|
+
if (typeof pageSize !== 'number' || !Number.isInteger(pageSize) || pageSize < 1 || pageSize > 50)
|
|
116
|
+
invalid();
|
|
117
|
+
return this.read('operationsList', request, value => projection.operations(value, pageSize));
|
|
118
|
+
}
|
|
119
|
+
async create(input) {
|
|
120
|
+
if (typeof this.transport !== 'function')
|
|
121
|
+
throw new Error('ADVISOR_PROTECTED_TRANSPORT_REQUIRED');
|
|
122
|
+
let request;
|
|
123
|
+
try {
|
|
124
|
+
request = JSON.parse((0, advisorProtection_1.canonicalAdvisorJson)(input));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
invalid();
|
|
128
|
+
}
|
|
129
|
+
if (!request || typeof request !== 'object' || Array.isArray(request) ||
|
|
130
|
+
Object.keys(request).sort().join(',') !== 'actor,description,orderId,quantity,type,unitFeeCent')
|
|
131
|
+
invalid();
|
|
132
|
+
id(request.orderId);
|
|
133
|
+
id(request.type);
|
|
134
|
+
if (!request.actor || typeof request.actor !== 'object' || Array.isArray(request.actor) ||
|
|
135
|
+
Object.keys(request.actor).sort().join(',') !== 'advisorId,name')
|
|
136
|
+
invalid();
|
|
137
|
+
id(request.actor.advisorId);
|
|
138
|
+
if (typeof request.actor.name !== 'string' || typeof request.description !== 'string' ||
|
|
139
|
+
!Number.isSafeInteger(request.unitFeeCent) || request.unitFeeCent < 1 ||
|
|
140
|
+
!Number.isSafeInteger(request.quantity) || request.quantity < 1 ||
|
|
141
|
+
!Number.isSafeInteger(request.unitFeeCent * request.quantity))
|
|
142
|
+
invalid();
|
|
143
|
+
Object.freeze(request.actor);
|
|
144
|
+
Object.freeze(request);
|
|
145
|
+
// Do not catch transport rejections: branded business errors and RESULT_UNKNOWN retain meaning.
|
|
146
|
+
const response = await this.transport(Object.freeze({
|
|
147
|
+
method: 'POST', url: advisorProtection_2.advisorActionPaths.create, action: 'create', body: request,
|
|
148
|
+
}));
|
|
149
|
+
const result = response?.data;
|
|
150
|
+
if (response?.success !== true || typeof response.message !== 'string' || !result ||
|
|
151
|
+
typeof result !== 'object' || Array.isArray(result) ||
|
|
152
|
+
Object.keys(result).sort().join(',') !== 'adjustmentOrderId,feeCent,status' ||
|
|
153
|
+
typeof result.adjustmentOrderId !== 'string' || !result.adjustmentOrderId ||
|
|
154
|
+
result.adjustmentOrderId.trim() !== result.adjustmentOrderId || result.status !== 'NOT_PAID' ||
|
|
155
|
+
result.feeCent !== request.unitFeeCent * request.quantity) {
|
|
156
|
+
// The server may have committed even when its response is unusable.
|
|
157
|
+
throw new Error('RESULT_UNKNOWN');
|
|
158
|
+
}
|
|
159
|
+
return { adjustmentOrderId: result.adjustmentOrderId, status: 'NOT_PAID', feeCent: result.feeCent };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.AdvisorAdjustmentService = AdvisorAdjustmentService;
|
|
163
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../../src/vs/modules/api/adjustment/advisor/service.ts"],"names":[],"mappings":"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"}
|