@forgecharts/sdk 1.5.37 → 1.5.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.js +139 -1
- package/dist/internal.js.map +1 -1
- package/dist/licensing/ChartRuntimeResolver.d.ts +20 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -1
- package/dist/licensing/__tests__/packageGating.test.d.ts +2 -0
- package/dist/licensing/__tests__/packageGating.test.d.ts.map +1 -0
- package/dist/licensing/packageFeatures.d.ts +81 -0
- package/dist/licensing/packageFeatures.d.ts.map +1 -0
- package/dist/react/canvas/ChartCanvas.d.ts.map +1 -1
- package/dist/react/hooks/useUserPackage.d.ts +24 -0
- package/dist/react/hooks/useUserPackage.d.ts.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +137 -2
- package/dist/react/index.js.map +1 -1
- package/dist/react/internal.js +137 -2
- package/dist/react/internal.js.map +1 -1
- package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -183,6 +183,26 @@ export declare class ChartRuntimeResolver {
|
|
|
183
183
|
* debug panels, or passing state to React context in one call.
|
|
184
184
|
*/
|
|
185
185
|
getCapabilities(): ChartCapabilities;
|
|
186
|
+
/**
|
|
187
|
+
* Apply the user's Kit package to capability resolution.
|
|
188
|
+
*
|
|
189
|
+
* Pass the `features` map from `GET /api/packages/me` verbatim — snake_case
|
|
190
|
+
* Kit keys are translated here. Pass null to clear (e.g. on sign-out), which
|
|
191
|
+
* restores licence-only behaviour.
|
|
192
|
+
*
|
|
193
|
+
* This can only ever narrow: a package cannot grant a capability the
|
|
194
|
+
* deployment licence withholds. Both resolvers below consult the licence
|
|
195
|
+
* regardless of what the package says.
|
|
196
|
+
*/
|
|
197
|
+
setUserPackageFeatures(kitFlags: Readonly<Record<string, boolean>> | null): void;
|
|
198
|
+
/** The resolved capability flags from the user's package, for diagnostics. */
|
|
199
|
+
getUserPackageFeatures(): Readonly<Record<string, boolean>> | null;
|
|
200
|
+
/**
|
|
201
|
+
* True when a package has been applied. Useful for telling "this user has no
|
|
202
|
+
* package" apart from "package gating is not in use", which otherwise look
|
|
203
|
+
* identical from the outside.
|
|
204
|
+
*/
|
|
205
|
+
hasUserPackage(): boolean;
|
|
186
206
|
}
|
|
187
207
|
export interface ChartCapabilities {
|
|
188
208
|
mode: 'managed' | 'unmanaged';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartRuntimeResolver.d.ts","sourceRoot":"","sources":["../../src/licensing/ChartRuntimeResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;
|
|
1
|
+
{"version":3,"file":"ChartRuntimeResolver.d.ts","sourceRoot":"","sources":["../../src/licensing/ChartRuntimeResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageGating.test.d.ts","sourceRoot":"","sources":["../../../src/licensing/__tests__/packageGating.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-user package features — the second gate, below the deployment licence.
|
|
3
|
+
*
|
|
4
|
+
* Two independent things decide whether a user sees a chart feature:
|
|
5
|
+
*
|
|
6
|
+
* 1. The DEPLOYMENT LICENCE (productTier × deploymentMode) — what this
|
|
7
|
+
* installation is licensed to offer at all. Resolved by capabilityMatrix
|
|
8
|
+
* and owned by LicenseManager.
|
|
9
|
+
* 2. The USER'S KIT PACKAGE — which of those the individual user has paid
|
|
10
|
+
* for, from `users.package_id` → `package_features`, served by
|
|
11
|
+
* `GET /api/packages/me`.
|
|
12
|
+
*
|
|
13
|
+
* The composition is an intersection, and the direction matters: a package may
|
|
14
|
+
* only ever NARROW what the licence allows, never widen it. That mirrors the
|
|
15
|
+
* rule already stated for licence feature flags — "may only narrow below the
|
|
16
|
+
* ceiling, never elevate above it" — and it is what keeps package assignment
|
|
17
|
+
* from becoming a way to grant capabilities the deployment has not licensed.
|
|
18
|
+
*
|
|
19
|
+
* Vocabularies differ by design: the Kit's `features` table is snake_case and
|
|
20
|
+
* describes sellable units ('extended_drawing_tools'), while the SDK's
|
|
21
|
+
* capabilities are camelCase and describe runtime behaviour
|
|
22
|
+
* ('extendedDrawings'). This module is the only place the two meet.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Kit feature key → SDK capability name.
|
|
26
|
+
*
|
|
27
|
+
* ONLY capabilities appearing here are package-gated. That is deliberate: a
|
|
28
|
+
* package contains rows only for the features it grants, so an absent key means
|
|
29
|
+
* "not granted" — and if every SDK capability were gated by presence, the ones
|
|
30
|
+
* with no Kit equivalent (barReplay, sessionHours, continuousContracts…) would
|
|
31
|
+
* switch off the moment any package was assigned. Restricting gating to mapped
|
|
32
|
+
* capabilities keeps the licence in sole charge of everything else.
|
|
33
|
+
*/
|
|
34
|
+
export declare const KIT_FEATURE_TO_CAPABILITY: Readonly<Record<string, string>>;
|
|
35
|
+
/**
|
|
36
|
+
* Kit features deliberately NOT mapped, and why. Documented rather than
|
|
37
|
+
* silently omitted, because "why doesn't my package flag do anything" is
|
|
38
|
+
* otherwise a hard question to answer.
|
|
39
|
+
*
|
|
40
|
+
* delayed_data — data delay is decided by the data_addon entitlement
|
|
41
|
+
* and enforced server-side in the feed, not by a chart
|
|
42
|
+
* capability. Gating it here would have no effect on
|
|
43
|
+
* what the runtime actually sends.
|
|
44
|
+
* ai_script_conversion — a narrower thing INSIDE the assistant, which is
|
|
45
|
+
* itself gated by `ai_agent` → `aiAgent`. Mapping it
|
|
46
|
+
* too would let one unticked box disable the whole
|
|
47
|
+
* assistant, far more than the label names.
|
|
48
|
+
*
|
|
49
|
+
* Four SDK capabilities have no Kit feature and are owned by the deployment
|
|
50
|
+
* licence alone: `managedTrading` and `unmanagedIngestion` are architectural
|
|
51
|
+
* properties of the deployment rather than per-user upsells, and
|
|
52
|
+
* `depthOfMarket` and `tradingPanel` are already gated by product tier — a
|
|
53
|
+
* package must not appear to sell them independently of the trading licence.
|
|
54
|
+
*/
|
|
55
|
+
export declare const UNMAPPED_KIT_FEATURES: readonly string[];
|
|
56
|
+
/** SDK capabilities subject to package gating — the image of the map above. */
|
|
57
|
+
export declare const PACKAGE_GATED_CAPABILITIES: ReadonlySet<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Convert `GET /api/packages/me`'s flat `{ feature_key: boolean }` into SDK
|
|
60
|
+
* capability names.
|
|
61
|
+
*
|
|
62
|
+
* A Kit key with no mapping is ignored rather than passed through: capability
|
|
63
|
+
* names are the SDK's vocabulary, and letting an unrecognised snake_case key
|
|
64
|
+
* reach the resolver would silently do nothing while looking like it worked.
|
|
65
|
+
*/
|
|
66
|
+
export declare function toCapabilityFlags(kitFlags: Readonly<Record<string, boolean>>): Record<string, boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Does the user's package permit `capability`?
|
|
69
|
+
*
|
|
70
|
+
* Fails OPEN in the two cases that mean "no package opinion exists":
|
|
71
|
+
* - `flags` is null — nothing loaded. Hosts that never call
|
|
72
|
+
* `/api/packages/me`, and every deployment predating package gating, must
|
|
73
|
+
* behave exactly as before.
|
|
74
|
+
* - the capability is not package-gated — the licence alone decides.
|
|
75
|
+
*
|
|
76
|
+
* Failing open is safe here precisely because this is the SECOND gate: the
|
|
77
|
+
* licence has already been applied, so the worst case is that a user sees what
|
|
78
|
+
* their deployment is licensed for, which is the pre-existing behaviour.
|
|
79
|
+
*/
|
|
80
|
+
export declare function packageAllows(flags: Readonly<Record<string, boolean>> | null, capability: string): boolean;
|
|
81
|
+
//# sourceMappingURL=packageFeatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageFeatures.d.ts","sourceRoot":"","sources":["../../src/licensing/packageFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqCtE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAE1D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,EAC/C,UAAU,EAAE,MAAM,GACjB,OAAO,CAIT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartCanvas.d.ts","sourceRoot":"","sources":["../../../src/react/canvas/ChartCanvas.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartCanvas.d.ts","sourceRoot":"","sources":["../../../src/react/canvas/ChartCanvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply the signed-in user's Kit package from `GET {apiUrl}/api/packages/me`.
|
|
3
|
+
*
|
|
4
|
+
* This is the SECOND gate. The deployment licence (useHostLicense) decides what
|
|
5
|
+
* the installation may offer at all; the package decides which of those the
|
|
6
|
+
* individual user has paid for. A package can only ever narrow the licence, so
|
|
7
|
+
* this hook cannot grant anything the deployment is not licensed for.
|
|
8
|
+
*
|
|
9
|
+
* Outcomes, and the distinction matters:
|
|
10
|
+
* package + features -> gating applies; unlisted gated capabilities are denied
|
|
11
|
+
* package: null -> the user has NO package. Left ungated (licence only).
|
|
12
|
+
* no apiUrl / error -> left ungated. An outage must not strip features from
|
|
13
|
+
* every user of the deployment.
|
|
14
|
+
*
|
|
15
|
+
* On `package: null` deliberately meaning "no gating" rather than "nothing
|
|
16
|
+
* allowed": every Kit predating package assignment has users with
|
|
17
|
+
* `package_id = NULL`, and denying every gated capability for them would strip
|
|
18
|
+
* indicators, multi-pane and drawing tools from working deployments on upgrade.
|
|
19
|
+
* Assigning a package is therefore what ACTIVATES gating for a user — which is
|
|
20
|
+
* also why hosts should assign one at provision time (see
|
|
21
|
+
* `packageSlug` on POST /api/auth/provision).
|
|
22
|
+
*/
|
|
23
|
+
export declare function useUserPackage(apiUrl?: string, getAuthToken?: (() => string | Promise<string>) | undefined): void;
|
|
24
|
+
//# sourceMappingURL=useUserPackage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserPackage.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useUserPackage.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAC1D,IAAI,CAiDN"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export { LicenseRequiredOverlay } from './canvas/LicenseRequiredOverlay';
|
|
|
24
24
|
export type { LicenseRequiredOverlayProps } from './canvas/LicenseRequiredOverlay';
|
|
25
25
|
export { useLicenseDataBlocked } from './hooks/useLicenseDataBlocked';
|
|
26
26
|
export { useHostLicense } from './hooks/useHostLicense';
|
|
27
|
+
export { useUserPackage } from './hooks/useUserPackage';
|
|
27
28
|
export { ChartWorkspace } from './workspace/ChartWorkspace';
|
|
28
29
|
export type { ChartWorkspaceProps, TabItem, TradingSession } from './workspace/ChartWorkspace';
|
|
29
30
|
export { useChartCapabilities } from './hooks/useChartCapabilities';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3G,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,QAAQ,GACT,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3G,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC9D,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,QAAQ,GACT,MAAM,oBAAoB,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -11040,6 +11040,58 @@ var LicenseManager = class _LicenseManager {
|
|
|
11040
11040
|
}
|
|
11041
11041
|
};
|
|
11042
11042
|
|
|
11043
|
+
// src/licensing/packageFeatures.ts
|
|
11044
|
+
var KIT_FEATURE_TO_CAPABILITY = {
|
|
11045
|
+
// charting
|
|
11046
|
+
drawing_tools: "drawingTools",
|
|
11047
|
+
extended_drawing_tools: "extendedDrawings",
|
|
11048
|
+
indicators: "indicators",
|
|
11049
|
+
multi_pane: "multiPane",
|
|
11050
|
+
chart_types: "chartTypes",
|
|
11051
|
+
bar_replay: "barReplay",
|
|
11052
|
+
custom_timeframes: "customTimeframes",
|
|
11053
|
+
overlays: "overlays",
|
|
11054
|
+
// data
|
|
11055
|
+
historical_data: "historicalData",
|
|
11056
|
+
realtime_data: "realtimeData",
|
|
11057
|
+
multiple_providers: "multipleProviders",
|
|
11058
|
+
data_export: "dataExport",
|
|
11059
|
+
continuous_contracts: "continuousContracts",
|
|
11060
|
+
session_hours: "sessionHours",
|
|
11061
|
+
// trading
|
|
11062
|
+
order_entry: "orderEntry",
|
|
11063
|
+
positions_overlay: "positionsOverlay",
|
|
11064
|
+
bracket_orders: "bracketOrders",
|
|
11065
|
+
trailing_stops: "trailingStops",
|
|
11066
|
+
draggable_orders: "draggableOrders",
|
|
11067
|
+
// scripting
|
|
11068
|
+
forgescript: "forgeScript",
|
|
11069
|
+
custom_indicators: "customIndicators",
|
|
11070
|
+
ai_agent: "aiAgent",
|
|
11071
|
+
// workspace
|
|
11072
|
+
saved_layouts: "savedLayouts",
|
|
11073
|
+
multiple_workspaces: "multipleWorkspaces",
|
|
11074
|
+
watchlists: "watchlists",
|
|
11075
|
+
alerts: "alerts",
|
|
11076
|
+
multi_chart_layout: "multiChartLayout"
|
|
11077
|
+
};
|
|
11078
|
+
var PACKAGE_GATED_CAPABILITIES = new Set(
|
|
11079
|
+
Object.values(KIT_FEATURE_TO_CAPABILITY)
|
|
11080
|
+
);
|
|
11081
|
+
function toCapabilityFlags(kitFlags) {
|
|
11082
|
+
const out = {};
|
|
11083
|
+
for (const [kitKey, enabled] of Object.entries(kitFlags)) {
|
|
11084
|
+
const capability = KIT_FEATURE_TO_CAPABILITY[kitKey];
|
|
11085
|
+
if (capability) out[capability] = enabled === true;
|
|
11086
|
+
}
|
|
11087
|
+
return out;
|
|
11088
|
+
}
|
|
11089
|
+
function packageAllows(flags, capability) {
|
|
11090
|
+
if (flags === null) return true;
|
|
11091
|
+
if (!PACKAGE_GATED_CAPABILITIES.has(capability)) return true;
|
|
11092
|
+
return flags[capability] === true;
|
|
11093
|
+
}
|
|
11094
|
+
|
|
11043
11095
|
// src/licensing/ChartRuntimeResolver.ts
|
|
11044
11096
|
var ChartRuntimeResolver = class _ChartRuntimeResolver {
|
|
11045
11097
|
static instance = null;
|
|
@@ -11185,6 +11237,7 @@ var ChartRuntimeResolver = class _ChartRuntimeResolver {
|
|
|
11185
11237
|
#capabilityWithOverride(name) {
|
|
11186
11238
|
const ceiling = this.lm.getCapabilities()[name];
|
|
11187
11239
|
if (!ceiling) return false;
|
|
11240
|
+
if (!packageAllows(this.#userPackageFeatures, name)) return false;
|
|
11188
11241
|
const explicit = this.lm.getFeatures()[name];
|
|
11189
11242
|
return explicit === void 0 ? true : explicit === true;
|
|
11190
11243
|
}
|
|
@@ -11410,10 +11463,44 @@ var ChartRuntimeResolver = class _ChartRuntimeResolver {
|
|
|
11410
11463
|
*/
|
|
11411
11464
|
#featureOrDefault(name, defaultValue) {
|
|
11412
11465
|
if (this.lm.isLockedDown()) return false;
|
|
11466
|
+
if (!packageAllows(this.#userPackageFeatures, name)) return false;
|
|
11413
11467
|
const features = this.lm.getFeatures();
|
|
11414
11468
|
const flag = features[name];
|
|
11415
11469
|
return flag === void 0 ? defaultValue : flag === true;
|
|
11416
11470
|
}
|
|
11471
|
+
// ── Per-user package gating ─────────────────────────────────────────────────
|
|
11472
|
+
/**
|
|
11473
|
+
* Capability flags from the signed-in user's Kit package, or null when none
|
|
11474
|
+
* has been loaded. Null is the default and means "licence only", so every
|
|
11475
|
+
* deployment predating package gating behaves exactly as it did.
|
|
11476
|
+
*/
|
|
11477
|
+
#userPackageFeatures = null;
|
|
11478
|
+
/**
|
|
11479
|
+
* Apply the user's Kit package to capability resolution.
|
|
11480
|
+
*
|
|
11481
|
+
* Pass the `features` map from `GET /api/packages/me` verbatim — snake_case
|
|
11482
|
+
* Kit keys are translated here. Pass null to clear (e.g. on sign-out), which
|
|
11483
|
+
* restores licence-only behaviour.
|
|
11484
|
+
*
|
|
11485
|
+
* This can only ever narrow: a package cannot grant a capability the
|
|
11486
|
+
* deployment licence withholds. Both resolvers below consult the licence
|
|
11487
|
+
* regardless of what the package says.
|
|
11488
|
+
*/
|
|
11489
|
+
setUserPackageFeatures(kitFlags) {
|
|
11490
|
+
this.#userPackageFeatures = kitFlags === null ? null : toCapabilityFlags(kitFlags);
|
|
11491
|
+
}
|
|
11492
|
+
/** The resolved capability flags from the user's package, for diagnostics. */
|
|
11493
|
+
getUserPackageFeatures() {
|
|
11494
|
+
return this.#userPackageFeatures;
|
|
11495
|
+
}
|
|
11496
|
+
/**
|
|
11497
|
+
* True when a package has been applied. Useful for telling "this user has no
|
|
11498
|
+
* package" apart from "package gating is not in use", which otherwise look
|
|
11499
|
+
* identical from the outside.
|
|
11500
|
+
*/
|
|
11501
|
+
hasUserPackage() {
|
|
11502
|
+
return this.#userPackageFeatures !== null;
|
|
11503
|
+
}
|
|
11417
11504
|
};
|
|
11418
11505
|
var resolver = () => ChartRuntimeResolver.getInstance();
|
|
11419
11506
|
var canUseExtendedDrawings = () => resolver().canUseExtendedDrawings();
|
|
@@ -18040,6 +18127,52 @@ function useHostLicense(apiUrl, getAuthToken) {
|
|
|
18040
18127
|
};
|
|
18041
18128
|
}, [apiUrl, getAuthToken]);
|
|
18042
18129
|
}
|
|
18130
|
+
function useUserPackage(apiUrl, getAuthToken) {
|
|
18131
|
+
useEffect(() => {
|
|
18132
|
+
const resolver3 = ChartRuntimeResolver.getInstance();
|
|
18133
|
+
if (!apiUrl || !getAuthToken) {
|
|
18134
|
+
resolver3.setUserPackageFeatures(null);
|
|
18135
|
+
return;
|
|
18136
|
+
}
|
|
18137
|
+
let cancelled = false;
|
|
18138
|
+
void (async () => {
|
|
18139
|
+
try {
|
|
18140
|
+
let token = "";
|
|
18141
|
+
try {
|
|
18142
|
+
token = await getAuthToken();
|
|
18143
|
+
} catch {
|
|
18144
|
+
if (!cancelled) resolver3.setUserPackageFeatures(null);
|
|
18145
|
+
return;
|
|
18146
|
+
}
|
|
18147
|
+
if (cancelled) return;
|
|
18148
|
+
if (!token) {
|
|
18149
|
+
resolver3.setUserPackageFeatures(null);
|
|
18150
|
+
return;
|
|
18151
|
+
}
|
|
18152
|
+
const res = await fetch(`${apiUrl.replace(/\/+$/, "")}/api/packages/me`, {
|
|
18153
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
18154
|
+
});
|
|
18155
|
+
if (cancelled) return;
|
|
18156
|
+
if (!res.ok) {
|
|
18157
|
+
resolver3.setUserPackageFeatures(null);
|
|
18158
|
+
return;
|
|
18159
|
+
}
|
|
18160
|
+
const data = await res.json();
|
|
18161
|
+
if (cancelled) return;
|
|
18162
|
+
if (!data.package) {
|
|
18163
|
+
resolver3.setUserPackageFeatures(null);
|
|
18164
|
+
return;
|
|
18165
|
+
}
|
|
18166
|
+
resolver3.setUserPackageFeatures(data.features ?? {});
|
|
18167
|
+
} catch {
|
|
18168
|
+
if (!cancelled) resolver3.setUserPackageFeatures(null);
|
|
18169
|
+
}
|
|
18170
|
+
})();
|
|
18171
|
+
return () => {
|
|
18172
|
+
cancelled = true;
|
|
18173
|
+
};
|
|
18174
|
+
}, [apiUrl, getAuthToken]);
|
|
18175
|
+
}
|
|
18043
18176
|
function LicenseRequiredOverlay({
|
|
18044
18177
|
reason,
|
|
18045
18178
|
onOpenLicenseSettings
|
|
@@ -22756,6 +22889,7 @@ var ChartCanvas = forwardRef(
|
|
|
22756
22889
|
const capabilities = useChartCapabilities();
|
|
22757
22890
|
const dataBlocked = useLicenseDataBlocked();
|
|
22758
22891
|
useHostLicense(apiUrl, getAuthToken);
|
|
22892
|
+
useUserPackage(apiUrl, getAuthToken);
|
|
22759
22893
|
const [indicators, setIndicators] = useState([]);
|
|
22760
22894
|
const [totalHeight, setTotalHeight] = useState(600);
|
|
22761
22895
|
const [activeTool, setActiveTool] = useState(initialActiveTool ?? "cursor");
|
|
@@ -26582,7 +26716,7 @@ function _guessFrontMonth(product, months) {
|
|
|
26582
26716
|
}
|
|
26583
26717
|
|
|
26584
26718
|
// src/version.ts
|
|
26585
|
-
var FORGECHARTS_VERSION = "1.5.
|
|
26719
|
+
var FORGECHARTS_VERSION = "1.5.38" ;
|
|
26586
26720
|
var TIMEZONE_OPTIONS = [
|
|
26587
26721
|
{ label: "UTC", value: "UTC" },
|
|
26588
26722
|
{ label: "Exchange", value: "exchange" },
|
|
@@ -31094,6 +31228,7 @@ function ChartWorkspace({
|
|
|
31094
31228
|
const capabilities = useChartCapabilities();
|
|
31095
31229
|
const dataBlocked = useLicenseDataBlocked();
|
|
31096
31230
|
useHostLicense(hostApiUrl, getAuthToken);
|
|
31231
|
+
useUserPackage(hostApiUrl, getAuthToken);
|
|
31097
31232
|
const autoTrading = tradingBridge !== void 0;
|
|
31098
31233
|
const [autoOrderEntryOpen, setAutoOrderEntryOpen] = React11.useState(false);
|
|
31099
31234
|
const [autoTradingPanelOpen, setAutoTradingPanelOpen] = React11.useState(false);
|
|
@@ -33351,6 +33486,6 @@ var CommandDispatcher = class {
|
|
|
33351
33486
|
}
|
|
33352
33487
|
};
|
|
33353
33488
|
|
|
33354
|
-
export { AgentFAB, AgentProvider, AssistantPanel, ChartCanvas, ChartWorkspace, CommandDispatcher, LicenseRequiredOverlay, OrderTicket, VoiceInput, createTradingBridgeLogger, useAgent, useChartCapabilities, useHostLicense, useLicenseDataBlocked };
|
|
33489
|
+
export { AgentFAB, AgentProvider, AssistantPanel, ChartCanvas, ChartWorkspace, CommandDispatcher, LicenseRequiredOverlay, OrderTicket, VoiceInput, createTradingBridgeLogger, useAgent, useChartCapabilities, useHostLicense, useLicenseDataBlocked, useUserPackage };
|
|
33355
33490
|
//# sourceMappingURL=index.js.map
|
|
33356
33491
|
//# sourceMappingURL=index.js.map
|