standdown 0.1.0 → 0.2.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.
Files changed (40) hide show
  1. package/README.md +221 -18
  2. package/dist/{chunk-25A7QG5Z.mjs → chunk-26BG7FFX.mjs} +3 -3
  3. package/dist/{chunk-25A7QG5Z.mjs.map → chunk-26BG7FFX.mjs.map} +1 -1
  4. package/dist/{chunk-SEZFAOUU.mjs → chunk-JKQTHHIP.mjs} +49 -4
  5. package/dist/chunk-JKQTHHIP.mjs.map +1 -0
  6. package/dist/{chunk-SVN6UWA4.mjs → chunk-VE7YBR5A.mjs} +142 -24
  7. package/dist/chunk-VE7YBR5A.mjs.map +1 -0
  8. package/dist/content.cjs +188 -28
  9. package/dist/content.cjs.map +1 -1
  10. package/dist/content.d.cts +11 -4
  11. package/dist/content.d.ts +11 -4
  12. package/dist/content.mjs +18 -8
  13. package/dist/content.mjs.map +1 -1
  14. package/dist/index.cjs +140 -26
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +3 -3
  17. package/dist/index.d.ts +3 -3
  18. package/dist/index.mjs +3 -7
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/policies.cjs +18 -11
  21. package/dist/policies.cjs.map +1 -1
  22. package/dist/policies.d.cts +98 -86
  23. package/dist/policies.d.ts +98 -86
  24. package/dist/policies.mjs +18 -12
  25. package/dist/policies.mjs.map +1 -1
  26. package/dist/{session-C5gH-LaQ.d.ts → session-DA9hkYlD.d.ts} +10 -1
  27. package/dist/{session-n0px3Agb.d.cts → session-iosT1mEL.d.cts} +10 -1
  28. package/dist/{stores-CELX9aHN.d.ts → stores-Behkya7C.d.ts} +1 -1
  29. package/dist/{stores-CKCdKDdX.d.cts → stores-DfovpSqe.d.cts} +1 -1
  30. package/dist/{types-A9OJ7SWj.d.cts → types-DgKvVCmQ.d.cts} +53 -7
  31. package/dist/{types-A9OJ7SWj.d.ts → types-DgKvVCmQ.d.ts} +53 -7
  32. package/dist/webext.cjs +191 -28
  33. package/dist/webext.cjs.map +1 -1
  34. package/dist/webext.d.cts +11 -4
  35. package/dist/webext.d.ts +11 -4
  36. package/dist/webext.mjs +22 -9
  37. package/dist/webext.mjs.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/chunk-SEZFAOUU.mjs.map +0 -1
  40. package/dist/chunk-SVN6UWA4.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/guard.ts","../src/rakuten.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ActivationBenefit, Decision, StanddownPolicy, UserGesture } from './types';\nimport { validatePolicy } from './validation';\n\nexport function guardActivation(req: {\n decision: Decision;\n userGesture: UserGesture;\n benefit: ActivationBenefit;\n policy: StanddownPolicy;\n}): { allowed: boolean; reason: string } {\n try {\n validatePolicy(req.policy);\n } catch {\n return { allowed: false, reason: 'malformed-policy' };\n }\n\n if (req.policy.activation.mode === 'never') {\n return { allowed: false, reason: 'policy-never-activates' };\n }\n\n if (req.decision.standDown) {\n return { allowed: false, reason: 'active-standdown' };\n }\n\n if (!isGenuineGesture(req.userGesture)) {\n return { allowed: false, reason: 'missing-trusted-user-gesture' };\n }\n\n if (req.benefit.description.trim() === '') {\n return { allowed: false, reason: 'missing-user-benefit' };\n }\n\n const maxPrompts = req.policy.activation.maxPromptsPerJourney;\n\n if (\n maxPrompts !== undefined &&\n (req.decision.promptCount ?? 0) >= maxPrompts\n ) {\n return { allowed: false, reason: 'max-prompts-exhausted' };\n }\n\n const allowedReferrerClasses = req.policy.activation.allowedReferrerClasses;\n\n if (allowedReferrerClasses !== undefined) {\n if (req.decision.referrerClass === undefined) {\n return { allowed: false, reason: 'missing-referrer-class' };\n }\n\n if (!isActivationReferrerClass(req.decision.referrerClass)) {\n return { allowed: false, reason: 'referrer-class-disallowed' };\n }\n\n if (!allowedReferrerClasses.includes(req.decision.referrerClass)) {\n return { allowed: false, reason: 'referrer-class-disallowed' };\n }\n }\n\n return { allowed: true, reason: 'allowed' };\n}\n\nfunction isActivationReferrerClass(\n value: Decision['referrerClass'],\n): value is 'own-site' | 'organic' | 'direct' {\n return value === 'own-site' || value === 'organic' || value === 'direct';\n}\n\nfunction isGenuineGesture(gesture: UserGesture): boolean {\n return (\n gesture.isTrusted === true &&\n gesture.type.trim() !== '' &&\n Number.isFinite(gesture.timeStamp)\n );\n}\n","import type {\n DomainRule,\n ParamMatcher,\n ParamRule,\n RakutenNetworkPolicyV2,\n RakutenPolicyRuleV2,\n StanddownPolicy,\n} from './types';\nimport { validatePolicy } from './validation';\n\nconst DEFAULT_RAKUTEN_SESSION_MS = 1_800_000;\nconst DEFAULT_SOURCE_URL =\n 'https://github.com/rakutenrewards/PublisherStandown-SDK';\nconst LAST_VERIFIED = '2026-07-10';\nconst STANDDOWN_BEHAVIORS = [\n 'suppress-prompts',\n 'no-cookie-write',\n 'no-redirect',\n 'no-background-tracking',\n] as const;\n\nexport function fromRakutenPolicy(\n policy: RakutenNetworkPolicyV2,\n): StanddownPolicy {\n if (policy.schemaVersion !== 2) {\n throw new TypeError('Rakuten policy schemaVersion must be 2');\n }\n\n const detection: StanddownPolicy['detection'] = {};\n const landingParams = landingParamsFromRakutenRules(policy.rules);\n const redirectDomains = redirectDomainsFromRakutenRules(policy.rules);\n\n if (landingParams !== undefined) {\n detection.landingParams = landingParams;\n }\n\n if (redirectDomains !== undefined) {\n detection.redirectDomains = redirectDomains;\n }\n\n const nativePolicy: StanddownPolicy = {\n id: policy.id,\n schemaVersion: 3,\n policyVersion: policy.policyVersion,\n network: {\n id: policy.network.id,\n name: policy.network.name,\n policyUrl: DEFAULT_SOURCE_URL,\n },\n detection,\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs:\n policy.network.sessionDuration ?? DEFAULT_RAKUTEN_SESSION_MS,\n behaviors: STANDDOWN_BEHAVIORS,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: DEFAULT_SOURCE_URL,\n lastVerified: LAST_VERIFIED,\n notes:\n 'Converted from Rakuten NetworkPolicy schemaVersion 2. Lossy mapping: Rakuten paths/patterns are represented as redirect-domain regex rules; Rakuten has no native fields for cookies, initiator rules, activation guard details, stand-down behaviors, citations, or audit semantics. Emitting back to Rakuten drops multi-group anyOf param rules and match:contains params.',\n },\n };\n\n try {\n validatePolicy(nativePolicy);\n } catch (error) {\n throw new TypeError(\n `Converted Rakuten policy is invalid: ${messageFromError(error)}`,\n );\n }\n\n return nativePolicy;\n}\n\nexport function toRakutenPolicy(\n policy: StanddownPolicy,\n): RakutenNetworkPolicyV2 {\n return {\n id: policy.id,\n schemaVersion: 2,\n policyVersion: policy.policyVersion,\n network: {\n id: policy.network.id,\n name: policy.network.name,\n description:\n 'Converted from standdown.js. Lossy mapping: cookies, initiator rules, advertiserHosts, activation guard details, behaviors, metadata, citations, audit semantics, multi-group anyOf param rules, and match:contains params are not representable in Rakuten NetworkPolicy v2. The bundled rakuten policy intentionally does not round-trip exactly.',\n sessionDuration: policy.standdown.minDurationMs,\n },\n rules: rakutenRulesFromPolicy(policy),\n };\n}\n\nfunction landingParamsFromRakutenRules(\n rules: readonly RakutenPolicyRuleV2[],\n): ParamRule[] | undefined {\n const paramRules = rules.flatMap((rule) => {\n const matchers = paramMatchersFromRakutenParams(rule.params);\n\n if (matchers.length === 0) {\n return [];\n }\n\n return [\n {\n anyOf: [{ allOf: matchers }],\n ...(rule.reason === undefined ? {} : { reason: rule.reason }),\n },\n ];\n });\n\n return paramRules.length === 0 ? undefined : paramRules;\n}\n\nfunction redirectDomainsFromRakutenRules(\n rules: readonly RakutenPolicyRuleV2[],\n): StanddownPolicy['detection']['redirectDomains'] {\n const domainRules: DomainRule[] = [];\n\n for (const rule of rules) {\n if (rule.pattern !== undefined) {\n domainRules.push({\n pattern: rule.pattern,\n kind: 'regex',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n continue;\n }\n\n if (rule.domain === undefined) {\n continue;\n }\n\n if (rule.paths !== undefined && rule.paths.length > 0) {\n domainRules.push({\n pattern: domainAndPathsPattern(rule.domain, rule.paths),\n kind: 'regex',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n continue;\n }\n\n domainRules.push({\n pattern: rule.domain,\n kind: 'suffix',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n }\n\n return domainRules.length === 0 ? undefined : domainRules;\n}\n\nfunction rakutenRulesFromPolicy(\n policy: StanddownPolicy,\n): RakutenPolicyRuleV2[] {\n const rules: RakutenPolicyRuleV2[] = [];\n\n for (const rule of policy.detection.redirectDomains ?? []) {\n if (rule.kind === 'suffix') {\n rules.push({\n domain: rule.pattern,\n ...(rule.comment === undefined ? {} : { reason: rule.comment }),\n });\n continue;\n }\n\n rules.push({\n pattern: rule.pattern,\n ...(rule.comment === undefined ? {} : { reason: rule.comment }),\n });\n }\n\n for (const rule of policy.detection.landingParams ?? []) {\n const params = rakutenParamsFromParamRule(rule);\n\n if (params !== undefined) {\n rules.push({\n params,\n ...(rule.reason === undefined ? {} : { reason: rule.reason }),\n });\n }\n }\n\n return rules;\n}\n\nfunction paramMatchersFromRakutenParams(\n params: RakutenPolicyRuleV2['params'],\n): ParamMatcher[] {\n if (params === undefined) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map((name) => ({ name }));\n }\n\n return Object.entries(params).map(([name, value]) => ({\n name,\n value,\n match: 'equals' as const,\n }));\n}\n\nfunction rakutenParamsFromParamRule(\n rule: ParamRule,\n): readonly string[] | Readonly<Record<string, string>> | undefined {\n if (rule.anyOf.length !== 1) {\n return undefined;\n }\n\n const group = rule.anyOf[0];\n\n if (group === undefined) {\n return undefined;\n }\n\n const params: string[] = [];\n const valuedParams: Record<string, string> = {};\n let hasValue = false;\n\n for (const matcher of group.allOf) {\n const mode = matcher.match ?? (matcher.value === undefined ? 'exists' : 'equals');\n\n if (mode === 'exists' && matcher.value === undefined) {\n params.push(matcher.name);\n continue;\n }\n\n if (mode === 'equals' && matcher.value !== undefined) {\n valuedParams[matcher.name] = matcher.value;\n hasValue = true;\n continue;\n }\n\n return undefined;\n }\n\n return hasValue ? valuedParams : params;\n}\n\nfunction domainAndPathsPattern(domain: string, paths: readonly string[]): string {\n const escapedDomain = escapeRegex(domain);\n const escapedPaths = paths.map((path) => escapeRegex(path)).join('|');\n\n return `^https?://([^/]+\\\\.)?${escapedDomain}(${escapedPaths})([/?#]|$)`;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction messageFromError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"]}
1
+ {"version":3,"sources":["../src/guard.ts","../src/rakuten.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ActivationBenefit, Decision, StanddownPolicy, UserGesture } from './types';\nimport { validatePolicy } from './validation';\n\nexport function guardActivation(req: {\n decision: Decision;\n userGesture: UserGesture;\n benefit: ActivationBenefit;\n policy: StanddownPolicy;\n}): { allowed: boolean; reason: string } {\n try {\n validatePolicy(req.policy);\n } catch {\n return { allowed: false, reason: 'malformed-policy' };\n }\n\n if (req.policy.activation.mode === 'never') {\n return { allowed: false, reason: 'policy-never-activates' };\n }\n\n if (req.decision.standDown) {\n return { allowed: false, reason: 'active-standdown' };\n }\n\n if (!isGenuineGesture(req.userGesture)) {\n return { allowed: false, reason: 'missing-trusted-user-gesture' };\n }\n\n if (req.benefit.description.trim() === '') {\n return { allowed: false, reason: 'missing-user-benefit' };\n }\n\n const allowedReferrerClasses = req.policy.activation.allowedReferrerClasses;\n\n if (allowedReferrerClasses !== undefined) {\n if (req.decision.referrerClass === undefined) {\n return { allowed: false, reason: 'missing-referrer-class' };\n }\n\n if (!isActivationReferrerClass(req.decision.referrerClass)) {\n return { allowed: false, reason: 'referrer-class-disallowed' };\n }\n\n if (!allowedReferrerClasses.includes(req.decision.referrerClass)) {\n return { allowed: false, reason: 'referrer-class-disallowed' };\n }\n }\n\n return { allowed: true, reason: 'allowed' };\n}\n\nfunction isActivationReferrerClass(\n value: Decision['referrerClass'],\n): value is 'own-site' | 'organic' | 'direct' {\n return value === 'own-site' || value === 'organic' || value === 'direct';\n}\n\nfunction isGenuineGesture(gesture: UserGesture): boolean {\n return (\n gesture.isTrusted === true &&\n gesture.type.trim() !== '' &&\n Number.isFinite(gesture.timeStamp)\n );\n}\n","import type {\n DomainRule,\n ParamMatcher,\n ParamRule,\n RakutenNetworkPolicyV2,\n RakutenPolicyRuleV2,\n StanddownPolicy,\n} from './types';\nimport { validatePolicy } from './validation';\n\nconst DEFAULT_RAKUTEN_SESSION_MS = 1_800_000;\nconst DEFAULT_SOURCE_URL =\n 'https://github.com/rakutenrewards/PublisherStandown-SDK';\nconst LAST_VERIFIED = '2026-07-10';\nconst STANDDOWN_BEHAVIORS = [\n 'suppress-prompts',\n 'no-cookie-write',\n 'no-redirect',\n 'no-background-tracking',\n] as const;\n\nexport function fromRakutenPolicy(\n policy: RakutenNetworkPolicyV2,\n): StanddownPolicy {\n if (policy.schemaVersion !== 2) {\n throw new TypeError('Rakuten policy schemaVersion must be 2');\n }\n\n const detection: StanddownPolicy['detection'] = {};\n const landingParams = landingParamsFromRakutenRules(policy.rules);\n const redirectDomains = redirectDomainsFromRakutenRules(policy.rules);\n\n if (landingParams !== undefined) {\n detection.landingParams = landingParams;\n }\n\n if (redirectDomains !== undefined) {\n detection.redirectDomains = redirectDomains;\n }\n\n const nativePolicy: StanddownPolicy = {\n id: policy.id,\n schemaVersion: 3,\n policyVersion: policy.policyVersion,\n network: {\n id: policy.network.id,\n name: policy.network.name,\n policyUrl: DEFAULT_SOURCE_URL,\n },\n detection,\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs:\n policy.network.sessionDuration ?? DEFAULT_RAKUTEN_SESSION_MS,\n behaviors: STANDDOWN_BEHAVIORS,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: DEFAULT_SOURCE_URL,\n lastVerified: LAST_VERIFIED,\n notes:\n 'Converted from Rakuten NetworkPolicy schemaVersion 2. Lossy mapping: Rakuten paths/patterns are represented as redirect-domain regex rules; Rakuten has no native fields for cookies, initiator rules, activation guard details, stand-down behaviors, citations, or audit semantics. Emitting back to Rakuten drops multi-group anyOf param rules and match:contains params.',\n },\n };\n\n try {\n validatePolicy(nativePolicy);\n } catch (error) {\n throw new TypeError(\n `Converted Rakuten policy is invalid: ${messageFromError(error)}`,\n );\n }\n\n return nativePolicy;\n}\n\nexport function toRakutenPolicy(\n policy: StanddownPolicy,\n): RakutenNetworkPolicyV2 {\n return {\n id: policy.id,\n schemaVersion: 2,\n policyVersion: policy.policyVersion,\n network: {\n id: policy.network.id,\n name: policy.network.name,\n description:\n 'Converted from standdown.js. Lossy mapping: cookies, initiator rules, advertiserHosts, activation guard details, behaviors, metadata, citations, audit semantics, multi-group anyOf param rules, and match:contains params are not representable in Rakuten NetworkPolicy v2. The bundled rakuten policy intentionally does not round-trip exactly.',\n sessionDuration: policy.standdown.minDurationMs,\n },\n rules: rakutenRulesFromPolicy(policy),\n };\n}\n\nfunction landingParamsFromRakutenRules(\n rules: readonly RakutenPolicyRuleV2[],\n): ParamRule[] | undefined {\n const paramRules = rules.flatMap((rule) => {\n const matchers = paramMatchersFromRakutenParams(rule.params);\n\n if (matchers.length === 0) {\n return [];\n }\n\n return [\n {\n anyOf: [{ allOf: matchers }],\n ...(rule.reason === undefined ? {} : { reason: rule.reason }),\n },\n ];\n });\n\n return paramRules.length === 0 ? undefined : paramRules;\n}\n\nfunction redirectDomainsFromRakutenRules(\n rules: readonly RakutenPolicyRuleV2[],\n): StanddownPolicy['detection']['redirectDomains'] {\n const domainRules: DomainRule[] = [];\n\n for (const rule of rules) {\n if (rule.pattern !== undefined) {\n domainRules.push({\n pattern: rule.pattern,\n kind: 'regex',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n continue;\n }\n\n if (rule.domain === undefined) {\n continue;\n }\n\n if (rule.paths !== undefined && rule.paths.length > 0) {\n domainRules.push({\n pattern: domainAndPathsPattern(rule.domain, rule.paths),\n kind: 'regex',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n continue;\n }\n\n domainRules.push({\n pattern: rule.domain,\n kind: 'suffix',\n ...(rule.reason === undefined ? {} : { comment: rule.reason }),\n });\n }\n\n return domainRules.length === 0 ? undefined : domainRules;\n}\n\nfunction rakutenRulesFromPolicy(\n policy: StanddownPolicy,\n): RakutenPolicyRuleV2[] {\n const rules: RakutenPolicyRuleV2[] = [];\n\n for (const rule of policy.detection.redirectDomains ?? []) {\n if (rule.kind === 'suffix') {\n rules.push({\n domain: rule.pattern,\n ...(rule.comment === undefined ? {} : { reason: rule.comment }),\n });\n continue;\n }\n\n rules.push({\n pattern: rule.pattern,\n ...(rule.comment === undefined ? {} : { reason: rule.comment }),\n });\n }\n\n for (const rule of policy.detection.landingParams ?? []) {\n const params = rakutenParamsFromParamRule(rule);\n\n if (params !== undefined) {\n rules.push({\n params,\n ...(rule.reason === undefined ? {} : { reason: rule.reason }),\n });\n }\n }\n\n return rules;\n}\n\nfunction paramMatchersFromRakutenParams(\n params: RakutenPolicyRuleV2['params'],\n): ParamMatcher[] {\n if (params === undefined) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map((name) => ({ name }));\n }\n\n return Object.entries(params).map(([name, value]) => ({\n name,\n value,\n match: 'equals' as const,\n }));\n}\n\nfunction rakutenParamsFromParamRule(\n rule: ParamRule,\n): readonly string[] | Readonly<Record<string, string>> | undefined {\n if (rule.anyOf.length !== 1) {\n return undefined;\n }\n\n const group = rule.anyOf[0];\n\n if (group === undefined) {\n return undefined;\n }\n\n const params: string[] = [];\n const valuedParams: Record<string, string> = {};\n let hasValue = false;\n\n for (const matcher of group.allOf) {\n const mode = matcher.match ?? (matcher.value === undefined ? 'exists' : 'equals');\n\n if (mode === 'exists' && matcher.value === undefined) {\n params.push(matcher.name);\n continue;\n }\n\n if (mode === 'equals' && matcher.value !== undefined) {\n valuedParams[matcher.name] = matcher.value;\n hasValue = true;\n continue;\n }\n\n return undefined;\n }\n\n return hasValue ? valuedParams : params;\n}\n\nfunction domainAndPathsPattern(domain: string, paths: readonly string[]): string {\n const escapedDomain = escapeRegex(domain);\n const escapedPaths = paths.map((path) => escapeRegex(path)).join('|');\n\n return `^https?://([^/]+\\\\.)?${escapedDomain}(${escapedPaths})([/?#]|$)`;\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction messageFromError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"]}
package/dist/policies.cjs CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  // src/policies.ts
4
4
  var LAST_VERIFIED = "2026-07-10";
5
- var THIRTY_MINUTES_MS = 18e5;
5
+ var SESSION_ONLY_MIN_MS = 0;
6
+ var SIXTY_MINUTES_MS = 36e5;
6
7
  var COC_INACTIVITY_MS = 36e5;
7
8
  var COC_FALLBACK_MIN_MS = 54e5;
8
9
  var PIE_STANDDOWN_DOMAINS_URL = "https://raw.githubusercontent.com/piedotorg/standdown-domains/main/standdown-domains.json";
@@ -77,14 +78,14 @@ var cjPolicy = {
77
78
  standdown: {
78
79
  scope: "advertiser",
79
80
  sessionRule: "session-or-min",
80
- minDurationMs: THIRTY_MINUTES_MS,
81
+ minDurationMs: SIXTY_MINUTES_MS,
81
82
  behaviors: standdownBehaviors
82
83
  },
83
84
  activation: { mode: "user-click" },
84
85
  metadata: {
85
86
  sourceUrl: "https://www.cj.com/legal/software-policy",
86
87
  lastVerified: LAST_VERIFIED,
87
- notes: "CJ policy cites CJ domains, afsrc=1, and cjevent; rotating domain list is attributed to piedotorg/standdown-domains."
88
+ notes: "CJ policy cites CJ domains, afsrc=1, and cjevent; rotating domain list is attributed to piedotorg/standdown-domains. Minimum stand-down duration (60m) is calibrated to production enforcement (Dupe standDownCookieDuration=60)."
88
89
  }
89
90
  };
90
91
  var impactPolicy = {
@@ -109,14 +110,14 @@ var impactPolicy = {
109
110
  standdown: {
110
111
  scope: "advertiser",
111
112
  sessionRule: "session-or-min",
112
- minDurationMs: THIRTY_MINUTES_MS,
113
+ minDurationMs: SESSION_ONLY_MIN_MS,
113
114
  behaviors: standdownBehaviors
114
115
  },
115
116
  activation: { mode: "user-click" },
116
117
  metadata: {
117
118
  sourceUrl: "https://impact.com/stand-down-policy.ihtml",
118
119
  lastVerified: LAST_VERIFIED,
119
- notes: "Impact stand-down policy URL and irclickid/im_ref signals are from pre-build research; irgwc is attributed to piedotorg/standdown-domains."
120
+ notes: "Impact stand-down policy URL and irclickid/im_ref signals are from pre-build research; irgwc is attributed to piedotorg/standdown-domains. Session-only (no minimum) matches production enforcement, which sets no stand-down TTL."
120
121
  }
121
122
  };
122
123
  var rakutenPolicy = {
@@ -159,7 +160,7 @@ var rakutenPolicy = {
159
160
  standdown: {
160
161
  scope: "advertiser",
161
162
  sessionRule: "session-or-min",
162
- minDurationMs: COC_FALLBACK_MIN_MS,
163
+ minDurationMs: SESSION_ONLY_MIN_MS,
163
164
  behaviors: standdownBehaviors
164
165
  },
165
166
  activation: { mode: "user-click" },
@@ -266,13 +267,12 @@ var ebayEpnPolicy = {
266
267
  standdown: cocDefaults,
267
268
  activation: {
268
269
  mode: "user-click",
269
- maxPromptsPerJourney: 2,
270
270
  allowedReferrerClasses: ["own-site", "organic", "direct"]
271
271
  },
272
272
  metadata: {
273
273
  sourceUrl: "https://partnernetwork.ebay.com/browser-extension-policy",
274
274
  lastVerified: LAST_VERIFIED,
275
- notes: "eBay prompt/referrer requirements are from pre-build research; landing params and rover.ebay.com are also attributed to piedotorg/standdown-domains."
275
+ notes: "eBay referrer requirements are from pre-build research; landing params and rover.ebay.com are also attributed to piedotorg/standdown-domains."
276
276
  }
277
277
  };
278
278
  var amazonPolicy = {
@@ -592,13 +592,19 @@ var allPolicies = [
592
592
  shareasalePolicy,
593
593
  ebayEpnPolicy,
594
594
  amazonPolicy,
595
- sovrnSkimlinksPolicy,
596
- partnerizePolicy,
597
595
  universalPolicy
598
596
  ];
597
+ var experimentalPolicies = [
598
+ sovrnSkimlinksPolicy,
599
+ partnerizePolicy
600
+ ];
601
+ var knownPolicies = [
602
+ ...allPolicies,
603
+ ...experimentalPolicies
604
+ ];
599
605
  function policiesFor(networks) {
600
606
  const wanted = new Set(networks);
601
- return allPolicies.filter(
607
+ return knownPolicies.filter(
602
608
  (policy) => wanted.has(policy.id) || wanted.has(policy.network.id)
603
609
  );
604
610
  }
@@ -609,6 +615,7 @@ exports.awinPolicy = awinPolicy;
609
615
  exports.cjPolicy = cjPolicy;
610
616
  exports.cocDefaults = cocDefaults;
611
617
  exports.ebayEpnPolicy = ebayEpnPolicy;
618
+ exports.experimentalPolicies = experimentalPolicies;
612
619
  exports.impactPolicy = impactPolicy;
613
620
  exports.partnerizePolicy = partnerizePolicy;
614
621
  exports.policiesFor = policiesFor;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/policies.ts"],"names":[],"mappings":"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","file":"policies.cjs","sourcesContent":["import type { Behavior, StanddownPolicy } from './types';\n\nconst LAST_VERIFIED = '2026-07-10';\nconst THIRTY_MINUTES_MS = 1_800_000;\nconst COC_INACTIVITY_MS = 3_600_000;\nconst COC_FALLBACK_MIN_MS = 5_400_000;\nconst PIE_STANDDOWN_DOMAINS_URL =\n 'https://raw.githubusercontent.com/piedotorg/standdown-domains/main/standdown-domains.json';\n\nconst standdownBehaviors = [\n 'suppress-prompts',\n 'no-cookie-write',\n 'no-redirect',\n 'no-background-tracking',\n] as const satisfies readonly Behavior[];\n\nexport const cocDefaults = {\n scope: 'advertiser',\n sessionRule: 'inactivity-window',\n minDurationMs: COC_FALLBACK_MIN_MS,\n inactivityMs: COC_INACTIVITY_MS,\n behaviors: standdownBehaviors,\n} as const satisfies StanddownPolicy['standdown'];\n\nexport const cjPolicy = {\n id: 'cj',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'cj',\n name: 'CJ Affiliate',\n policyUrl: 'https://www.cj.com/legal/software-policy',\n },\n detection: {\n landingParams: [\n { anyOf: [{ allOf: [{ name: 'cjevent' }] }] },\n { anyOf: [{ allOf: [{ name: 'cjdata' }] }] },\n {\n anyOf: [\n { allOf: [{ name: 'utm_source', value: 'cj', match: 'equals' }] },\n ],\n },\n {\n anyOf: [{ allOf: [{ name: 'sf_cs', value: 'cj', match: 'equals' }] }],\n },\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n ],\n redirectDomains: [\n { pattern: 'anrdoezrs.net', kind: 'suffix', comment: 'CJ rotating domain' },\n {\n pattern: 'commission-junction.com',\n kind: 'suffix',\n comment: 'CJ rotating domain',\n },\n { pattern: 'dpbolvw.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'apmebf.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'jdoqocy.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'kqzyfj.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'qksrv.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'tkqlhce.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'qksz.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'afcyhf.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'awltovhc.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'ftjcfx.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'lduhtrp.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'tqlkg.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'awxibrm.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'cualbr.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'rnsfpw.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'vofzpwh.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'yceml.net', kind: 'suffix', comment: 'CJ rotating domain' },\n ],\n cookiePatterns: [\n { name: 'cje', match: 'substring' },\n { name: 'cjevent_dc', match: 'substring' },\n ],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: THIRTY_MINUTES_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://www.cj.com/legal/software-policy',\n lastVerified: LAST_VERIFIED,\n notes:\n 'CJ policy cites CJ domains, afsrc=1, and cjevent; rotating domain list is attributed to piedotorg/standdown-domains.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const impactPolicy = {\n id: 'impact',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'impact',\n name: 'Impact',\n policyUrl: 'https://impact.com/stand-down-policy.ihtml',\n },\n detection: {\n landingParams: [\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n { anyOf: [{ allOf: [{ name: 'irclickid' }] }] },\n { anyOf: [{ allOf: [{ name: 'irgwc' }] }] },\n ],\n cookiePatterns: [{ name: 'im_ref', match: 'substring' }],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: THIRTY_MINUTES_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://impact.com/stand-down-policy.ihtml',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Impact stand-down policy URL and irclickid/im_ref signals are from pre-build research; irgwc is attributed to piedotorg/standdown-domains.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const rakutenPolicy = {\n id: 'rakuten',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'rakuten',\n name: 'Rakuten Advertising',\n policyUrl: 'https://github.com/rakutenrewards/PublisherStandown-SDK',\n },\n detection: {\n landingParams: [\n {\n anyOf: [\n {\n allOf: [{ name: 'ranMID' }, { name: 'ranEAID' }, { name: 'ranSiteID' }],\n },\n { allOf: [{ name: 'ranEAID' }, { name: 'ranSiteID' }] },\n { allOf: [{ name: 'ranSiteID' }] },\n { allOf: [{ name: 'siteID' }] },\n ],\n },\n ],\n redirectDomains: [\n { pattern: 'click.linksynergy.com', kind: 'suffix' },\n { pattern: 'linksynergy.jrs5.com', kind: 'suffix' },\n { pattern: 'tk.jrs5.com', kind: 'suffix' },\n {\n pattern: '(^|\\\\.)linksynergy\\\\.[a-z]+$',\n kind: 'regex',\n comment: 'linksynergy.* domain family',\n },\n ],\n cookiePatterns: [\n { name: 'lsclick_mid', match: 'substring' },\n { name: 'linkshare', match: 'substring' },\n ],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: COC_FALLBACK_MIN_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://github.com/rakutenrewards/PublisherStandown-SDK',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Rakuten SDK is detection-only and ships no policies; duration uses CoC fallback because the public source describes browser-session semantics without a fixed millisecond value.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const awinPolicy = {\n id: 'awin',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'awin',\n name: 'Awin',\n policyUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n },\n detection: {\n landingParams: [\n { anyOf: [{ allOf: [{ name: 'awc' }] }] },\n {\n anyOf: [\n { allOf: [{ name: 'utm_source', value: 'aw', match: 'equals' }] },\n ],\n },\n {\n anyOf: [{ allOf: [{ name: 'source', value: 'aw', match: 'equals' }] }],\n },\n ],\n redirectDomains: [{ pattern: 'awin1.com', kind: 'suffix' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Awin awc/awin1.com signals are from pre-build research, Awin downloadable-software guidance, Awin Soft Click status docs, and piedotorg/standdown-domains. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const shareasalePolicy = {\n id: 'shareasale',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'shareasale',\n name: 'ShareASale',\n policyUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n },\n detection: {\n landingParams: [{ anyOf: [{ allOf: [{ name: 'sscid' }] }] }],\n redirectDomains: [\n { pattern: 'shareasale.com', kind: 'suffix' },\n { pattern: 'shrsl.com', kind: 'suffix' },\n ],\n cookiePatterns: [{ name: 'sscid', match: 'substring' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n lastVerified: LAST_VERIFIED,\n notes:\n 'ShareASale is Awin-owned and is treated under Awin downloadable-software/CoC guidance. sscid/shareasale.com/shrsl.com signals are from pre-build research and piedotorg/standdown-domains. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const ebayEpnPolicy = {\n id: 'ebay-epn',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'ebay-epn',\n name: 'eBay Partner Network',\n policyUrl: 'https://partnernetwork.ebay.com/browser-extension-policy',\n },\n detection: {\n advertiserHosts: [\n {\n pattern: '(^|\\\\.)ebay\\\\.[a-z.]+$',\n kind: 'regex',\n comment: 'Scope eBay journey-only rules to eBay advertiser hosts',\n },\n ],\n landingParams: [\n {\n anyOf: [\n { allOf: [{ name: 'campid' }] },\n { allOf: [{ name: 'pubid' }] },\n { allOf: [{ name: 'mkevt' }] },\n { allOf: [{ name: 'mkcid' }] },\n { allOf: [{ name: 'mkrid' }] },\n { allOf: [{ name: 'campid' }, { name: '_trkparms' }] },\n { allOf: [{ name: 'mktype' }, { name: 'gclid' }] },\n ],\n },\n ],\n redirectDomains: [{ pattern: 'rover.ebay.com', kind: 'suffix' }],\n initiatorRules: [\n {\n referrerClass: 'other',\n reason: 'non-approved source during eBay journey',\n },\n ],\n },\n standdown: cocDefaults,\n activation: {\n mode: 'user-click',\n maxPromptsPerJourney: 2,\n allowedReferrerClasses: ['own-site', 'organic', 'direct'],\n },\n metadata: {\n sourceUrl: 'https://partnernetwork.ebay.com/browser-extension-policy',\n lastVerified: LAST_VERIFIED,\n notes:\n 'eBay prompt/referrer requirements are from pre-build research; landing params and rover.ebay.com are also attributed to piedotorg/standdown-domains.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const amazonPolicy = {\n id: 'amazon',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'amazon',\n name: 'Amazon Associates',\n policyUrl: 'https://affiliate-program.amazon.com/help/operating/policies',\n },\n detection: {\n advertiserHosts: [\n {\n pattern: '(^|\\\\.)amazon\\\\.[a-z.]+$',\n kind: 'regex',\n comment: 'Scope Amazon tag detection to Amazon advertiser hosts',\n },\n ],\n landingParams: [{ anyOf: [{ allOf: [{ name: 'tag' }] }] }],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: COC_FALLBACK_MIN_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'never' },\n metadata: {\n sourceUrl: 'https://affiliate-program.amazon.com/help/operating/policies',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Amazon forbids Special Links in browser extensions; tag is detected for attribution visibility, but activation is never allowed.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const sovrnSkimlinksPolicy = {\n id: 'sovrn-skimlinks',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'sovrn-skimlinks',\n name: 'Sovrn / Skimlinks',\n policyUrl:\n 'https://www.sovrn.com/sovrn-commerce-publisher-code-of-conduct/',\n },\n detection: {\n // Low-confidence entry from research/domain knowledge; keep visible for audit.\n redirectDomains: [\n { pattern: 'go.skimresources.com', kind: 'suffix' },\n { pattern: 'go.redirectingat.com', kind: 'suffix' },\n ],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://www.sovrn.com/sovrn-commerce-publisher-code-of-conduct/',\n lastVerified: LAST_VERIFIED,\n notes:\n 'unverified against network docs; redirect domains from domain knowledge. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const partnerizePolicy = {\n id: 'partnerize',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'partnerize',\n name: 'Partnerize',\n policyUrl: 'https://partnerize.com/legal/terms-and-conditions/',\n },\n detection: {\n landingParams: [{ anyOf: [{ allOf: [{ name: 'clickref' }] }] }],\n // Low-confidence entry from research/domain knowledge; keep visible for audit.\n redirectDomains: [{ pattern: 'prf.hn', kind: 'suffix' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://partnerize.com/legal/terms-and-conditions/',\n lastVerified: LAST_VERIFIED,\n notes:\n 'unverified against network docs; prf.hn redirect domain from domain knowledge. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const universalPolicy = {\n id: 'universal',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'universal',\n name: 'Universal affiliate source',\n policyUrl: 'https://github.com/piedotorg/standdown-domains',\n },\n detection: {\n landingParams: [\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n ],\n redirectDomains: [\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]afsrc=1',\n kind: 'regex',\n comment: 'Universal standdown parameter from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?:\\\\/\\\\/www\\\\.youtube\\\\.com\\\\/redirect',\n kind: 'regex',\n comment: 'YouTube redirect to a merchant from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.anrdoezrs\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.commission-junction\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.dpbolvw\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.apmebf\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.jdoqocy\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.kqzyfj\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.qksrv\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.tkqlhce\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.qksz\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.afcyhf\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awltovhc\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.ftjcfx\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.lduhtrp\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.tqlkg\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awxibrm\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.cualbr\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.rnsfpw\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.vofzpwh\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.yceml\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]cjevent=',\n kind: 'regex',\n comment: 'CJ general link param from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]ranEAID=',\n kind: 'regex',\n comment: 'RAN general link param on landing from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/tk\\\\.jrs5\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/linksynergy\\\\.jrs5\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/click\\\\.linksynergy\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.gopjn\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pjatr\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pjtra\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntra\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntrac\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntrs\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*\\\\.pepperjamnetwork\\\\.com',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]irgwc=',\n kind: 'regex',\n comment: 'IMPACT landing page param on landing from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/prf.hn/',\n kind: 'regex',\n comment: 'PZ general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awin1.com/',\n kind: 'regex',\n comment: 'AW general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/track\\\\.webgains\\\\.com/',\n kind: 'regex',\n comment: 'Webgains general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/shrsl.com/',\n kind: 'regex',\n comment: 'Sharesale shortened affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.shareasale.com/',\n kind: 'regex',\n comment: 'Sharesale general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/howl\\\\.link\\\\/link',\n kind: 'regex',\n comment: 'Howl partner general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https:\\\\/\\\\/[\\\\w]+\\\\.ebay.*[\\\\?\\\\&](mkcid=|campid=|mkevt=)',\n kind: 'regex',\n comment: 'EBAY affiliate query param from piedotorg/standdown-domains',\n },\n ],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: PIE_STANDDOWN_DOMAINS_URL,\n lastVerified: LAST_VERIFIED,\n notes:\n 'Full piedotorg/standdown-domains rule set imported under MIT license; duration semantics use Affiliate Software Code of Conduct defaults.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const allPolicies = [\n cjPolicy,\n impactPolicy,\n rakutenPolicy,\n awinPolicy,\n shareasalePolicy,\n ebayEpnPolicy,\n amazonPolicy,\n sovrnSkimlinksPolicy,\n partnerizePolicy,\n universalPolicy,\n] as const satisfies readonly StanddownPolicy[];\n\nexport function policiesFor(networks: readonly string[]): StanddownPolicy[] {\n const wanted = new Set(networks);\n\n return allPolicies.filter(\n (policy) => wanted.has(policy.id) || wanted.has(policy.network.id),\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/policies.ts"],"names":[],"mappings":"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","file":"policies.cjs","sourcesContent":["import type { Behavior, StanddownPolicy } from './types';\n\nconst LAST_VERIFIED = '2026-07-10';\n// session-only: no minimum floor. A `session-or-min` stand-down stays active for\n// the lifetime of its session record regardless of this value, so 0 means \"lasts\n// exactly the session, with no extra timed minimum\" (matches networks that set no\n// stand-down TTL in production).\nconst SESSION_ONLY_MIN_MS = 0;\nconst SIXTY_MINUTES_MS = 3_600_000;\nconst COC_INACTIVITY_MS = 3_600_000;\nconst COC_FALLBACK_MIN_MS = 5_400_000;\nconst PIE_STANDDOWN_DOMAINS_URL =\n 'https://raw.githubusercontent.com/piedotorg/standdown-domains/main/standdown-domains.json';\n\nconst standdownBehaviors = [\n 'suppress-prompts',\n 'no-cookie-write',\n 'no-redirect',\n 'no-background-tracking',\n] as const satisfies readonly Behavior[];\n\nexport const cocDefaults = {\n scope: 'advertiser',\n sessionRule: 'inactivity-window',\n minDurationMs: COC_FALLBACK_MIN_MS,\n inactivityMs: COC_INACTIVITY_MS,\n behaviors: standdownBehaviors,\n} as const satisfies StanddownPolicy['standdown'];\n\nexport const cjPolicy = {\n id: 'cj',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'cj',\n name: 'CJ Affiliate',\n policyUrl: 'https://www.cj.com/legal/software-policy',\n },\n detection: {\n landingParams: [\n { anyOf: [{ allOf: [{ name: 'cjevent' }] }] },\n { anyOf: [{ allOf: [{ name: 'cjdata' }] }] },\n {\n anyOf: [\n { allOf: [{ name: 'utm_source', value: 'cj', match: 'equals' }] },\n ],\n },\n {\n anyOf: [{ allOf: [{ name: 'sf_cs', value: 'cj', match: 'equals' }] }],\n },\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n ],\n redirectDomains: [\n { pattern: 'anrdoezrs.net', kind: 'suffix', comment: 'CJ rotating domain' },\n {\n pattern: 'commission-junction.com',\n kind: 'suffix',\n comment: 'CJ rotating domain',\n },\n { pattern: 'dpbolvw.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'apmebf.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'jdoqocy.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'kqzyfj.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'qksrv.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'tkqlhce.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'qksz.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'afcyhf.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'awltovhc.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'ftjcfx.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'lduhtrp.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'tqlkg.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'awxibrm.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'cualbr.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'rnsfpw.net', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'vofzpwh.com', kind: 'suffix', comment: 'CJ rotating domain' },\n { pattern: 'yceml.net', kind: 'suffix', comment: 'CJ rotating domain' },\n ],\n cookiePatterns: [\n { name: 'cje', match: 'substring' },\n { name: 'cjevent_dc', match: 'substring' },\n ],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: SIXTY_MINUTES_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://www.cj.com/legal/software-policy',\n lastVerified: LAST_VERIFIED,\n notes:\n 'CJ policy cites CJ domains, afsrc=1, and cjevent; rotating domain list is attributed to piedotorg/standdown-domains. Minimum stand-down duration (60m) is calibrated to production enforcement (Dupe standDownCookieDuration=60).',\n },\n} as const satisfies StanddownPolicy;\n\nexport const impactPolicy = {\n id: 'impact',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'impact',\n name: 'Impact',\n policyUrl: 'https://impact.com/stand-down-policy.ihtml',\n },\n detection: {\n landingParams: [\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n { anyOf: [{ allOf: [{ name: 'irclickid' }] }] },\n { anyOf: [{ allOf: [{ name: 'irgwc' }] }] },\n ],\n cookiePatterns: [{ name: 'im_ref', match: 'substring' }],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: SESSION_ONLY_MIN_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://impact.com/stand-down-policy.ihtml',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Impact stand-down policy URL and irclickid/im_ref signals are from pre-build research; irgwc is attributed to piedotorg/standdown-domains. Session-only (no minimum) matches production enforcement, which sets no stand-down TTL.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const rakutenPolicy = {\n id: 'rakuten',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'rakuten',\n name: 'Rakuten Advertising',\n policyUrl: 'https://github.com/rakutenrewards/PublisherStandown-SDK',\n },\n detection: {\n landingParams: [\n {\n anyOf: [\n {\n allOf: [{ name: 'ranMID' }, { name: 'ranEAID' }, { name: 'ranSiteID' }],\n },\n { allOf: [{ name: 'ranEAID' }, { name: 'ranSiteID' }] },\n { allOf: [{ name: 'ranSiteID' }] },\n { allOf: [{ name: 'siteID' }] },\n ],\n },\n ],\n redirectDomains: [\n { pattern: 'click.linksynergy.com', kind: 'suffix' },\n { pattern: 'linksynergy.jrs5.com', kind: 'suffix' },\n { pattern: 'tk.jrs5.com', kind: 'suffix' },\n {\n pattern: '(^|\\\\.)linksynergy\\\\.[a-z]+$',\n kind: 'regex',\n comment: 'linksynergy.* domain family',\n },\n ],\n cookiePatterns: [\n { name: 'lsclick_mid', match: 'substring' },\n { name: 'linkshare', match: 'substring' },\n ],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: SESSION_ONLY_MIN_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://github.com/rakutenrewards/PublisherStandown-SDK',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Rakuten SDK is detection-only and ships no policies; duration uses CoC fallback because the public source describes browser-session semantics without a fixed millisecond value.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const awinPolicy = {\n id: 'awin',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'awin',\n name: 'Awin',\n policyUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n },\n detection: {\n landingParams: [\n { anyOf: [{ allOf: [{ name: 'awc' }] }] },\n {\n anyOf: [\n { allOf: [{ name: 'utm_source', value: 'aw', match: 'equals' }] },\n ],\n },\n {\n anyOf: [{ allOf: [{ name: 'source', value: 'aw', match: 'equals' }] }],\n },\n ],\n redirectDomains: [{ pattern: 'awin1.com', kind: 'suffix' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Awin awc/awin1.com signals are from pre-build research, Awin downloadable-software guidance, Awin Soft Click status docs, and piedotorg/standdown-domains. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const shareasalePolicy = {\n id: 'shareasale',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'shareasale',\n name: 'ShareASale',\n policyUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n },\n detection: {\n landingParams: [{ anyOf: [{ allOf: [{ name: 'sscid' }] }] }],\n redirectDomains: [\n { pattern: 'shareasale.com', kind: 'suffix' },\n { pattern: 'shrsl.com', kind: 'suffix' },\n ],\n cookiePatterns: [{ name: 'sscid', match: 'substring' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://success.awin.com/s/article/Downloadable-Software-Guidelines',\n lastVerified: LAST_VERIFIED,\n notes:\n 'ShareASale is Awin-owned and is treated under Awin downloadable-software/CoC guidance. sscid/shareasale.com/shrsl.com signals are from pre-build research and piedotorg/standdown-domains. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const ebayEpnPolicy = {\n id: 'ebay-epn',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'ebay-epn',\n name: 'eBay Partner Network',\n policyUrl: 'https://partnernetwork.ebay.com/browser-extension-policy',\n },\n detection: {\n advertiserHosts: [\n {\n pattern: '(^|\\\\.)ebay\\\\.[a-z.]+$',\n kind: 'regex',\n comment: 'Scope eBay journey-only rules to eBay advertiser hosts',\n },\n ],\n landingParams: [\n {\n anyOf: [\n { allOf: [{ name: 'campid' }] },\n { allOf: [{ name: 'pubid' }] },\n { allOf: [{ name: 'mkevt' }] },\n { allOf: [{ name: 'mkcid' }] },\n { allOf: [{ name: 'mkrid' }] },\n { allOf: [{ name: 'campid' }, { name: '_trkparms' }] },\n { allOf: [{ name: 'mktype' }, { name: 'gclid' }] },\n ],\n },\n ],\n redirectDomains: [{ pattern: 'rover.ebay.com', kind: 'suffix' }],\n initiatorRules: [\n {\n referrerClass: 'other',\n reason: 'non-approved source during eBay journey',\n },\n ],\n },\n standdown: cocDefaults,\n activation: {\n mode: 'user-click',\n allowedReferrerClasses: ['own-site', 'organic', 'direct'],\n },\n metadata: {\n sourceUrl: 'https://partnernetwork.ebay.com/browser-extension-policy',\n lastVerified: LAST_VERIFIED,\n notes:\n 'eBay referrer requirements are from pre-build research; landing params and rover.ebay.com are also attributed to piedotorg/standdown-domains.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const amazonPolicy = {\n id: 'amazon',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'amazon',\n name: 'Amazon Associates',\n policyUrl: 'https://affiliate-program.amazon.com/help/operating/policies',\n },\n detection: {\n advertiserHosts: [\n {\n pattern: '(^|\\\\.)amazon\\\\.[a-z.]+$',\n kind: 'regex',\n comment: 'Scope Amazon tag detection to Amazon advertiser hosts',\n },\n ],\n landingParams: [{ anyOf: [{ allOf: [{ name: 'tag' }] }] }],\n },\n standdown: {\n scope: 'advertiser',\n sessionRule: 'session-or-min',\n minDurationMs: COC_FALLBACK_MIN_MS,\n behaviors: standdownBehaviors,\n },\n activation: { mode: 'never' },\n metadata: {\n sourceUrl: 'https://affiliate-program.amazon.com/help/operating/policies',\n lastVerified: LAST_VERIFIED,\n notes:\n 'Amazon forbids Special Links in browser extensions; tag is detected for attribution visibility, but activation is never allowed.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const sovrnSkimlinksPolicy = {\n id: 'sovrn-skimlinks',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'sovrn-skimlinks',\n name: 'Sovrn / Skimlinks',\n policyUrl:\n 'https://www.sovrn.com/sovrn-commerce-publisher-code-of-conduct/',\n },\n detection: {\n // Low-confidence entry from research/domain knowledge; keep visible for audit.\n redirectDomains: [\n { pattern: 'go.skimresources.com', kind: 'suffix' },\n { pattern: 'go.redirectingat.com', kind: 'suffix' },\n ],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl:\n 'https://www.sovrn.com/sovrn-commerce-publisher-code-of-conduct/',\n lastVerified: LAST_VERIFIED,\n notes:\n 'unverified against network docs; redirect domains from domain knowledge. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const partnerizePolicy = {\n id: 'partnerize',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'partnerize',\n name: 'Partnerize',\n policyUrl: 'https://partnerize.com/legal/terms-and-conditions/',\n },\n detection: {\n landingParams: [{ anyOf: [{ allOf: [{ name: 'clickref' }] }] }],\n // Low-confidence entry from research/domain knowledge; keep visible for audit.\n redirectDomains: [{ pattern: 'prf.hn', kind: 'suffix' }],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: 'https://partnerize.com/legal/terms-and-conditions/',\n lastVerified: LAST_VERIFIED,\n notes:\n 'unverified against network docs; prf.hn redirect domain from domain knowledge. CoC inactivity-window defaults are broader than the seed table session-or-min entry and are ratified by SPEC A5.',\n },\n} as const satisfies StanddownPolicy;\n\nexport const universalPolicy = {\n id: 'universal',\n schemaVersion: 3,\n policyVersion: '0.1.0',\n network: {\n id: 'universal',\n name: 'Universal affiliate source',\n policyUrl: 'https://github.com/piedotorg/standdown-domains',\n },\n detection: {\n landingParams: [\n {\n anyOf: [{ allOf: [{ name: 'afsrc', value: '1', match: 'equals' }] }],\n },\n ],\n redirectDomains: [\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]afsrc=1',\n kind: 'regex',\n comment: 'Universal standdown parameter from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?:\\\\/\\\\/www\\\\.youtube\\\\.com\\\\/redirect',\n kind: 'regex',\n comment: 'YouTube redirect to a merchant from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.anrdoezrs\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.commission-junction\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.dpbolvw\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.apmebf\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.jdoqocy\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.kqzyfj\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.qksrv\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.tkqlhce\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.qksz\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.afcyhf\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awltovhc\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.ftjcfx\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.lduhtrp\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.tqlkg\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awxibrm\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.cualbr\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.rnsfpw\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.vofzpwh\\\\.com\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.yceml\\\\.net\\\\/',\n kind: 'regex',\n comment: 'CJ rotating domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]cjevent=',\n kind: 'regex',\n comment: 'CJ general link param from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]ranEAID=',\n kind: 'regex',\n comment: 'RAN general link param on landing from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/tk\\\\.jrs5\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/linksynergy\\\\.jrs5\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/click\\\\.linksynergy\\\\.com\\\\/',\n kind: 'regex',\n comment: 'RAN domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.gopjn\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pjatr\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pjtra\\\\.com\\\\/t',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntra\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntrac\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.pntrs\\\\.com\\\\/t\\\\/\\\\w+-\\\\w+',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*\\\\.pepperjamnetwork\\\\.com',\n kind: 'regex',\n comment: 'ASC partner domain from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/.*[\\\\?\\\\&]irgwc=',\n kind: 'regex',\n comment: 'IMPACT landing page param on landing from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/prf.hn/',\n kind: 'regex',\n comment: 'PZ general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.awin1.com/',\n kind: 'regex',\n comment: 'AW general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/track\\\\.webgains\\\\.com/',\n kind: 'regex',\n comment: 'Webgains general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/shrsl.com/',\n kind: 'regex',\n comment: 'Sharesale shortened affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/www\\\\.shareasale.com/',\n kind: 'regex',\n comment: 'Sharesale general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https?\\\\:\\\\/\\\\/howl\\\\.link\\\\/link',\n kind: 'regex',\n comment: 'Howl partner general affiliate link from piedotorg/standdown-domains',\n },\n {\n pattern: '^https:\\\\/\\\\/[\\\\w]+\\\\.ebay.*[\\\\?\\\\&](mkcid=|campid=|mkevt=)',\n kind: 'regex',\n comment: 'EBAY affiliate query param from piedotorg/standdown-domains',\n },\n ],\n },\n standdown: cocDefaults,\n activation: { mode: 'user-click' },\n metadata: {\n sourceUrl: PIE_STANDDOWN_DOMAINS_URL,\n lastVerified: LAST_VERIFIED,\n notes:\n 'Full piedotorg/standdown-domains rule set imported under MIT license; duration semantics use Affiliate Software Code of Conduct defaults.',\n },\n} as const satisfies StanddownPolicy;\n\n/**\n * Verified policy packs, safe to enable by default. Every entry here has a\n * cited `metadata.sourceUrl` and detection rules attributed to a network policy\n * or the piedotorg/standdown-domains list, and is enforced by\n * `scripts/policies-cite-check.mjs`.\n */\nexport const allPolicies = [\n cjPolicy,\n impactPolicy,\n rakutenPolicy,\n awinPolicy,\n shareasalePolicy,\n ebayEpnPolicy,\n amazonPolicy,\n universalPolicy,\n] as const satisfies readonly StanddownPolicy[];\n\n/**\n * Low-confidence packs whose redirect domains are inferred from domain\n * knowledge rather than verified against network documentation. Kept out of\n * `allPolicies` so the default set stays trustworthy; opt in explicitly (import\n * this array or name the pack via `policiesFor`) once you have verified them for\n * your integration.\n */\nexport const experimentalPolicies = [\n sovrnSkimlinksPolicy,\n partnerizePolicy,\n] as const satisfies readonly StanddownPolicy[];\n\nconst knownPolicies: readonly StanddownPolicy[] = [\n ...allPolicies,\n ...experimentalPolicies,\n];\n\nexport function policiesFor(networks: readonly string[]): StanddownPolicy[] {\n const wanted = new Set(networks);\n\n return knownPolicies.filter(\n (policy) => wanted.has(policy.id) || wanted.has(policy.network.id),\n );\n}\n"]}