@huloglobal/vendure-plugin-geo-block 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.
@@ -1,27 +1,34 @@
1
1
  /**
2
2
  * Region presets for the storefront geo-block.
3
3
  *
4
- * Each key is the value stored in the channel customField
5
- * `geoBlockAllowedRegions`; the array is the ISO 3166-1 alpha-2
6
- * country list it expands to. The site-config resolver unions the
7
- * countries from every selected region, adds the admin's "extra
8
- * allowed countries", then removes anything in the "blocked
9
- * countries" list — giving a single flat allow-list the storefront
10
- * checks each visitor against.
4
+ * Each preset is a hand-curated ISO-3166-1 alpha-2 country list. Admins
5
+ * tick presets in the UI; the resolver unions them, adds any extra
6
+ * countries, removes anything in the denylist, and emits a flat allow
7
+ * list the storefront enforces.
11
8
  *
12
- * `WORLDWIDE` is the special "no country filter" preset (still
13
- * subject to the blocked-countries list, so the admin can ship
14
- * "everywhere except these few" by picking WORLDWIDE + a denylist).
9
+ * `WORLDWIDE` is the special "no country filter" preset still subject
10
+ * to the denylist, so an admin can ship "everywhere except a few".
15
11
  */
16
- export type GeoRegionKey = 'EUROPE' | 'EU' | 'EEA' | 'BRITISH_ISLES' | 'UK_ONLY' | 'NORTH_AMERICA' | 'OCEANIA' | 'WORLDWIDE';
12
+ export type GeoRegionKey = 'EUROPE' | 'EU' | 'EEA' | 'EFTA' | 'SCHENGEN' | 'NORDIC' | 'BALTIC' | 'BENELUX' | 'DACH' | 'IBERIA' | 'BALKANS' | 'BRITISH_ISLES' | 'UK_CROWN_DEPENDENCIES' | 'UK_ONLY' | 'NORTH_AMERICA' | 'CENTRAL_AMERICA' | 'CARIBBEAN' | 'SOUTH_AMERICA' | 'LATAM' | 'OCEANIA' | 'ANZ' | 'GCC' | 'MENA' | 'ASEAN' | 'APAC' | 'EAST_ASIA' | 'SOUTH_ASIA' | 'AFRICA' | 'G7' | 'G20' | 'BRICS' | 'OECD' | 'NATO' | 'FIVE_EYES' | 'ENGLISH_SPEAKING' | 'COMMONWEALTH' | 'WORLDWIDE';
13
+ /**
14
+ * Human-readable metadata for each preset, for the admin UI.
15
+ * `kind` groups presets in the picker UI ("Trade blocs", "Geography", etc).
16
+ */
17
+ export interface RegionPresetMeta {
18
+ key: GeoRegionKey;
19
+ label: string;
20
+ kind: 'geography' | 'trade' | 'political' | 'language' | 'all';
21
+ description: string;
22
+ countryCount: number | null;
23
+ }
24
+ export declare const REGION_PRESETS: RegionPresetMeta[];
17
25
  /**
18
26
  * Resolve an admin's geo-block selections into a final country
19
27
  * allow-list (or `null` meaning "allow any country").
20
28
  *
21
29
  * final = (∪ region.expand for r in regions) ∪ extraAllowed − blocked
22
30
  *
23
- * Returns `null` if WORLDWIDE is among the selected regions AND there's
24
- * no other constraint that would make the resolved set finite — the
31
+ * Returns `null` if WORLDWIDE is among the selected regions the
25
32
  * caller then skips the country check and only applies the denylist.
26
33
  */
27
34
  export declare function resolveAllowedCountries(input: {
@@ -32,4 +39,22 @@ export declare function resolveAllowedCountries(input: {
32
39
  allowed: string[] | null;
33
40
  blocked: string[];
34
41
  };
42
+ /**
43
+ * Decide whether a given (country, region) tuple is allowed by the
44
+ * resolved rules. Shared by the controller and the admin "what-if"
45
+ * preview, so the storefront and the simulator never drift apart.
46
+ */
47
+ export declare function isAllowed(country: string | null, gbRegion: string | null, rules: {
48
+ enabled: boolean;
49
+ allowedCountries: string[] | null;
50
+ blockedCountries: string[];
51
+ allowedGbRegions: string[];
52
+ }): {
53
+ allowed: boolean;
54
+ reason: 'disabled' | 'denylist' | 'country-not-allowed' | 'uk-region-not-allowed' | 'ok';
55
+ };
56
+ /** Lightweight IP-in-CIDR check for the allowlist. Supports IPv4 only —
57
+ * enough for the office IPs / payment-processor ranges that the admin
58
+ * typically allowlists. IPv6 entries are checked as plain string match. */
59
+ export declare function ipMatchesAny(ip: string | null | undefined, list: string[]): boolean;
35
60
  //# sourceMappingURL=geo-regions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geo-regions.d.ts","sourceRoot":"","sources":["../src/geo-regions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAClB,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,eAAe,GAAG,SAAS,GACrD,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAgChD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAmBlD"}
1
+ {"version":3,"file":"geo-regions.d.ts","sourceRoot":"","sources":["../src/geo-regions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+FH,MAAM,MAAM,YAAY,GAClB,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GACnE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GACzC,eAAe,GAAG,uBAAuB,GAAG,SAAS,GACrD,eAAe,GAAG,iBAAiB,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,GAC7E,SAAS,GAAG,KAAK,GACjB,KAAK,GAAG,MAAM,GACd,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAC7C,QAAQ,GACR,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GACtD,kBAAkB,GAAG,cAAc,GACnC,WAAW,CAAC;AAgClB;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,eAAO,MAAM,cAAc,EAAE,gBAAgB,EA8C5C,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBlD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACrB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B,GACF;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,IAAI,CAAA;CAAE,CAgBhH;AAED;;2EAE2E;AAC3E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAqBnF"}
@@ -1,40 +1,173 @@
1
1
  "use strict";
2
+ /**
3
+ * Region presets for the storefront geo-block.
4
+ *
5
+ * Each preset is a hand-curated ISO-3166-1 alpha-2 country list. Admins
6
+ * tick presets in the UI; the resolver unions them, adds any extra
7
+ * countries, removes anything in the denylist, and emits a flat allow
8
+ * list the storefront enforces.
9
+ *
10
+ * `WORLDWIDE` is the special "no country filter" preset — still subject
11
+ * to the denylist, so an admin can ship "everywhere except a few".
12
+ */
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.REGION_PRESETS = void 0;
3
15
  exports.resolveAllowedCountries = resolveAllowedCountries;
16
+ exports.isAllowed = isAllowed;
17
+ exports.ipMatchesAny = ipMatchesAny;
4
18
  const EU_27 = [
5
- 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE',
6
- 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT',
7
- 'RO', 'SK', 'SI', 'ES', 'SE',
19
+ 'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU',
20
+ 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE',
8
21
  ];
9
- const EEA_EXTRA = ['IS', 'LI', 'NO']; // EEA non-EU members
22
+ const EEA_EXTRA = ['IS', 'LI', 'NO'];
23
+ const EFTA = ['CH', 'IS', 'LI', 'NO'];
24
+ const SCHENGEN_NON_EU = ['CH', 'IS', 'LI', 'NO'];
25
+ const BRITISH_ISLES = ['GB', 'IE', 'IM', 'JE', 'GG', 'FO'];
26
+ const UK_CROWN_DEPENDENCIES = ['GB', 'IM', 'JE', 'GG'];
10
27
  const NON_EU_EUROPE = [
11
- // The rest of geographic Europe — micro-states, Western Balkans,
12
- // Eastern Europe. Russia/Belarus included so the admin has a
13
- // single switch + the freedom to add them to the denylist if
14
- // they don't want to sell there.
15
28
  'GB', 'CH', 'NO', 'IS', 'LI',
16
29
  'AL', 'AD', 'BA', 'BY', 'FO', 'GI', 'IM', 'JE', 'GG',
17
30
  'MC', 'ME', 'MD', 'MK', 'RS', 'SM', 'UA', 'VA', 'XK', 'RU',
18
31
  ];
19
32
  const EUROPE = Array.from(new Set([...EU_27, ...NON_EU_EUROPE]));
33
+ const NORTH_AMERICA = ['US', 'CA', 'MX'];
34
+ const CENTRAL_AMERICA = ['BZ', 'CR', 'SV', 'GT', 'HN', 'NI', 'PA'];
35
+ const CARIBBEAN = ['AG', 'BS', 'BB', 'CU', 'DM', 'DO', 'GD', 'HT', 'JM', 'KN', 'LC', 'VC', 'TT'];
36
+ const SOUTH_AMERICA = ['AR', 'BO', 'BR', 'CL', 'CO', 'EC', 'GY', 'PY', 'PE', 'SR', 'UY', 'VE'];
37
+ const LATAM = Array.from(new Set([
38
+ ...CENTRAL_AMERICA, ...SOUTH_AMERICA, ...CARIBBEAN, 'MX',
39
+ ]));
40
+ const OCEANIA = ['AU', 'NZ', 'FJ', 'PG', 'SB', 'VU', 'WS', 'TO'];
41
+ const ANZ = ['AU', 'NZ'];
42
+ const GCC = ['BH', 'KW', 'OM', 'QA', 'SA', 'AE'];
43
+ const MENA = [
44
+ 'DZ', 'BH', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'OM', 'PS', 'QA', 'SA',
45
+ 'SY', 'TN', 'AE', 'YE',
46
+ ];
47
+ const NORDIC = ['DK', 'FI', 'IS', 'NO', 'SE'];
48
+ const BALTIC = ['EE', 'LV', 'LT'];
49
+ const BENELUX = ['BE', 'NL', 'LU'];
50
+ const DACH = ['DE', 'AT', 'CH'];
51
+ const IBERIA = ['ES', 'PT'];
52
+ const BALKANS = ['AL', 'BA', 'BG', 'HR', 'GR', 'XK', 'ME', 'MK', 'RO', 'RS', 'SI'];
53
+ const ASEAN = ['BN', 'KH', 'ID', 'LA', 'MY', 'MM', 'PH', 'SG', 'TH', 'VN'];
54
+ const APAC = [
55
+ 'AU', 'BN', 'CN', 'HK', 'IN', 'ID', 'JP', 'KR', 'KH', 'LA', 'MY', 'MM', 'NZ',
56
+ 'PH', 'SG', 'TH', 'TW', 'VN',
57
+ ];
58
+ const EAST_ASIA = ['CN', 'HK', 'JP', 'KR', 'MO', 'MN', 'TW'];
59
+ const SOUTH_ASIA = ['BD', 'BT', 'IN', 'MV', 'NP', 'LK', 'PK'];
60
+ const AFRICA = [
61
+ 'DZ', 'AO', 'BJ', 'BW', 'BF', 'BI', 'CM', 'CV', 'CF', 'TD', 'KM', 'CD', 'CG',
62
+ 'CI', 'DJ', 'EG', 'GQ', 'ER', 'SZ', 'ET', 'GA', 'GM', 'GH', 'GN', 'GW', 'KE',
63
+ 'LS', 'LR', 'LY', 'MG', 'MW', 'ML', 'MR', 'MU', 'MA', 'MZ', 'NA', 'NE', 'NG',
64
+ 'RW', 'ST', 'SN', 'SC', 'SL', 'SO', 'ZA', 'SS', 'SD', 'TZ', 'TG', 'TN', 'UG',
65
+ 'ZM', 'ZW',
66
+ ];
67
+ const G7 = ['CA', 'FR', 'DE', 'IT', 'JP', 'GB', 'US'];
68
+ const G20 = [
69
+ 'AR', 'AU', 'BR', 'CA', 'CN', 'FR', 'DE', 'IN', 'ID', 'IT', 'JP', 'KR', 'MX',
70
+ 'RU', 'SA', 'ZA', 'TR', 'GB', 'US',
71
+ ];
72
+ const BRICS = ['BR', 'RU', 'IN', 'CN', 'ZA'];
73
+ const OECD = [
74
+ 'AU', 'AT', 'BE', 'CA', 'CL', 'CO', 'CR', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE',
75
+ 'GR', 'HU', 'IS', 'IE', 'IL', 'IT', 'JP', 'KR', 'LV', 'LT', 'LU', 'MX', 'NL',
76
+ 'NZ', 'NO', 'PL', 'PT', 'SK', 'SI', 'ES', 'SE', 'CH', 'TR', 'GB', 'US',
77
+ ];
78
+ const ENGLISH_SPEAKING = [
79
+ 'AU', 'BS', 'BB', 'BZ', 'CA', 'DM', 'FJ', 'GD', 'GY', 'IE', 'JM', 'KE', 'LR',
80
+ 'MW', 'MT', 'NZ', 'NG', 'PG', 'SC', 'SG', 'SL', 'SB', 'ZA', 'LK', 'TZ', 'TT',
81
+ 'UG', 'GB', 'US', 'ZM', 'ZW',
82
+ ];
83
+ const COMMONWEALTH = [
84
+ 'AG', 'AU', 'BS', 'BD', 'BB', 'BZ', 'BW', 'BN', 'CM', 'CA', 'CY', 'DM', 'SZ',
85
+ 'FJ', 'GM', 'GH', 'GD', 'GY', 'IN', 'JM', 'KE', 'KI', 'LS', 'MW', 'MY', 'MV',
86
+ 'MT', 'MU', 'MZ', 'NA', 'NR', 'NZ', 'NG', 'PK', 'PG', 'RW', 'KN', 'LC', 'VC',
87
+ 'WS', 'SC', 'SL', 'SG', 'SB', 'ZA', 'LK', 'TZ', 'TO', 'TT', 'TV', 'UG', 'GB',
88
+ 'VU', 'ZM',
89
+ ];
90
+ const FIVE_EYES = ['AU', 'CA', 'NZ', 'GB', 'US'];
91
+ const NATO = [
92
+ 'AL', 'BE', 'BG', 'CA', 'HR', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU',
93
+ 'IS', 'IT', 'LV', 'LT', 'LU', 'MK', 'ME', 'NL', 'NO', 'PL', 'PT', 'RO', 'SK',
94
+ 'SI', 'ES', 'SE', 'TR', 'GB', 'US',
95
+ ];
20
96
  const REGION_TO_COUNTRIES = {
21
97
  EUROPE,
22
98
  EU: EU_27,
23
99
  EEA: Array.from(new Set([...EU_27, ...EEA_EXTRA])),
24
- BRITISH_ISLES: ['GB', 'IE', 'IM', 'JE', 'GG', 'FO'],
100
+ EFTA,
101
+ SCHENGEN: Array.from(new Set([...EU_27, ...SCHENGEN_NON_EU])),
102
+ NORDIC, BALTIC, BENELUX, DACH, IBERIA, BALKANS,
103
+ BRITISH_ISLES,
104
+ UK_CROWN_DEPENDENCIES,
25
105
  UK_ONLY: ['GB'],
26
- NORTH_AMERICA: ['US', 'CA', 'MX'],
27
- OCEANIA: ['AU', 'NZ'],
28
- WORLDWIDE: null, // null = no country restriction; denylist still applies
106
+ NORTH_AMERICA,
107
+ CENTRAL_AMERICA,
108
+ CARIBBEAN,
109
+ SOUTH_AMERICA,
110
+ LATAM,
111
+ OCEANIA,
112
+ ANZ,
113
+ GCC,
114
+ MENA,
115
+ ASEAN,
116
+ APAC,
117
+ EAST_ASIA,
118
+ SOUTH_ASIA,
119
+ AFRICA,
120
+ G7, G20, BRICS, OECD, NATO, FIVE_EYES,
121
+ ENGLISH_SPEAKING,
122
+ COMMONWEALTH,
123
+ WORLDWIDE: null,
29
124
  };
125
+ exports.REGION_PRESETS = [
126
+ { key: 'WORLDWIDE', label: 'Worldwide', kind: 'all', description: 'Allow every country (denylist still applies).', countryCount: null },
127
+ { key: 'UK_ONLY', label: 'United Kingdom only', kind: 'geography', description: 'GB only — pair with UK-region filter for England-and-Wales setups.', countryCount: 1 },
128
+ { key: 'BRITISH_ISLES', label: 'British Isles', kind: 'geography', description: 'GB + IE + the Crown Dependencies + Faroe Islands.', countryCount: 6 },
129
+ { key: 'UK_CROWN_DEPENDENCIES', label: 'UK + Crown Dependencies', kind: 'geography', description: 'GB plus Isle of Man, Jersey and Guernsey.', countryCount: 4 },
130
+ { key: 'EUROPE', label: 'Geographic Europe', kind: 'geography', description: 'All European countries (EU + non-EU + micro-states + Russia).', countryCount: EUROPE.length },
131
+ { key: 'EU', label: 'European Union (27)', kind: 'trade', description: 'All 27 EU member states.', countryCount: 27 },
132
+ { key: 'EEA', label: 'EEA', kind: 'trade', description: 'EU 27 + Iceland, Liechtenstein, Norway.', countryCount: 30 },
133
+ { key: 'EFTA', label: 'EFTA', kind: 'trade', description: 'Switzerland, Iceland, Liechtenstein, Norway.', countryCount: 4 },
134
+ { key: 'SCHENGEN', label: 'Schengen Area', kind: 'political', description: 'EU 27 (excl. opt-outs) + non-EU Schengen members.', countryCount: 31 },
135
+ { key: 'NORDIC', label: 'Nordic countries', kind: 'geography', description: 'Denmark, Finland, Iceland, Norway, Sweden.', countryCount: 5 },
136
+ { key: 'BALTIC', label: 'Baltic states', kind: 'geography', description: 'Estonia, Latvia, Lithuania.', countryCount: 3 },
137
+ { key: 'BENELUX', label: 'Benelux', kind: 'geography', description: 'Belgium, Netherlands, Luxembourg.', countryCount: 3 },
138
+ { key: 'DACH', label: 'DACH', kind: 'language', description: 'German-speaking: Germany, Austria, Switzerland.', countryCount: 3 },
139
+ { key: 'IBERIA', label: 'Iberian Peninsula', kind: 'geography', description: 'Spain and Portugal.', countryCount: 2 },
140
+ { key: 'BALKANS', label: 'Balkans', kind: 'geography', description: 'South-east Europe — Albania to Slovenia.', countryCount: BALKANS.length },
141
+ { key: 'NORTH_AMERICA', label: 'North America', kind: 'geography', description: 'US, Canada, Mexico.', countryCount: 3 },
142
+ { key: 'CENTRAL_AMERICA', label: 'Central America', kind: 'geography', description: 'Belize to Panama.', countryCount: CENTRAL_AMERICA.length },
143
+ { key: 'CARIBBEAN', label: 'Caribbean', kind: 'geography', description: 'Caribbean island nations.', countryCount: CARIBBEAN.length },
144
+ { key: 'SOUTH_AMERICA', label: 'South America', kind: 'geography', description: 'All 12 South American countries.', countryCount: 12 },
145
+ { key: 'LATAM', label: 'Latin America', kind: 'geography', description: 'Central + South America + Caribbean + Mexico.', countryCount: LATAM.length },
146
+ { key: 'OCEANIA', label: 'Oceania', kind: 'geography', description: 'Australia, NZ, and major Pacific nations.', countryCount: OCEANIA.length },
147
+ { key: 'ANZ', label: 'Australia + New Zealand', kind: 'geography', description: 'AU and NZ only.', countryCount: 2 },
148
+ { key: 'GCC', label: 'GCC', kind: 'trade', description: 'Gulf Cooperation Council: BH, KW, OM, QA, SA, AE.', countryCount: 6 },
149
+ { key: 'MENA', label: 'MENA', kind: 'geography', description: 'Middle East and North Africa.', countryCount: MENA.length },
150
+ { key: 'ASEAN', label: 'ASEAN', kind: 'trade', description: 'South-east Asia: 10 ASEAN member states.', countryCount: 10 },
151
+ { key: 'APAC', label: 'APAC', kind: 'geography', description: 'Broad Asia-Pacific region.', countryCount: APAC.length },
152
+ { key: 'EAST_ASIA', label: 'East Asia', kind: 'geography', description: 'China, Hong Kong, Japan, Korea, Taiwan, Macau, Mongolia.', countryCount: EAST_ASIA.length },
153
+ { key: 'SOUTH_ASIA', label: 'South Asia', kind: 'geography', description: 'Indian subcontinent.', countryCount: SOUTH_ASIA.length },
154
+ { key: 'AFRICA', label: 'Africa', kind: 'geography', description: 'All African nations.', countryCount: AFRICA.length },
155
+ { key: 'G7', label: 'G7', kind: 'political', description: 'Group of Seven advanced economies.', countryCount: 7 },
156
+ { key: 'G20', label: 'G20', kind: 'political', description: 'Group of Twenty.', countryCount: 19 },
157
+ { key: 'BRICS', label: 'BRICS', kind: 'political', description: 'Brazil, Russia, India, China, South Africa.', countryCount: 5 },
158
+ { key: 'OECD', label: 'OECD', kind: 'political', description: 'Organisation for Economic Co-operation and Development.', countryCount: OECD.length },
159
+ { key: 'NATO', label: 'NATO', kind: 'political', description: 'NATO member states.', countryCount: NATO.length },
160
+ { key: 'FIVE_EYES', label: 'Five Eyes', kind: 'political', description: 'AU, CA, NZ, GB, US.', countryCount: 5 },
161
+ { key: 'ENGLISH_SPEAKING', label: 'English-speaking countries', kind: 'language', description: 'Countries where English is an official or dominant language.', countryCount: ENGLISH_SPEAKING.length },
162
+ { key: 'COMMONWEALTH', label: 'Commonwealth of Nations', kind: 'language', description: '56 Commonwealth member states.', countryCount: COMMONWEALTH.length },
163
+ ];
30
164
  /**
31
165
  * Resolve an admin's geo-block selections into a final country
32
166
  * allow-list (or `null` meaning "allow any country").
33
167
  *
34
168
  * final = (∪ region.expand for r in regions) ∪ extraAllowed − blocked
35
169
  *
36
- * Returns `null` if WORLDWIDE is among the selected regions AND there's
37
- * no other constraint that would make the resolved set finite — the
170
+ * Returns `null` if WORLDWIDE is among the selected regions the
38
171
  * caller then skips the country check and only applies the denylist.
39
172
  */
40
173
  function resolveAllowedCountries(input) {
@@ -42,7 +175,6 @@ function resolveAllowedCountries(input) {
42
175
  const regions = (input.regions || []).map(norm);
43
176
  const extra = (input.extraAllowed || []).map(norm);
44
177
  const blocked = (input.blocked || []).map(norm);
45
- // Worldwide short-circuits — denylist is the only constraint.
46
178
  if (regions.includes('WORLDWIDE')) {
47
179
  return { allowed: null, blocked };
48
180
  }
@@ -59,4 +191,69 @@ function resolveAllowedCountries(input) {
59
191
  allowed.delete(c);
60
192
  return { allowed: Array.from(allowed).sort(), blocked };
61
193
  }
194
+ /**
195
+ * Decide whether a given (country, region) tuple is allowed by the
196
+ * resolved rules. Shared by the controller and the admin "what-if"
197
+ * preview, so the storefront and the simulator never drift apart.
198
+ */
199
+ function isAllowed(country, gbRegion, rules) {
200
+ if (!rules.enabled)
201
+ return { allowed: true, reason: 'disabled' };
202
+ const cc = (country || '').toUpperCase();
203
+ const rr = (gbRegion || '').toUpperCase();
204
+ if (cc && rules.blockedCountries.includes(cc)) {
205
+ return { allowed: false, reason: 'denylist' };
206
+ }
207
+ if (rules.allowedCountries !== null && cc && !rules.allowedCountries.includes(cc)) {
208
+ return { allowed: false, reason: 'country-not-allowed' };
209
+ }
210
+ if (cc === 'GB' && rules.allowedGbRegions.length > 0) {
211
+ if (rr && !rules.allowedGbRegions.includes(rr)) {
212
+ return { allowed: false, reason: 'uk-region-not-allowed' };
213
+ }
214
+ }
215
+ return { allowed: true, reason: 'ok' };
216
+ }
217
+ /** Lightweight IP-in-CIDR check for the allowlist. Supports IPv4 only —
218
+ * enough for the office IPs / payment-processor ranges that the admin
219
+ * typically allowlists. IPv6 entries are checked as plain string match. */
220
+ function ipMatchesAny(ip, list) {
221
+ if (!ip || !(list === null || list === void 0 ? void 0 : list.length))
222
+ return false;
223
+ for (const entry of list) {
224
+ const trimmed = entry.trim();
225
+ if (!trimmed)
226
+ continue;
227
+ if (trimmed === ip)
228
+ return true;
229
+ if (trimmed.includes('/') && ip.includes('.')) {
230
+ // IPv4 CIDR
231
+ const [base, bitsStr] = trimmed.split('/');
232
+ const bits = parseInt(bitsStr, 10);
233
+ if (isFinite(bits) && bits >= 0 && bits <= 32) {
234
+ const a = ipv4ToInt(ip);
235
+ const b = ipv4ToInt(base);
236
+ if (a !== null && b !== null) {
237
+ const mask = bits === 0 ? 0 : (~0 << (32 - bits)) >>> 0;
238
+ if ((a & mask) === (b & mask))
239
+ return true;
240
+ }
241
+ }
242
+ }
243
+ }
244
+ return false;
245
+ }
246
+ function ipv4ToInt(ip) {
247
+ const parts = ip.split('.');
248
+ if (parts.length !== 4)
249
+ return null;
250
+ let n = 0;
251
+ for (const p of parts) {
252
+ const o = parseInt(p, 10);
253
+ if (!isFinite(o) || o < 0 || o > 255)
254
+ return null;
255
+ n = (n << 8) + o;
256
+ }
257
+ return n >>> 0;
258
+ }
62
259
  //# sourceMappingURL=geo-regions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geo-regions.js","sourceRoot":"","sources":["../src/geo-regions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geo-regions.js","sourceRoot":"","sources":["../src/geo-regions.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  /**
2
2
  * `@huloglobal/vendure-plugin-geo-block` — public exports.
3
3
  *
4
- * `GeoBlockPlugin` registers the per-channel custom fields, controllers
5
- * and admin UI. `resolveAllowedCountries` is also re-exported so
6
- * downstream plugins / scripts can compute the resolved country
7
- * allow-list outside the HTTP path.
4
+ * `GeoBlockPlugin` registers the per-channel custom fields, controllers,
5
+ * GeoBlockEvent audit entity and admin UI. The presets + helpers below
6
+ * are exported so downstream plugins / scripts can compute the resolved
7
+ * country allow-list and run "what-if" checks outside the HTTP path.
8
8
  */
9
- export { GeoBlockPlugin, GeoBlockPluginOptions } from './plugin';
10
- export { resolveAllowedCountries, GeoRegionKey } from './geo-regions';
9
+ export { GeoBlockPlugin, GeoBlockPluginOptions, MaintenanceWindow } from './plugin';
10
+ export { REGION_PRESETS, RegionPresetMeta, GeoRegionKey, resolveAllowedCountries, isAllowed, ipMatchesAny, } from './geo-regions';
11
+ export { GeoBlockEvent } from './geo-block-event.entity';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,SAAS,EACT,YAAY,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -2,15 +2,20 @@
2
2
  /**
3
3
  * `@huloglobal/vendure-plugin-geo-block` — public exports.
4
4
  *
5
- * `GeoBlockPlugin` registers the per-channel custom fields, controllers
6
- * and admin UI. `resolveAllowedCountries` is also re-exported so
7
- * downstream plugins / scripts can compute the resolved country
8
- * allow-list outside the HTTP path.
5
+ * `GeoBlockPlugin` registers the per-channel custom fields, controllers,
6
+ * GeoBlockEvent audit entity and admin UI. The presets + helpers below
7
+ * are exported so downstream plugins / scripts can compute the resolved
8
+ * country allow-list and run "what-if" checks outside the HTTP path.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.resolveAllowedCountries = exports.GeoBlockPlugin = void 0;
11
+ exports.GeoBlockEvent = exports.ipMatchesAny = exports.isAllowed = exports.resolveAllowedCountries = exports.REGION_PRESETS = exports.GeoBlockPlugin = void 0;
12
12
  var plugin_1 = require("./plugin");
13
13
  Object.defineProperty(exports, "GeoBlockPlugin", { enumerable: true, get: function () { return plugin_1.GeoBlockPlugin; } });
14
14
  var geo_regions_1 = require("./geo-regions");
15
+ Object.defineProperty(exports, "REGION_PRESETS", { enumerable: true, get: function () { return geo_regions_1.REGION_PRESETS; } });
15
16
  Object.defineProperty(exports, "resolveAllowedCountries", { enumerable: true, get: function () { return geo_regions_1.resolveAllowedCountries; } });
17
+ Object.defineProperty(exports, "isAllowed", { enumerable: true, get: function () { return geo_regions_1.isAllowed; } });
18
+ Object.defineProperty(exports, "ipMatchesAny", { enumerable: true, get: function () { return geo_regions_1.ipMatchesAny; } });
19
+ var geo_block_event_entity_1 = require("./geo-block-event.entity");
20
+ Object.defineProperty(exports, "GeoBlockEvent", { enumerable: true, get: function () { return geo_block_event_entity_1.GeoBlockEvent; } });
16
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAAiE;AAAxD,wGAAA,cAAc,OAAA;AACvB,6CAAsE;AAA7D,sHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAAoF;AAA3E,wGAAA,cAAc,OAAA;AACvB,6CAOuB;AANnB,6GAAA,cAAc,OAAA;AAGd,sHAAA,uBAAuB,OAAA;AACvB,wGAAA,SAAS,OAAA;AACT,2GAAA,YAAY,OAAA;AAEhB,mEAAyD;AAAhD,uHAAA,aAAa,OAAA"}
package/dist/plugin.d.ts CHANGED
@@ -1,35 +1,34 @@
1
1
  import { Type } from '@vendure/core';
2
+ export interface MaintenanceWindow {
3
+ /** ISO-8601 timestamp. */
4
+ startsAt: string;
5
+ endsAt: string;
6
+ /** Optional IPs that bypass maintenance (office, oncall, etc.). */
7
+ allowedIps?: string[];
8
+ }
2
9
  export interface GeoBlockPluginOptions {
3
- /** Public-facing host of the Vendure server. Used in licence
4
- * domain matching — must match one of the JWT's `allowedDomains`. */
10
+ /** Public-facing host of the Vendure server. Used in licence domain
11
+ * matching — must match one of the JWT's `allowedDomains`. */
5
12
  publicBaseUrl: string;
6
- /** JWT licence key. Without it, the public site-config endpoint
7
- * still resolves the rules but always returns `enabled: false`. */
13
+ /** JWT licence key. Without it, the public site-config endpoint still
14
+ * resolves the rules but always returns `enabled: false`. */
8
15
  licenceKey?: string;
16
+ /** Optional scheduled-maintenance window. When the current time falls
17
+ * inside this window the `/geo-block/check` endpoint refuses every
18
+ * request (except IPs on the per-channel allowlist or this option's
19
+ * own `allowedIps`). */
20
+ maintenanceWindow?: MaintenanceWindow;
9
21
  }
10
22
  export declare function getOptions(): GeoBlockPluginOptions;
11
23
  /**
12
24
  * `@huloglobal/vendure-plugin-geo-block`
13
25
  *
14
- * Per-channel geo-restriction for Vendure storefronts. The plugin owns
15
- * a flat `/geo-block/site-config` endpoint the storefront polls (cached
16
- * client-side) plus an admin page for configuring region presets,
17
- * extra allowed countries, denylist, and UK-region subfilter.
18
- *
19
- * Add to your Vendure config:
20
- *
21
- * ```ts
22
- * import { GeoBlockPlugin } from '@huloglobal/vendure-plugin-geo-block';
23
- *
24
- * export const config: VendureConfig = {
25
- * plugins: [
26
- * GeoBlockPlugin.init({
27
- * publicBaseUrl: 'https://shop.example.com',
28
- * licenceKey: process.env.HULO_LICENCE_KEY,
29
- * }),
30
- * ],
31
- * };
32
- * ```
26
+ * Per-channel geo-restriction for Vendure storefronts. Owns three
27
+ * public endpoints (`/geo-block/site-config`, `/geo-block/check`,
28
+ * `/geo-block/presets`), six admin endpoints, and a custom-fields-only
29
+ * Channel extension that surfaces all rules in the standard Vendure
30
+ * admin Channel form — so even without the dedicated UI you can manage
31
+ * blocks from the channel settings.
33
32
  */
34
33
  export declare class GeoBlockPlugin {
35
34
  private static revocation;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,IAAI,EAAiB,MAAM,eAAe,CAAC;AAItF,MAAM,WAAW,qBAAqB;IAClC;0EACsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB;wEACoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAiBD,wBAAgB,UAAU,IAAI,qBAAqB,CAA0B;AAE7E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAiDa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAE3D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC;IA6BjE,MAAM,CAAC,YAAY;;;;;;;;MAUjB;CACL"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,IAAI,EAAiB,MAAM,eAAe,CAAC;AAMtF,MAAM,WAAW,iBAAiB;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IAClC;mEAC+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB;kEAC8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;6BAGyB;IACzB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAiBD,wBAAgB,UAAU,IAAI,qBAAqB,CAA0B;AAE7E;;;;;;;;;GASG;AACH,qBA+Ea,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAE3D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC;IA6BjE,MAAM,CAAC,YAAY;;;;;;;;MAUjB;CACL"}