deltazero-core 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Akanbi Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # DeltaZero TypeScript SDK
2
+
3
+ Typed SDK package for the live DeltaZero API.
4
+
5
+ This package is a thin client around the deployed DeltaZero API. It does not duplicate backend logic and does not add authentication.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install deltazero-core
11
+ ```
12
+
13
+ ## Development from the repository
14
+
15
+ From the repository root:
16
+
17
+ ```bash
18
+ cd sdk/typescript
19
+ npm test
20
+ ```
21
+
22
+ To use the package in another local project, point your package manager at this folder while the repository is checked out locally.
23
+
24
+ ## API
25
+
26
+ ```ts
27
+ import { DeltaZeroClient } from "deltazero-core";
28
+
29
+ const client = new DeltaZeroClient({
30
+ baseUrl: "https://deltazero-production.up.railway.app",
31
+ });
32
+
33
+ const report = await client.buildStrategy({
34
+ asset: "SOL",
35
+ capital_usd: 5000,
36
+ risk_tolerance: "medium",
37
+ target_style: "neutral_yield",
38
+ long_yield_apy: 14,
39
+ short_funding_apy: 3,
40
+ fee_drag_apy: 1,
41
+ });
42
+ ```
43
+
44
+ Supported methods:
45
+
46
+ - `buildStrategy()`
47
+ - `auditPosition()`
48
+ - `stressTest()`
49
+ - `auditWallet()`
@@ -0,0 +1,28 @@
1
+ import type { AuditRequest, AuditResponse, BuildRequest, BuildResponse, DeltaZeroClientOptions, StressTestRequest, StressTestResponse, WalletAnalyzeRequest, WalletPortfolioResponse } from "./types.js";
2
+ export declare class DeltaZeroError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare class DeltaZeroApiError extends DeltaZeroError {
6
+ readonly status: number;
7
+ readonly url: string;
8
+ readonly body: unknown;
9
+ constructor(message: string, options: {
10
+ status: number;
11
+ url: string;
12
+ body: unknown;
13
+ });
14
+ }
15
+ export declare class DeltaZeroTimeoutError extends DeltaZeroError {
16
+ readonly url: string;
17
+ constructor(message: string, url: string);
18
+ }
19
+ export declare class DeltaZeroClient {
20
+ private readonly baseUrl;
21
+ private readonly timeoutMs;
22
+ constructor(options: DeltaZeroClientOptions);
23
+ private request;
24
+ buildStrategy(body: BuildRequest): Promise<BuildResponse>;
25
+ auditPosition(body: AuditRequest): Promise<AuditResponse>;
26
+ stressTest(body: StressTestRequest): Promise<StressTestResponse>;
27
+ auditWallet(body: WalletAnalyzeRequest): Promise<WalletPortfolioResponse>;
28
+ }
@@ -0,0 +1,114 @@
1
+ export class DeltaZeroError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "DeltaZeroError";
5
+ }
6
+ }
7
+ export class DeltaZeroApiError extends DeltaZeroError {
8
+ status;
9
+ url;
10
+ body;
11
+ constructor(message, options) {
12
+ super(message);
13
+ this.name = "DeltaZeroApiError";
14
+ this.status = options.status;
15
+ this.url = options.url;
16
+ this.body = options.body;
17
+ }
18
+ }
19
+ export class DeltaZeroTimeoutError extends DeltaZeroError {
20
+ url;
21
+ constructor(message, url) {
22
+ super(message);
23
+ this.name = "DeltaZeroTimeoutError";
24
+ this.url = url;
25
+ }
26
+ }
27
+ function normalizeBaseUrl(baseUrl) {
28
+ return baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
29
+ }
30
+ function describeErrorBody(body, fallback) {
31
+ if (typeof body === "string" && body.trim())
32
+ return body;
33
+ if (body && typeof body === "object" && "detail" in body) {
34
+ const detail = body.detail;
35
+ if (typeof detail === "string")
36
+ return detail;
37
+ if (Array.isArray(detail))
38
+ return JSON.stringify(detail);
39
+ if (detail && typeof detail === "object")
40
+ return JSON.stringify(detail);
41
+ }
42
+ return fallback;
43
+ }
44
+ async function parseJsonBody(response, url) {
45
+ const text = await response.text();
46
+ if (!text.trim())
47
+ return null;
48
+ try {
49
+ return JSON.parse(text);
50
+ }
51
+ catch {
52
+ throw new DeltaZeroError(`Invalid JSON returned from ${url}.`);
53
+ }
54
+ }
55
+ export class DeltaZeroClient {
56
+ baseUrl;
57
+ timeoutMs;
58
+ constructor(options) {
59
+ if (!options.baseUrl?.trim()) {
60
+ throw new DeltaZeroError("A baseUrl is required.");
61
+ }
62
+ this.baseUrl = normalizeBaseUrl(options.baseUrl.trim());
63
+ this.timeoutMs = options.timeoutMs ?? 10_000;
64
+ }
65
+ async request(path, body) {
66
+ const url = `${this.baseUrl}${path}`;
67
+ const controller = new AbortController();
68
+ const timeout = globalThis.setTimeout(() => controller.abort(), this.timeoutMs);
69
+ try {
70
+ const response = await fetch(url, {
71
+ method: "POST",
72
+ headers: { "Content-Type": "application/json" },
73
+ body: JSON.stringify(body),
74
+ signal: controller.signal,
75
+ });
76
+ const parsed = await parseJsonBody(response, url);
77
+ if (!response.ok) {
78
+ const detail = describeErrorBody(parsed, response.statusText || "Request failed.");
79
+ throw new DeltaZeroApiError(`API ${response.status}: ${detail}`, {
80
+ status: response.status,
81
+ url,
82
+ body: parsed,
83
+ });
84
+ }
85
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
86
+ throw new DeltaZeroError(`Invalid response body returned from ${url}.`);
87
+ }
88
+ return parsed;
89
+ }
90
+ catch (error) {
91
+ if (error instanceof DeltaZeroError)
92
+ throw error;
93
+ if (error instanceof DOMException && error.name === "AbortError") {
94
+ throw new DeltaZeroTimeoutError(`Request to ${url} timed out after ${this.timeoutMs}ms.`, url);
95
+ }
96
+ throw new DeltaZeroError(error instanceof Error ? error.message : `Request to ${url} failed.`);
97
+ }
98
+ finally {
99
+ globalThis.clearTimeout(timeout);
100
+ }
101
+ }
102
+ buildStrategy(body) {
103
+ return this.request("/strategy/build", body);
104
+ }
105
+ auditPosition(body) {
106
+ return this.request("/strategy/audit", body);
107
+ }
108
+ stressTest(body) {
109
+ return this.request("/strategy/stress-test", body);
110
+ }
111
+ auditWallet(body) {
112
+ return this.request("/wallet/analyze", body);
113
+ }
114
+ }
@@ -0,0 +1,2 @@
1
+ export { DeltaZeroClient, DeltaZeroApiError, DeltaZeroError, DeltaZeroTimeoutError } from "./client.js";
2
+ export type { Asset, AuditRequest, AuditResponse, BuildRequest, BuildResponse, DeltaZeroClientOptions, ImpairmentBreakdown, Metrics, NormalizedPosition, PositionType, ProtocolError, RecommendedStructure, Recommendation, RiskTolerance, Scenario, ScenarioResult, ScenarioType, StrategyAction, StrategyHealth, StressTestRequest, StressTestResponse, TargetStyle, WalletAction, WalletAnalyzeRequest, WalletAssessmentStatus, WalletDataQuality, WalletNetwork, WalletPortfolioResponse, WalletPortfolioSummary, WalletProtocol, WalletRecommendation, WalletRiskMetrics, WalletStressProfile, WalletStrategyHealth, } from "./types.js";
@@ -0,0 +1 @@
1
+ export { DeltaZeroClient, DeltaZeroApiError, DeltaZeroError, DeltaZeroTimeoutError } from "./client.js";
@@ -0,0 +1,318 @@
1
+ export type Asset = "SOL" | "ETH";
2
+ export type RiskTolerance = "low" | "medium" | "high";
3
+ export type TargetStyle = "neutral_yield" | "conservative_income" | "aggressive_carry" | "capital_preservation";
4
+ export type StrategyAction = "OPEN" | "WAIT" | "HOLD" | "REBALANCE" | "REDUCE" | "CLOSE";
5
+ export type StrategyHealth = "healthy" | "warning" | "critical";
6
+ export type ScenarioType = "funding_worsens" | "price_drop" | "price_rise" | "yield_drops";
7
+ export type WalletNetwork = "ethereum" | "arbitrum" | "hyperliquid";
8
+ export type WalletProtocol = "hyperliquid" | "aave" | "morpho";
9
+ export type WalletStressProfile = "standard" | "elevated" | "strict";
10
+ export type WalletAction = "HOLD" | "REBALANCE" | "REDUCE" | "CLOSE";
11
+ export type WalletStrategyHealth = "healthy" | "warning" | "fragile" | "critical";
12
+ export type WalletDataQuality = "complete" | "partial" | "insufficient";
13
+ export type WalletAssessmentStatus = "positions_found" | "no_supported_positions" | "partial_data" | "insufficient_data";
14
+ export type PositionType = "spot" | "lending_supply" | "lending_borrow" | "vault_deposit" | "perpetual_long" | "perpetual_short" | "collateral" | "unknown";
15
+ export interface Metrics {
16
+ hedge_ratio: number;
17
+ hedge_drift_pct: number;
18
+ net_delta_estimate: number;
19
+ estimated_net_carry_apy: number;
20
+ carry_efficiency_score: number;
21
+ safety_buffer_score: number;
22
+ capital_at_risk_proxy: number;
23
+ }
24
+ export interface Recommendation {
25
+ action: StrategyAction;
26
+ summary: string;
27
+ }
28
+ export interface RecommendedStructure {
29
+ long_notional_usd: number;
30
+ short_notional_usd: number;
31
+ collateral_usd: number;
32
+ target_hedge_ratio: number;
33
+ }
34
+ export interface Scenario {
35
+ type: ScenarioType;
36
+ magnitude_pct: number;
37
+ asset_price_change_pct?: number | null;
38
+ collateral_haircut_pct?: number | null;
39
+ exit_slippage_pct?: number | null;
40
+ liquidation_penalty_pct?: number | null;
41
+ protocol_loss_pct?: number | null;
42
+ }
43
+ export interface ImpairmentBreakdown {
44
+ asset_value_impact_usd: number;
45
+ hedge_pnl_impact_usd: number;
46
+ collateral_haircut_usd: number;
47
+ exit_slippage_usd: number;
48
+ liquidation_penalty_usd: number;
49
+ protocol_loss_assumption_usd: number;
50
+ }
51
+ export interface ScenarioResult {
52
+ scenario_type: ScenarioType;
53
+ magnitude_pct: number;
54
+ stressed_long_notional_usd: number;
55
+ stressed_short_notional_usd: number;
56
+ stressed_collateral_usd: number;
57
+ stressed_long_yield_apy: number;
58
+ stressed_short_funding_apy: number;
59
+ stressed_metrics: Metrics;
60
+ health_after_stress: StrategyHealth;
61
+ pre_stress_equity_usd: number;
62
+ stressed_liabilities_usd: number;
63
+ estimated_impairment_loss_usd: number;
64
+ estimated_impairment_loss_pct: number;
65
+ post_impairment_equity_usd: number;
66
+ impairment_breakdown: ImpairmentBreakdown;
67
+ }
68
+ export interface BuildRequest {
69
+ asset: Asset;
70
+ capital_usd: number;
71
+ risk_tolerance: RiskTolerance;
72
+ target_style: TargetStyle;
73
+ long_yield_apy: number;
74
+ short_funding_apy: number;
75
+ fee_drag_apy: number;
76
+ market_data_mode?: "manual" | "hyperliquid";
77
+ funding_lookback_hours?: number;
78
+ override_live_funding?: boolean;
79
+ market_dex?: string | null;
80
+ wallet_exposure?: WalletExposureImport | null;
81
+ }
82
+ export interface WalletExposureImport {
83
+ source: "wallet_auditor";
84
+ wallet_address: string;
85
+ asset: string | null;
86
+ gross_long_exposure_usd: number | null;
87
+ gross_short_exposure_usd: number | null;
88
+ net_delta_usd: number | null;
89
+ net_delta_pct: number | null;
90
+ current_hedge_ratio: number | null;
91
+ portfolio_equity_usd: number | null;
92
+ largest_risk_asset: string | null;
93
+ recommended_action: WalletAction;
94
+ data_quality: "complete" | "partial";
95
+ data_timestamp: string | null;
96
+ }
97
+ export interface HedgeAdjustment {
98
+ current_long_notional_usd: number | null;
99
+ current_short_notional_usd: number | null;
100
+ target_short_notional_usd: number | null;
101
+ short_adjustment_usd: number | null;
102
+ target_hedge_ratio: number;
103
+ projected_hedge_ratio: number | null;
104
+ projected_net_delta_usd: number | null;
105
+ projected_net_delta_pct: number | null;
106
+ projected_hedge_drift_pct: number | null;
107
+ adjustment_direction: "increase_short" | "reduce_short" | "no_change" | null;
108
+ limitation: string | null;
109
+ }
110
+ export interface AuditRequest {
111
+ asset: Asset;
112
+ long_notional_usd: number;
113
+ short_notional_usd: number;
114
+ collateral_usd: number;
115
+ risk_tolerance: RiskTolerance;
116
+ long_yield_apy: number;
117
+ short_funding_apy: number;
118
+ fee_drag_apy: number;
119
+ }
120
+ export interface StressTestRequest {
121
+ asset: Asset;
122
+ long_notional_usd: number;
123
+ short_notional_usd: number;
124
+ collateral_usd: number;
125
+ risk_tolerance: RiskTolerance;
126
+ long_yield_apy: number;
127
+ short_funding_apy: number;
128
+ fee_drag_apy: number;
129
+ existing_unrealized_pnl_usd?: number;
130
+ liabilities_usd?: number;
131
+ scenario: Scenario;
132
+ }
133
+ export interface StrategyResponseBase {
134
+ service: string;
135
+ strategy_name: string;
136
+ asset: Asset;
137
+ strategy_health: StrategyHealth;
138
+ decision_confidence: number;
139
+ metrics: Metrics;
140
+ recommendation: Recommendation;
141
+ risk_notes: string[];
142
+ }
143
+ export interface BuildResponse extends StrategyResponseBase {
144
+ recommended_structure: RecommendedStructure;
145
+ market_data_source?: "hyperliquid";
146
+ market_data_timestamp?: string;
147
+ funding_rate_apy?: number;
148
+ funding_contribution_apy?: number;
149
+ market_data_quality?: "complete" | "partial" | "unavailable";
150
+ market_context?: Record<string, unknown>;
151
+ hedge_adjustment?: HedgeAdjustment;
152
+ }
153
+ export interface AuditResponse extends StrategyResponseBase {
154
+ actions: StrategyAction[];
155
+ }
156
+ export interface StressTestResponse extends StrategyResponseBase {
157
+ actions: StrategyAction[];
158
+ scenario_result: ScenarioResult;
159
+ pre_stress_equity_usd: number;
160
+ stressed_liabilities_usd: number;
161
+ estimated_impairment_loss_usd: number;
162
+ estimated_impairment_loss_pct: number;
163
+ post_impairment_equity_usd: number;
164
+ impairment_breakdown: ImpairmentBreakdown;
165
+ }
166
+ export interface NormalizedPosition {
167
+ protocol: WalletProtocol;
168
+ network: WalletNetwork;
169
+ position_type: PositionType;
170
+ asset: string;
171
+ quantity: number | null;
172
+ notional_usd: number | null;
173
+ current_value_usd: number | null;
174
+ entry_value_usd: number | null;
175
+ unrealized_pnl_usd: number | null;
176
+ collateral_usd: number | null;
177
+ debt_usd: number | null;
178
+ funding_apy: number | null;
179
+ liquidation_price: number | null;
180
+ health_factor: number | null;
181
+ data_timestamp: string | null;
182
+ data_quality: WalletDataQuality;
183
+ side?: "long" | "short" | null;
184
+ subaccount_name?: string | null;
185
+ subaccount_address?: string | null;
186
+ market_context?: Record<string, unknown> | null;
187
+ }
188
+ export interface WalletExecutiveSummary {
189
+ headline: string;
190
+ body: string;
191
+ position_count: number;
192
+ protocol_count: number;
193
+ risk_level: WalletStrategyHealth;
194
+ }
195
+ export interface WalletPrimaryDriver {
196
+ metric: string;
197
+ label: string;
198
+ state: "positive" | "warning" | "critical" | "unavailable";
199
+ value: number | null;
200
+ unit: string | null;
201
+ explanation: string;
202
+ }
203
+ export interface WalletPlanStep {
204
+ priority: number;
205
+ action: string;
206
+ reason: string;
207
+ target: string | null;
208
+ }
209
+ export interface WalletExposureAnalysis {
210
+ gross_exposure_usd: number;
211
+ gross_long_exposure_usd: number;
212
+ gross_short_exposure_usd: number;
213
+ net_delta_usd: number;
214
+ net_delta_pct: number;
215
+ portfolio_equity_usd: number | null;
216
+ leverage_ratio: number | null;
217
+ position_count: number;
218
+ }
219
+ export interface WalletAllocationItem {
220
+ asset: string;
221
+ exposure_usd: number;
222
+ allocation_pct: number;
223
+ }
224
+ export interface WalletStressSummary {
225
+ stress_profile: WalletStressProfile;
226
+ estimated_impairment_loss_usd: number;
227
+ estimated_impairment_loss_pct: number;
228
+ post_impairment_equity_usd: number;
229
+ dominant_risk: string;
230
+ summary: string;
231
+ impairment_level: "LOW" | "MEDIUM" | "HIGH";
232
+ impairment_label: "Contained" | "Elevated" | "Critical";
233
+ }
234
+ export interface WalletRiskContributor {
235
+ asset: string;
236
+ protocol: WalletProtocol;
237
+ exposure_usd: number;
238
+ risk_contribution_pct: number;
239
+ primary_risk: string;
240
+ }
241
+ export interface WalletRiskTimelineItem {
242
+ metric: string;
243
+ state: "healthy" | "warning" | "critical" | "unavailable";
244
+ explanation: string;
245
+ }
246
+ export interface WalletAnalyzeRequest {
247
+ wallet_address: string;
248
+ networks: WalletNetwork[];
249
+ protocols: WalletProtocol[];
250
+ stress_profile: WalletStressProfile;
251
+ }
252
+ export interface WalletPortfolioSummary {
253
+ current_position_value_usd: number;
254
+ gross_long_exposure_usd: number;
255
+ gross_short_exposure_usd: number;
256
+ net_delta_usd: number;
257
+ net_delta_pct: number;
258
+ unrealized_pnl_usd: number | null;
259
+ collateral_value_usd: number;
260
+ debt_value_usd: number;
261
+ estimated_funding_exposure_apy: number | null;
262
+ }
263
+ export interface WalletRiskMetrics {
264
+ hedge_ratio: number | null;
265
+ hedge_drift_pct: number | null;
266
+ collateral_health_score: number | null;
267
+ minimum_health_factor: number | null;
268
+ liquidation_proximity_pct: number | null;
269
+ safety_buffer_score: number | null;
270
+ capital_at_risk_proxy: number | null;
271
+ estimated_impairment_loss_usd: number | null;
272
+ estimated_impairment_loss_pct: number | null;
273
+ post_impairment_equity_usd: number | null;
274
+ }
275
+ export interface WalletRecommendation {
276
+ action: WalletAction;
277
+ summary: string;
278
+ confidence: number;
279
+ }
280
+ export interface ProtocolError {
281
+ protocol: WalletProtocol;
282
+ network: WalletNetwork;
283
+ message: string;
284
+ error_type: string;
285
+ retryable: boolean;
286
+ }
287
+ export interface WalletPortfolioResponse {
288
+ service: string;
289
+ wallet_address: string;
290
+ assessment_status: WalletAssessmentStatus;
291
+ supported_positions_found: number;
292
+ unsupported_positions_found: number;
293
+ data_timestamp: string | null;
294
+ data_quality: WalletDataQuality;
295
+ portfolio_summary: WalletPortfolioSummary;
296
+ risk_metrics: WalletRiskMetrics;
297
+ strategy_health: WalletStrategyHealth | null;
298
+ decision_confidence: number | null;
299
+ recommendation: WalletRecommendation | null;
300
+ executive_summary: WalletExecutiveSummary | null;
301
+ primary_drivers: WalletPrimaryDriver[];
302
+ recommended_plan: WalletPlanStep[];
303
+ exposure_analysis: WalletExposureAnalysis | null;
304
+ portfolio_allocation: WalletAllocationItem[];
305
+ stress_summary: WalletStressSummary | null;
306
+ largest_risk_contributors: WalletRiskContributor[];
307
+ portfolio_observations: string[];
308
+ risk_timeline: WalletRiskTimelineItem[];
309
+ risk_notes: string[];
310
+ corrective_actions: string[];
311
+ positions: NormalizedPosition[];
312
+ protocol_errors: ProtocolError[];
313
+ warnings: string[];
314
+ }
315
+ export interface DeltaZeroClientOptions {
316
+ baseUrl: string;
317
+ timeoutMs?: number;
318
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "deltazero-core",
3
+ "version": "0.1.0",
4
+ "description": "Typed TypeScript client for the DeltaZero deterministic DeFi risk API",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "types": "dist/src/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "import": "./dist/src/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist/src",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "license": "MIT",
20
+ "author": "Akanbi Labs",
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/Teecash96/DeltaZero.git",
24
+ "directory": "sdk/typescript"
25
+ },
26
+ "homepage": "https://delta-zero-alpha.vercel.app",
27
+ "bugs": {
28
+ "url": "https://github.com/Teecash96/DeltaZero/issues"
29
+ },
30
+ "keywords": [
31
+ "defi",
32
+ "risk",
33
+ "delta-neutral",
34
+ "okx",
35
+ "x402"
36
+ ],
37
+ "engines": {
38
+ "node": ">=18"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "scripts": {
44
+ "build": "node ../../frontend/node_modules/typescript/bin/tsc -p tsconfig.json",
45
+ "test": "npm run build && node --test dist/test/*.js",
46
+ "prepack": "npm test"
47
+ }
48
+ }