afp-sdk 0.3.0__py3-none-any.whl → 0.4.0__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.
@@ -0,0 +1,2 @@
1
+ # Automatically created by ruff.
2
+ *
@@ -0,0 +1 @@
1
+ Signature: 8a477f597d28d172789f06886806bc55
afp/api/builder.py CHANGED
@@ -50,7 +50,6 @@ class Builder(ClearingSystemAPI):
50
50
  unit_value: Decimal,
51
51
  initial_margin_requirement: Decimal,
52
52
  maintenance_margin_requirement: Decimal,
53
- offer_price_buffer: Decimal,
54
53
  auction_bounty: Decimal,
55
54
  tradeout_interval: int,
56
55
  extended_metadata: str,
@@ -76,7 +75,6 @@ class Builder(ClearingSystemAPI):
76
75
  unit_value : Decimal
77
76
  initial_margin_requirement : Decimal
78
77
  maintenance_margin_requirement : Decimal
79
- offer_price_buffer : Decimal
80
78
  auction_bounty : Decimal
81
79
  tradeout_interval : int
82
80
  extended_metadata : str
@@ -114,7 +112,6 @@ class Builder(ClearingSystemAPI):
114
112
  unit_value=unit_value,
115
113
  initial_margin_requirement=initial_margin_requirement,
116
114
  maintenance_margin_requirement=maintenance_margin_requirement,
117
- offer_price_buffer=offer_price_buffer,
118
115
  auction_bounty=auction_bounty,
119
116
  tradeout_interval=tradeout_interval,
120
117
  extended_metadata=extended_metadata,
@@ -194,7 +191,6 @@ class Builder(ClearingSystemAPI):
194
191
  maintenance_margin_requirement=int(
195
192
  product.maintenance_margin_requirement * config.RATE_MULTIPLIER
196
193
  ),
197
- offer_price_buffer=int(product.offer_price_buffer * config.RATE_MULTIPLIER),
198
194
  auction_bounty=int(product.auction_bounty * config.RATE_MULTIPLIER),
199
195
  tradeout_interval=product.tradeout_interval,
200
196
  extended_metadata=product.extended_metadata,
afp/api/trading.py CHANGED
@@ -226,15 +226,19 @@ class Trading(ExchangeAPI):
226
226
  return self._exchange.get_order_by_id(value)
227
227
 
228
228
  @refresh_token_on_expiry
229
- def open_orders(self) -> list[Order]:
229
+ def open_orders(self, product_id: str | None = None) -> list[Order]:
230
230
  """Retrieves all open and partially filled limit orders that have been submitted
231
231
  by the authenticated account.
232
232
 
233
+ Parameters
234
+ ----------
235
+ product_id : str, optional
236
+
233
237
  Returns
234
238
  -------
235
239
  list of afp.schemas.Order
236
240
  """
237
- return self._exchange.get_open_orders()
241
+ return self._exchange.get_open_orders(product_id)
238
242
 
239
243
  @refresh_token_on_expiry
240
244
  def order_fills(
@@ -56,6 +56,11 @@ class BankruptcyFacet:
56
56
  abi=ABI,
57
57
  )
58
58
 
59
+ @property
60
+ def LossMutualized(self) -> contract.ContractEvent:
61
+ """Binding for `event LossMutualized` on the BankruptcyFacet contract."""
62
+ return self._contract.events.LossMutualized
63
+
59
64
  def last_traded_timestamp(
60
65
  self,
61
66
  product_id: hexbytes.HexBytes,
@@ -219,6 +224,37 @@ ABI = typing.cast(
219
224
  "type": "error",
220
225
  },
221
226
  {"inputs": [], "name": "QueueIsEmpty", "type": "error"},
227
+ {
228
+ "anonymous": False,
229
+ "inputs": [
230
+ {
231
+ "indexed": True,
232
+ "internalType": "address",
233
+ "name": "bankruptAccount",
234
+ "type": "address",
235
+ },
236
+ {
237
+ "indexed": True,
238
+ "internalType": "address",
239
+ "name": "collateralToken",
240
+ "type": "address",
241
+ },
242
+ {
243
+ "indexed": False,
244
+ "internalType": "address",
245
+ "name": "caller",
246
+ "type": "address",
247
+ },
248
+ {
249
+ "indexed": False,
250
+ "internalType": "int256",
251
+ "name": "lossAmount",
252
+ "type": "int256",
253
+ },
254
+ ],
255
+ "name": "LossMutualized",
256
+ "type": "event",
257
+ },
222
258
  {
223
259
  "inputs": [
224
260
  {"internalType": "bytes32", "name": "productId", "type": "bytes32"},
@@ -423,6 +423,25 @@ class ClearingFacet:
423
423
  ),
424
424
  )
425
425
 
426
+ def set_treasury(
427
+ self,
428
+ new_treasury: eth_typing.ChecksumAddress,
429
+ ) -> contract.ContractFunction:
430
+ """Binding for `setTreasury` on the ClearingFacet contract.
431
+
432
+ Parameters
433
+ ----------
434
+ new_treasury : eth_typing.ChecksumAddress
435
+
436
+ Returns
437
+ -------
438
+ web3.contract.contract.ContractFunction
439
+ A contract function instance to be sent in a transaction.
440
+ """
441
+ return self._contract.functions.setTreasury(
442
+ new_treasury,
443
+ )
444
+
426
445
  def version(
427
446
  self,
428
447
  ) -> str:
@@ -1003,6 +1022,15 @@ ABI = typing.cast(
1003
1022
  "stateMutability": "nonpayable",
1004
1023
  "type": "function",
1005
1024
  },
1025
+ {
1026
+ "inputs": [
1027
+ {"internalType": "address", "name": "newTreasury", "type": "address"}
1028
+ ],
1029
+ "name": "setTreasury",
1030
+ "outputs": [],
1031
+ "stateMutability": "nonpayable",
1032
+ "type": "function",
1033
+ },
1006
1034
  {
1007
1035
  "inputs": [],
1008
1036
  "name": "version",
@@ -53,6 +53,11 @@ class MarginAccount:
53
53
  abi=ABI,
54
54
  )
55
55
 
56
+ @property
57
+ def Deposit(self) -> contract.ContractEvent:
58
+ """Binding for `event Deposit` on the MarginAccount contract."""
59
+ return self._contract.events.Deposit
60
+
56
61
  @property
57
62
  def FeeCollected(self) -> contract.ContractEvent:
58
63
  """Binding for `event FeeCollected` on the MarginAccount contract."""
@@ -68,11 +73,26 @@ class MarginAccount:
68
73
  """Binding for `event Initialized` on the MarginAccount contract."""
69
74
  return self._contract.events.Initialized
70
75
 
76
+ @property
77
+ def IntentAuthorized(self) -> contract.ContractEvent:
78
+ """Binding for `event IntentAuthorized` on the MarginAccount contract."""
79
+ return self._contract.events.IntentAuthorized
80
+
81
+ @property
82
+ def IntentRevoked(self) -> contract.ContractEvent:
83
+ """Binding for `event IntentRevoked` on the MarginAccount contract."""
84
+ return self._contract.events.IntentRevoked
85
+
71
86
  @property
72
87
  def PositionUpdated(self) -> contract.ContractEvent:
73
88
  """Binding for `event PositionUpdated` on the MarginAccount contract."""
74
89
  return self._contract.events.PositionUpdated
75
90
 
91
+ @property
92
+ def Withdraw(self) -> contract.ContractEvent:
93
+ """Binding for `event Withdraw` on the MarginAccount contract."""
94
+ return self._contract.events.Withdraw
95
+
76
96
  def authorize(
77
97
  self,
78
98
  intent_account: eth_typing.ChecksumAddress,
@@ -789,6 +809,25 @@ ABI = typing.cast(
789
809
  "name": "Unauthorized",
790
810
  "type": "error",
791
811
  },
812
+ {
813
+ "anonymous": False,
814
+ "inputs": [
815
+ {
816
+ "indexed": True,
817
+ "internalType": "address",
818
+ "name": "user",
819
+ "type": "address",
820
+ },
821
+ {
822
+ "indexed": False,
823
+ "internalType": "uint256",
824
+ "name": "amount",
825
+ "type": "uint256",
826
+ },
827
+ ],
828
+ "name": "Deposit",
829
+ "type": "event",
830
+ },
792
831
  {
793
832
  "anonymous": False,
794
833
  "inputs": [
@@ -840,6 +879,44 @@ ABI = typing.cast(
840
879
  "name": "Initialized",
841
880
  "type": "event",
842
881
  },
882
+ {
883
+ "anonymous": False,
884
+ "inputs": [
885
+ {
886
+ "indexed": True,
887
+ "internalType": "address",
888
+ "name": "marginAccountID",
889
+ "type": "address",
890
+ },
891
+ {
892
+ "indexed": True,
893
+ "internalType": "address",
894
+ "name": "intentAccount",
895
+ "type": "address",
896
+ },
897
+ ],
898
+ "name": "IntentAuthorized",
899
+ "type": "event",
900
+ },
901
+ {
902
+ "anonymous": False,
903
+ "inputs": [
904
+ {
905
+ "indexed": True,
906
+ "internalType": "address",
907
+ "name": "marginAccountID",
908
+ "type": "address",
909
+ },
910
+ {
911
+ "indexed": True,
912
+ "internalType": "address",
913
+ "name": "intentAccount",
914
+ "type": "address",
915
+ },
916
+ ],
917
+ "name": "IntentRevoked",
918
+ "type": "event",
919
+ },
843
920
  {
844
921
  "anonymous": False,
845
922
  "inputs": [
@@ -867,10 +944,41 @@ ABI = typing.cast(
867
944
  "name": "costBasis",
868
945
  "type": "int256",
869
946
  },
947
+ {
948
+ "indexed": False,
949
+ "internalType": "uint256",
950
+ "name": "price",
951
+ "type": "uint256",
952
+ },
953
+ {
954
+ "indexed": False,
955
+ "internalType": "int256",
956
+ "name": "quantity",
957
+ "type": "int256",
958
+ },
870
959
  ],
871
960
  "name": "PositionUpdated",
872
961
  "type": "event",
873
962
  },
963
+ {
964
+ "anonymous": False,
965
+ "inputs": [
966
+ {
967
+ "indexed": True,
968
+ "internalType": "address",
969
+ "name": "user",
970
+ "type": "address",
971
+ },
972
+ {
973
+ "indexed": False,
974
+ "internalType": "uint256",
975
+ "name": "amount",
976
+ "type": "uint256",
977
+ },
978
+ ],
979
+ "name": "Withdraw",
980
+ "type": "event",
981
+ },
874
982
  {
875
983
  "inputs": [
876
984
  {"internalType": "address", "name": "intentAccount", "type": "address"}
@@ -56,7 +56,6 @@ class Product:
56
56
  unit_value: int
57
57
  initial_margin_requirement: int
58
58
  maintenance_margin_requirement: int
59
- offer_price_buffer: int
60
59
  auction_bounty: int
61
60
  tradeout_interval: int
62
61
  tick_size: int
@@ -221,7 +220,6 @@ class ProductRegistry:
221
220
  product.unit_value,
222
221
  product.initial_margin_requirement,
223
222
  product.maintenance_margin_requirement,
224
- product.offer_price_buffer,
225
223
  product.auction_bounty,
226
224
  product.tradeout_interval,
227
225
  product.tick_size,
@@ -280,25 +278,6 @@ class ProductRegistry:
280
278
  ).call()
281
279
  return int(return_value)
282
280
 
283
- def offer_price_buffer(
284
- self,
285
- product_id: hexbytes.HexBytes,
286
- ) -> int:
287
- """Binding for `offerPriceBuffer` on the ProductRegistry contract.
288
-
289
- Parameters
290
- ----------
291
- product_id : hexbytes.HexBytes
292
-
293
- Returns
294
- -------
295
- int
296
- """
297
- return_value = self._contract.functions.offerPriceBuffer(
298
- product_id,
299
- ).call()
300
- return int(return_value)
301
-
302
281
  def oracle_specification(
303
282
  self,
304
283
  product_id: hexbytes.HexBytes,
@@ -395,8 +374,7 @@ class ProductRegistry:
395
374
  int(return_value[9]),
396
375
  int(return_value[10]),
397
376
  int(return_value[11]),
398
- int(return_value[12]),
399
- str(return_value[13]),
377
+ str(return_value[12]),
400
378
  )
401
379
 
402
380
  def proxiable_uuid(
@@ -447,7 +425,6 @@ class ProductRegistry:
447
425
  product.unit_value,
448
426
  product.initial_margin_requirement,
449
427
  product.maintenance_margin_requirement,
450
- product.offer_price_buffer,
451
428
  product.auction_bounty,
452
429
  product.tradeout_interval,
453
430
  product.tick_size,
@@ -856,11 +833,6 @@ ABI = typing.cast(
856
833
  "name": "maintenanceMarginRequirement",
857
834
  "type": "uint16",
858
835
  },
859
- {
860
- "internalType": "uint64",
861
- "name": "offerPriceBuffer",
862
- "type": "uint64",
863
- },
864
836
  {
865
837
  "internalType": "uint64",
866
838
  "name": "auctionBounty",
@@ -913,15 +885,6 @@ ABI = typing.cast(
913
885
  "stateMutability": "view",
914
886
  "type": "function",
915
887
  },
916
- {
917
- "inputs": [
918
- {"internalType": "bytes32", "name": "productId", "type": "bytes32"}
919
- ],
920
- "name": "offerPriceBuffer",
921
- "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}],
922
- "stateMutability": "view",
923
- "type": "function",
924
- },
925
888
  {
926
889
  "inputs": [
927
890
  {"internalType": "bytes32", "name": "productId", "type": "bytes32"}
@@ -1073,11 +1036,6 @@ ABI = typing.cast(
1073
1036
  "name": "maintenanceMarginRequirement",
1074
1037
  "type": "uint16",
1075
1038
  },
1076
- {
1077
- "internalType": "uint64",
1078
- "name": "offerPriceBuffer",
1079
- "type": "uint64",
1080
- },
1081
1039
  {
1082
1040
  "internalType": "uint64",
1083
1041
  "name": "auctionBounty",
@@ -1203,11 +1161,6 @@ ABI = typing.cast(
1203
1161
  "name": "maintenanceMarginRequirement",
1204
1162
  "type": "uint16",
1205
1163
  },
1206
- {
1207
- "internalType": "uint64",
1208
- "name": "offerPriceBuffer",
1209
- "type": "uint64",
1210
- },
1211
1164
  {
1212
1165
  "internalType": "uint64",
1213
1166
  "name": "auctionBounty",
@@ -324,8 +324,7 @@ class SystemViewer:
324
324
  int(return_value_elem[9]),
325
325
  int(return_value_elem[10]),
326
326
  int(return_value_elem[11]),
327
- int(return_value_elem[12]),
328
- str(return_value_elem[13]),
327
+ str(return_value_elem[12]),
329
328
  )
330
329
  for return_value_elem in return_value
331
330
  ]
@@ -929,11 +928,6 @@ ABI = typing.cast(
929
928
  "name": "maintenanceMarginRequirement",
930
929
  "type": "uint16",
931
930
  },
932
- {
933
- "internalType": "uint64",
934
- "name": "offerPriceBuffer",
935
- "type": "uint64",
936
- },
937
931
  {
938
932
  "internalType": "uint64",
939
933
  "name": "auctionBounty",
afp/exchange.py CHANGED
@@ -71,8 +71,10 @@ class ExchangeClient:
71
71
  return Order(**response.json())
72
72
 
73
73
  # GET /orders
74
- def get_open_orders(self) -> list[Order]:
75
- response = self._send_request("GET", "/orders")
74
+ def get_open_orders(self, product_id: str | None = None) -> list[Order]:
75
+ response = self._send_request(
76
+ "GET", "/orders", params=({"product_id": product_id} if product_id else {})
77
+ )
76
78
  return [Order(**item) for item in response.json()["orders"]]
77
79
 
78
80
  # GET /orders/{order_id}
afp/schemas.py CHANGED
@@ -184,7 +184,6 @@ class ProductSpecification(Model):
184
184
  unit_value: Annotated[Decimal, Field(gt=0)]
185
185
  initial_margin_requirement: Annotated[Decimal, Field(gt=0)]
186
186
  maintenance_margin_requirement: Annotated[Decimal, Field(gt=0)]
187
- offer_price_buffer: Annotated[Decimal, Field(ge=0, lt=1)]
188
187
  auction_bounty: Annotated[Decimal, Field(ge=0, le=1)]
189
188
  tradeout_interval: Annotated[int, Field(ge=0)]
190
189
  extended_metadata: str
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: afp-sdk
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Autonomous Futures Protocol Python SDK
5
5
  Keywords: autonity,web3,trading,crypto,prediction,forecast,markets
6
6
  License-Expression: MIT
@@ -1,35 +1,38 @@
1
+ afp/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
2
+ afp/.ruff_cache/0.12.7/14089225400260942471,sha256=k_93uxnoh8ZzLHr9Z4sdWTtvlU364hANi7813wiK4KI,1386
3
+ afp/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
1
4
  afp/__init__.py,sha256=LTxZrvSFI5blSuBEsGlyZhFfmrNVV3LpPrdi7aYwiTs,325
2
5
  afp/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
6
  afp/api/admin.py,sha256=7ymtCloff4UhyS-MAqA8_cndWlfZanjuGgPgkiV5Jhc,1526
4
7
  afp/api/base.py,sha256=iS-sjAc9mME2qOMEvnB6T6x9L_8oeJnHY6h79xrbAOE,2632
5
- afp/api/builder.py,sha256=mde8XemEMKL76KgEd5rxg7RLBS6lyIfNOEGmE1_iK0M,7114
8
+ afp/api/builder.py,sha256=kxFQWkQBBD6uLAO_SK8dDh4eoa3dAnN4Fa1L_lzV-t8,6900
6
9
  afp/api/clearing.py,sha256=nMVjayFkf0XYYP3aKAdgR6NaFSG4Cl_QsEuADRuIO7M,12922
7
10
  afp/api/liquidation.py,sha256=CtME5524VVW9mXMMpORyUP205sTVqpLnHIPoTy2MGa8,5439
8
- afp/api/trading.py,sha256=HjskW4c13CwAB-AwyIsSBcvyXKKEJk7a9768tqcTzUE,10648
11
+ afp/api/trading.py,sha256=liWDMM3bv9JkvHR5_wknss5yEAJT1-_4Xa8B0g14ZWU,10763
9
12
  afp/bindings/__init__.py,sha256=_n9xoogYi8AAlSx_PE-wjnwP1ujVyDUwoRM0BSm243U,1271
10
13
  afp/bindings/auctioneer_facet.py,sha256=4p906zdU2lUsqpWlsiLE3dlxTPrlNpqk8DtjiQUWJ8M,23919
11
- afp/bindings/bankruptcy_facet.py,sha256=Yg8sLhDU0crsL1ISSy4eoeQEP5jrAuiWBBlco5MtgPc,11370
12
- afp/bindings/clearing_facet.py,sha256=DzRzzP9qXQ7kJMcMRwoLwLJ7S-w-2mid_CbF1fOVHaE,34081
14
+ afp/bindings/bankruptcy_facet.py,sha256=-Kp4Ap5PLAmo_tFrp-1s_yAh0mtHS20z3BC5YIrVjrU,12548
15
+ afp/bindings/clearing_facet.py,sha256=cfyDo-s9_DesbK1Oe-8rfbTCS3HBX9X-L6HbzSydEFk,34898
13
16
  afp/bindings/erc20.py,sha256=-jw7ohcEbUL7g3PpK3-a5_7ClUDCDHt1bezm-w7exzo,10822
14
17
  afp/bindings/facade.py,sha256=nZmAp7r26iszxtNyE5imdl_PKbG6vii_3oYJ3Q69iow,2278
15
18
  afp/bindings/final_settlement_facet.py,sha256=1U5F3WFvf4GUml3gb90YF9RZK_xCwBsX2zRQ8sWSkR0,9470
16
- afp/bindings/margin_account.py,sha256=ffkpf5HEXQCxiWuLpgDcHVAiaUVvbKU1Kt0K8tvgZcA,42461
19
+ afp/bindings/margin_account.py,sha256=hqvHpfM62SAEXSt__NZzAQGu9z7DnIa9LbSgHHkhsKE,45872
17
20
  afp/bindings/margin_account_registry.py,sha256=mx9sAU6HuC09d-LAf9bzP57HPLa3M6qXpN7Lj-uiXSc,18800
18
21
  afp/bindings/mark_price_tracker_facet.py,sha256=vnVsAmpts_2Sv9Jmx3JlON8X8FJd9D2jOFhqSwXIA7A,2830
19
22
  afp/bindings/oracle_provider.py,sha256=CMpVAXdUuTP_W9ZE297B-m9MjuW90yCOhNLMVl3kCf0,15863
20
- afp/bindings/product_registry.py,sha256=HFWwbFKvXk0A2dZB6KBa0Ul8-vX9uvvtGj0dhRL9UUw,43701
21
- afp/bindings/system_viewer.py,sha256=Kwi-Kz2oKh5qWy17N0D2LyrAbkKz_sW9OxeWh6VX_j8,41347
23
+ afp/bindings/product_registry.py,sha256=-_h786jzMCsaTqqnoxpmVgBkGf45eCUMthp_PkqrET0,42137
24
+ afp/bindings/system_viewer.py,sha256=0FivdhpfXMrBesXcHkfO9uELyr7GiRmGe36xS5sURGE,41094
22
25
  afp/bindings/trading_protocol.py,sha256=ZloF3REbjFq9v0UGVsM0_Lk0EhfWJKdeJ0PzVEnyZo0,39573
23
26
  afp/config.py,sha256=GbfvtsRkRDas4L-s1E-9AB7RitrN9JRQ79R5zfv6Ha0,1190
24
27
  afp/decorators.py,sha256=Ustc15RbXGYIEqDb9lXnd-bdhZJ8ZrztN4h_vjkLsG0,2692
25
28
  afp/enums.py,sha256=4dglBx4Amcu0GrlJn0cIj-rp9uDHZGfDEP_vMAO02xo,485
26
29
  afp/exceptions.py,sha256=RE8IE6akDgbar2PobdpOiBdGZZCYkb4jWf1ozJmdLaI,342
27
- afp/exchange.py,sha256=K_SkVyRvs7ebW82BGbxND1r5UHzb4_TNRfkOOIG-Dvs,5444
30
+ afp/exchange.py,sha256=G56cVpwAcLcFKcneuRp5XLLUl5qrNOgg5dM4jGT5NA8,5556
28
31
  afp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- afp/schemas.py,sha256=8nlNPq6t_jmYEpa_WWhOIr_yvpQv5tj86uvpGTNHWZY,4996
32
+ afp/schemas.py,sha256=tZQ-4nTtkv5UuDQ3lU6-m7FqlzYj_ojRzya4a91JWRs,4934
30
33
  afp/signing.py,sha256=7fohnAvoiDA4ems_3OcVnr16OmYLSg9NnnCSzDplg6s,2235
31
34
  afp/validators.py,sha256=m61ZpP385CxsdDGJavPkXKTXnJAHKLCzedoZ8mL6daI,1818
32
- afp_sdk-0.3.0.dist-info/licenses/LICENSE,sha256=ZdaKItgc2ppfqta2OJV0oHpSJiK87PUxmUkUo-_0SB8,1065
33
- afp_sdk-0.3.0.dist-info/WHEEL,sha256=Jb20R3Ili4n9P1fcwuLup21eQ5r9WXhs4_qy7VTrgPI,79
34
- afp_sdk-0.3.0.dist-info/METADATA,sha256=YJmCZfdcfYbJxL2DTDKNuoiPZW0SEb13aOVgxtRgzoc,6026
35
- afp_sdk-0.3.0.dist-info/RECORD,,
35
+ afp_sdk-0.4.0.dist-info/licenses/LICENSE,sha256=ZdaKItgc2ppfqta2OJV0oHpSJiK87PUxmUkUo-_0SB8,1065
36
+ afp_sdk-0.4.0.dist-info/WHEEL,sha256=Pi5uDq5Fdo_Rr-HD5h9BiPn9Et29Y9Sh8NhcJNnFU1c,79
37
+ afp_sdk-0.4.0.dist-info/METADATA,sha256=v49CNPvnYBOgTny7TLiSy-h-S0IutS5y0eKq21YUaEs,6026
38
+ afp_sdk-0.4.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.8.15
2
+ Generator: uv 0.8.17
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any