solvapay 0.1.0.dev4__py3-none-any.whl

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.
solvapay/_tax_ids.py ADDED
@@ -0,0 +1,442 @@
1
+ """GENERATED by python/scripts/tax_ids.mjs from packages/core/src/tax-jurisdictions.ts.
2
+ Do not edit."""
3
+
4
+ import re
5
+
6
+ BUYER_COUNTRIES: frozenset[str] = frozenset(
7
+ (
8
+ "AE",
9
+ "AL",
10
+ "AM",
11
+ "AO",
12
+ "AT",
13
+ "AU",
14
+ "AW",
15
+ "AZ",
16
+ "BA",
17
+ "BB",
18
+ "BD",
19
+ "BE",
20
+ "BF",
21
+ "BG",
22
+ "BH",
23
+ "BJ",
24
+ "BS",
25
+ "BY",
26
+ "CA",
27
+ "CD",
28
+ "CH",
29
+ "CL",
30
+ "CM",
31
+ "CO",
32
+ "CR",
33
+ "CV",
34
+ "CY",
35
+ "CZ",
36
+ "DE",
37
+ "DK",
38
+ "EC",
39
+ "EE",
40
+ "EG",
41
+ "ES",
42
+ "ET",
43
+ "FI",
44
+ "FR",
45
+ "GB",
46
+ "GE",
47
+ "GN",
48
+ "GR",
49
+ "HK",
50
+ "HR",
51
+ "HU",
52
+ "ID",
53
+ "IE",
54
+ "IN",
55
+ "IS",
56
+ "IT",
57
+ "JP",
58
+ "KE",
59
+ "KG",
60
+ "KH",
61
+ "KR",
62
+ "KZ",
63
+ "LA",
64
+ "LI",
65
+ "LK",
66
+ "LT",
67
+ "LU",
68
+ "LV",
69
+ "MA",
70
+ "MD",
71
+ "ME",
72
+ "MK",
73
+ "MR",
74
+ "MT",
75
+ "MX",
76
+ "MY",
77
+ "NG",
78
+ "NL",
79
+ "NO",
80
+ "NP",
81
+ "NZ",
82
+ "OM",
83
+ "PE",
84
+ "PH",
85
+ "PL",
86
+ "PR",
87
+ "PT",
88
+ "RO",
89
+ "RS",
90
+ "RU",
91
+ "SA",
92
+ "SE",
93
+ "SG",
94
+ "SI",
95
+ "SK",
96
+ "SN",
97
+ "SR",
98
+ "TH",
99
+ "TJ",
100
+ "TR",
101
+ "TW",
102
+ "TZ",
103
+ "UA",
104
+ "UG",
105
+ "US",
106
+ "UY",
107
+ "UZ",
108
+ "VN",
109
+ "ZA",
110
+ "ZM",
111
+ "ZW",
112
+ )
113
+ )
114
+
115
+ EU_MEMBER_COUNTRIES: frozenset[str] = frozenset(
116
+ (
117
+ "AT",
118
+ "BE",
119
+ "BG",
120
+ "HR",
121
+ "CY",
122
+ "CZ",
123
+ "DK",
124
+ "EE",
125
+ "FI",
126
+ "FR",
127
+ "DE",
128
+ "GR",
129
+ "HU",
130
+ "IE",
131
+ "IT",
132
+ "LV",
133
+ "LT",
134
+ "LU",
135
+ "MT",
136
+ "NL",
137
+ "PL",
138
+ "PT",
139
+ "RO",
140
+ "SK",
141
+ "SI",
142
+ "ES",
143
+ "SE",
144
+ )
145
+ )
146
+
147
+ TAX_ID_TYPES: tuple[str, ...] = (
148
+ "ae_trn",
149
+ "al_tin",
150
+ "am_tin",
151
+ "ao_tin",
152
+ "au_abn",
153
+ "aw_tin",
154
+ "az_tin",
155
+ "ba_tin",
156
+ "bb_tin",
157
+ "bd_bin",
158
+ "bf_ifu",
159
+ "bh_vat",
160
+ "bj_ifu",
161
+ "bs_tin",
162
+ "by_tin",
163
+ "ca_gst_hst",
164
+ "cd_nif",
165
+ "ch_vat",
166
+ "cl_tin",
167
+ "cm_niu",
168
+ "co_nit",
169
+ "cr_tin",
170
+ "cv_nif",
171
+ "ec_ruc",
172
+ "eg_tin",
173
+ "et_tin",
174
+ "eu_vat",
175
+ "gb_vat",
176
+ "ge_vat",
177
+ "gn_nif",
178
+ "hk_br",
179
+ "id_npwp",
180
+ "in_gst",
181
+ "is_vat",
182
+ "jp_trn",
183
+ "ke_pin",
184
+ "kg_tin",
185
+ "kh_tin",
186
+ "kr_brn",
187
+ "kz_bin",
188
+ "la_tin",
189
+ "li_vat",
190
+ "lk_vat",
191
+ "ma_vat",
192
+ "md_vat",
193
+ "me_pib",
194
+ "mk_vat",
195
+ "mr_nif",
196
+ "mx_rfc",
197
+ "my_sst",
198
+ "ng_tin",
199
+ "no_vat",
200
+ "np_pan",
201
+ "nz_gst",
202
+ "om_vat",
203
+ "pe_ruc",
204
+ "ph_tin",
205
+ "rs_pib",
206
+ "ru_inn",
207
+ "sa_vat",
208
+ "sg_gst",
209
+ "sn_ninea",
210
+ "sr_fin",
211
+ "th_vat",
212
+ "tj_tin",
213
+ "tr_tin",
214
+ "tw_vat",
215
+ "tz_vat",
216
+ "ua_vat",
217
+ "ug_tin",
218
+ "us_ein",
219
+ "uy_ruc",
220
+ "uz_vat",
221
+ "vn_tin",
222
+ "za_vat",
223
+ "zm_tin",
224
+ "zw_tin",
225
+ )
226
+
227
+ COUNTRY_TO_TAX_ID_TYPE: dict[str, str] = {
228
+ "AE": "ae_trn",
229
+ "AL": "al_tin",
230
+ "AM": "am_tin",
231
+ "AO": "ao_tin",
232
+ "AT": "eu_vat",
233
+ "AU": "au_abn",
234
+ "AW": "aw_tin",
235
+ "AZ": "az_tin",
236
+ "BA": "ba_tin",
237
+ "BB": "bb_tin",
238
+ "BD": "bd_bin",
239
+ "BE": "eu_vat",
240
+ "BF": "bf_ifu",
241
+ "BG": "eu_vat",
242
+ "BH": "bh_vat",
243
+ "BJ": "bj_ifu",
244
+ "BS": "bs_tin",
245
+ "BY": "by_tin",
246
+ "CA": "ca_gst_hst",
247
+ "CD": "cd_nif",
248
+ "CH": "ch_vat",
249
+ "CL": "cl_tin",
250
+ "CM": "cm_niu",
251
+ "CO": "co_nit",
252
+ "CR": "cr_tin",
253
+ "CV": "cv_nif",
254
+ "CY": "eu_vat",
255
+ "CZ": "eu_vat",
256
+ "DE": "eu_vat",
257
+ "DK": "eu_vat",
258
+ "EC": "ec_ruc",
259
+ "EE": "eu_vat",
260
+ "EG": "eg_tin",
261
+ "ES": "eu_vat",
262
+ "ET": "et_tin",
263
+ "FI": "eu_vat",
264
+ "FR": "eu_vat",
265
+ "GB": "gb_vat",
266
+ "GE": "ge_vat",
267
+ "GN": "gn_nif",
268
+ "GR": "eu_vat",
269
+ "HK": "hk_br",
270
+ "HR": "eu_vat",
271
+ "HU": "eu_vat",
272
+ "ID": "id_npwp",
273
+ "IE": "eu_vat",
274
+ "IN": "in_gst",
275
+ "IS": "is_vat",
276
+ "IT": "eu_vat",
277
+ "JP": "jp_trn",
278
+ "KE": "ke_pin",
279
+ "KG": "kg_tin",
280
+ "KH": "kh_tin",
281
+ "KR": "kr_brn",
282
+ "KZ": "kz_bin",
283
+ "LA": "la_tin",
284
+ "LI": "li_vat",
285
+ "LK": "lk_vat",
286
+ "LT": "eu_vat",
287
+ "LU": "eu_vat",
288
+ "LV": "eu_vat",
289
+ "MA": "ma_vat",
290
+ "MD": "md_vat",
291
+ "ME": "me_pib",
292
+ "MK": "mk_vat",
293
+ "MR": "mr_nif",
294
+ "MT": "eu_vat",
295
+ "MX": "mx_rfc",
296
+ "MY": "my_sst",
297
+ "NG": "ng_tin",
298
+ "NL": "eu_vat",
299
+ "NO": "no_vat",
300
+ "NP": "np_pan",
301
+ "NZ": "nz_gst",
302
+ "OM": "om_vat",
303
+ "PE": "pe_ruc",
304
+ "PH": "ph_tin",
305
+ "PL": "eu_vat",
306
+ "PR": "us_ein",
307
+ "PT": "eu_vat",
308
+ "RO": "eu_vat",
309
+ "RS": "rs_pib",
310
+ "RU": "ru_inn",
311
+ "SA": "sa_vat",
312
+ "SE": "eu_vat",
313
+ "SG": "sg_gst",
314
+ "SI": "eu_vat",
315
+ "SK": "eu_vat",
316
+ "SN": "sn_ninea",
317
+ "SR": "sr_fin",
318
+ "TH": "th_vat",
319
+ "TJ": "tj_tin",
320
+ "TR": "tr_tin",
321
+ "TW": "tw_vat",
322
+ "TZ": "tz_vat",
323
+ "UA": "ua_vat",
324
+ "UG": "ug_tin",
325
+ "US": "us_ein",
326
+ "UY": "uy_ruc",
327
+ "UZ": "uz_vat",
328
+ "VN": "vn_tin",
329
+ "ZA": "za_vat",
330
+ "ZM": "zm_tin",
331
+ "ZW": "zw_tin",
332
+ }
333
+
334
+ TAX_ID_FORMAT_BY_TYPE: dict[str, re.Pattern[str]] = {
335
+ "ae_trn": re.compile("^\\d{15}$", re.ASCII),
336
+ "al_tin": re.compile("^[A-Z]\\d{8}[A-Z]$", re.ASCII),
337
+ "am_tin": re.compile("^\\d{8}$", re.ASCII),
338
+ "ao_tin": re.compile("^\\d{10}$", re.ASCII),
339
+ "au_abn": re.compile("^\\d{11}$", re.ASCII),
340
+ "aw_tin": re.compile("^\\d{8}$", re.ASCII),
341
+ "az_tin": re.compile("^\\d{10}$", re.ASCII),
342
+ "ba_tin": re.compile("^\\d{12}$", re.ASCII),
343
+ "bb_tin": re.compile("^\\d{13}$", re.ASCII),
344
+ "bd_bin": re.compile("^\\d{9}-?\\d{4}$", re.ASCII),
345
+ "bf_ifu": re.compile("^\\d{8}[A-Z]$", re.ASCII),
346
+ "bh_vat": re.compile("^\\d{15}$", re.ASCII),
347
+ "bj_ifu": re.compile("^\\d{13}$", re.ASCII),
348
+ "bs_tin": re.compile("^\\d{3}\\.?\\d{3}\\.?\\d{3}$", re.ASCII),
349
+ "by_tin": re.compile("^\\d{9}$", re.ASCII),
350
+ "ca_gst_hst": re.compile("^\\d{9}RT\\d{4}$", re.ASCII),
351
+ "cd_nif": re.compile("^[A-Z]\\d{7}[A-Z]$", re.ASCII),
352
+ "ch_vat": re.compile("^CHE-?\\d{3}\\.?\\d{3}\\.?\\d{3}(MWST|TVA|IVA)?$", re.ASCII),
353
+ "cl_tin": re.compile("^\\d{1,2}\\.?\\d{3}\\.?\\d{3}-?[0-9K]$", re.ASCII),
354
+ "cm_niu": re.compile("^[A-Z]\\d{12}[A-Z]$", re.ASCII),
355
+ "co_nit": re.compile("^\\d{3}\\.?\\d{3}\\.?\\d{3}-?\\d$", re.ASCII),
356
+ "cr_tin": re.compile("^\\d-\\d{3}-\\d{6}$", re.ASCII),
357
+ "cv_nif": re.compile("^\\d{9}$", re.ASCII),
358
+ "ec_ruc": re.compile("^\\d{13}$", re.ASCII),
359
+ "eg_tin": re.compile("^\\d{9}$", re.ASCII),
360
+ "et_tin": re.compile("^\\d{10}$", re.ASCII),
361
+ "eu_vat": re.compile("^(ATU\\d{8}|BE[01]\\d{9}|BG\\d{9,10}|HR\\d{11}|CY\\d{8}[A-Z]|CZ\\d{8,10}|DK\\d{8}|EE\\d{9}|FI\\d{8}|FR[A-HJ-NP-Z0-9]{2}\\d{9}|DE\\d{9}|EL\\d{9}|HU\\d{8}|IE\\d{7}[A-W][A-I]?|IT\\d{11}|LV\\d{11}|LT(\\d{9}|\\d{12})|LU\\d{8}|MT\\d{8}|NL\\d{9}B\\d{2}|PL\\d{10}|PT\\d{9}|RO\\d{2,10}|SK\\d{10}|SI\\d{8}|ES[A-Z0-9]\\d{7}[A-Z0-9]|SE\\d{12})$", re.ASCII),
362
+ "gb_vat": re.compile("^GB(\\d{9}|\\d{12}|GD\\d{3}|HA\\d{3})$", re.ASCII),
363
+ "ge_vat": re.compile("^\\d{9}$", re.ASCII),
364
+ "gn_nif": re.compile("^\\d{9}$", re.ASCII),
365
+ "hk_br": re.compile("^\\d{8}$", re.ASCII),
366
+ "id_npwp": re.compile("^\\d{2,3}\\.?\\d{3}\\.?\\d{3}\\.?\\d-?\\d{3}\\.?\\d{3}$", re.ASCII),
367
+ "in_gst": re.compile("^\\d{2}[A-Z]{5}\\d{4}[A-Z]{4}$", re.ASCII),
368
+ "is_vat": re.compile("^\\d{6}$", re.ASCII),
369
+ "jp_trn": re.compile("^T\\d{13}$", re.ASCII),
370
+ "ke_pin": re.compile("^[A-Z]\\d{9}[A-Z]$", re.ASCII),
371
+ "kg_tin": re.compile("^\\d{14}$", re.ASCII),
372
+ "kh_tin": re.compile("^\\d{4}-\\d{9}$", re.ASCII),
373
+ "kr_brn": re.compile("^\\d{3}-?\\d{2}-?\\d{5}$", re.ASCII),
374
+ "kz_bin": re.compile("^\\d{12}$", re.ASCII),
375
+ "la_tin": re.compile("^\\d{9}-\\d{3}$", re.ASCII),
376
+ "li_vat": re.compile("^\\d{5}$", re.ASCII),
377
+ "lk_vat": re.compile("^\\d{9}-\\d{4}$", re.ASCII),
378
+ "ma_vat": re.compile("^\\d{8}$", re.ASCII),
379
+ "md_vat": re.compile("^\\d{7}$", re.ASCII),
380
+ "me_pib": re.compile("^\\d{8}$", re.ASCII),
381
+ "mk_vat": re.compile("^MK\\d{13}$", re.ASCII),
382
+ "mr_nif": re.compile("^\\d{8}$", re.ASCII),
383
+ "mx_rfc": re.compile("^[A-Z]{3,4}\\d{6}[A-Z0-9]{3}$", re.ASCII),
384
+ "my_sst": re.compile("^[A-Z]\\d{2}-?\\d{4}-?\\d{8}$", re.ASCII),
385
+ "ng_tin": re.compile("^\\d{13}$", re.ASCII),
386
+ "no_vat": re.compile("^\\d{9}MVA$", re.ASCII),
387
+ "np_pan": re.compile("^\\d{9}$", re.ASCII),
388
+ "nz_gst": re.compile("^\\d{8,9}$", re.ASCII),
389
+ "om_vat": re.compile("^OM\\d{10}$", re.ASCII),
390
+ "pe_ruc": re.compile("^\\d{11}$", re.ASCII),
391
+ "ph_tin": re.compile("^\\d{12}$", re.ASCII),
392
+ "rs_pib": re.compile("^\\d{9}$", re.ASCII),
393
+ "ru_inn": re.compile("^\\d{10}$", re.ASCII),
394
+ "sa_vat": re.compile("^\\d{15}$", re.ASCII),
395
+ "sg_gst": re.compile("^[A-Z]\\d{8}[A-Z]$", re.ASCII),
396
+ "sn_ninea": re.compile("^\\d{8}[A-Z]\\d$", re.ASCII),
397
+ "sr_fin": re.compile("^\\d{10}$", re.ASCII),
398
+ "th_vat": re.compile("^\\d{13}$", re.ASCII),
399
+ "tj_tin": re.compile("^\\d{9}$", re.ASCII),
400
+ "tr_tin": re.compile("^\\d{10}$", re.ASCII),
401
+ "tw_vat": re.compile("^\\d{8}$", re.ASCII),
402
+ "tz_vat": re.compile("^\\d{8}[A-Z]$", re.ASCII),
403
+ "ua_vat": re.compile("^\\d{9}$", re.ASCII),
404
+ "ug_tin": re.compile("^\\d{10}$", re.ASCII),
405
+ "us_ein": re.compile("^\\d{2}-?\\d{7}$", re.ASCII),
406
+ "uy_ruc": re.compile("^\\d{12}$", re.ASCII),
407
+ "uz_vat": re.compile("^\\d{12}$", re.ASCII),
408
+ "vn_tin": re.compile("^\\d{10}$", re.ASCII),
409
+ "za_vat": re.compile("^\\d{10}$", re.ASCII),
410
+ "zm_tin": re.compile("^\\d{10}$", re.ASCII),
411
+ "zw_tin": re.compile("^\\d{10}$", re.ASCII),
412
+ }
413
+
414
+ EU_VAT_FORMAT_BY_COUNTRY: dict[str, re.Pattern[str]] = {
415
+ "AT": re.compile("^ATU\\d{8}$", re.ASCII),
416
+ "BE": re.compile("^BE[01]\\d{9}$", re.ASCII),
417
+ "BG": re.compile("^BG\\d{9,10}$", re.ASCII),
418
+ "HR": re.compile("^HR\\d{11}$", re.ASCII),
419
+ "CY": re.compile("^CY\\d{8}[A-Z]$", re.ASCII),
420
+ "CZ": re.compile("^CZ\\d{8,10}$", re.ASCII),
421
+ "DK": re.compile("^DK\\d{8}$", re.ASCII),
422
+ "EE": re.compile("^EE\\d{9}$", re.ASCII),
423
+ "FI": re.compile("^FI\\d{8}$", re.ASCII),
424
+ "FR": re.compile("^FR[A-HJ-NP-Z0-9]{2}\\d{9}$", re.ASCII),
425
+ "DE": re.compile("^DE\\d{9}$", re.ASCII),
426
+ "GR": re.compile("^EL\\d{9}$", re.ASCII),
427
+ "HU": re.compile("^HU\\d{8}$", re.ASCII),
428
+ "IE": re.compile("^IE\\d{7}[A-W][A-I]?$", re.ASCII),
429
+ "IT": re.compile("^IT\\d{11}$", re.ASCII),
430
+ "LV": re.compile("^LV\\d{11}$", re.ASCII),
431
+ "LT": re.compile("^LT(\\d{9}|\\d{12})$", re.ASCII),
432
+ "LU": re.compile("^LU\\d{8}$", re.ASCII),
433
+ "MT": re.compile("^MT\\d{8}$", re.ASCII),
434
+ "NL": re.compile("^NL\\d{9}B\\d{2}$", re.ASCII),
435
+ "PL": re.compile("^PL\\d{10}$", re.ASCII),
436
+ "PT": re.compile("^PT\\d{9}$", re.ASCII),
437
+ "RO": re.compile("^RO\\d{2,10}$", re.ASCII),
438
+ "SK": re.compile("^SK\\d{10}$", re.ASCII),
439
+ "SI": re.compile("^SI\\d{8}$", re.ASCII),
440
+ "ES": re.compile("^ES[A-Z0-9]\\d{7}[A-Z0-9]$", re.ASCII),
441
+ "SE": re.compile("^SE\\d{12}$", re.ASCII),
442
+ }
@@ -0,0 +1,67 @@
1
+ """Agent payments: verify an agent, authorize and complete each paid call.
2
+
3
+ Install with ``pip install 'solvapay[agents]'``. Everything else runs in
4
+ SolvaPay: the customer, the spend policy, the hold against budget and balance,
5
+ and the owner's approval. Access is gated per merchant by SolvaPay's
6
+ ``agent_payments`` feature.
7
+ """
8
+
9
+ from .calls import (
10
+ AUTHORIZE_WAIT_MAX_SECONDS,
11
+ AgentCall,
12
+ AgentCalls,
13
+ Allowed,
14
+ CallResult,
15
+ Money,
16
+ PromptFacts,
17
+ RefusalReason,
18
+ Refused,
19
+ amount_string,
20
+ prompt_facts,
21
+ refusal_status,
22
+ )
23
+ from .identity import (
24
+ AGENT_KEY_PREFIX,
25
+ AgentKeyVerifier,
26
+ AgentLayer,
27
+ AgentRejected,
28
+ AgentTokenVerifier,
29
+ NotAgent,
30
+ VerifiedAgent,
31
+ is_agent_key,
32
+ looks_like_jwt,
33
+ )
34
+ from .oauth import (
35
+ AGENT_SCOPE,
36
+ canonical_resource,
37
+ challenge_header,
38
+ protected_resource_metadata,
39
+ )
40
+
41
+ __all__ = [
42
+ "AGENT_KEY_PREFIX",
43
+ "AGENT_SCOPE",
44
+ "AUTHORIZE_WAIT_MAX_SECONDS",
45
+ "AgentCall",
46
+ "AgentCalls",
47
+ "AgentKeyVerifier",
48
+ "AgentLayer",
49
+ "AgentRejected",
50
+ "AgentTokenVerifier",
51
+ "Allowed",
52
+ "CallResult",
53
+ "Money",
54
+ "NotAgent",
55
+ "PromptFacts",
56
+ "RefusalReason",
57
+ "Refused",
58
+ "VerifiedAgent",
59
+ "amount_string",
60
+ "canonical_resource",
61
+ "challenge_header",
62
+ "is_agent_key",
63
+ "looks_like_jwt",
64
+ "prompt_facts",
65
+ "protected_resource_metadata",
66
+ "refusal_status",
67
+ ]