stormcloud-video-player 0.8.75 → 0.8.77
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/stormcloud-vp.min.js +1 -1
- package/lib/Player.cjs +10 -12
- package/lib/Player.cjs.map +1 -1
- package/lib/Player.d.cts +9 -1
- package/lib/StormcloudPlayer.cjs +173 -78
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +184 -133
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +9 -19
- package/lib/index.js +178 -131
- package/lib/index.js.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +45 -13
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +17 -3
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdConfigManager.d.cts +3 -0
- package/lib/player/EdgePodRequest.cjs +31 -1
- package/lib/player/EdgePodRequest.cjs.map +1 -1
- package/lib/player/EdgePodRequest.d.cts +21 -3
- package/lib/player/FloorLadder.cjs +86 -27
- package/lib/player/FloorLadder.cjs.map +1 -1
- package/lib/player/FloorLadder.d.cts +8 -7
- package/lib/player/StormcloudVideoPlayer.cjs +163 -78
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.d.cts +3 -9
- package/lib/players/HlsPlayer.cjs +169 -78
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +169 -78
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs +10 -12
- package/lib/props.cjs.map +1 -1
- package/lib/props.d.cts +5 -1
- package/lib/types.d.cts +3 -7
- package/lib/ui/StormcloudVideoPlayer.cjs +167 -139
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/tracking.cjs +7 -0
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/tracking.d.cts +2 -1
- package/package.json +1 -1
|
@@ -69,6 +69,9 @@ __export(EdgePodRequest_exports, {
|
|
|
69
69
|
},
|
|
70
70
|
resolveEdgePodBaseUrl: function resolveEdgePodBaseUrl1() {
|
|
71
71
|
return resolveEdgePodBaseUrl;
|
|
72
|
+
},
|
|
73
|
+
resolveEdgePodRequestContext: function resolveEdgePodRequestContext1() {
|
|
74
|
+
return resolveEdgePodRequestContext;
|
|
72
75
|
}
|
|
73
76
|
});
|
|
74
77
|
module.exports = __toCommonJS(EdgePodRequest_exports);
|
|
@@ -105,7 +108,23 @@ function resolveEdgePodBaseUrl(config) {
|
|
|
105
108
|
return void 0;
|
|
106
109
|
}
|
|
107
110
|
}
|
|
111
|
+
function resolveEdgePodRequestContext(config) {
|
|
112
|
+
var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
113
|
+
return {
|
|
114
|
+
width: extra.width,
|
|
115
|
+
height: extra.height,
|
|
116
|
+
playerId: extra.playerId,
|
|
117
|
+
contentNetwork: config.contentNetwork,
|
|
118
|
+
contentChannel: config.channelName,
|
|
119
|
+
contentTitle: config.programTitle
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function setOptionalParam(url, key, value) {
|
|
123
|
+
var trimmed = value === null || value === void 0 ? void 0 : value.trim();
|
|
124
|
+
if (trimmed) url.searchParams.set(key, trimmed);
|
|
125
|
+
}
|
|
108
126
|
function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
|
|
127
|
+
var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
|
|
109
128
|
var url = new URL(baseUrl);
|
|
110
129
|
var maxMs = Math.max(0, Math.floor(remainingMs));
|
|
111
130
|
var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
|
|
@@ -113,6 +132,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
|
|
|
113
132
|
url.searchParams.set("pmad", String(maxAds));
|
|
114
133
|
url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
|
|
115
134
|
url.searchParams.set("count", String(maxAds));
|
|
135
|
+
if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
|
|
136
|
+
url.searchParams.set("width", String(Math.round(context.width)));
|
|
137
|
+
}
|
|
138
|
+
if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
|
|
139
|
+
url.searchParams.set("height", String(Math.round(context.height)));
|
|
140
|
+
}
|
|
141
|
+
setOptionalParam(url, "pid", context.playerId);
|
|
142
|
+
setOptionalParam(url, "cn", context.contentNetwork);
|
|
143
|
+
setOptionalParam(url, "cc", context.contentChannel);
|
|
144
|
+
setOptionalParam(url, "ct", context.contentTitle);
|
|
116
145
|
return url.toString();
|
|
117
146
|
}
|
|
118
147
|
function classifyEdgeVastResponse(result) {
|
|
@@ -143,6 +172,7 @@ function describeEdgeUrl(url) {
|
|
|
143
172
|
buildEdgePodUrl: buildEdgePodUrl,
|
|
144
173
|
classifyEdgeVastResponse: classifyEdgeVastResponse,
|
|
145
174
|
describeEdgeUrl: describeEdgeUrl,
|
|
146
|
-
resolveEdgePodBaseUrl: resolveEdgePodBaseUrl
|
|
175
|
+
resolveEdgePodBaseUrl: resolveEdgePodBaseUrl,
|
|
176
|
+
resolveEdgePodRequestContext: resolveEdgePodRequestContext
|
|
147
177
|
});
|
|
148
178
|
//# sourceMappingURL=EdgePodRequest.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\EdgePodRequest.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","EdgePodRequest_exports","EDGE_POD_EXCEEDS_BUDGET","EDGE_POD_MAX_ADS","buildEdgePodUrl","classifyEdgeVastResponse","describeEdgeUrl","resolveEdgePodBaseUrl","module","exports","LICENSE_KEY_PLACEHOLDER","config","enableEdgePodRequest","raw","edgePodUrl","trim","console","warn","licenseKey","encodedKey","encodeURIComponent","hasPlaceholder","search","url","URL","replace","protocol","Error","path","pathname","test","toString","baseUrl","remainingMs","remainingAdLimit","maxMs","Math","max","floor","maxAds","min","searchParams","set","String","result","error","podAdCount","message","includes","parsed","origin","split"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/EdgePodRequest.ts\nvar EdgePodRequest_exports = {};\n__export(EdgePodRequest_exports, {\n EDGE_POD_EXCEEDS_BUDGET: () => EDGE_POD_EXCEEDS_BUDGET,\n EDGE_POD_MAX_ADS: () => EDGE_POD_MAX_ADS,\n buildEdgePodUrl: () => buildEdgePodUrl,\n classifyEdgeVastResponse: () => classifyEdgeVastResponse,\n describeEdgeUrl: () => describeEdgeUrl,\n resolveEdgePodBaseUrl: () => resolveEdgePodBaseUrl\n});\nmodule.exports = __toCommonJS(EdgePodRequest_exports);\nvar EDGE_POD_MAX_ADS = 10;\nvar EDGE_POD_EXCEEDS_BUDGET = \"edge_pod_exceeds_budget\";\nvar LICENSE_KEY_PLACEHOLDER = /\\{licenseKey\\}|%7BlicenseKey%7D/gi;\nfunction resolveEdgePodBaseUrl(config) {\n if (config.enableEdgePodRequest !== true) return void 0;\n const raw = config.edgePodUrl?.trim();\n if (!raw) {\n console.warn(\n \"[AdBreak][EDGE] enableEdgePodRequest is true but edgePodUrl is missing; using GAM only\"\n );\n return void 0;\n }\n const licenseKey = config.licenseKey?.trim();\n if (!licenseKey) {\n console.warn(\n \"[AdBreak][EDGE] enableEdgePodRequest is true but licenseKey is missing; using GAM only\"\n );\n return void 0;\n }\n const encodedKey = encodeURIComponent(licenseKey);\n try {\n const hasPlaceholder = raw.search(LICENSE_KEY_PLACEHOLDER) !== -1;\n const url = new URL(hasPlaceholder ? raw.replace(LICENSE_KEY_PLACEHOLDER, encodedKey) : raw);\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`unsupported protocol ${url.protocol}`);\n }\n if (!hasPlaceholder) {\n const path = url.pathname.replace(/\\/+$/, \"\");\n url.pathname = /\\/[^/]+\\/pod$/.test(path) ? path.replace(/\\/[^/]+\\/pod$/, `/${encodedKey}/pod`) : `${path}/${encodedKey}/pod`;\n }\n return url.toString();\n } catch {\n console.warn(\"[AdBreak][EDGE] edgePodUrl is not a valid http(s) URL; using GAM only\");\n return void 0;\n }\n}\nfunction buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {\n const url = new URL(baseUrl);\n const maxMs = Math.max(0, Math.floor(remainingMs));\n const maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));\n url.searchParams.set(\"pmxd\", String(maxMs));\n url.searchParams.set(\"pmad\", String(maxAds));\n url.searchParams.set(\"duration\", String(Math.floor(maxMs / 1e3)));\n url.searchParams.set(\"count\", String(maxAds));\n return url.toString();\n}\nfunction classifyEdgeVastResponse(result) {\n if (result.error == null) {\n return result.podAdCount > 0 ? \"fill\" : \"no_fill\";\n }\n const message = result.error?.message ?? String(result.error);\n if (/no ads available|fill rejected|no media file|no ad loaded/i.test(message) || message.includes(EDGE_POD_EXCEEDS_BUDGET)) {\n return \"no_fill\";\n }\n return \"invalid\";\n}\nfunction describeEdgeUrl(url) {\n try {\n const parsed = new URL(url);\n return `${parsed.origin}${parsed.pathname}`;\n } catch {\n return url.split(\"?\")[0] ?? \"\";\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n EDGE_POD_EXCEEDS_BUDGET,\n EDGE_POD_MAX_ADS,\n buildEdgePodUrl,\n classifyEdgeVastResponse,\n describeEdgeUrl,\n resolveEdgePodBaseUrl\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\EdgePodRequest.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","EdgePodRequest_exports","EDGE_POD_EXCEEDS_BUDGET","EDGE_POD_MAX_ADS","buildEdgePodUrl","classifyEdgeVastResponse","describeEdgeUrl","resolveEdgePodBaseUrl","resolveEdgePodRequestContext","module","exports","LICENSE_KEY_PLACEHOLDER","config","enableEdgePodRequest","raw","edgePodUrl","trim","console","warn","licenseKey","encodedKey","encodeURIComponent","hasPlaceholder","search","url","URL","replace","protocol","Error","path","pathname","test","toString","extra","width","height","playerId","contentNetwork","contentChannel","channelName","contentTitle","programTitle","setOptionalParam","trimmed","searchParams","set","baseUrl","remainingMs","remainingAdLimit","context","maxMs","Math","max","floor","maxAds","min","String","Number","isFinite","round","result","error","podAdCount","message","includes","parsed","origin","split"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/EdgePodRequest.ts\nvar EdgePodRequest_exports = {};\n__export(EdgePodRequest_exports, {\n EDGE_POD_EXCEEDS_BUDGET: () => EDGE_POD_EXCEEDS_BUDGET,\n EDGE_POD_MAX_ADS: () => EDGE_POD_MAX_ADS,\n buildEdgePodUrl: () => buildEdgePodUrl,\n classifyEdgeVastResponse: () => classifyEdgeVastResponse,\n describeEdgeUrl: () => describeEdgeUrl,\n resolveEdgePodBaseUrl: () => resolveEdgePodBaseUrl,\n resolveEdgePodRequestContext: () => resolveEdgePodRequestContext\n});\nmodule.exports = __toCommonJS(EdgePodRequest_exports);\nvar EDGE_POD_MAX_ADS = 10;\nvar EDGE_POD_EXCEEDS_BUDGET = \"edge_pod_exceeds_budget\";\nvar LICENSE_KEY_PLACEHOLDER = /\\{licenseKey\\}|%7BlicenseKey%7D/gi;\nfunction resolveEdgePodBaseUrl(config) {\n if (config.enableEdgePodRequest !== true) return void 0;\n const raw = config.edgePodUrl?.trim();\n if (!raw) {\n console.warn(\n \"[AdBreak][EDGE] enableEdgePodRequest is true but edgePodUrl is missing; using GAM only\"\n );\n return void 0;\n }\n const licenseKey = config.licenseKey?.trim();\n if (!licenseKey) {\n console.warn(\n \"[AdBreak][EDGE] enableEdgePodRequest is true but licenseKey is missing; using GAM only\"\n );\n return void 0;\n }\n const encodedKey = encodeURIComponent(licenseKey);\n try {\n const hasPlaceholder = raw.search(LICENSE_KEY_PLACEHOLDER) !== -1;\n const url = new URL(hasPlaceholder ? raw.replace(LICENSE_KEY_PLACEHOLDER, encodedKey) : raw);\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(`unsupported protocol ${url.protocol}`);\n }\n if (!hasPlaceholder) {\n const path = url.pathname.replace(/\\/+$/, \"\");\n url.pathname = /\\/[^/]+\\/pod$/.test(path) ? path.replace(/\\/[^/]+\\/pod$/, `/${encodedKey}/pod`) : `${path}/${encodedKey}/pod`;\n }\n return url.toString();\n } catch {\n console.warn(\"[AdBreak][EDGE] edgePodUrl is not a valid http(s) URL; using GAM only\");\n return void 0;\n }\n}\nfunction resolveEdgePodRequestContext(config, extra = {}) {\n return {\n width: extra.width,\n height: extra.height,\n playerId: extra.playerId,\n contentNetwork: config.contentNetwork,\n contentChannel: config.channelName,\n contentTitle: config.programTitle\n };\n}\nfunction setOptionalParam(url, key, value) {\n const trimmed = value?.trim();\n if (trimmed) url.searchParams.set(key, trimmed);\n}\nfunction buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit, context = {}) {\n const url = new URL(baseUrl);\n const maxMs = Math.max(0, Math.floor(remainingMs));\n const maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));\n url.searchParams.set(\"pmxd\", String(maxMs));\n url.searchParams.set(\"pmad\", String(maxAds));\n url.searchParams.set(\"duration\", String(Math.floor(maxMs / 1e3)));\n url.searchParams.set(\"count\", String(maxAds));\n if (context.width != null && Number.isFinite(context.width) && context.width > 0) {\n url.searchParams.set(\"width\", String(Math.round(context.width)));\n }\n if (context.height != null && Number.isFinite(context.height) && context.height > 0) {\n url.searchParams.set(\"height\", String(Math.round(context.height)));\n }\n setOptionalParam(url, \"pid\", context.playerId);\n setOptionalParam(url, \"cn\", context.contentNetwork);\n setOptionalParam(url, \"cc\", context.contentChannel);\n setOptionalParam(url, \"ct\", context.contentTitle);\n return url.toString();\n}\nfunction classifyEdgeVastResponse(result) {\n if (result.error == null) {\n return result.podAdCount > 0 ? \"fill\" : \"no_fill\";\n }\n const message = result.error?.message ?? String(result.error);\n if (/no ads available|fill rejected|no media file|no ad loaded/i.test(message) || message.includes(EDGE_POD_EXCEEDS_BUDGET)) {\n return \"no_fill\";\n }\n return \"invalid\";\n}\nfunction describeEdgeUrl(url) {\n try {\n const parsed = new URL(url);\n return `${parsed.origin}${parsed.pathname}`;\n } catch {\n return url.split(\"?\")[0] ?? \"\";\n }\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n EDGE_POD_EXCEEDS_BUDGET,\n EDGE_POD_MAX_ADS,\n buildEdgePodUrl,\n classifyEdgeVastResponse,\n describeEdgeUrl,\n resolveEdgePodBaseUrl,\n resolveEdgePodRequestContext\n});\n"]}
|
|
@@ -4,12 +4,30 @@ import './OptimizedPodRequest.cjs';
|
|
|
4
4
|
declare const EDGE_POD_MAX_ADS = 10;
|
|
5
5
|
type EdgePodClassification = "fill" | "no_fill" | "invalid";
|
|
6
6
|
declare const EDGE_POD_EXCEEDS_BUDGET = "edge_pod_exceeds_budget";
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
interface EdgePodSettings {
|
|
8
|
+
enableEdgePodRequest?: boolean | undefined;
|
|
9
|
+
edgePodUrl?: string | undefined;
|
|
10
|
+
licenseKey?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
declare function resolveEdgePodBaseUrl(config: EdgePodSettings): string | undefined;
|
|
13
|
+
interface EdgePodRequestContext {
|
|
14
|
+
width?: number | undefined;
|
|
15
|
+
height?: number | undefined;
|
|
16
|
+
playerId?: string | undefined;
|
|
17
|
+
contentNetwork?: string | undefined;
|
|
18
|
+
contentChannel?: string | undefined;
|
|
19
|
+
contentTitle?: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
declare function resolveEdgePodRequestContext(config: Pick<StormcloudVideoPlayerConfig, "contentNetwork" | "channelName" | "programTitle">, extra?: {
|
|
22
|
+
width?: number | undefined;
|
|
23
|
+
height?: number | undefined;
|
|
24
|
+
playerId?: string | undefined;
|
|
25
|
+
}): EdgePodRequestContext;
|
|
26
|
+
declare function buildEdgePodUrl(baseUrl: string, remainingMs: number, remainingAdLimit: number, context?: EdgePodRequestContext): string;
|
|
9
27
|
declare function classifyEdgeVastResponse(result: {
|
|
10
28
|
podAdCount: number;
|
|
11
29
|
error?: unknown;
|
|
12
30
|
}): EdgePodClassification;
|
|
13
31
|
declare function describeEdgeUrl(url: string): string;
|
|
14
32
|
|
|
15
|
-
export { EDGE_POD_EXCEEDS_BUDGET, EDGE_POD_MAX_ADS, type EdgePodClassification, buildEdgePodUrl, classifyEdgeVastResponse, describeEdgeUrl, resolveEdgePodBaseUrl };
|
|
33
|
+
export { EDGE_POD_EXCEEDS_BUDGET, EDGE_POD_MAX_ADS, type EdgePodClassification, type EdgePodRequestContext, type EdgePodSettings, buildEdgePodUrl, classifyEdgeVastResponse, describeEdgeUrl, resolveEdgePodBaseUrl, resolveEdgePodRequestContext };
|
|
@@ -121,8 +121,8 @@ __export(FloorLadder_exports, {
|
|
|
121
121
|
DEFAULT_FLOOR_LADDER_BOUNDS: function DEFAULT_FLOOR_LADDER_BOUNDS1() {
|
|
122
122
|
return DEFAULT_FLOOR_LADDER_BOUNDS;
|
|
123
123
|
},
|
|
124
|
-
|
|
125
|
-
return
|
|
124
|
+
DISABLED_FLOOR_LADDER_CONFIG: function DISABLED_FLOOR_LADDER_CONFIG1() {
|
|
125
|
+
return DISABLED_FLOOR_LADDER_CONFIG;
|
|
126
126
|
},
|
|
127
127
|
FloorLadderController: function FloorLadderController1() {
|
|
128
128
|
return FloorLadderController;
|
|
@@ -136,6 +136,9 @@ __export(FloorLadder_exports, {
|
|
|
136
136
|
generateFloorLevels: function generateFloorLevels1() {
|
|
137
137
|
return generateFloorLevels;
|
|
138
138
|
},
|
|
139
|
+
parseApiFloorLadder: function parseApiFloorLadder1() {
|
|
140
|
+
return parseApiFloorLadder;
|
|
141
|
+
},
|
|
139
142
|
resolveFloorLadderBounds: function resolveFloorLadderBounds1() {
|
|
140
143
|
return resolveFloorLadderBounds;
|
|
141
144
|
},
|
|
@@ -184,21 +187,19 @@ var GAM_AD_HOSTS = /* @__PURE__ */ new Set([
|
|
|
184
187
|
"securepubads.g.doubleclick.net"
|
|
185
188
|
]);
|
|
186
189
|
// src/player/FloorLadder.ts
|
|
187
|
-
var
|
|
190
|
+
var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
|
|
188
191
|
enabled: false,
|
|
189
|
-
targetingKey: "
|
|
190
|
-
minFloorCents:
|
|
191
|
-
maxFloorCents:
|
|
192
|
-
stepCents:
|
|
193
|
-
selectedFloorCents:
|
|
194
|
-
fallbackFloorCents:
|
|
192
|
+
targetingKey: "",
|
|
193
|
+
minFloorCents: 0,
|
|
194
|
+
maxFloorCents: 0,
|
|
195
|
+
stepCents: 0,
|
|
196
|
+
selectedFloorCents: 0,
|
|
197
|
+
fallbackFloorCents: 0,
|
|
195
198
|
readyFloorCents: [],
|
|
196
199
|
mode: "fixed",
|
|
197
|
-
allowedPositions: [
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
|
|
201
|
-
configurationVersion: "2026-09-29.1"
|
|
200
|
+
allowedPositions: [],
|
|
201
|
+
targetAdUnitPath: "",
|
|
202
|
+
configurationVersion: ""
|
|
202
203
|
});
|
|
203
204
|
var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
|
|
204
205
|
minCents: 25,
|
|
@@ -357,7 +358,6 @@ function resolveOpportunityFloor(config, context) {
|
|
|
357
358
|
if (!config.enabled) return skipped("disabled");
|
|
358
359
|
var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
|
|
359
360
|
if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
|
|
360
|
-
if (context.isCtv) return skipped("ctv_excluded");
|
|
361
361
|
if (!config.targetingKey) return skipped("missing_targeting_key");
|
|
362
362
|
if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
|
|
363
363
|
var result;
|
|
@@ -511,15 +511,80 @@ function mergeDefined(target, update) {
|
|
|
511
511
|
}
|
|
512
512
|
return copyConfig(next);
|
|
513
513
|
}
|
|
514
|
+
var AD_POSITIONS = [
|
|
515
|
+
"preroll",
|
|
516
|
+
"midroll",
|
|
517
|
+
"postroll"
|
|
518
|
+
];
|
|
519
|
+
function finiteNumber(value) {
|
|
520
|
+
return typeof value === "number" && isFinite(value) ? value : void 0;
|
|
521
|
+
}
|
|
522
|
+
function parseApiFloorLadder(raw) {
|
|
523
|
+
if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
|
|
524
|
+
var src = raw;
|
|
525
|
+
var out = {};
|
|
526
|
+
if (typeof src.enabled === "boolean") out.enabled = src.enabled;
|
|
527
|
+
if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
|
|
528
|
+
if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
|
|
529
|
+
if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
|
|
530
|
+
if (typeof src.mode === "string") out.mode = src.mode;
|
|
531
|
+
var min = finiteNumber(src.minFloorCents);
|
|
532
|
+
var max = finiteNumber(src.maxFloorCents);
|
|
533
|
+
var step = finiteNumber(src.stepCents);
|
|
534
|
+
var selected = finiteNumber(src.selectedFloorCents);
|
|
535
|
+
var fallback = finiteNumber(src.fallbackFloorCents);
|
|
536
|
+
if (min !== void 0) out.minFloorCents = min;
|
|
537
|
+
if (max !== void 0) out.maxFloorCents = max;
|
|
538
|
+
if (step !== void 0) out.stepCents = step;
|
|
539
|
+
if (selected !== void 0) out.selectedFloorCents = selected;
|
|
540
|
+
if (fallback !== void 0) out.fallbackFloorCents = fallback;
|
|
541
|
+
if (Array.isArray(src.readyFloorCents)) {
|
|
542
|
+
out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
|
|
543
|
+
return finiteNumber(cents) !== void 0;
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
if (Array.isArray(src.allowedPositions)) {
|
|
547
|
+
out.allowedPositions = src.allowedPositions.filter(function(position) {
|
|
548
|
+
return AD_POSITIONS.indexOf(position) !== -1;
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
return out;
|
|
552
|
+
}
|
|
514
553
|
var FloorLadderController = /*#__PURE__*/ function() {
|
|
515
|
-
function FloorLadderController(
|
|
516
|
-
var selector = arguments.length >
|
|
554
|
+
function FloorLadderController() {
|
|
555
|
+
var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
|
|
517
556
|
_class_call_check(this, FloorLadderController);
|
|
518
|
-
this.
|
|
519
|
-
this.
|
|
557
|
+
this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
|
|
558
|
+
this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
|
|
520
559
|
this.selector = selector;
|
|
521
560
|
}
|
|
522
561
|
_create_class(FloorLadderController, [
|
|
562
|
+
{
|
|
563
|
+
key: "isEnabled",
|
|
564
|
+
value: function isEnabled() {
|
|
565
|
+
return this.config.enabled === true;
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
key: "applyApiConfig",
|
|
570
|
+
value: function applyApiConfig(raw) {
|
|
571
|
+
var parsed = parseApiFloorLadder(raw);
|
|
572
|
+
this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
|
|
573
|
+
this.bounds = Object.freeze({
|
|
574
|
+
minCents: this.config.minFloorCents,
|
|
575
|
+
maxCents: this.config.maxFloorCents,
|
|
576
|
+
stepCents: this.config.stepCents
|
|
577
|
+
});
|
|
578
|
+
return validateFloorLadderConfig(this.config, this.bounds);
|
|
579
|
+
}
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
key: "reset",
|
|
583
|
+
value: function reset() {
|
|
584
|
+
this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
|
|
585
|
+
this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
|
|
586
|
+
}
|
|
587
|
+
},
|
|
523
588
|
{
|
|
524
589
|
key: "get",
|
|
525
590
|
value: function get() {
|
|
@@ -532,13 +597,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
|
|
|
532
597
|
return _object_spread({}, this.bounds);
|
|
533
598
|
}
|
|
534
599
|
},
|
|
535
|
-
{
|
|
536
|
-
key: "update",
|
|
537
|
-
value: function update(update) {
|
|
538
|
-
this.config = mergeDefined(this.config, update);
|
|
539
|
-
return validateFloorLadderConfig(this.config, this.bounds);
|
|
540
|
-
}
|
|
541
|
-
},
|
|
542
600
|
{
|
|
543
601
|
key: "validate",
|
|
544
602
|
value: function validate() {
|
|
@@ -565,11 +623,12 @@ var FloorLadderController = /*#__PURE__*/ function() {
|
|
|
565
623
|
// Annotate the CommonJS export names for ESM import in node:
|
|
566
624
|
0 && (module.exports = {
|
|
567
625
|
DEFAULT_FLOOR_LADDER_BOUNDS: DEFAULT_FLOOR_LADDER_BOUNDS,
|
|
568
|
-
|
|
626
|
+
DISABLED_FLOOR_LADDER_CONFIG: DISABLED_FLOOR_LADDER_CONFIG,
|
|
569
627
|
FloorLadderController: FloorLadderController,
|
|
570
628
|
applyFloorToVastUrl: applyFloorToVastUrl,
|
|
571
629
|
fixedFloorSelector: fixedFloorSelector,
|
|
572
630
|
generateFloorLevels: generateFloorLevels,
|
|
631
|
+
parseApiFloorLadder: parseApiFloorLadder,
|
|
573
632
|
resolveFloorLadderBounds: resolveFloorLadderBounds,
|
|
574
633
|
resolveOpportunityFloor: resolveOpportunityFloor,
|
|
575
634
|
validateFloorCents: validateFloorCents,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\FloorLadder.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","FloorLadder_exports","DEFAULT_FLOOR_LADDER_BOUNDS","DEFAULT_WEB_FLOOR_LADDER_CONFIG","FloorLadderController","applyFloorToVastUrl","fixedFloorSelector","generateFloorLevels","resolveFloorLadderBounds","resolveOpportunityFloor","validateFloorCents","validateFloorLadderConfig","module","exports","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","GAM_AD_HOSTS","Set","freeze","enabled","targetingKey","minFloorCents","maxFloorCents","stepCents","selectedFloorCents","fallbackFloorCents","readyFloorCents","mode","allowedPositions","targetAdUnitPath","configurationVersion","minCents","maxCents","isInteger","Number","levels","cents","push","overrides","config","bounds","ok","reason","gamLevels","configLevels","indexOf","ready","Array","isArray","errors","length","filter","String","check","selected","fallback","select","context","source","floorCents","selector","result","base","position","skipped","status","positions","isCtv","decodeQueryComponent","decodeURIComponent","replace","mergeCustParams","decoded","prefix","kept","split","pair","join","url","floor","applied","parsed","URL","has","hostname","searchParams","hashIndex","beforeHash","slice","hash","queryIndex","segments","existing","insertAt","rest","segment","eq","rawKey","merged","splice","encodeURIComponent","query","copyConfig","mergeDefined","update","next","keys","initial","getBounds","validate","setSelector","snapshotFor"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/FloorLadder.ts\nvar FloorLadder_exports = {};\n__export(FloorLadder_exports, {\n DEFAULT_FLOOR_LADDER_BOUNDS: () => DEFAULT_FLOOR_LADDER_BOUNDS,\n DEFAULT_WEB_FLOOR_LADDER_CONFIG: () => DEFAULT_WEB_FLOOR_LADDER_CONFIG,\n FloorLadderController: () => FloorLadderController,\n applyFloorToVastUrl: () => applyFloorToVastUrl,\n fixedFloorSelector: () => fixedFloorSelector,\n generateFloorLevels: () => generateFloorLevels,\n resolveFloorLadderBounds: () => resolveFloorLadderBounds,\n resolveOpportunityFloor: () => resolveOpportunityFloor,\n validateFloorCents: () => validateFloorCents,\n validateFloorLadderConfig: () => validateFloorLadderConfig\n});\nmodule.exports = __toCommonJS(FloorLadder_exports);\n\n// src/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/utils/vastMacros.ts\nvar GAM_AD_HOSTS = /* @__PURE__ */ new Set([\n \"pubads.g.doubleclick.net\",\n \"securepubads.g.doubleclick.net\"\n]);\n\n// src/player/FloorLadder.ts\nvar DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({\n enabled: false,\n targetingKey: \"airytv_web_floor\",\n minFloorCents: 25,\n maxFloorCents: 300,\n stepCents: 25,\n selectedFloorCents: 25,\n fallbackFloorCents: 25,\n readyFloorCents: [],\n mode: \"fixed\",\n allowedPositions: [\"midroll\"],\n targetAdUnitPath: \"/21821455290/airytvadx/airytv-web\",\n configurationVersion: \"2026-09-29.1\"\n});\nvar DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({\n minCents: 25,\n maxCents: 300,\n stepCents: 25\n});\nfunction isInteger(value) {\n return typeof value === \"number\" && Number.isInteger(value);\n}\nfunction generateFloorLevels(minCents, maxCents, stepCents) {\n if (!isInteger(minCents) || !isInteger(maxCents) || !isInteger(stepCents)) return [];\n if (stepCents <= 0 || minCents <= 0 || maxCents < minCents) return [];\n const levels = [];\n for (let cents = minCents; cents <= maxCents; cents += stepCents) {\n levels.push(cents);\n }\n return levels;\n}\nfunction resolveFloorLadderBounds(overrides = {}) {\n return {\n minCents: overrides.minCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.minCents,\n maxCents: overrides.maxCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.maxCents,\n stepCents: overrides.stepCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.stepCents\n };\n}\nfunction validateFloorCents(value, config, bounds = DEFAULT_FLOOR_LADDER_BOUNDS) {\n if (!isInteger(value)) return { ok: false, reason: \"not_integer\" };\n if (!(value >= bounds.minCents && value <= bounds.maxCents) || !(value >= config.minFloorCents && value <= config.maxFloorCents)) {\n return { ok: false, reason: \"out_of_range\" };\n }\n const gamLevels = generateFloorLevels(bounds.minCents, bounds.maxCents, bounds.stepCents);\n const configLevels = generateFloorLevels(config.minFloorCents, config.maxFloorCents, config.stepCents);\n if (gamLevels.indexOf(value) === -1 || configLevels.indexOf(value) === -1) {\n return { ok: false, reason: \"not_step_multiple\" };\n }\n const ready = Array.isArray(config.readyFloorCents) ? config.readyFloorCents : [];\n if (ready.indexOf(value) === -1) return { ok: false, reason: \"not_ready\" };\n return { ok: true };\n}\nfunction validateFloorLadderConfig(config, bounds = DEFAULT_FLOOR_LADDER_BOUNDS) {\n const errors = [];\n if (generateFloorLevels(bounds.minCents, bounds.maxCents, bounds.stepCents).length === 0) {\n errors.push(\"invalid_gam_bounds\");\n }\n const levels = generateFloorLevels(config.minFloorCents, config.maxFloorCents, config.stepCents).filter((cents) => validateFloorCents(cents, { ...config, readyFloorCents: [cents] }, bounds).ok);\n if (levels.length === 0) errors.push(\"invalid_level_bounds\");\n if (config.minFloorCents < bounds.minCents || config.maxFloorCents > bounds.maxCents) {\n errors.push(\"level_bounds_outside_gam_ladder\");\n }\n if (!config.targetingKey) errors.push(\"missing_targeting_key\");\n if (config.mode !== \"fixed\") errors.push(`unsupported_mode:${String(config.mode)}`);\n if (!Array.isArray(config.readyFloorCents)) {\n errors.push(\"ready_floor_cents_not_array\");\n } else {\n for (const cents of config.readyFloorCents) {\n const check = validateFloorCents(cents, config, bounds);\n if (!check.ok) errors.push(`ready_floor_invalid:${String(cents)}:${check.reason}`);\n }\n }\n const selected = validateFloorCents(config.selectedFloorCents, config, bounds);\n if (!selected.ok) errors.push(`selected_floor_invalid:${selected.reason}`);\n const fallback = validateFloorCents(config.fallbackFloorCents, config, bounds);\n if (!fallback.ok) errors.push(`fallback_floor_invalid:${fallback.reason}`);\n return { ok: errors.length === 0, levels, errors };\n}\nvar fixedFloorSelector = {\n name: \"fixed\",\n select(config, context) {\n if (config.mode !== \"fixed\") return { source: \"none\", reason: \"unsupported_mode\" };\n const selected = validateFloorCents(config.selectedFloorCents, config, context.bounds);\n if (selected.ok) return { floorCents: config.selectedFloorCents, source: \"selected\" };\n const fallback = validateFloorCents(config.fallbackFloorCents, config, context.bounds);\n if (fallback.ok) {\n return {\n floorCents: config.fallbackFloorCents,\n source: \"fallback\",\n reason: `selected_${selected.reason}`\n };\n }\n return {\n source: \"none\",\n reason: `no_valid_floor:selected_${selected.reason}:fallback_${fallback.reason}`\n };\n }\n};\nfunction resolveOpportunityFloor(config, context, selector = fixedFloorSelector) {\n const base = {\n selector: selector.name,\n position: context.position,\n configurationVersion: String(config.configurationVersion ?? \"\"),\n targetingKey: config.targetingKey,\n targetAdUnitPath: config.targetAdUnitPath\n };\n const skipped = (reason, source = \"none\") => Object.freeze({ ...base, status: \"skipped\", floorCents: void 0, source, reason });\n if (!config.enabled) return skipped(\"disabled\");\n const positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];\n if (positions.indexOf(context.position) === -1) return skipped(\"position_not_allowed\");\n if (context.isCtv) return skipped(\"ctv_excluded\");\n if (!config.targetingKey) return skipped(\"missing_targeting_key\");\n if (!config.targetAdUnitPath) return skipped(\"missing_target_ad_unit\");\n let result;\n try {\n result = selector.select(config, context);\n } catch {\n return skipped(\"selector_error\");\n }\n if (result.floorCents == null) return skipped(result.reason ?? \"no_valid_floor\", result.source);\n const check = validateFloorCents(result.floorCents, config, context.bounds);\n if (!check.ok) return skipped(`selector_floor_${check.reason}`);\n return Object.freeze({\n ...base,\n status: \"armed\",\n floorCents: result.floorCents,\n source: result.source,\n reason: result.reason\n });\n}\nfunction decodeQueryComponent(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return void 0;\n }\n}\nfunction mergeCustParams(decoded, key, cents) {\n const prefix = `${key}=`;\n const kept = decoded.split(\"&\").filter((pair) => pair !== \"\" && pair !== key && pair.indexOf(prefix) !== 0);\n kept.push(`${prefix}${cents}`);\n return kept.join(\"&\");\n}\nfunction applyFloorToVastUrl(url, floor) {\n if (floor.status !== \"armed\" || floor.floorCents == null) {\n return { url, applied: false, reason: floor.reason };\n }\n let parsed;\n try {\n parsed = new URL(url);\n } catch {\n return { url, applied: false, reason: \"invalid_url\" };\n }\n if (!GAM_AD_HOSTS.has(parsed.hostname)) {\n return { url, applied: false, reason: \"not_gam_host\" };\n }\n if (parsed.searchParams.get(\"iu\") !== floor.targetAdUnitPath) {\n return { url, applied: false, reason: \"ad_unit_mismatch\" };\n }\n const hashIndex = url.indexOf(\"#\");\n const beforeHash = hashIndex === -1 ? url : url.slice(0, hashIndex);\n const hash = hashIndex === -1 ? \"\" : url.slice(hashIndex);\n const queryIndex = beforeHash.indexOf(\"?\");\n const base = beforeHash.slice(0, queryIndex);\n const segments = beforeHash.slice(queryIndex + 1).split(\"&\");\n const existing = [];\n let insertAt = -1;\n const rest = [];\n for (const segment of segments) {\n const eq = segment.indexOf(\"=\");\n const rawKey = eq === -1 ? segment : segment.slice(0, eq);\n if (decodeQueryComponent(rawKey) === \"cust_params\") {\n if (insertAt === -1) insertAt = rest.length;\n const value = eq === -1 ? \"\" : decodeQueryComponent(segment.slice(eq + 1));\n if (value === void 0) {\n return { url, applied: false, reason: \"malformed_cust_params\" };\n }\n if (value) existing.push(value);\n continue;\n }\n rest.push(segment);\n }\n if (insertAt === -1) insertAt = rest.length;\n const merged = mergeCustParams(existing.join(\"&\"), floor.targetingKey, floor.floorCents);\n rest.splice(insertAt, 0, `cust_params=${encodeURIComponent(merged)}`);\n const query = rest.filter((segment) => segment !== \"\").join(\"&\");\n return { url: `${base}?${query}${hash}`, applied: true, reason: void 0 };\n}\nfunction copyConfig(config) {\n return {\n ...config,\n readyFloorCents: Array.isArray(config.readyFloorCents) ? config.readyFloorCents.slice() : [],\n allowedPositions: Array.isArray(config.allowedPositions) ? config.allowedPositions.slice() : []\n };\n}\nfunction mergeDefined(target, update) {\n const next = copyConfig(target);\n if (!update) return next;\n for (const key of Object.keys(update)) {\n const value = update[key];\n if (value !== void 0) next[key] = value;\n }\n return copyConfig(next);\n}\nvar FloorLadderController = class {\n constructor(initial, bounds, selector = fixedFloorSelector) {\n this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);\n this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));\n this.selector = selector;\n }\n get() {\n return copyConfig(this.config);\n }\n getBounds() {\n return { ...this.bounds };\n }\n update(update) {\n this.config = mergeDefined(this.config, update);\n return validateFloorLadderConfig(this.config, this.bounds);\n }\n validate() {\n return validateFloorLadderConfig(this.config, this.bounds);\n }\n setSelector(selector) {\n this.selector = selector;\n }\n snapshotFor(context) {\n return resolveOpportunityFloor(\n copyConfig(this.config),\n { ...context, bounds: this.bounds },\n this.selector\n );\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n DEFAULT_FLOOR_LADDER_BOUNDS,\n DEFAULT_WEB_FLOOR_LADDER_CONFIG,\n FloorLadderController,\n applyFloorToVastUrl,\n fixedFloorSelector,\n generateFloorLevels,\n resolveFloorLadderBounds,\n resolveOpportunityFloor,\n validateFloorCents,\n validateFloorLadderConfig\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\FloorLadder.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","FloorLadder_exports","DEFAULT_FLOOR_LADDER_BOUNDS","DISABLED_FLOOR_LADDER_CONFIG","FloorLadderController","applyFloorToVastUrl","fixedFloorSelector","generateFloorLevels","parseApiFloorLadder","resolveFloorLadderBounds","resolveOpportunityFloor","validateFloorCents","validateFloorLadderConfig","module","exports","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","GAM_AD_HOSTS","Set","freeze","enabled","targetingKey","minFloorCents","maxFloorCents","stepCents","selectedFloorCents","fallbackFloorCents","readyFloorCents","mode","allowedPositions","targetAdUnitPath","configurationVersion","minCents","maxCents","isInteger","Number","levels","cents","push","overrides","config","bounds","ok","reason","gamLevels","configLevels","indexOf","ready","Array","isArray","errors","length","filter","String","check","selected","fallback","select","context","source","floorCents","selector","result","base","position","skipped","status","positions","decodeQueryComponent","decodeURIComponent","replace","mergeCustParams","decoded","prefix","kept","split","pair","join","url","floor","applied","parsed","URL","has","hostname","searchParams","hashIndex","beforeHash","slice","hash","queryIndex","segments","existing","insertAt","rest","segment","eq","rawKey","merged","splice","encodeURIComponent","query","copyConfig","mergeDefined","update","next","keys","AD_POSITIONS","finiteNumber","isFinite","raw","src","out","min","max","step","isEnabled","applyApiConfig","reset","getBounds","validate","setSelector","snapshotFor"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/FloorLadder.ts\nvar FloorLadder_exports = {};\n__export(FloorLadder_exports, {\n DEFAULT_FLOOR_LADDER_BOUNDS: () => DEFAULT_FLOOR_LADDER_BOUNDS,\n DISABLED_FLOOR_LADDER_CONFIG: () => DISABLED_FLOOR_LADDER_CONFIG,\n FloorLadderController: () => FloorLadderController,\n applyFloorToVastUrl: () => applyFloorToVastUrl,\n fixedFloorSelector: () => fixedFloorSelector,\n generateFloorLevels: () => generateFloorLevels,\n parseApiFloorLadder: () => parseApiFloorLadder,\n resolveFloorLadderBounds: () => resolveFloorLadderBounds,\n resolveOpportunityFloor: () => resolveOpportunityFloor,\n validateFloorCents: () => validateFloorCents,\n validateFloorLadderConfig: () => validateFloorLadderConfig\n});\nmodule.exports = __toCommonJS(FloorLadder_exports);\n\n// src/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/utils/vastMacros.ts\nvar GAM_AD_HOSTS = /* @__PURE__ */ new Set([\n \"pubads.g.doubleclick.net\",\n \"securepubads.g.doubleclick.net\"\n]);\n\n// src/player/FloorLadder.ts\nvar DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({\n enabled: false,\n targetingKey: \"\",\n minFloorCents: 0,\n maxFloorCents: 0,\n stepCents: 0,\n selectedFloorCents: 0,\n fallbackFloorCents: 0,\n readyFloorCents: [],\n mode: \"fixed\",\n allowedPositions: [],\n targetAdUnitPath: \"\",\n configurationVersion: \"\"\n});\nvar DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({\n minCents: 25,\n maxCents: 300,\n stepCents: 25\n});\nfunction isInteger(value) {\n return typeof value === \"number\" && Number.isInteger(value);\n}\nfunction generateFloorLevels(minCents, maxCents, stepCents) {\n if (!isInteger(minCents) || !isInteger(maxCents) || !isInteger(stepCents)) return [];\n if (stepCents <= 0 || minCents <= 0 || maxCents < minCents) return [];\n const levels = [];\n for (let cents = minCents; cents <= maxCents; cents += stepCents) {\n levels.push(cents);\n }\n return levels;\n}\nfunction resolveFloorLadderBounds(overrides = {}) {\n return {\n minCents: overrides.minCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.minCents,\n maxCents: overrides.maxCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.maxCents,\n stepCents: overrides.stepCents ?? DEFAULT_FLOOR_LADDER_BOUNDS.stepCents\n };\n}\nfunction validateFloorCents(value, config, bounds = DEFAULT_FLOOR_LADDER_BOUNDS) {\n if (!isInteger(value)) return { ok: false, reason: \"not_integer\" };\n if (!(value >= bounds.minCents && value <= bounds.maxCents) || !(value >= config.minFloorCents && value <= config.maxFloorCents)) {\n return { ok: false, reason: \"out_of_range\" };\n }\n const gamLevels = generateFloorLevels(bounds.minCents, bounds.maxCents, bounds.stepCents);\n const configLevels = generateFloorLevels(config.minFloorCents, config.maxFloorCents, config.stepCents);\n if (gamLevels.indexOf(value) === -1 || configLevels.indexOf(value) === -1) {\n return { ok: false, reason: \"not_step_multiple\" };\n }\n const ready = Array.isArray(config.readyFloorCents) ? config.readyFloorCents : [];\n if (ready.indexOf(value) === -1) return { ok: false, reason: \"not_ready\" };\n return { ok: true };\n}\nfunction validateFloorLadderConfig(config, bounds = DEFAULT_FLOOR_LADDER_BOUNDS) {\n const errors = [];\n if (generateFloorLevels(bounds.minCents, bounds.maxCents, bounds.stepCents).length === 0) {\n errors.push(\"invalid_gam_bounds\");\n }\n const levels = generateFloorLevels(config.minFloorCents, config.maxFloorCents, config.stepCents).filter((cents) => validateFloorCents(cents, { ...config, readyFloorCents: [cents] }, bounds).ok);\n if (levels.length === 0) errors.push(\"invalid_level_bounds\");\n if (config.minFloorCents < bounds.minCents || config.maxFloorCents > bounds.maxCents) {\n errors.push(\"level_bounds_outside_gam_ladder\");\n }\n if (!config.targetingKey) errors.push(\"missing_targeting_key\");\n if (config.mode !== \"fixed\") errors.push(`unsupported_mode:${String(config.mode)}`);\n if (!Array.isArray(config.readyFloorCents)) {\n errors.push(\"ready_floor_cents_not_array\");\n } else {\n for (const cents of config.readyFloorCents) {\n const check = validateFloorCents(cents, config, bounds);\n if (!check.ok) errors.push(`ready_floor_invalid:${String(cents)}:${check.reason}`);\n }\n }\n const selected = validateFloorCents(config.selectedFloorCents, config, bounds);\n if (!selected.ok) errors.push(`selected_floor_invalid:${selected.reason}`);\n const fallback = validateFloorCents(config.fallbackFloorCents, config, bounds);\n if (!fallback.ok) errors.push(`fallback_floor_invalid:${fallback.reason}`);\n return { ok: errors.length === 0, levels, errors };\n}\nvar fixedFloorSelector = {\n name: \"fixed\",\n select(config, context) {\n if (config.mode !== \"fixed\") return { source: \"none\", reason: \"unsupported_mode\" };\n const selected = validateFloorCents(config.selectedFloorCents, config, context.bounds);\n if (selected.ok) return { floorCents: config.selectedFloorCents, source: \"selected\" };\n const fallback = validateFloorCents(config.fallbackFloorCents, config, context.bounds);\n if (fallback.ok) {\n return {\n floorCents: config.fallbackFloorCents,\n source: \"fallback\",\n reason: `selected_${selected.reason}`\n };\n }\n return {\n source: \"none\",\n reason: `no_valid_floor:selected_${selected.reason}:fallback_${fallback.reason}`\n };\n }\n};\nfunction resolveOpportunityFloor(config, context, selector = fixedFloorSelector) {\n const base = {\n selector: selector.name,\n position: context.position,\n configurationVersion: String(config.configurationVersion ?? \"\"),\n targetingKey: config.targetingKey,\n targetAdUnitPath: config.targetAdUnitPath\n };\n const skipped = (reason, source = \"none\") => Object.freeze({ ...base, status: \"skipped\", floorCents: void 0, source, reason });\n if (!config.enabled) return skipped(\"disabled\");\n const positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];\n if (positions.indexOf(context.position) === -1) return skipped(\"position_not_allowed\");\n if (!config.targetingKey) return skipped(\"missing_targeting_key\");\n if (!config.targetAdUnitPath) return skipped(\"missing_target_ad_unit\");\n let result;\n try {\n result = selector.select(config, context);\n } catch {\n return skipped(\"selector_error\");\n }\n if (result.floorCents == null) return skipped(result.reason ?? \"no_valid_floor\", result.source);\n const check = validateFloorCents(result.floorCents, config, context.bounds);\n if (!check.ok) return skipped(`selector_floor_${check.reason}`);\n return Object.freeze({\n ...base,\n status: \"armed\",\n floorCents: result.floorCents,\n source: result.source,\n reason: result.reason\n });\n}\nfunction decodeQueryComponent(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return void 0;\n }\n}\nfunction mergeCustParams(decoded, key, cents) {\n const prefix = `${key}=`;\n const kept = decoded.split(\"&\").filter((pair) => pair !== \"\" && pair !== key && pair.indexOf(prefix) !== 0);\n kept.push(`${prefix}${cents}`);\n return kept.join(\"&\");\n}\nfunction applyFloorToVastUrl(url, floor) {\n if (floor.status !== \"armed\" || floor.floorCents == null) {\n return { url, applied: false, reason: floor.reason };\n }\n let parsed;\n try {\n parsed = new URL(url);\n } catch {\n return { url, applied: false, reason: \"invalid_url\" };\n }\n if (!GAM_AD_HOSTS.has(parsed.hostname)) {\n return { url, applied: false, reason: \"not_gam_host\" };\n }\n if (parsed.searchParams.get(\"iu\") !== floor.targetAdUnitPath) {\n return { url, applied: false, reason: \"ad_unit_mismatch\" };\n }\n const hashIndex = url.indexOf(\"#\");\n const beforeHash = hashIndex === -1 ? url : url.slice(0, hashIndex);\n const hash = hashIndex === -1 ? \"\" : url.slice(hashIndex);\n const queryIndex = beforeHash.indexOf(\"?\");\n const base = beforeHash.slice(0, queryIndex);\n const segments = beforeHash.slice(queryIndex + 1).split(\"&\");\n const existing = [];\n let insertAt = -1;\n const rest = [];\n for (const segment of segments) {\n const eq = segment.indexOf(\"=\");\n const rawKey = eq === -1 ? segment : segment.slice(0, eq);\n if (decodeQueryComponent(rawKey) === \"cust_params\") {\n if (insertAt === -1) insertAt = rest.length;\n const value = eq === -1 ? \"\" : decodeQueryComponent(segment.slice(eq + 1));\n if (value === void 0) {\n return { url, applied: false, reason: \"malformed_cust_params\" };\n }\n if (value) existing.push(value);\n continue;\n }\n rest.push(segment);\n }\n if (insertAt === -1) insertAt = rest.length;\n const merged = mergeCustParams(existing.join(\"&\"), floor.targetingKey, floor.floorCents);\n rest.splice(insertAt, 0, `cust_params=${encodeURIComponent(merged)}`);\n const query = rest.filter((segment) => segment !== \"\").join(\"&\");\n return { url: `${base}?${query}${hash}`, applied: true, reason: void 0 };\n}\nfunction copyConfig(config) {\n return {\n ...config,\n readyFloorCents: Array.isArray(config.readyFloorCents) ? config.readyFloorCents.slice() : [],\n allowedPositions: Array.isArray(config.allowedPositions) ? config.allowedPositions.slice() : []\n };\n}\nfunction mergeDefined(target, update) {\n const next = copyConfig(target);\n if (!update) return next;\n for (const key of Object.keys(update)) {\n const value = update[key];\n if (value !== void 0) next[key] = value;\n }\n return copyConfig(next);\n}\nvar AD_POSITIONS = [\"preroll\", \"midroll\", \"postroll\"];\nfunction finiteNumber(value) {\n return typeof value === \"number\" && isFinite(value) ? value : void 0;\n}\nfunction parseApiFloorLadder(raw) {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return void 0;\n const src = raw;\n const out = {};\n if (typeof src.enabled === \"boolean\") out.enabled = src.enabled;\n if (typeof src.targetingKey === \"string\") out.targetingKey = src.targetingKey;\n if (typeof src.targetAdUnitPath === \"string\") out.targetAdUnitPath = src.targetAdUnitPath;\n if (typeof src.configurationVersion === \"string\") out.configurationVersion = src.configurationVersion;\n if (typeof src.mode === \"string\") out.mode = src.mode;\n const min = finiteNumber(src.minFloorCents);\n const max = finiteNumber(src.maxFloorCents);\n const step = finiteNumber(src.stepCents);\n const selected = finiteNumber(src.selectedFloorCents);\n const fallback = finiteNumber(src.fallbackFloorCents);\n if (min !== void 0) out.minFloorCents = min;\n if (max !== void 0) out.maxFloorCents = max;\n if (step !== void 0) out.stepCents = step;\n if (selected !== void 0) out.selectedFloorCents = selected;\n if (fallback !== void 0) out.fallbackFloorCents = fallback;\n if (Array.isArray(src.readyFloorCents)) {\n out.readyFloorCents = src.readyFloorCents.filter(\n (cents) => finiteNumber(cents) !== void 0\n );\n }\n if (Array.isArray(src.allowedPositions)) {\n out.allowedPositions = src.allowedPositions.filter(\n (position) => AD_POSITIONS.indexOf(position) !== -1\n );\n }\n return out;\n}\nvar FloorLadderController = class {\n constructor(selector = fixedFloorSelector) {\n this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;\n this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);\n this.selector = selector;\n }\n isEnabled() {\n return this.config.enabled === true;\n }\n applyApiConfig(raw) {\n const parsed = parseApiFloorLadder(raw);\n this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);\n this.bounds = Object.freeze({\n minCents: this.config.minFloorCents,\n maxCents: this.config.maxFloorCents,\n stepCents: this.config.stepCents\n });\n return validateFloorLadderConfig(this.config, this.bounds);\n }\n reset() {\n this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);\n this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;\n }\n get() {\n return copyConfig(this.config);\n }\n getBounds() {\n return { ...this.bounds };\n }\n validate() {\n return validateFloorLadderConfig(this.config, this.bounds);\n }\n setSelector(selector) {\n this.selector = selector;\n }\n snapshotFor(context) {\n return resolveOpportunityFloor(\n copyConfig(this.config),\n { ...context, bounds: this.bounds },\n this.selector\n );\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n DEFAULT_FLOOR_LADDER_BOUNDS,\n DISABLED_FLOOR_LADDER_CONFIG,\n FloorLadderController,\n applyFloorToVastUrl,\n fixedFloorSelector,\n generateFloorLevels,\n parseApiFloorLadder,\n resolveFloorLadderBounds,\n resolveOpportunityFloor,\n validateFloorCents,\n validateFloorLadderConfig\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AdFloorLadderConfig, AdPosition } from '../types.cjs';
|
|
2
2
|
import './OptimizedPodRequest.cjs';
|
|
3
3
|
|
|
4
|
-
declare const
|
|
4
|
+
declare const DISABLED_FLOOR_LADDER_CONFIG: Readonly<AdFloorLadderConfig>;
|
|
5
5
|
type FloorValidationReason = "not_integer" | "out_of_range" | "not_step_multiple" | "not_ready";
|
|
6
6
|
type FloorValidation = {
|
|
7
7
|
ok: true;
|
|
@@ -10,7 +10,6 @@ type FloorValidation = {
|
|
|
10
10
|
reason: FloorValidationReason;
|
|
11
11
|
};
|
|
12
12
|
type FloorSource = "selected" | "fallback" | "none";
|
|
13
|
-
/** Levels that have targeting values in GAM; the ladder config can narrow these but never widen them. */
|
|
14
13
|
interface FloorLadderBounds {
|
|
15
14
|
minCents: number;
|
|
16
15
|
maxCents: number;
|
|
@@ -19,7 +18,6 @@ interface FloorLadderBounds {
|
|
|
19
18
|
declare const DEFAULT_FLOOR_LADDER_BOUNDS: Readonly<FloorLadderBounds>;
|
|
20
19
|
interface FloorSelectionContext {
|
|
21
20
|
position: AdPosition;
|
|
22
|
-
isCtv: boolean;
|
|
23
21
|
bounds: Readonly<FloorLadderBounds>;
|
|
24
22
|
}
|
|
25
23
|
interface FloorSelectorResult {
|
|
@@ -59,17 +57,20 @@ declare function validateFloorLadderConfig(config: Readonly<AdFloorLadderConfig>
|
|
|
59
57
|
declare const fixedFloorSelector: FloorSelector;
|
|
60
58
|
declare function resolveOpportunityFloor(config: Readonly<AdFloorLadderConfig>, context: FloorSelectionContext, selector?: FloorSelector): OpportunityFloor;
|
|
61
59
|
declare function applyFloorToVastUrl(url: string, floor: OpportunityFloor): FloorUrlResult;
|
|
60
|
+
declare function parseApiFloorLadder(raw: unknown): Partial<AdFloorLadderConfig> | undefined;
|
|
62
61
|
declare class FloorLadderController {
|
|
63
62
|
private config;
|
|
64
63
|
private selector;
|
|
65
|
-
private
|
|
66
|
-
constructor(
|
|
64
|
+
private bounds;
|
|
65
|
+
constructor(selector?: FloorSelector);
|
|
66
|
+
isEnabled(): boolean;
|
|
67
|
+
applyApiConfig(raw: unknown): FloorLadderValidationReport;
|
|
68
|
+
reset(): void;
|
|
67
69
|
get(): AdFloorLadderConfig;
|
|
68
70
|
getBounds(): FloorLadderBounds;
|
|
69
|
-
update(update: Partial<AdFloorLadderConfig>): FloorLadderValidationReport;
|
|
70
71
|
validate(): FloorLadderValidationReport;
|
|
71
72
|
setSelector(selector: FloorSelector): void;
|
|
72
73
|
snapshotFor(context: Omit<FloorSelectionContext, "bounds">): OpportunityFloor;
|
|
73
74
|
}
|
|
74
75
|
|
|
75
|
-
export { DEFAULT_FLOOR_LADDER_BOUNDS,
|
|
76
|
+
export { DEFAULT_FLOOR_LADDER_BOUNDS, DISABLED_FLOOR_LADDER_CONFIG, type FloorLadderBounds, FloorLadderController, type FloorLadderValidationReport, type FloorSelectionContext, type FloorSelector, type FloorSelectorResult, type FloorSource, type FloorUrlResult, type FloorValidation, type FloorValidationReason, type OpportunityFloor, applyFloorToVastUrl, fixedFloorSelector, generateFloorLevels, parseApiFloorLadder, resolveFloorLadderBounds, resolveOpportunityFloor, validateFloorCents, validateFloorLadderConfig };
|