@voyantjs/utils 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +109 -0
- package/README.md +42 -0
- package/dist/accounting-countries.d.ts +12 -0
- package/dist/accounting-countries.d.ts.map +1 -0
- package/dist/accounting-countries.js +307 -0
- package/dist/accounting-countries.js.map +1 -0
- package/dist/accounting-regions.d.ts +103 -0
- package/dist/accounting-regions.d.ts.map +1 -0
- package/dist/accounting-regions.js +38 -0
- package/dist/accounting-regions.js.map +1 -0
- package/dist/airlines.d.ts +960 -0
- package/dist/airlines.d.ts.map +1 -0
- package/dist/airlines.js +989 -0
- package/dist/airlines.js.map +1 -0
- package/dist/analytics/api-key-events.d.ts +89 -0
- package/dist/analytics/api-key-events.d.ts.map +1 -0
- package/dist/analytics/api-key-events.js +99 -0
- package/dist/analytics/api-key-events.js.map +1 -0
- package/dist/api-keys-client.d.ts +40 -0
- package/dist/api-keys-client.d.ts.map +1 -0
- package/dist/api-keys-client.js +63 -0
- package/dist/api-keys-client.js.map +1 -0
- package/dist/api-keys.d.ts +48 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +108 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/cache.d.ts +123 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +182 -0
- package/dist/cache.js.map +1 -0
- package/dist/checkout-signature.d.ts +15 -0
- package/dist/checkout-signature.d.ts.map +1 -0
- package/dist/checkout-signature.js +64 -0
- package/dist/checkout-signature.js.map +1 -0
- package/dist/conditions.d.ts +36 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/conditions.js +396 -0
- package/dist/conditions.js.map +1 -0
- package/dist/countries.d.ts +5 -0
- package/dist/countries.d.ts.map +1 -0
- package/dist/countries.js +251 -0
- package/dist/countries.js.map +1 -0
- package/dist/currencies.d.ts +1011 -0
- package/dist/currencies.d.ts.map +1 -0
- package/dist/currencies.js +1011 -0
- package/dist/currencies.js.map +1 -0
- package/dist/email/send.d.ts +20 -0
- package/dist/email/send.d.ts.map +1 -0
- package/dist/email/send.js +53 -0
- package/dist/email/send.js.map +1 -0
- package/dist/form-runtime.d.ts +38 -0
- package/dist/form-runtime.d.ts.map +1 -0
- package/dist/form-runtime.js +174 -0
- package/dist/form-runtime.js.map +1 -0
- package/dist/gcs/storage.d.ts +23 -0
- package/dist/gcs/storage.d.ts.map +1 -0
- package/dist/gcs/storage.js +25 -0
- package/dist/gcs/storage.js.map +1 -0
- package/dist/geo.d.ts +85 -0
- package/dist/geo.d.ts.map +1 -0
- package/dist/geo.js +141 -0
- package/dist/geo.js.map +1 -0
- package/dist/geographic-regions.d.ts +66 -0
- package/dist/geographic-regions.d.ts.map +1 -0
- package/dist/geographic-regions.js +326 -0
- package/dist/geographic-regions.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/kms-aws.d.ts +26 -0
- package/dist/kms-aws.d.ts.map +1 -0
- package/dist/kms-aws.js +133 -0
- package/dist/kms-aws.js.map +1 -0
- package/dist/kms-crypto.d.ts +20 -0
- package/dist/kms-crypto.d.ts.map +1 -0
- package/dist/kms-crypto.js +108 -0
- package/dist/kms-crypto.js.map +1 -0
- package/dist/kms-env.d.ts +13 -0
- package/dist/kms-env.d.ts.map +1 -0
- package/dist/kms-env.js +13 -0
- package/dist/kms-env.js.map +1 -0
- package/dist/kms-gcp.d.ts +32 -0
- package/dist/kms-gcp.d.ts.map +1 -0
- package/dist/kms-gcp.js +116 -0
- package/dist/kms-gcp.js.map +1 -0
- package/dist/kms-local.d.ts +13 -0
- package/dist/kms-local.d.ts.map +1 -0
- package/dist/kms-local.js +13 -0
- package/dist/kms-local.js.map +1 -0
- package/dist/kms-symmetric.d.ts +14 -0
- package/dist/kms-symmetric.d.ts.map +1 -0
- package/dist/kms-symmetric.js +67 -0
- package/dist/kms-symmetric.js.map +1 -0
- package/dist/kms.d.ts +66 -0
- package/dist/kms.d.ts.map +1 -0
- package/dist/kms.js +169 -0
- package/dist/kms.js.map +1 -0
- package/dist/kv-codecs.d.ts +6 -0
- package/dist/kv-codecs.d.ts.map +1 -0
- package/dist/kv-codecs.js +4 -0
- package/dist/kv-codecs.js.map +1 -0
- package/dist/kv.d.ts +10 -0
- package/dist/kv.d.ts.map +1 -0
- package/dist/kv.js +18 -0
- package/dist/kv.js.map +1 -0
- package/dist/languages.d.ts +187 -0
- package/dist/languages.d.ts.map +1 -0
- package/dist/languages.js +187 -0
- package/dist/languages.js.map +1 -0
- package/dist/localized-countries-regions.d.ts +15 -0
- package/dist/localized-countries-regions.d.ts.map +1 -0
- package/dist/localized-countries-regions.js +674 -0
- package/dist/localized-countries-regions.js.map +1 -0
- package/dist/localized-regions.d.ts +33 -0
- package/dist/localized-regions.d.ts.map +1 -0
- package/dist/localized-regions.js +63 -0
- package/dist/localized-regions.js.map +1 -0
- package/dist/price/resolve.d.ts +91 -0
- package/dist/price/resolve.d.ts.map +1 -0
- package/dist/price/resolve.js +227 -0
- package/dist/price/resolve.js.map +1 -0
- package/dist/rate-limits.d.ts +39 -0
- package/dist/rate-limits.d.ts.map +1 -0
- package/dist/rate-limits.js +86 -0
- package/dist/rate-limits.js.map +1 -0
- package/dist/redis.d.ts +13 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +16 -0
- package/dist/redis.js.map +1 -0
- package/dist/region-only.d.ts +11 -0
- package/dist/region-only.d.ts.map +1 -0
- package/dist/region-only.js +49 -0
- package/dist/region-only.js.map +1 -0
- package/dist/region.d.ts +11 -0
- package/dist/region.d.ts.map +1 -0
- package/dist/region.js +47 -0
- package/dist/region.js.map +1 -0
- package/dist/romania-bucharest-sectors.d.ts +6 -0
- package/dist/romania-bucharest-sectors.d.ts.map +1 -0
- package/dist/romania-bucharest-sectors.js +27 -0
- package/dist/romania-bucharest-sectors.js.map +1 -0
- package/dist/romania-counties.d.ts +6 -0
- package/dist/romania-counties.d.ts.map +1 -0
- package/dist/romania-counties.js +171 -0
- package/dist/romania-counties.js.map +1 -0
- package/dist/session-claims.d.ts +40 -0
- package/dist/session-claims.d.ts.map +1 -0
- package/dist/session-claims.js +184 -0
- package/dist/session-claims.js.map +1 -0
- package/dist/sms/provider.d.ts +28 -0
- package/dist/sms/provider.d.ts.map +1 -0
- package/dist/sms/provider.js +50 -0
- package/dist/sms/provider.js.map +1 -0
- package/dist/sms/segments.d.ts +3 -0
- package/dist/sms/segments.d.ts.map +1 -0
- package/dist/sms/segments.js +33 -0
- package/dist/sms/segments.js.map +1 -0
- package/dist/temporal.d.ts +2 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +6 -0
- package/dist/temporal.js.map +1 -0
- package/dist/timezones.d.ts +9 -0
- package/dist/timezones.d.ts.map +1 -0
- package/dist/timezones.js +1217 -0
- package/dist/timezones.js.map +1 -0
- package/dist/twilio/client.d.ts +13 -0
- package/dist/twilio/client.d.ts.map +1 -0
- package/dist/twilio/client.js +26 -0
- package/dist/twilio/client.js.map +1 -0
- package/dist/usage/index.d.ts +34 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +18 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/usage/policy.d.ts +27 -0
- package/dist/usage/policy.d.ts.map +1 -0
- package/dist/usage/policy.js +17 -0
- package/dist/usage/policy.js.map +1 -0
- package/dist/validation/log.d.ts +10 -0
- package/dist/validation/log.d.ts.map +1 -0
- package/dist/validation/log.js +37 -0
- package/dist/validation/log.js.map +1 -0
- package/dist/with-timeout.d.ts +2 -0
- package/dist/with-timeout.d.ts.map +1 -0
- package/dist/with-timeout.js +15 -0
- package/dist/with-timeout.js.map +1 -0
- package/dist/zod-form-builder.d.ts +45 -0
- package/dist/zod-form-builder.d.ts.map +1 -0
- package/dist/zod-form-builder.js +216 -0
- package/dist/zod-form-builder.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geographic region utilities for filtering products by world regions.
|
|
3
|
+
*
|
|
4
|
+
* Regions follow the UN geoscheme (M49) standard:
|
|
5
|
+
* - af: Africa
|
|
6
|
+
* - an: Antarctica
|
|
7
|
+
* - as: Asia
|
|
8
|
+
* - eu: Europe
|
|
9
|
+
* - na: North America
|
|
10
|
+
* - oc: Oceania
|
|
11
|
+
* - sa: South America
|
|
12
|
+
* - me: Middle East (custom, subset of Asia/Africa)
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Geographic region codes
|
|
16
|
+
*/
|
|
17
|
+
export type GeographicRegionCode = "af" | "an" | "as" | "eu" | "na" | "oc" | "sa" | "me";
|
|
18
|
+
/**
|
|
19
|
+
* Geographic region metadata
|
|
20
|
+
*/
|
|
21
|
+
export interface GeographicRegion {
|
|
22
|
+
code: GeographicRegionCode;
|
|
23
|
+
name: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* All available geographic regions
|
|
27
|
+
*/
|
|
28
|
+
export declare const GEOGRAPHIC_REGIONS: GeographicRegion[];
|
|
29
|
+
/**
|
|
30
|
+
* Get the geographic region for a country code.
|
|
31
|
+
*
|
|
32
|
+
* @param countryCode - ISO 3166-1 alpha-2 country code (e.g., "RO", "EG")
|
|
33
|
+
* @returns Geographic region code or null if not found
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* getGeographicRegion("RO") // "eu"
|
|
37
|
+
* getGeographicRegion("EG") // "af"
|
|
38
|
+
* getGeographicRegion("AE") // "me"
|
|
39
|
+
*/
|
|
40
|
+
export declare function getGeographicRegion(countryCode: string): GeographicRegionCode | null;
|
|
41
|
+
/**
|
|
42
|
+
* Get all country codes for a geographic region.
|
|
43
|
+
*
|
|
44
|
+
* @param region - Geographic region code (e.g., "eu", "af")
|
|
45
|
+
* @returns Array of ISO 3166-1 alpha-2 country codes
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* getCountriesByRegion("eu") // ["AL", "AD", "AT", ...]
|
|
49
|
+
* getCountriesByRegion("me") // ["BH", "IR", "IQ", ...]
|
|
50
|
+
*/
|
|
51
|
+
export declare function getCountriesByRegion(region: GeographicRegionCode): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Check if a string is a valid geographic region code.
|
|
54
|
+
*
|
|
55
|
+
* @param code - String to check
|
|
56
|
+
* @returns True if the code is a valid region code
|
|
57
|
+
*/
|
|
58
|
+
export declare function isValidRegionCode(code: string): code is GeographicRegionCode;
|
|
59
|
+
/**
|
|
60
|
+
* Get region metadata by code.
|
|
61
|
+
*
|
|
62
|
+
* @param code - Geographic region code
|
|
63
|
+
* @returns Region metadata or null if not found
|
|
64
|
+
*/
|
|
65
|
+
export declare function getRegionByCode(code: string): GeographicRegion | null;
|
|
66
|
+
//# sourceMappingURL=geographic-regions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geographic-regions.d.ts","sourceRoot":"","sources":["../src/geographic-regions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAExF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAShD,CAAA;AAuQD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAIpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,oBAAoB,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geographic region utilities for filtering products by world regions.
|
|
3
|
+
*
|
|
4
|
+
* Regions follow the UN geoscheme (M49) standard:
|
|
5
|
+
* - af: Africa
|
|
6
|
+
* - an: Antarctica
|
|
7
|
+
* - as: Asia
|
|
8
|
+
* - eu: Europe
|
|
9
|
+
* - na: North America
|
|
10
|
+
* - oc: Oceania
|
|
11
|
+
* - sa: South America
|
|
12
|
+
* - me: Middle East (custom, subset of Asia/Africa)
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* All available geographic regions
|
|
16
|
+
*/
|
|
17
|
+
export const GEOGRAPHIC_REGIONS = [
|
|
18
|
+
{ code: "af", name: "Africa" },
|
|
19
|
+
{ code: "an", name: "Antarctica" },
|
|
20
|
+
{ code: "as", name: "Asia" },
|
|
21
|
+
{ code: "eu", name: "Europe" },
|
|
22
|
+
{ code: "na", name: "North America" },
|
|
23
|
+
{ code: "oc", name: "Oceania" },
|
|
24
|
+
{ code: "sa", name: "South America" },
|
|
25
|
+
{ code: "me", name: "Middle East" },
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Country codes grouped by geographic region
|
|
29
|
+
* ISO 3166-1 alpha-2 country codes
|
|
30
|
+
*/
|
|
31
|
+
const REGION_COUNTRIES = {
|
|
32
|
+
// Africa
|
|
33
|
+
af: [
|
|
34
|
+
"DZ",
|
|
35
|
+
"AO",
|
|
36
|
+
"BJ",
|
|
37
|
+
"BW",
|
|
38
|
+
"BF",
|
|
39
|
+
"BI",
|
|
40
|
+
"CV",
|
|
41
|
+
"CM",
|
|
42
|
+
"CF",
|
|
43
|
+
"TD",
|
|
44
|
+
"KM",
|
|
45
|
+
"CG",
|
|
46
|
+
"CD",
|
|
47
|
+
"CI",
|
|
48
|
+
"DJ",
|
|
49
|
+
"EG",
|
|
50
|
+
"GQ",
|
|
51
|
+
"ER",
|
|
52
|
+
"SZ",
|
|
53
|
+
"ET",
|
|
54
|
+
"GA",
|
|
55
|
+
"GM",
|
|
56
|
+
"GH",
|
|
57
|
+
"GN",
|
|
58
|
+
"GW",
|
|
59
|
+
"KE",
|
|
60
|
+
"LS",
|
|
61
|
+
"LR",
|
|
62
|
+
"LY",
|
|
63
|
+
"MG",
|
|
64
|
+
"MW",
|
|
65
|
+
"ML",
|
|
66
|
+
"MR",
|
|
67
|
+
"MU",
|
|
68
|
+
"YT",
|
|
69
|
+
"MA",
|
|
70
|
+
"MZ",
|
|
71
|
+
"NA",
|
|
72
|
+
"NE",
|
|
73
|
+
"NG",
|
|
74
|
+
"RW",
|
|
75
|
+
"RE",
|
|
76
|
+
"SH",
|
|
77
|
+
"ST",
|
|
78
|
+
"SN",
|
|
79
|
+
"SC",
|
|
80
|
+
"SL",
|
|
81
|
+
"SO",
|
|
82
|
+
"ZA",
|
|
83
|
+
"SS",
|
|
84
|
+
"SD",
|
|
85
|
+
"TZ",
|
|
86
|
+
"TG",
|
|
87
|
+
"TN",
|
|
88
|
+
"UG",
|
|
89
|
+
"EH",
|
|
90
|
+
"ZM",
|
|
91
|
+
"ZW",
|
|
92
|
+
],
|
|
93
|
+
// Antarctica
|
|
94
|
+
an: ["AQ", "BV", "GS", "HM", "TF"],
|
|
95
|
+
// Asia (excluding Middle East countries)
|
|
96
|
+
as: [
|
|
97
|
+
"AF",
|
|
98
|
+
"AM",
|
|
99
|
+
"AZ",
|
|
100
|
+
"BD",
|
|
101
|
+
"BT",
|
|
102
|
+
"BN",
|
|
103
|
+
"KH",
|
|
104
|
+
"CN",
|
|
105
|
+
"CY",
|
|
106
|
+
"GE",
|
|
107
|
+
"HK",
|
|
108
|
+
"IN",
|
|
109
|
+
"ID",
|
|
110
|
+
"JP",
|
|
111
|
+
"KZ",
|
|
112
|
+
"KP",
|
|
113
|
+
"KR",
|
|
114
|
+
"KG",
|
|
115
|
+
"LA",
|
|
116
|
+
"MO",
|
|
117
|
+
"MY",
|
|
118
|
+
"MV",
|
|
119
|
+
"MN",
|
|
120
|
+
"MM",
|
|
121
|
+
"NP",
|
|
122
|
+
"PK",
|
|
123
|
+
"PH",
|
|
124
|
+
"SG",
|
|
125
|
+
"LK",
|
|
126
|
+
"TW",
|
|
127
|
+
"TJ",
|
|
128
|
+
"TH",
|
|
129
|
+
"TL",
|
|
130
|
+
"TM",
|
|
131
|
+
"UZ",
|
|
132
|
+
"VN",
|
|
133
|
+
],
|
|
134
|
+
// Europe
|
|
135
|
+
eu: [
|
|
136
|
+
"AL",
|
|
137
|
+
"AD",
|
|
138
|
+
"AT",
|
|
139
|
+
"BY",
|
|
140
|
+
"BE",
|
|
141
|
+
"BA",
|
|
142
|
+
"BG",
|
|
143
|
+
"HR",
|
|
144
|
+
"CZ",
|
|
145
|
+
"DK",
|
|
146
|
+
"EE",
|
|
147
|
+
"FO",
|
|
148
|
+
"FI",
|
|
149
|
+
"FR",
|
|
150
|
+
"DE",
|
|
151
|
+
"GI",
|
|
152
|
+
"GR",
|
|
153
|
+
"GG",
|
|
154
|
+
"HU",
|
|
155
|
+
"IS",
|
|
156
|
+
"IE",
|
|
157
|
+
"IM",
|
|
158
|
+
"IT",
|
|
159
|
+
"JE",
|
|
160
|
+
"XK",
|
|
161
|
+
"LV",
|
|
162
|
+
"LI",
|
|
163
|
+
"LT",
|
|
164
|
+
"LU",
|
|
165
|
+
"MT",
|
|
166
|
+
"MD",
|
|
167
|
+
"MC",
|
|
168
|
+
"ME",
|
|
169
|
+
"NL",
|
|
170
|
+
"MK",
|
|
171
|
+
"NO",
|
|
172
|
+
"PL",
|
|
173
|
+
"PT",
|
|
174
|
+
"RO",
|
|
175
|
+
"RU",
|
|
176
|
+
"SM",
|
|
177
|
+
"RS",
|
|
178
|
+
"SK",
|
|
179
|
+
"SI",
|
|
180
|
+
"ES",
|
|
181
|
+
"SJ",
|
|
182
|
+
"SE",
|
|
183
|
+
"CH",
|
|
184
|
+
"UA",
|
|
185
|
+
"GB",
|
|
186
|
+
"VA",
|
|
187
|
+
"AX",
|
|
188
|
+
],
|
|
189
|
+
// North America (including Central America and Caribbean)
|
|
190
|
+
na: [
|
|
191
|
+
"AI",
|
|
192
|
+
"AG",
|
|
193
|
+
"AW",
|
|
194
|
+
"BS",
|
|
195
|
+
"BB",
|
|
196
|
+
"BZ",
|
|
197
|
+
"BM",
|
|
198
|
+
"CA",
|
|
199
|
+
"KY",
|
|
200
|
+
"CR",
|
|
201
|
+
"CU",
|
|
202
|
+
"CW",
|
|
203
|
+
"DM",
|
|
204
|
+
"DO",
|
|
205
|
+
"SV",
|
|
206
|
+
"GL",
|
|
207
|
+
"GD",
|
|
208
|
+
"GP",
|
|
209
|
+
"GT",
|
|
210
|
+
"HT",
|
|
211
|
+
"HN",
|
|
212
|
+
"JM",
|
|
213
|
+
"MQ",
|
|
214
|
+
"MX",
|
|
215
|
+
"MS",
|
|
216
|
+
"NI",
|
|
217
|
+
"PA",
|
|
218
|
+
"PR",
|
|
219
|
+
"BL",
|
|
220
|
+
"KN",
|
|
221
|
+
"LC",
|
|
222
|
+
"MF",
|
|
223
|
+
"PM",
|
|
224
|
+
"VC",
|
|
225
|
+
"SX",
|
|
226
|
+
"TT",
|
|
227
|
+
"TC",
|
|
228
|
+
"US",
|
|
229
|
+
"VI",
|
|
230
|
+
"VG",
|
|
231
|
+
],
|
|
232
|
+
// Oceania (Australia, New Zealand, Pacific Islands)
|
|
233
|
+
oc: [
|
|
234
|
+
"AS",
|
|
235
|
+
"AU",
|
|
236
|
+
"CK",
|
|
237
|
+
"FJ",
|
|
238
|
+
"PF",
|
|
239
|
+
"GU",
|
|
240
|
+
"KI",
|
|
241
|
+
"MH",
|
|
242
|
+
"FM",
|
|
243
|
+
"NR",
|
|
244
|
+
"NC",
|
|
245
|
+
"NZ",
|
|
246
|
+
"NU",
|
|
247
|
+
"NF",
|
|
248
|
+
"MP",
|
|
249
|
+
"PW",
|
|
250
|
+
"PG",
|
|
251
|
+
"PN",
|
|
252
|
+
"WS",
|
|
253
|
+
"SB",
|
|
254
|
+
"TK",
|
|
255
|
+
"TO",
|
|
256
|
+
"TV",
|
|
257
|
+
"UM",
|
|
258
|
+
"VU",
|
|
259
|
+
"WF",
|
|
260
|
+
"CX",
|
|
261
|
+
"CC",
|
|
262
|
+
],
|
|
263
|
+
// South America
|
|
264
|
+
sa: ["AR", "BO", "BR", "CL", "CO", "EC", "FK", "GF", "GY", "PY", "PE", "SR", "UY", "VE"],
|
|
265
|
+
// Middle East (custom region for travel industry)
|
|
266
|
+
me: ["BH", "IR", "IQ", "IL", "JO", "KW", "LB", "OM", "PS", "QA", "SA", "SY", "TR", "AE", "YE"],
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* Reverse lookup: country code to region
|
|
270
|
+
*/
|
|
271
|
+
const COUNTRY_TO_REGION = new Map();
|
|
272
|
+
// Build reverse lookup
|
|
273
|
+
for (const [region, countries] of Object.entries(REGION_COUNTRIES)) {
|
|
274
|
+
for (const country of countries) {
|
|
275
|
+
COUNTRY_TO_REGION.set(country, region);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get the geographic region for a country code.
|
|
280
|
+
*
|
|
281
|
+
* @param countryCode - ISO 3166-1 alpha-2 country code (e.g., "RO", "EG")
|
|
282
|
+
* @returns Geographic region code or null if not found
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* getGeographicRegion("RO") // "eu"
|
|
286
|
+
* getGeographicRegion("EG") // "af"
|
|
287
|
+
* getGeographicRegion("AE") // "me"
|
|
288
|
+
*/
|
|
289
|
+
export function getGeographicRegion(countryCode) {
|
|
290
|
+
const normalized = countryCode?.trim().toUpperCase();
|
|
291
|
+
if (!normalized)
|
|
292
|
+
return null;
|
|
293
|
+
return COUNTRY_TO_REGION.get(normalized) ?? null;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get all country codes for a geographic region.
|
|
297
|
+
*
|
|
298
|
+
* @param region - Geographic region code (e.g., "eu", "af")
|
|
299
|
+
* @returns Array of ISO 3166-1 alpha-2 country codes
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* getCountriesByRegion("eu") // ["AL", "AD", "AT", ...]
|
|
303
|
+
* getCountriesByRegion("me") // ["BH", "IR", "IQ", ...]
|
|
304
|
+
*/
|
|
305
|
+
export function getCountriesByRegion(region) {
|
|
306
|
+
return REGION_COUNTRIES[region] ?? [];
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Check if a string is a valid geographic region code.
|
|
310
|
+
*
|
|
311
|
+
* @param code - String to check
|
|
312
|
+
* @returns True if the code is a valid region code
|
|
313
|
+
*/
|
|
314
|
+
export function isValidRegionCode(code) {
|
|
315
|
+
return GEOGRAPHIC_REGIONS.some((r) => r.code === code);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Get region metadata by code.
|
|
319
|
+
*
|
|
320
|
+
* @param code - Geographic region code
|
|
321
|
+
* @returns Region metadata or null if not found
|
|
322
|
+
*/
|
|
323
|
+
export function getRegionByCode(code) {
|
|
324
|
+
return GEOGRAPHIC_REGIONS.find((r) => r.code === code) ?? null;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=geographic-regions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geographic-regions.js","sourceRoot":"","sources":["../src/geographic-regions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./countries.js";
|
|
2
|
+
export * from "./currencies.js";
|
|
3
|
+
export * from "./geographic-regions.js";
|
|
4
|
+
export * from "./kms.js";
|
|
5
|
+
export * from "./kv.js";
|
|
6
|
+
export * from "./languages.js";
|
|
7
|
+
export * from "./localized-countries-regions.js";
|
|
8
|
+
export * from "./timezones.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./countries.js";
|
|
2
|
+
export * from "./currencies.js";
|
|
3
|
+
export * from "./geographic-regions.js";
|
|
4
|
+
export * from "./kms.js";
|
|
5
|
+
export * from "./kv.js";
|
|
6
|
+
export * from "./languages.js";
|
|
7
|
+
export * from "./localized-countries-regions.js";
|
|
8
|
+
export * from "./timezones.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kCAAkC,CAAA;AAChD,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS KMS provider using SigV4-signed HTTPS requests.
|
|
3
|
+
*
|
|
4
|
+
* Works in Workers and modern Node without AWS SDK dependencies.
|
|
5
|
+
*/
|
|
6
|
+
import type { KeyRef, KmsKeyType, KmsProvider } from "./kms.js";
|
|
7
|
+
export interface AwsKmsConfig {
|
|
8
|
+
region: string;
|
|
9
|
+
accessKeyId: string;
|
|
10
|
+
secretAccessKey: string;
|
|
11
|
+
sessionToken?: string;
|
|
12
|
+
endpoint?: string;
|
|
13
|
+
keyIdByType: Record<KmsKeyType, string>;
|
|
14
|
+
}
|
|
15
|
+
export declare class AwsKmsProvider implements KmsProvider {
|
|
16
|
+
private readonly config;
|
|
17
|
+
readonly name: "aws";
|
|
18
|
+
constructor(config: AwsKmsConfig);
|
|
19
|
+
private resolveKeyId;
|
|
20
|
+
private resolveEndpoint;
|
|
21
|
+
private signedHeaders;
|
|
22
|
+
private callAws;
|
|
23
|
+
encrypt(plaintext: string, key: KeyRef): Promise<string>;
|
|
24
|
+
decrypt(ciphertext: string, key: KeyRef): Promise<string>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=kms-aws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms-aws.d.ts","sourceRoot":"","sources":["../src/kms-aws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAM/D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;CACxC;AAkDD,qBAAa,cAAe,YAAW,WAAW;IAGpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAS;gBAED,MAAM,EAAE,YAAY;IAEjD,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,eAAe;YAIT,aAAa;YAyDb,OAAO;IAgBf,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASxD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAchE"}
|
package/dist/kms-aws.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS KMS provider using SigV4-signed HTTPS requests.
|
|
3
|
+
*
|
|
4
|
+
* Works in Workers and modern Node without AWS SDK dependencies.
|
|
5
|
+
*/
|
|
6
|
+
const PREFIX = "aws:v1:";
|
|
7
|
+
const SERVICE = "kms";
|
|
8
|
+
const JSON_CONTENT_TYPE = "application/x-amz-json-1.1";
|
|
9
|
+
function toHex(bytes) {
|
|
10
|
+
return Array.from(bytes)
|
|
11
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
12
|
+
.join("");
|
|
13
|
+
}
|
|
14
|
+
async function sha256Hex(input) {
|
|
15
|
+
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(input));
|
|
16
|
+
return toHex(new Uint8Array(digest));
|
|
17
|
+
}
|
|
18
|
+
async function hmacSha256Raw(key, message) {
|
|
19
|
+
const raw = new Uint8Array(key.byteLength);
|
|
20
|
+
raw.set(key);
|
|
21
|
+
const cryptoKey = await crypto.subtle.importKey("raw", raw.buffer, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
22
|
+
const signature = await crypto.subtle.sign("HMAC", cryptoKey, new TextEncoder().encode(message));
|
|
23
|
+
return new Uint8Array(signature);
|
|
24
|
+
}
|
|
25
|
+
async function deriveSigningKey(secretAccessKey, dateStamp, region) {
|
|
26
|
+
const kDate = await hmacSha256Raw(new TextEncoder().encode(`AWS4${secretAccessKey}`), dateStamp);
|
|
27
|
+
const kRegion = await hmacSha256Raw(kDate, region);
|
|
28
|
+
const kService = await hmacSha256Raw(kRegion, SERVICE);
|
|
29
|
+
return hmacSha256Raw(kService, "aws4_request");
|
|
30
|
+
}
|
|
31
|
+
function formatAmzDate(date) {
|
|
32
|
+
const iso = date.toISOString().replace(/[:-]|\.\d{3}/g, "");
|
|
33
|
+
return {
|
|
34
|
+
amzDate: iso,
|
|
35
|
+
dateStamp: iso.slice(0, 8),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function joinHeaders(headers) {
|
|
39
|
+
return headers.map(([name, value]) => `${name}:${value.trim()}\n`).join("");
|
|
40
|
+
}
|
|
41
|
+
export class AwsKmsProvider {
|
|
42
|
+
config;
|
|
43
|
+
name = "aws";
|
|
44
|
+
constructor(config) {
|
|
45
|
+
this.config = config;
|
|
46
|
+
}
|
|
47
|
+
resolveKeyId(key) {
|
|
48
|
+
return this.config.keyIdByType[key.keyType];
|
|
49
|
+
}
|
|
50
|
+
resolveEndpoint() {
|
|
51
|
+
return this.config.endpoint ?? `https://kms.${this.config.region}.amazonaws.com/`;
|
|
52
|
+
}
|
|
53
|
+
async signedHeaders(target, body) {
|
|
54
|
+
const endpoint = new URL(this.resolveEndpoint());
|
|
55
|
+
const now = new Date();
|
|
56
|
+
const { amzDate, dateStamp } = formatAmzDate(now);
|
|
57
|
+
const payloadHash = await sha256Hex(body);
|
|
58
|
+
const headers = [
|
|
59
|
+
["content-type", JSON_CONTENT_TYPE],
|
|
60
|
+
["host", endpoint.host],
|
|
61
|
+
["x-amz-date", amzDate],
|
|
62
|
+
["x-amz-target", target],
|
|
63
|
+
];
|
|
64
|
+
if (this.config.sessionToken) {
|
|
65
|
+
headers.push(["x-amz-security-token", this.config.sessionToken]);
|
|
66
|
+
}
|
|
67
|
+
headers.sort(([a], [b]) => a.localeCompare(b));
|
|
68
|
+
const canonicalHeaders = joinHeaders(headers);
|
|
69
|
+
const signedHeaders = headers.map(([name]) => name).join(";");
|
|
70
|
+
const canonicalRequest = [
|
|
71
|
+
"POST",
|
|
72
|
+
endpoint.pathname || "/",
|
|
73
|
+
"",
|
|
74
|
+
canonicalHeaders,
|
|
75
|
+
signedHeaders,
|
|
76
|
+
payloadHash,
|
|
77
|
+
].join("\n");
|
|
78
|
+
const credentialScope = `${dateStamp}/${this.config.region}/${SERVICE}/aws4_request`;
|
|
79
|
+
const stringToSign = [
|
|
80
|
+
"AWS4-HMAC-SHA256",
|
|
81
|
+
amzDate,
|
|
82
|
+
credentialScope,
|
|
83
|
+
await sha256Hex(canonicalRequest),
|
|
84
|
+
].join("\n");
|
|
85
|
+
const signingKey = await deriveSigningKey(this.config.secretAccessKey, dateStamp, this.config.region);
|
|
86
|
+
const signature = toHex(await hmacSha256Raw(signingKey, stringToSign));
|
|
87
|
+
const authorization = [
|
|
88
|
+
`AWS4-HMAC-SHA256 Credential=${this.config.accessKeyId}/${credentialScope}`,
|
|
89
|
+
`SignedHeaders=${signedHeaders}`,
|
|
90
|
+
`Signature=${signature}`,
|
|
91
|
+
].join(", ");
|
|
92
|
+
return {
|
|
93
|
+
endpoint: endpoint.toString(),
|
|
94
|
+
headers: Object.fromEntries([
|
|
95
|
+
...headers,
|
|
96
|
+
["authorization", authorization],
|
|
97
|
+
]),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async callAws(target, body) {
|
|
101
|
+
const signed = await this.signedHeaders(target, body);
|
|
102
|
+
const res = await fetch(signed.endpoint, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: signed.headers,
|
|
105
|
+
body,
|
|
106
|
+
});
|
|
107
|
+
if (!res.ok) {
|
|
108
|
+
const text = await res.text();
|
|
109
|
+
throw new Error(`AWS KMS ${target} failed (${res.status}): ${text}`);
|
|
110
|
+
}
|
|
111
|
+
return (await res.json());
|
|
112
|
+
}
|
|
113
|
+
async encrypt(plaintext, key) {
|
|
114
|
+
const body = JSON.stringify({
|
|
115
|
+
KeyId: this.resolveKeyId(key),
|
|
116
|
+
Plaintext: btoa(plaintext),
|
|
117
|
+
});
|
|
118
|
+
const data = await this.callAws("TrentService.Encrypt", body);
|
|
119
|
+
return `${PREFIX}${data.CiphertextBlob}`;
|
|
120
|
+
}
|
|
121
|
+
async decrypt(ciphertext, key) {
|
|
122
|
+
if (!ciphertext.startsWith(PREFIX)) {
|
|
123
|
+
throw new Error(`AwsKmsProvider: ciphertext missing "${PREFIX}" prefix — was it encrypted by a different provider?`);
|
|
124
|
+
}
|
|
125
|
+
const body = JSON.stringify({
|
|
126
|
+
KeyId: this.resolveKeyId(key),
|
|
127
|
+
CiphertextBlob: ciphertext.slice(PREFIX.length),
|
|
128
|
+
});
|
|
129
|
+
const data = await this.callAws("TrentService.Decrypt", body);
|
|
130
|
+
return atob(data.Plaintext);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=kms-aws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms-aws.js","sourceRoot":"","sources":["../src/kms-aws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,GAAG,SAAS,CAAA;AACxB,MAAM,OAAO,GAAG,KAAK,CAAA;AACrB,MAAM,iBAAiB,GAAG,4BAA4B,CAAA;AAWtD,SAAS,KAAK,CAAC,KAAiB;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IACrF,OAAO,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAe,EAAE,OAAe;IAC3D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACZ,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAC7C,KAAK,EACL,GAAG,CAAC,MAAM,EACV,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAA;IACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAChG,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;AAClC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,eAAuB,EACvB,SAAiB,EACjB,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;IAChG,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAClD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACtD,OAAO,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,IAAU;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC3D,OAAO;QACL,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAgC;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,OAAO,cAAc;IAGI;IAFpB,IAAI,GAAG,KAAc,CAAA;IAE9B,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE7C,YAAY,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;IAEO,eAAe;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,MAAM,iBAAiB,CAAA;IACnF,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,IAAY;QACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;QAEzC,MAAM,OAAO,GAA4B;YACvC,CAAC,cAAc,EAAE,iBAAiB,CAAC;YACnC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC,YAAY,EAAE,OAAO,CAAC;YACvB,CAAC,cAAc,EAAE,MAAM,CAAC;SACzB,CAAA;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7D,MAAM,gBAAgB,GAAG;YACvB,MAAM;YACN,QAAQ,CAAC,QAAQ,IAAI,GAAG;YACxB,EAAE;YACF,gBAAgB;YAChB,aAAa;YACb,WAAW;SACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,eAAe,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,eAAe,CAAA;QACpF,MAAM,YAAY,GAAG;YACnB,kBAAkB;YAClB,OAAO;YACP,eAAe;YACf,MAAM,SAAS,CAAC,gBAAgB,CAAC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,UAAU,GAAG,MAAM,gBAAgB,CACvC,IAAI,CAAC,MAAM,CAAC,eAAe,EAC3B,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAA;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;QACtE,MAAM,aAAa,GAAG;YACpB,+BAA+B,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,eAAe,EAAE;YAC3E,iBAAiB,aAAa,EAAE;YAChC,aAAa,SAAS,EAAE;SACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC7B,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC;gBAC1B,GAAG,OAAO;gBACV,CAAC,eAAe,EAAE,aAAa,CAAC;aACjC,CAAC;SACH,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAY,MAAuD,EAAE,IAAY;QACpG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI;SACL,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAc,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAW;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;SAC3B,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6B,sBAAsB,EAAE,IAAI,CAAC,CAAA;QACzF,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,GAAW;QAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,sDAAsD,CACpG,CAAA;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAC7B,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;SAChD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAwB,sBAAsB,EAAE,IAAI,CAAC,CAAA;QACpF,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge-compatible GCP KMS encryption/decryption using Web Crypto API.
|
|
3
|
+
* No Node.js dependencies — works in Cloudflare Workers.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Creates a signed JWT assertion and exchanges it at Google's OAuth2 endpoint
|
|
7
|
+
* for a short-lived access token. Caches the token at module level.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getGcpAccessToken(email: string, privateKeyPem: string): Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Encrypt plaintext using GCP Cloud KMS.
|
|
12
|
+
* Returns base64 ciphertext string.
|
|
13
|
+
*/
|
|
14
|
+
export declare function kmsEncrypt(plaintext: string, keyName: string, accessToken: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Decrypt ciphertext using GCP Cloud KMS.
|
|
17
|
+
* Returns plaintext string.
|
|
18
|
+
*/
|
|
19
|
+
export declare function kmsDecrypt(ciphertext: string, keyName: string, accessToken: string): Promise<string>;
|
|
20
|
+
//# sourceMappingURL=kms-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms-crypto.d.ts","sourceRoot":"","sources":["../src/kms-crypto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0CH;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C7F;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|