doordeck-headless-sdk 0.86.0__py3-none-any.whl → 0.88.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.
@@ -68,6 +68,7 @@ import base64
68
68
  import asyncio
69
69
  import ctypes
70
70
  from enum import Enum
71
+ from types import SimpleNamespace
71
72
  from typing import List, Optional
72
73
  from dataclasses import dataclass, field
73
74
 
@@ -167,9 +168,6 @@ class GatewayTimeoutException(SdkException):
167
168
  def current_epoch_seconds() -> int:
168
169
  return int(time.time())
169
170
 
170
- def get_success_result(json_response):
171
- return json_response["success"]["result"]
172
-
173
171
  def decode_base64_to_byte_array(input):
174
172
  return base64.b64decode(input)
175
173
 
@@ -183,10 +181,10 @@ def string_to_certificate_chain(input):
183
181
  return input.split('|')
184
182
 
185
183
  def handle_exception(response):
186
- if response["failure"] is None:
184
+ if response.failure is None:
187
185
  return
188
- exception_type = response["failure"]["exceptionType"]
189
- exception_message = response["failure"]["exceptionMessage"]
186
+ exception_type = response.failure.exceptionType
187
+ exception_message = response.failure.exceptionMessage
190
188
  if "SdkException" in exception_type:
191
189
  raise SdkException(exception_message)
192
190
  if "MissingContextFieldException" in exception_type:
@@ -223,18 +221,20 @@ def handle_exception(response):
223
221
  raise GatewayTimeoutException(exception_message)
224
222
  raise SdkException("Unhandled exception type: " + exception_type)
225
223
 
224
+ def object_hook(d):
225
+ return SimpleNamespace(**{k: (object_hook(v) if isinstance(v, dict) else v) for k, v in d.items()})
226
+
226
227
  py_callback_type = ctypes.CFUNCTYPE(None, ctypes.c_char_p)
227
228
 
228
- async def execute_async(sdk_func, args, response_handler = None):
229
+ async def execute_async(sdk_func, args):
229
230
  loop = asyncio.get_running_loop()
230
231
  future = loop.create_future()
231
232
 
232
233
  def callback(result):
233
234
  try:
234
- response = json.loads(result)
235
+ response = json.loads(result, object_hook=object_hook)
235
236
  handle_exception(response)
236
- processed = response_handler(response) if response_handler else None
237
- loop.call_soon_threadsafe(future.set_result, processed)
237
+ loop.call_soon_threadsafe(future.set_result, response.success.result)
238
238
  except Exception as e:
239
239
  loop.call_soon_threadsafe(future.set_exception, e)
240
240
 
@@ -245,208 +245,230 @@ async def execute_async(sdk_func, args, response_handler = None):
245
245
  return await future
246
246
 
247
247
 
248
- class ApiEnvironment(Enum):
249
- DEV = "DEV"
250
- STAGING = "STAGING"
251
- PROD = "PROD"
252
-
253
-
254
- class TwoFactorMethod(Enum):
255
- EMAIL = "EMAIL"
256
- TELEPHONE = "TELEPHONE"
257
- SMS = "SMS"
258
-
259
-
260
- class UserRole(Enum):
261
- ADMIN = "ADMIN"
262
- USER = "USER"
248
+ @dataclass
249
+ class LockController:
250
+ type: str = field(init=False)
263
251
 
252
+ @dataclass
253
+ class AlpetaController(LockController):
254
+ type: str = field(init=False)
255
+ username: str
256
+ password: str
257
+ doorId: int
258
+ baseUrl: str = None
264
259
 
265
- class CapabilityStatus(Enum):
266
- SUPPORTED = "SUPPORTED"
267
- UNSUPPORTED = "UNSUPPORTED"
260
+ def __post_init__(self):
261
+ self.type = "alpeta"
268
262
 
269
- class CapabilityType(Enum):
270
- CONFIGURABLE_UNLOCK_DURATION = "CONFIGURABLE_UNLOCK_DURATION"
271
- OPEN_HOURS = "OPEN_HOURS"
272
- BATCH_SHARING_25 = "BATCH_SHARING_25"
263
+ @dataclass
264
+ class AmagController(LockController):
265
+ type: str = field(init=False)
266
+ username: str
267
+ password: str
268
+ doorId: int
269
+ baseUrl: str = None
273
270
 
271
+ def __post_init__(self):
272
+ self.type = "amag"
274
273
 
275
- class AuditEvent(Enum):
276
- DOOR_OPEN = "DOOR_OPEN"
277
- DOOR_CLOSE = "DOOR_CLOSE"
278
- DOOR_UNLOCK = "DOOR_UNLOCK"
279
- DOOR_LOCK = "DOOR_LOCK"
280
- OWNER_ASSIGNED = "OWNER_ASSIGNED"
281
- DEVICE_CONNECTED = "DEVICE_CONNECTED"
282
- DEVICE_DISCONNECTED = "DEVICE_DISCONNECTED"
283
- LOCK_SHARED = "LOCK_SHARED"
284
- LOCK_REVOKED = "LOCK_REVOKED"
285
- USER_PROMOTED = "USER_PROMOTED"
286
- USER_DEMOTED = "USER_DEMOTED"
287
- SETTING_CHANGED = "SETTING_CHANGED"
288
- TILE_ASSOCIATED = "TILE_ASSOCIATED"
289
- TILE_DISASSOCIATED = "TILE_DISASSOCIATED"
290
- DEVICE_DECOMMISSIONED = "DEVICE_DECOMMISSIONED"
274
+ @dataclass
275
+ class AssaAbloyController(LockController):
276
+ type: str = field(init=False)
277
+ baseUrl: str
278
+ doorId: str
291
279
 
280
+ def __post_init__(self):
281
+ self.type = "assa-abloy"
292
282
 
293
283
  @dataclass
294
- class EncodedKeyPair:
295
- private: str
296
- public: str
284
+ class AvigilonController(LockController):
285
+ type: str = field(init=False)
286
+ baseUrl: str
287
+ username: str
288
+ password: str
289
+ doorId: str
297
290
 
291
+ def __post_init__(self):
292
+ self.type = "avigilon"
298
293
 
299
294
  @dataclass
300
- class RefreshTokenData:
301
- refreshToken: str
295
+ class AxisController(LockController):
296
+ type: str = field(init=False)
297
+ baseUrl: str
298
+ doorIdentifier: str
302
299
 
303
- @dataclass
304
- class RegisterEphemeralKeyData:
305
- publicKey: str
300
+ def __post_init__(self):
301
+ self.type = "axis"
306
302
 
307
303
  @dataclass
308
- class RegisterEphemeralKeyWithSecondaryAuthenticationData:
309
- publicKey: str
310
- method: typing.Optional[TwoFactorMethod] = None
304
+ class CCureController(LockController):
305
+ type: str = field(init=False)
306
+ baseUrl: str
307
+ username: str
308
+ password: str
309
+ doorType: str
310
+ doorId: int
311
311
 
312
- @dataclass
313
- class VerifyEphemeralKeyRegistrationData:
314
- code: str
315
- privateKey: typing.Optional[str] = None
312
+ def __post_init__(self):
313
+ self.type = "ccure"
316
314
 
317
315
  @dataclass
318
- class ChangePasswordData:
319
- oldPassword: str
320
- newPassword: str
316
+ class DemoController(LockController):
317
+ type: str = field(init=False)
318
+ port: int = 8080
319
+
320
+ def __post_init__(self):
321
+ self.type = "demo"
321
322
 
322
323
  @dataclass
323
- class UpdateUserDetailsData:
324
- displayName: str
324
+ class GallagherController(LockController):
325
+ type: str = field(init=False)
326
+ apiKey: str
327
+ doorId: str
328
+ baseUrl: Optional[str] = None
325
329
 
330
+ def __post_init__(self):
331
+ self.type = "gallagher"
326
332
 
327
333
  @dataclass
328
- class LoginData:
329
- email: str
334
+ class GenetecController(LockController):
335
+ type: str = field(init=False)
336
+ baseUrl: str
337
+ username: str
330
338
  password: str
339
+ doorId: str
340
+
341
+ def __post_init__(self):
342
+ self.type = "genetec"
331
343
 
332
344
  @dataclass
333
- class RegistrationData:
334
- email: str
345
+ class LenelController(LockController):
346
+ type: str = field(init=False)
347
+ baseUrl: str
348
+ username: str
335
349
  password: str
336
- force: bool
337
- publicKey: str
338
- displayName: typing.Optional[str] = None
350
+ directoryId: str
351
+ panelId: str
352
+ readerId: str
339
353
 
340
- @dataclass
341
- class VerifyEmailData:
342
- code: str
354
+ def __post_init__(self):
355
+ self.type = "lenel"
343
356
 
344
357
  @dataclass
345
- class PasswordResetData:
346
- email: str
358
+ class MitrefinchController(LockController):
359
+ type: str = field(init=False)
360
+ host: str
361
+ output: int
362
+
363
+ def __post_init__(self):
364
+ self.type = "mitrefinch"
347
365
 
348
366
  @dataclass
349
- class PasswordResetVerifyData:
350
- userId: str
351
- token: str
367
+ class PaxtonNet2Controller(LockController):
368
+ type: str = field(init=False)
369
+ host: str
370
+ username: str
352
371
  password: str
372
+ address: str
373
+ output: int
353
374
 
375
+ def __post_init__(self):
376
+ self.type = "net2"
354
377
 
355
378
  @dataclass
356
- class OperationContextData:
357
- userId: str
358
- userCertificateChain: str
359
- userPublicKey: str
360
- userPrivateKey: str
361
-
379
+ class Paxton10Controller(LockController):
380
+ type: str = field(init=False)
381
+ baseUrl: str
382
+ username: str
383
+ password: str
384
+ applianceId: int
362
385
 
363
- @dataclass
364
- class UploadPlatformLogoData:
365
- applicationId: str
366
- contentType: str
367
- image: str
386
+ def __post_init__(self):
387
+ self.type = "paxton10"
368
388
 
369
389
  @dataclass
370
- class AssistedLoginData:
371
- email: str
390
+ class IntegraV1Controller(LockController):
391
+ type: str = field(init=False)
392
+ username: str
372
393
  password: str
394
+ controllerId: int
373
395
 
374
- @dataclass
375
- class AssistedRegisterEphemeralKeyData:
376
- publicKey: str
396
+ def __post_init__(self):
397
+ self.type = "integra"
377
398
 
378
399
  @dataclass
379
- class AssistedRegisterData:
380
- email: str
381
- password: str
382
- displayName: typing.Optional[str] = None
383
- force: bool = False
400
+ class IntegraV2Controller(LockController):
401
+ type: str = field(init=False)
402
+ baseUrl: str
403
+ sessionId: str
404
+ controllerId: int
405
+ cardholderId: int
406
+ pinCode: Optional[int] = None
384
407
 
408
+ def __post_init__(self):
409
+ self.type = "integra-v2"
385
410
 
386
411
  @dataclass
387
- class LockIdData:
388
- lockId: str
412
+ class DataSource:
413
+ driverClass: str
414
+ url: str
415
+ user: str
416
+ password: str
389
417
 
390
418
  @dataclass
391
- class GetLockAuditTrailData:
392
- lockId: str
393
- start: int
394
- end: int
419
+ class PacController(LockController):
420
+ type: str = field(init=False)
421
+ dataSource: DataSource
422
+ outputChannel: int
423
+ controllerSerial: int
395
424
 
396
- @dataclass
397
- class GetAuditForUserData:
398
- userId: str
399
- start: int
400
- end: int
425
+ def __post_init__(self):
426
+ self.type = "pac512"
401
427
 
402
428
  @dataclass
403
- class GetLocksForUserData:
404
- userId: str
429
+ class TdsiExgardeController(LockController):
430
+ type: str = field(init=False)
431
+ username: str
432
+ password: str
433
+ doorId: int
434
+ dbUrl: Optional[str] = None
405
435
 
406
- @dataclass
407
- class UpdateLockNameData:
408
- lockId: str
409
- name: typing.Optional[str] = None
436
+ def __post_init__(self):
437
+ self.type = "tdsi-exgarde"
410
438
 
411
439
  @dataclass
412
- class UpdateLockFavouriteData:
413
- lockId: str
414
- favourite: typing.Optional[bool] = None
440
+ class TdsiGardisController(LockController):
441
+ type: str = field(init=False)
442
+ host: str
443
+ username: str
444
+ password: str
445
+ doorId: int
415
446
 
416
- @dataclass
417
- class UpdateLockColourData:
418
- lockId: str
419
- colour: typing.Optional[str] = None
447
+ def __post_init__(self):
448
+ self.type = "tdsi-gardis"
420
449
 
421
450
  @dataclass
422
- class UpdateLockSettingDefaultNameData:
423
- lockId: str
424
- name: typing.Optional[str] = None
451
+ class ZktecoController(LockController):
452
+ type: str = field(init=False)
453
+ clientSecret: str
454
+ doorId: str
455
+ entityType: typing.Literal["DOOR", "FLOOR"]
456
+ baseUrl: str = None
457
+
458
+ def __post_init__(self):
459
+ self.type = "zkteco-zkbio-cvsecurity"
425
460
 
426
- @dataclass
427
- class SetLockSettingPermittedAddressesData:
428
- lockId: str
429
- permittedAddresses: typing.List[str]
430
461
 
431
- @dataclass
432
- class UpdateLockSettingHiddenData:
433
- lockId: str
434
- hidden: bool
435
462
 
436
463
  @dataclass
437
- class TimeRequirementData:
464
+ class TimeRequirement:
438
465
  start: str
439
466
  end: str
440
467
  timezone: str
441
468
  days: typing.List[str]
442
469
 
443
470
  @dataclass
444
- class SetLockSettingTimeRestrictionsData:
445
- lockId: str
446
- times: typing.List[TimeRequirementData]
447
-
448
- @dataclass
449
- class LocationRequirementData:
471
+ class LocationRequirement:
450
472
  latitude: float
451
473
  longitude: float
452
474
  enabled: typing.Optional[bool] = None
@@ -454,61 +476,15 @@ class LocationRequirementData:
454
476
  accuracy: typing.Optional[int] = None
455
477
 
456
478
  @dataclass
457
- class UpdateLockSettingLocationRestrictionsData:
458
- lockId: str
459
- location: typing.Optional[LocationRequirementData] = None
460
-
461
- @dataclass
462
- class GetUserPublicKeyData:
463
- userEmail: str
464
- visitor: bool = False
465
-
466
- @dataclass
467
- class GetUserPublicKeyByEmailData:
468
- email: str
469
-
470
- @dataclass
471
- class GetUserPublicKeyByTelephoneData:
472
- telephone: str
473
-
474
- @dataclass
475
- class GetUserPublicKeyByLocalKeyData:
476
- localKey: str
477
-
478
- @dataclass
479
- class GetUserPublicKeyByForeignKeyData:
480
- foreignKey: str
481
-
482
- @dataclass
483
- class GetUserPublicKeyByIdentityData:
484
- identity: str
485
-
486
- @dataclass
487
- class GetUserPublicKeyByEmailsData:
488
- emails: typing.List[str]
489
-
490
- @dataclass
491
- class GetUserPublicKeyByTelephonesData:
492
- telephones: typing.List[str]
493
-
494
- @dataclass
495
- class GetUserPublicKeyByLocalKeysData:
496
- localKeys: typing.List[str]
497
-
498
- @dataclass
499
- class GetUserPublicKeyByForeignKeysData:
500
- foreignKeys: typing.List[str]
501
-
502
- @dataclass
503
- class ShareLockData:
479
+ class ShareLock:
504
480
  targetUserId: str
505
- targetUserRole: UserRole
481
+ targetUserRole: typing.Literal["ADMIN", "USER"]
506
482
  targetUserPublicKey: str
507
483
  start: typing.Optional[int] = None
508
484
  end: typing.Optional[int] = None
509
485
 
510
486
  @dataclass
511
- class BaseOperationData:
487
+ class BaseOperation:
512
488
  lockId: str
513
489
  userId: typing.Optional[str] = None
514
490
  userCertificateChain: typing.Optional[typing.List[str]] = None
@@ -519,27 +495,27 @@ class BaseOperationData:
519
495
  jti: str = field(default_factory=lambda: str(uuid.uuid4()))
520
496
 
521
497
  @dataclass
522
- class ShareLockOperationData:
523
- baseOperation: BaseOperationData
524
- shareLock: ShareLockData
498
+ class ShareLockOperation:
499
+ baseOperation: BaseOperation
500
+ shareLock: ShareLock
525
501
 
526
502
  @dataclass
527
- class BatchShareLockOperationData:
528
- baseOperation: BaseOperationData
529
- users: typing.List[ShareLockData]
503
+ class BatchShareLockOperation:
504
+ baseOperation: BaseOperation
505
+ users: typing.List[ShareLock]
530
506
 
531
507
  @dataclass
532
- class RevokeAccessToLockOperationData:
533
- baseOperation: BaseOperationData
508
+ class RevokeAccessToLockOperation:
509
+ baseOperation: BaseOperation
534
510
  users: typing.List[str]
535
511
 
536
512
  @dataclass
537
- class UpdateSecureSettingUnlockDurationData:
538
- baseOperation: BaseOperationData
513
+ class UpdateSecureSettingUnlockDuration:
514
+ baseOperation: BaseOperation
539
515
  unlockDuration: int
540
516
 
541
517
  @dataclass
542
- class UnlockBetweenData:
518
+ class UnlockBetween:
543
519
  start: str
544
520
  end: str
545
521
  timezone: str
@@ -547,100 +523,51 @@ class UnlockBetweenData:
547
523
  exceptions: typing.Optional[typing.List[str]] = None
548
524
 
549
525
  @dataclass
550
- class UnlockOperationData:
551
- baseOperation: BaseOperationData
526
+ class UnlockOperation:
527
+ baseOperation: BaseOperation
552
528
  directAccessEndpoints: typing.Optional[typing.List[str]] = None
553
529
 
554
530
  @dataclass
555
- class UpdateSecureSettingUnlockBetweenData:
556
- baseOperation: BaseOperationData
557
- unlockBetween: typing.Optional[UnlockBetweenData] = None
531
+ class UpdateSecureSettingUnlockBetween:
532
+ baseOperation: BaseOperation
533
+ unlockBetween: typing.Optional[UnlockBetween] = None
558
534
 
559
535
 
560
536
  @dataclass
561
- class EmailCallToActionData:
537
+ class EmailCallToAction:
562
538
  actionTarget: str
563
539
  headline: str
564
540
  actionText: str
565
541
 
566
542
  @dataclass
567
- class EmailPreferencesData:
543
+ class EmailPreferences:
568
544
  senderEmail: typing.Optional[str] = None
569
545
  senderName: typing.Optional[str] = None
570
546
  primaryColour: typing.Optional[str] = None
571
547
  secondaryColour: typing.Optional[str] = None
572
548
  onlySendEssentialEmails: typing.Optional[bool] = None
573
- callToAction: typing.Optional[EmailCallToActionData] = None
549
+ callToAction: typing.Optional[EmailCallToAction] = None
574
550
 
575
551
  @dataclass
576
- class CreateApplicationData:
552
+ class CreateApplication:
577
553
  name: str
578
554
  companyName: str
579
555
  mailingAddress: str
580
556
  privacyPolicy: typing.Optional[str] = None
581
557
  supportContact: typing.Optional[str] = None
582
558
  appLink: typing.Optional[str] = None
583
- emailPreferences: typing.Optional[EmailPreferencesData] = None
559
+ emailPreferences: typing.Optional[EmailPreferences] = None
584
560
  logoUrl: typing.Optional[str] = None
585
561
 
586
562
  @dataclass
587
- class ApplicationIdData:
588
- applicationId: str
589
-
590
- @dataclass
591
- class UpdateApplicationNameData:
592
- applicationId: str
593
- name: str
594
-
595
- @dataclass
596
- class UpdateApplicationCompanyNameData:
597
- applicationId: str
598
- companyName: str
599
-
600
- @dataclass
601
- class UpdateApplicationMailingAddressData:
602
- applicationId: str
603
- mailingAddress: str
604
-
605
- @dataclass
606
- class UpdateApplicationPrivacyPolicyData:
607
- applicationId: str
608
- privacyPolicy: str
609
-
610
- @dataclass
611
- class UpdateApplicationSupportContactData:
612
- applicationId: str
613
- supportContact: str
614
-
615
- @dataclass
616
- class UpdateApplicationAppLinkData:
617
- applicationId: str
618
- appLink: str
619
-
620
- @dataclass
621
- class UpdateApplicationEmailPreferencesData:
622
- applicationId: str
623
- emailPreferences: EmailPreferencesData
624
-
625
- @dataclass
626
- class UpdateApplicationLogoUrlData:
627
- applicationId: str
628
- logoUrl: str
629
-
630
- @dataclass
631
- class GetLogoUploadUrlData:
632
- applicationId: str
633
- contentType: str
634
-
635
- @dataclass
636
- class AuthKeyData:
563
+ class AuthKey:
637
564
  use: str
638
565
  kid: str
639
566
  alg: typing.Optional[str]
640
567
  kty: str = field(init=False)
641
568
 
642
569
  @dataclass
643
- class RsaKeyData(AuthKeyData):
570
+ class RsaKey(AuthKey):
644
571
  kty: str
645
572
  p: str
646
573
  q: str
@@ -655,7 +582,7 @@ class RsaKeyData(AuthKeyData):
655
582
  self.kty = "RSA"
656
583
 
657
584
  @dataclass
658
- class EcKeyData(AuthKeyData):
585
+ class EcKey(AuthKey):
659
586
  kty: str
660
587
  d: str
661
588
  crv: str
@@ -666,7 +593,7 @@ class EcKeyData(AuthKeyData):
666
593
  self.kty = "EC"
667
594
 
668
595
  @dataclass
669
- class Ed25519KeyData(AuthKeyData):
596
+ class Ed25519Key(AuthKey):
670
597
  kty: str
671
598
  d: str
672
599
  crv: str
@@ -675,368 +602,17 @@ class Ed25519KeyData(AuthKeyData):
675
602
  def __post_init__(self):
676
603
  self.kty = "OKP"
677
604
 
678
- @dataclass
679
- class AddAuthKeyData:
680
- applicationId: str
681
- key: AuthKeyData
682
-
683
- @dataclass
684
- class AuthIssuerData:
685
- applicationId: str
686
- url: str
687
-
688
- @dataclass
689
- class CorsDomainData:
690
- applicationId: str
691
- url: str
692
-
693
- @dataclass
694
- class ApplicationOwnerData:
695
- applicationId: str
696
- userId: str
697
-
698
-
699
- @dataclass
700
- class SuccessResultData:
701
- result: typing.Any
702
-
703
- @dataclass
704
- class FailedResultData:
705
- exceptionType: str
706
- exceptionMessage: str
707
-
708
- @dataclass
709
- class ResultData:
710
- success: typing.Optional[SuccessResultData] = None
711
- failure: typing.Optional[FailedResultData] = None
712
-
713
-
714
- @dataclass
715
- class SiteIdData:
716
- siteId: str
717
-
718
-
719
- @dataclass
720
- class GetLocksBelongingToTileData:
721
- tileId: str
722
-
723
- @dataclass
724
- class AssociateMultipleLocksData:
725
- tileId: str
726
- siteId: str
727
- lockIds: typing.List[str]
728
-
729
-
730
- @dataclass
731
- class TokenResponse:
732
- authToken: str
733
- refreshToken: str
734
-
735
- @dataclass
736
- class UserDetailsResponse:
737
- email: str
738
- emailVerified: bool
739
- publicKey: str
740
- displayName: typing.Optional[str] = None
741
-
742
- @dataclass
743
- class RegisterEphemeralKeyResponse:
744
- certificateChain: [typing.List[str]]
745
- userId: str
746
-
747
- @dataclass
748
- class RegisterEphemeralKeyWithSecondaryAuthenticationResponse:
749
- method: TwoFactorMethod
750
-
751
-
752
- @dataclass
753
- class AssistedLoginResponse:
754
- requiresVerification: bool
755
-
756
- @dataclass
757
- class AssistedRegisterEphemeralKeyResponse:
758
- requiresVerification: bool
759
-
760
-
761
- @dataclass
762
- class AuditSubjectResponse:
763
- userId: str
764
- email: str
765
- displayName: typing.Optional[str] = None
766
-
767
- @dataclass
768
- class AuditIssuerResponse:
769
- userId: str
770
- email: typing.Optional[str] = None
771
- ip: typing.Optional[str] = None
772
-
773
- @dataclass
774
- class AuditResponse:
775
- deviceId: str
776
- timestamp: float
777
- type: AuditEvent
778
- issuer: AuditIssuerResponse
779
- rejected: bool
780
- subject: typing.Optional[AuditSubjectResponse] = None
781
- rejectionReason: typing.Optional[str] = None
782
-
783
- @dataclass
784
- class LockUserDetailsResponse:
785
- deviceId: str
786
- role: UserRole
787
- start: typing.Optional[float] = None
788
- end: typing.Optional[float] = None
789
-
790
- @dataclass
791
- class LockUserResponse:
792
- userId: str
793
- email: str
794
- publicKey: str
795
- orphan: bool
796
- foreign: bool
797
- devices: typing.List[LockUserDetailsResponse]
798
- displayName: typing.Optional[str] = None
799
- start: typing.Optional[float] = None
800
- end: typing.Optional[float] = None
801
-
802
- @dataclass
803
- class UserLockResponse:
804
- userId: str
805
- email: str
806
- publicKey: str
807
- orphan: bool
808
- foreign: bool
809
- role: UserRole
810
- displayName: typing.Optional[str] = None
811
- start: typing.Optional[float] = None
812
- end: typing.Optional[float] = None
813
-
814
- @dataclass
815
- class ShareableLockResponse:
816
- id: str
817
- name: str
818
-
819
- @dataclass
820
- class BatchUserPublicKeyResponse:
821
- id: str
822
- publicKey: str
823
- email: typing.Optional[str] = None
824
- foreignKey: typing.Optional[str] = None
825
- phone: typing.Optional[str] = None
826
-
827
- @dataclass
828
- class UserPublicKeyResponse:
829
- id: str
830
- publicKey: str
831
-
832
- @dataclass
833
- class LockStateResponse:
834
- locked: bool
835
- connected: bool
836
-
837
- @dataclass
838
- class UnlockBetweenSettingResponse:
839
- start: str
840
- end: str
841
- timezone: str
842
- days: typing.List[str]
843
- exceptions: typing.Optional[typing.List[str]] = None
844
-
845
- @dataclass
846
- class LocationRequirementResponse:
847
- latitude: float
848
- longitude: float
849
- enabled: typing.Optional[bool] = None
850
- radius: typing.Optional[int] = None
851
- accuracy: typing.Optional[int] = None
852
-
853
- @dataclass
854
- class TimeRequirementResponse:
855
- start: str
856
- end: str
857
- timezone: str
858
- days: typing.List[str]
859
-
860
- @dataclass
861
- class UsageRequirementsResponse:
862
- time: typing.Optional[typing.List[TimeRequirementResponse]] = None
863
- location: typing.Optional[LocationRequirementResponse] = None
864
-
865
- @dataclass
866
- class LockSettingsResponse:
867
- unlockTime: float
868
- permittedAddresses: typing.List[str]
869
- defaultName: str
870
- tiles: typing.List[str]
871
- hidden: bool
872
- directAccessEndpoints: typing.List[str]
873
- capabilities: typing.Dict[CapabilityType, CapabilityStatus]
874
- usageRequirements: typing.Optional[UsageRequirementsResponse] = None
875
- unlockBetweenWindow: typing.Optional[UnlockBetweenSettingResponse] = None
876
-
877
- @dataclass
878
- class LockResponse:
879
- id: str
880
- name: str
881
- role: UserRole
882
- settings: LockSettingsResponse
883
- state: LockStateResponse
884
- favourite: bool
885
- colour: typing.Optional[str] = None
886
- start: typing.Optional[str] = None
887
- end: typing.Optional[str] = None
888
- unlockTime: typing.Optional[float] = None
889
-
890
-
891
- @dataclass
892
- class EmailCallToActionResponse:
893
- actionTarget: str
894
- headline: str
895
- actionText: str
896
-
897
- @dataclass
898
- class EmailPreferencesResponse:
899
- primaryColour: str
900
- secondaryColour: str
901
- senderEmail: typing.Optional[str] = None
902
- senderName: typing.Optional[str] = None
903
- onlySendEssentialEmails: typing.Optional[bool] = None
904
- callToAction: typing.Optional[EmailCallToActionResponse] = None
905
-
906
- @dataclass
907
- class OauthResponse:
908
- authorizationEndpoint: str
909
- clientId: str
910
- grantType: str
911
-
912
- @dataclass
913
- class AuthKeyResponse:
914
- kid: str
915
- use: str
916
- alg: Optional[str]
917
- ops: Optional[List[str]]
918
- x5u: Optional[str]
919
- x5t: Optional[str]
920
- x5t256: Optional[str]
921
- x5c: Optional[List[str]]
922
- exp: Optional[int]
923
- nbf: Optional[int]
924
- iat: Optional[int]
925
-
926
- @dataclass
927
- class RsaKeyResponse(AuthKeyResponse):
928
- e: str
929
- n: str
930
-
931
- @dataclass
932
- class EcKeyResponse(AuthKeyResponse):
933
- crv: str
934
- x: str
935
- y: str
936
-
937
- @dataclass
938
- class Ed25519KeyResponse(AuthKeyResponse):
939
- crv: str
940
- x: str
941
- d: Optional[str] = None
942
-
943
- @dataclass
944
- class ApplicationResponse:
945
- applicationId: str
946
- name: str
947
- emailPreferences: EmailPreferencesResponse
948
- oauth: typing.Optional[OauthResponse]
949
- lastUpdated: typing.Optional[float] = None
950
- owners: typing.Optional[typing.List[str]] = None
951
- corsDomains: typing.Optional[typing.List[str]] = None
952
- authDomains: typing.Optional[typing.List[str]] = None
953
- logoUrl: typing.Optional[str] = None
954
- privacyPolicy: typing.Optional[str] = None
955
- mailingAddress: typing.Optional[str] = None
956
- companyName: typing.Optional[str] = None
957
- supportContact: typing.Optional[str] = None
958
- appLink: typing.Optional[str] = None
959
- slug: typing.Optional[str] = None
960
- authKeys: typing.Dict[str, AuthKeyResponse] = field(default_factory=dict)
961
- isDoordeckApplication: typing.Optional[bool] = None
962
-
963
- @dataclass
964
- class ApplicationOwnerDetailsResponse:
965
- userId: str
966
- email: str
967
- orphan: bool
968
- foreign: bool
969
- displayName: typing.Optional[str] = None
970
-
971
- @dataclass
972
- class GetLogoUploadUrlResponse:
973
- uploadUrl: str
974
-
975
-
976
- @dataclass
977
- class SiteResponse:
978
- id: str
979
- name: str
980
- colour: str
981
- longitude: float
982
- latitude: float
983
- radius: int
984
- passBackground: str
985
- created: str
986
- updated: str
987
-
988
- @dataclass
989
- class SiteStateResponse:
990
- connected: bool
991
-
992
- @dataclass
993
- class UserForSiteResponse:
994
- userId: str
995
- email: str
996
- orphan: bool
997
- displayName: typing.Optional[str] = None
998
-
999
- @dataclass
1000
- class SiteLockSettingsResponse:
1001
- unlockTime: float
1002
- permittedAddresses: typing.List[str]
1003
- defaultName: str
1004
- tiles: typing.List[str]
1005
- state: typing.Optional[SiteStateResponse] = None
1006
- favourite: typing.Optional[bool] = None
1007
-
1008
- @dataclass
1009
- class SiteLocksResponse:
1010
- id: str
1011
- name: str
1012
- role: UserRole
1013
- settings: SiteLockSettingsResponse
1014
- colour: typing.Optional[str] = None
1015
-
1016
- @dataclass
1017
- class TileLocksResponse:
1018
- siteId: str
1019
- tileId: str
1020
- deviceIds: typing.List[str]
1021
-
1022
-
1023
- @dataclass
1024
- class TileLocksResponse:
1025
- siteId: str
1026
- tileId: str
1027
- deviceIds: typing.List[str]
1028
-
1029
605
 
1030
606
  class Account(object):
1031
607
 
1032
608
  def __init__(self, resource):
1033
609
  self.resource = resource
1034
610
 
1035
- async def refresh_token(self, data):
611
+ async def refresh_token(self, refreshToken: str):
612
+ data = { "refreshToken": refreshToken }
1036
613
  return await execute_async(
1037
614
  _doordeck_headless_sdk.refreshToken,
1038
- [self.resource, json.dumps(dataclasses.asdict(data))],
1039
- lambda r: TokenResponse(**get_success_result(r))
615
+ [self.resource, json.dumps(data)]
1040
616
  )
1041
617
 
1042
618
  async def logout(self):
@@ -1045,25 +621,31 @@ class Account(object):
1045
621
  [self.resource]
1046
622
  )
1047
623
 
1048
- async def register_ephemeral_key(self, data):
624
+ async def register_ephemeral_key(self, publicKey: str):
625
+ data = { "publicKey": publicKey }
1049
626
  return await execute_async(
1050
627
  _doordeck_headless_sdk.registerEphemeralKey,
1051
- [self.resource, json.dumps(dataclasses.asdict(data))],
1052
- lambda r: RegisterEphemeralKeyResponse(**get_success_result(r))
628
+ [self.resource, json.dumps(data)]
1053
629
  )
1054
630
 
1055
- async def register_ephemeral_key_with_secondary_authentication(self, data):
631
+ async def register_ephemeral_key_with_secondary_authentication(self, publicKey: str, method: Optional[typing.Literal["EMAIL", "TELEPHONE", "SMS"]] = None):
632
+ data = {
633
+ "publicKey": publicKey,
634
+ "method": method
635
+ }
1056
636
  return await execute_async(
1057
637
  _doordeck_headless_sdk.registerEphemeralKeyWithSecondaryAuthentication,
1058
- [self.resource, json.dumps(dataclasses.asdict(data))],
1059
- lambda r: RegisterEphemeralKeyWithSecondaryAuthenticationResponse(**get_success_result(r))
638
+ [self.resource, json.dumps(data)]
1060
639
  )
1061
640
 
1062
- async def verify_ephemeral_key_registration(self, data):
641
+ async def verify_ephemeral_key_registration(self, code: str, privateKey: str = None):
642
+ data = {
643
+ "code": code,
644
+ "privateKey": privateKey
645
+ }
1063
646
  return await execute_async(
1064
647
  _doordeck_headless_sdk.verifyEphemeralKeyRegistration,
1065
- [self.resource, json.dumps(dataclasses.asdict(data))],
1066
- lambda r: RegisterEphemeralKeyResponse(**get_success_result(r))
648
+ [self.resource, json.dumps(data)]
1067
649
  )
1068
650
 
1069
651
  async def reverify_email(self):
@@ -1072,23 +654,27 @@ class Account(object):
1072
654
  [self.resource]
1073
655
  )
1074
656
 
1075
- async def change_password(self, data):
657
+ async def change_password(self, oldPassword: str, newPassword: str):
658
+ data = {
659
+ "oldPassword": oldPassword,
660
+ "oldPassword": oldPassword
661
+ }
1076
662
  return await execute_async(
1077
663
  _doordeck_headless_sdk.changePassword,
1078
- [self.resource, json.dumps(dataclasses.asdict(data))]
664
+ [self.resource, json.dumps(data)]
1079
665
  )
1080
666
 
1081
667
  async def get_user_details(self):
1082
668
  return await execute_async(
1083
669
  _doordeck_headless_sdk.getUserDetails,
1084
- [self.resource],
1085
- lambda r: UserDetailsResponse(**get_success_result(r))
670
+ [self.resource]
1086
671
  )
1087
672
 
1088
- async def update_user_details(self, data):
673
+ async def update_user_details(self, displayName: str):
674
+ data = { "displayName": displayName }
1089
675
  return await execute_async(
1090
676
  _doordeck_headless_sdk.updateUserDetails,
1091
- [self.resource, json.dumps(dataclasses.asdict(data))]
677
+ [self.resource, json.dumps(data)]
1092
678
  )
1093
679
 
1094
680
  async def delete_account(self):
@@ -1103,36 +689,52 @@ class Accountless(object):
1103
689
  def __init__(self, resource):
1104
690
  self.resource = resource
1105
691
 
1106
- async def login(self, data):
692
+ async def login(self, email: str, password: str):
693
+ data = {
694
+ "email": email,
695
+ "password": password
696
+ }
1107
697
  return await execute_async(
1108
698
  _doordeck_headless_sdk.login,
1109
- [self.resource, json.dumps(dataclasses.asdict(data))],
1110
- lambda r: TokenResponse(**get_success_result(r))
699
+ [self.resource, json.dumps(data)]
1111
700
  )
1112
701
 
1113
- async def registration(self, data):
702
+ async def registration(self, email: str, password: str, force: bool = False, displayName: str = None, publicKey: str = None):
703
+ data = {
704
+ "email": email,
705
+ "password": password,
706
+ "force": force,
707
+ "publicKey": publicKey,
708
+ "displayName": displayName
709
+ }
1114
710
  return await execute_async(
1115
711
  _doordeck_headless_sdk.registration,
1116
- [self.resource, json.dumps(dataclasses.asdict(data))],
1117
- lambda r: TokenResponse(**get_success_result(r))
712
+ [self.resource, json.dumps(data)]
1118
713
  )
1119
714
 
1120
- async def verify_email(self, data):
715
+ async def verify_email(self, code: str):
716
+ data = { "code": code }
1121
717
  return await execute_async(
1122
718
  _doordeck_headless_sdk.verifyEmail,
1123
- [self.resource, json.dumps(dataclasses.asdict(data))]
719
+ [self.resource, json.dumps(data)]
1124
720
  )
1125
721
 
1126
- async def password_reset(self, data):
722
+ async def password_reset(self, email: str):
723
+ data = { "email": email }
1127
724
  return await execute_async(
1128
725
  _doordeck_headless_sdk.passwordReset,
1129
- [self.resource, json.dumps(dataclasses.asdict(data))]
726
+ [self.resource, json.dumps(data)]
1130
727
  )
1131
728
 
1132
- async def password_reset_verify(self, data):
729
+ async def password_reset_verify(self, userId: str, token: str, password: str):
730
+ data = {
731
+ "userId": userId,
732
+ "token": token,
733
+ "password": password
734
+ }
1133
735
  return await execute_async(
1134
736
  _doordeck_headless_sdk.passwordResetVerify,
1135
- [self.resource, json.dumps(dataclasses.asdict(data))]
737
+ [self.resource, json.dumps(data)]
1136
738
  )
1137
739
 
1138
740
 
@@ -1144,10 +746,10 @@ class ContextManager(object):
1144
746
  def get_api_environment(self):
1145
747
  env = _doordeck_headless_sdk.getApiEnvironment(self.resource)
1146
748
  name = _doordeck_headless_sdk.getApiEnvironmentName(env)
1147
- return ApiEnvironment[name]
749
+ return name
1148
750
 
1149
- def set_cloud_auth_token(self, data):
1150
- _doordeck_headless_sdk.setCloudAuthToken(self.resource, data)
751
+ def set_cloud_auth_token(self, token: str):
752
+ _doordeck_headless_sdk.setCloudAuthToken(self.resource, token)
1151
753
 
1152
754
  def get_cloud_auth_token(self):
1153
755
  return _doordeck_headless_sdk.getCloudAuthToken(self.resource)
@@ -1155,32 +757,32 @@ class ContextManager(object):
1155
757
  def is_cloud_auth_token_about_to_expire(self):
1156
758
  return _doordeck_headless_sdk.isCloudAuthTokenAboutToExpire(self.resource)
1157
759
 
1158
- def set_cloud_refresh_token(self, data):
1159
- _doordeck_headless_sdk.setCloudRefreshToken(self.resource, data)
760
+ def set_cloud_refresh_token(self, token: str):
761
+ _doordeck_headless_sdk.setCloudRefreshToken(self.resource, token)
1160
762
 
1161
763
  def get_cloud_refresh_token(self):
1162
764
  return _doordeck_headless_sdk.getCloudRefreshToken(self.resource)
1163
765
 
1164
- def set_fusion_host(self, data):
1165
- _doordeck_headless_sdk.setFusionHost(self.resource, data)
766
+ def set_fusion_host(self, host: str):
767
+ _doordeck_headless_sdk.setFusionHost(self.resource, host)
1166
768
 
1167
769
  def get_fusion_host(self):
1168
770
  return _doordeck_headless_sdk.getFusionHost(self.resource)
1169
771
 
1170
- def set_fusion_auth_token(self, data):
1171
- _doordeck_headless_sdk.setFusionAuthToken(self.resource, data)
772
+ def set_fusion_auth_token(self, token: str):
773
+ _doordeck_headless_sdk.setFusionAuthToken(self.resource, token)
1172
774
 
1173
775
  def get_fusion_auth_token(self):
1174
776
  return _doordeck_headless_sdk.getFusionAuthToken(self.resource)
1175
777
 
1176
- def set_user_id(self, data):
1177
- _doordeck_headless_sdk.setUserId(self.resource, data)
778
+ def set_user_id(self, userId: str):
779
+ _doordeck_headless_sdk.setUserId(self.resource, userId)
1178
780
 
1179
781
  def get_user_id(self):
1180
782
  return _doordeck_headless_sdk.getUserId(self.resource)
1181
783
 
1182
- def set_user_email(self, data):
1183
- _doordeck_headless_sdk.setUserEmail(self.resource, data)
784
+ def set_user_email(self, email: str):
785
+ _doordeck_headless_sdk.setUserEmail(self.resource, email)
1184
786
 
1185
787
  def get_user_email(self):
1186
788
  return _doordeck_headless_sdk.getUserEmail(self.resource)
@@ -1191,8 +793,14 @@ class ContextManager(object):
1191
793
  def is_key_pair_valid(self):
1192
794
  return _doordeck_headless_sdk.isKeyPairValid(self.resource)
1193
795
 
1194
- def set_operation_context(self, data):
1195
- _doordeck_headless_sdk.setOperationContextJson(self.resource, json.dumps(dataclasses.asdict(data)))
796
+ def set_operation_context(self, userId: str, userCertificateChain: str, userPublicKey: str, userPrivateKey: str):
797
+ data = {
798
+ "userId": userId,
799
+ "userCertificateChain": userCertificateChain,
800
+ "userPublicKey": userPublicKey,
801
+ "userPrivateKey": userPrivateKey
802
+ }
803
+ _doordeck_headless_sdk.setOperationContextJson(self.resource, json.dumps(data))
1196
804
 
1197
805
  def clear_context(self):
1198
806
  _doordeck_headless_sdk.clearContext(self.resource)
@@ -1204,8 +812,75 @@ class CryptoManager(object):
1204
812
  self.resource = resource
1205
813
 
1206
814
  def generate_key_pair(self):
1207
- response = json.loads(_doordeck_headless_sdk.generateEncodedKeyPair(self.resource))
1208
- return EncodedKeyPair(**response)
815
+ return json.loads(_doordeck_headless_sdk.generateEncodedKeyPair(self.resource), object_hook=object_hook)
816
+
817
+
818
+ class Fusion(object):
819
+
820
+ def __init__(self, resource):
821
+ self.resource = resource
822
+
823
+ async def login(self, email: str, password: str):
824
+ data = {
825
+ "email": email,
826
+ "password": password
827
+ }
828
+ return await execute_async(
829
+ _doordeck_headless_sdk.loginFusion,
830
+ [self.resource, json.dumps(data)]
831
+ )
832
+
833
+ async def get_integration_type(self):
834
+ return await execute_async(
835
+ _doordeck_headless_sdk.getIntegrationType,
836
+ [self.resource]
837
+ )
838
+
839
+ async def get_integration_configuration(self, type: str):
840
+ data = { "type": type }
841
+ return await execute_async(
842
+ _doordeck_headless_sdk.getIntegrationConfiguration,
843
+ [self.resource, json.dumps(data)]
844
+ )
845
+
846
+ async def enable_door(self, name: str, siteId: str, controller: LockController):
847
+ data = {
848
+ "name": name,
849
+ "siteId": siteId,
850
+ "controller": dataclasses.asdict(controller)
851
+ }
852
+ return await execute_async(
853
+ _doordeck_headless_sdk.enableDoor,
854
+ [self.resource, json.dumps(data)]
855
+ )
856
+
857
+ async def delete_door(self, deviceId: str):
858
+ data = { "deviceId": deviceId }
859
+ return await execute_async(
860
+ _doordeck_headless_sdk.deleteDoor,
861
+ [self.resource, json.dumps(data)]
862
+ )
863
+
864
+ async def get_door_status(self, deviceId: str):
865
+ data = { "deviceId": deviceId }
866
+ return await execute_async(
867
+ _doordeck_headless_sdk.getDoorStatus,
868
+ [self.resource, json.dumps(data)]
869
+ )
870
+
871
+ async def start_door(self, deviceId: str):
872
+ data = { "deviceId": deviceId }
873
+ return await execute_async(
874
+ _doordeck_headless_sdk.startDoor,
875
+ [self.resource, json.dumps(data)]
876
+ )
877
+
878
+ async def stop_door(self, deviceId: str):
879
+ data = { "deviceId": deviceId }
880
+ return await execute_async(
881
+ _doordeck_headless_sdk.stopDoor,
882
+ [self.resource, json.dumps(data)]
883
+ )
1209
884
 
1210
885
 
1211
886
  class Helper(object):
@@ -1213,30 +888,44 @@ class Helper(object):
1213
888
  def __init__(self, resource):
1214
889
  self.resource = resource
1215
890
 
1216
- async def upload_platform_logo(self, data):
891
+ async def upload_platform_logo(self, applicationId: str, contentType: str, image: str):
892
+ data = {
893
+ "applicationId": applicationId,
894
+ "contentType": contentType,
895
+ "image": image
896
+ }
1217
897
  return await execute_async(
1218
898
  _doordeck_headless_sdk.uploadPlatformLogo,
1219
- [self.resource, json.dumps(dataclasses.asdict(data))]
899
+ [self.resource, json.dumps(data)]
1220
900
  )
1221
901
 
1222
- async def assisted_login(self, data):
902
+ async def assisted_login(self, email: str, password: str):
903
+ data = {
904
+ "email": email,
905
+ "password": password
906
+ }
1223
907
  return await execute_async(
1224
908
  _doordeck_headless_sdk.assistedLogin,
1225
- [self.resource, json.dumps(dataclasses.asdict(data))],
1226
- lambda r: AssistedLoginResponse(**get_success_result(r))
909
+ [self.resource, json.dumps(data)]
1227
910
  )
1228
911
 
1229
- async def assisted_register_ephemeral_key(self, data):
912
+ async def assisted_register_ephemeral_key(self, publicKey: str):
913
+ data = { "publicKey": publicKey }
1230
914
  return await execute_async(
1231
915
  _doordeck_headless_sdk.assistedRegisterEphemeralKey,
1232
- [self.resource, json.dumps(dataclasses.asdict(data))],
1233
- lambda r: AssistedRegisterEphemeralKeyResponse(**get_success_result(r))
916
+ [self.resource, json.dumps(data)]
1234
917
  )
1235
918
 
1236
- async def assisted_register(self, data):
919
+ async def assisted_register(self, email: str, password: str, force: bool = False, displayName: str = None):
920
+ data = {
921
+ "email": email,
922
+ "password": password,
923
+ "displayName": displayName,
924
+ "force": force
925
+ }
1237
926
  return await execute_async(
1238
927
  _doordeck_headless_sdk.assistedRegister,
1239
- [self.resource, json.dumps(dataclasses.asdict(data))]
928
+ [self.resource, json.dumps(data)]
1240
929
  )
1241
930
 
1242
931
 
@@ -1245,190 +934,233 @@ class LockOperations(object):
1245
934
  def __init__(self, resource):
1246
935
  self.resource = resource
1247
936
 
1248
- async def get_single_lock(self, data):
937
+ async def get_single_lock(self, lockId: str):
938
+ data = { "lockId": lockId }
1249
939
  return await execute_async(
1250
940
  _doordeck_headless_sdk.getSingleLock,
1251
- [self.resource, json.dumps(dataclasses.asdict(data))],
1252
- lambda r: LockResponse(**get_success_result(r))
941
+ [self.resource, json.dumps(data)]
1253
942
  )
1254
943
 
1255
- async def get_lock_audit_trail(self, data):
944
+ async def get_lock_audit_trail(self, lockId: str, start: int, end: int):
945
+ data = {
946
+ "lockId": lockId,
947
+ "start": start,
948
+ "end": end
949
+ }
1256
950
  return await execute_async(
1257
951
  _doordeck_headless_sdk.getLockAuditTrail,
1258
- [self.resource, json.dumps(dataclasses.asdict(data))],
1259
- lambda r: [AuditResponse(**item) for item in get_success_result(r)]
952
+ [self.resource, json.dumps(data)]
1260
953
  )
1261
954
 
1262
- async def get_audit_for_user(self, data):
955
+ async def get_audit_for_user(self, lockId: str, start: int, end: int):
956
+ data = {
957
+ "lockId": lockId,
958
+ "start": start,
959
+ "end": end
960
+ }
1263
961
  return await execute_async(
1264
962
  _doordeck_headless_sdk.getAuditForUser,
1265
- [self.resource, json.dumps(dataclasses.asdict(data))],
1266
- lambda r: [AuditResponse(**item) for item in get_success_result(r)]
963
+ [self.resource, json.dumps(data)]
1267
964
  )
1268
965
 
1269
- async def get_users_for_lock(self, data):
966
+ async def get_users_for_lock(self, userId: str):
967
+ data = { "userId": userId }
1270
968
  return await execute_async(
1271
969
  _doordeck_headless_sdk.getUsersForLock,
1272
- [self.resource, json.dumps(dataclasses.asdict(data))],
1273
- lambda r: [UserLockResponse(**item) for item in get_success_result(r)]
970
+ [self.resource, json.dumps(data)]
1274
971
  )
1275
972
 
1276
- async def get_locks_for_user(self, data):
973
+ async def get_locks_for_user(self, userId: str):
974
+ data = { "userId": userId }
1277
975
  return await execute_async(
1278
976
  _doordeck_headless_sdk.getLocksForUser,
1279
- [self.resource, json.dumps(dataclasses.asdict(data))],
1280
- lambda r: UserLockResponse(**get_success_result(r))
977
+ [self.resource, json.dumps(data)]
1281
978
  )
1282
979
 
1283
- async def update_lock_name(self, data):
980
+ async def update_lock_name(self, lockId: str, name: str = None):
981
+ data = {
982
+ "lockId": lockId,
983
+ "name": name
984
+ }
1284
985
  return await execute_async(
1285
986
  _doordeck_headless_sdk.updateLockName,
1286
- [self.resource, json.dumps(dataclasses.asdict(data))]
987
+ [self.resource, json.dumps(data)]
1287
988
  )
1288
989
 
1289
- async def update_lock_favourite(self, data):
990
+ async def update_lock_favourite(self, lockId: str, favourite: bool = None):
991
+ data = {
992
+ "lockId": lockId,
993
+ "favourite": favourite
994
+ }
1290
995
  return await execute_async(
1291
996
  _doordeck_headless_sdk.updateLockFavourite,
1292
- [self.resource, json.dumps(dataclasses.asdict(data))]
997
+ [self.resource, json.dumps(data)]
1293
998
  )
1294
999
 
1295
- async def update_lock_colour(self, data):
1000
+ async def update_lock_colour(self, lockId: str, colour: str = None):
1001
+ data = {
1002
+ "lockId": lockId,
1003
+ "colour": colour
1004
+ }
1296
1005
  return await execute_async(
1297
1006
  _doordeck_headless_sdk.updateLockColour,
1298
- [self.resource, json.dumps(dataclasses.asdict(data))]
1007
+ [self.resource, json.dumps(data)]
1299
1008
  )
1300
1009
 
1301
- async def update_lock_setting_default_name(self, data):
1010
+ async def update_lock_setting_default_name(self, lockId: str, name: str = None):
1011
+ data = {
1012
+ "lockId": lockId,
1013
+ "name": name
1014
+ }
1302
1015
  return await execute_async(
1303
1016
  _doordeck_headless_sdk.updateLockSettingDefaultName,
1304
- [self.resource, json.dumps(dataclasses.asdict(data))]
1017
+ [self.resource, json.dumps(data)]
1305
1018
  )
1306
1019
 
1307
- async def set_lock_setting_permitted_addresses(self, data):
1020
+ async def set_lock_setting_permitted_addresses(self, lockId: str, permittedAddresses: List[str]):
1021
+ data = {
1022
+ "lockId": lockId,
1023
+ "permittedAddresses": permittedAddresses
1024
+ }
1308
1025
  return await execute_async(
1309
1026
  _doordeck_headless_sdk.setLockSettingPermittedAddresses,
1310
- [self.resource, json.dumps(dataclasses.asdict(data))]
1027
+ [self.resource, json.dumps(data)]
1311
1028
  )
1312
1029
 
1313
- async def update_lock_setting_hidden(self, data):
1030
+ async def update_lock_setting_hidden(self, lockId: str, hidden: bool):
1031
+ data = {
1032
+ "lockId": lockId,
1033
+ "hidden": hidden
1034
+ }
1314
1035
  return await execute_async(
1315
1036
  _doordeck_headless_sdk.updateLockSettingHidden,
1316
- [self.resource, json.dumps(dataclasses.asdict(data))]
1037
+ [self.resource, json.dumps(data)]
1317
1038
  )
1318
1039
 
1319
- async def set_lock_setting_time_restrictions(self, data):
1040
+ async def set_lock_setting_time_restrictions(self, lockId: str, times: List[TimeRequirement]):
1041
+ data = {
1042
+ "lockId": lockId,
1043
+ "times": dataclasses.asdict(times)
1044
+ }
1320
1045
  return await execute_async(
1321
1046
  _doordeck_headless_sdk.setLockSettingTimeRestrictions,
1322
- [self.resource, json.dumps(dataclasses.asdict(data))]
1047
+ [self.resource, json.dumps(data)]
1323
1048
  )
1324
1049
 
1325
- async def update_lock_setting_location_restrictions(self, data):
1050
+ async def update_lock_setting_location_restrictions(self, lockId: str, location: LocationRequirement = None):
1051
+ data = {
1052
+ "lockId": lockId,
1053
+ "location": dataclasses.asdict(location)
1054
+ }
1326
1055
  return await execute_async(
1327
1056
  _doordeck_headless_sdk.updateLockSettingLocationRestrictions,
1328
- [self.resource, json.dumps(dataclasses.asdict(data))]
1057
+ [self.resource, json.dumps(data)]
1329
1058
  )
1330
1059
 
1331
- async def get_user_public_key(self, data):
1060
+ async def get_user_public_key(self, userEmail: str, visitor: bool = False):
1061
+ data = {
1062
+ "userEmail": userEmail,
1063
+ "visitor": visitor
1064
+ }
1332
1065
  return await execute_async(
1333
1066
  _doordeck_headless_sdk.getUserPublicKey,
1334
- [self.resource, json.dumps(dataclasses.asdict(data))],
1335
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1067
+ [self.resource, json.dumps(data)]
1336
1068
  )
1337
1069
 
1338
- async def get_user_public_key_by_email(self, data):
1070
+ async def get_user_public_key_by_email(self, email: str):
1071
+ data = { "email": email }
1339
1072
  return await execute_async(
1340
1073
  _doordeck_headless_sdk.getUserPublicKeyByEmail,
1341
- [self.resource, json.dumps(dataclasses.asdict(data))],
1342
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1074
+ [self.resource, json.dumps(data)]
1343
1075
  )
1344
1076
 
1345
- async def get_user_public_key_by_telephone(self, data):
1077
+ async def get_user_public_key_by_telephone(self, telephone: str):
1078
+ data = { "telephone": telephone }
1346
1079
  return await execute_async(
1347
1080
  _doordeck_headless_sdk.getUserPublicKeyByTelephone,
1348
- [self.resource, json.dumps(dataclasses.asdict(data))],
1349
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1081
+ [self.resource, json.dumps(data)]
1350
1082
  )
1351
1083
 
1352
- async def get_user_public_key_by_local_key(self, data):
1084
+ async def get_user_public_key_by_local_key(self, localKey: str):
1085
+ data = { "localKey": localKey }
1353
1086
  return await execute_async(
1354
1087
  _doordeck_headless_sdk.getUserPublicKeyByLocalKey,
1355
- [self.resource, json.dumps(dataclasses.asdict(data))],
1356
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1088
+ [self.resource, json.dumps(data)]
1357
1089
  )
1358
1090
 
1359
- async def get_user_public_key_by_foreign_key(self, data):
1091
+ async def get_user_public_key_by_foreign_key(self, foreignKey: str):
1092
+ data = { "foreignKey": foreignKey }
1360
1093
  return await execute_async(
1361
1094
  _doordeck_headless_sdk.getUserPublicKeyByForeignKey,
1362
- [self.resource, json.dumps(dataclasses.asdict(data))],
1363
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1095
+ [self.resource, json.dumps(data)]
1364
1096
  )
1365
1097
 
1366
- async def get_user_public_key_by_identity(self, data):
1098
+ async def get_user_public_key_by_identity(self, identity: str):
1099
+ data = { "identity": identity }
1367
1100
  return await execute_async(
1368
1101
  _doordeck_headless_sdk.getUserPublicKeyByIdentity,
1369
- [self.resource, json.dumps(dataclasses.asdict(data))],
1370
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1102
+ [self.resource, json.dumps(data)]
1371
1103
  )
1372
1104
 
1373
- async def get_user_public_key_by_emails(self, data):
1105
+ async def get_user_public_key_by_emails(self, emails: List[str]):
1106
+ data = { "emails": emails }
1374
1107
  return await execute_async(
1375
1108
  _doordeck_headless_sdk.getUserPublicKeyByEmails,
1376
- [self.resource, json.dumps(dataclasses.asdict(data))],
1377
- lambda r: UserPublicKeyResponse(**get_success_result(r))
1109
+ [self.resource, json.dumps(data)]
1378
1110
  )
1379
1111
 
1380
- async def get_user_public_key_by_telephones(self, data):
1112
+ async def get_user_public_key_by_telephones(self, telephones: List[str]):
1113
+ data = { "telephones": telephones }
1381
1114
  return await execute_async(
1382
1115
  _doordeck_headless_sdk.getUserPublicKeyByTelephones,
1383
- [self.resource, json.dumps(dataclasses.asdict(data))],
1384
- lambda r: BatchUserPublicKeyResponse(**get_success_result(r))
1116
+ [self.resource, json.dumps(data)]
1385
1117
  )
1386
1118
 
1387
- async def get_user_public_key_by_local_keys(self, data):
1119
+ async def get_user_public_key_by_local_keys(self, localKeys: List[str]):
1120
+ data = { "localKeys": localKeys }
1388
1121
  return await execute_async(
1389
1122
  _doordeck_headless_sdk.getUserPublicKeyByLocalKeys,
1390
- [self.resource, json.dumps(dataclasses.asdict(data))],
1391
- lambda r: BatchUserPublicKeyResponse(**get_success_result(r))
1123
+ [self.resource, json.dumps(data)]
1392
1124
  )
1393
1125
 
1394
- async def get_user_public_key_by_foreign_keys(self, data):
1126
+ async def get_user_public_key_by_foreign_keys(self, foreignKeys: List[str]):
1127
+ data = { "foreignKeys": foreignKeys }
1395
1128
  return await execute_async(
1396
1129
  _doordeck_headless_sdk.getUserPublicKeyByForeignKeys,
1397
- [self.resource, json.dumps(dataclasses.asdict(data))],
1398
- lambda r: BatchUserPublicKeyResponse(**get_success_result(r))
1130
+ [self.resource, json.dumps(data)]
1399
1131
  )
1400
1132
 
1401
- async def unlock(self, data):
1133
+ async def unlock(self, data: UnlockOperation):
1402
1134
  return await execute_async(
1403
1135
  _doordeck_headless_sdk.unlock,
1404
1136
  [self.resource, json.dumps(dataclasses.asdict(data))]
1405
1137
  )
1406
1138
 
1407
- async def share_lock(self, data):
1139
+ async def share_lock(self, data: ShareLockOperation):
1408
1140
  return await execute_async(
1409
1141
  _doordeck_headless_sdk.shareLock,
1410
1142
  [self.resource, json.dumps(dataclasses.asdict(data))]
1411
1143
  )
1412
1144
 
1413
- async def batch_share_lock(self, data):
1145
+ async def batch_share_lock(self, data: BatchShareLockOperation):
1414
1146
  return await execute_async(
1415
1147
  _doordeck_headless_sdk.batchShareLock,
1416
1148
  [self.resource, json.dumps(dataclasses.asdict(data))]
1417
1149
  )
1418
1150
 
1419
- async def revoke_access_to_lock(self, data):
1151
+ async def revoke_access_to_lock(self, data: RevokeAccessToLockOperation):
1420
1152
  return await execute_async(
1421
1153
  _doordeck_headless_sdk.revokeAccessToLock,
1422
1154
  [self.resource, json.dumps(dataclasses.asdict(data))]
1423
1155
  )
1424
1156
 
1425
- async def update_secure_setting_unlock_duration(self, data):
1157
+ async def update_secure_setting_unlock_duration(self, data: UpdateSecureSettingUnlockDuration):
1426
1158
  return await execute_async(
1427
1159
  _doordeck_headless_sdk.updateSecureSettingUnlockDuration,
1428
1160
  [self.resource, json.dumps(dataclasses.asdict(data))]
1429
1161
  )
1430
1162
 
1431
- async def update_secure_setting_unlock_between(self, data):
1163
+ async def update_secure_setting_unlock_between(self, data: UpdateSecureSettingUnlockBetween):
1432
1164
  return await execute_async(
1433
1165
  _doordeck_headless_sdk.updateSecureSettingUnlockBetween,
1434
1166
  [self.resource, json.dumps(dataclasses.asdict(data))]
@@ -1437,15 +1169,13 @@ class LockOperations(object):
1437
1169
  async def get_pinned_locks(self):
1438
1170
  return await execute_async(
1439
1171
  _doordeck_headless_sdk.getPinnedLocks,
1440
- [self.resource],
1441
- lambda r: [LockResponse(**item) for item in get_success_result(r)]
1172
+ [self.resource]
1442
1173
  )
1443
1174
 
1444
1175
  async def get_shareable_locks(self):
1445
1176
  return await execute_async(
1446
1177
  _doordeck_headless_sdk.getShareableLocks,
1447
- [self.resource],
1448
- lambda r: [ShareableLockResponse(**item) for item in get_success_result(r)]
1178
+ [self.resource]
1449
1179
  )
1450
1180
 
1451
1181
 
@@ -1454,7 +1184,7 @@ class Platform(object):
1454
1184
  def __init__(self, resource):
1455
1185
  self.resource = resource
1456
1186
 
1457
- async def create_application(self, data):
1187
+ async def create_application(self, data: CreateApplication):
1458
1188
  return await execute_async(
1459
1189
  _doordeck_headless_sdk.createApplication,
1460
1190
  [self.resource, json.dumps(dataclasses.asdict(data))]
@@ -1463,125 +1193,188 @@ class Platform(object):
1463
1193
  async def list_applications(self):
1464
1194
  return await execute_async(
1465
1195
  _doordeck_headless_sdk.listApplications,
1466
- [self.resource],
1467
- lambda r: [ApplicationResponse(**item) for item in get_success_result(r)]
1196
+ [self.resource]
1468
1197
  )
1469
1198
 
1470
- async def get_application(self, data):
1199
+ async def get_application(self, applicationId: str):
1200
+ data = { "applicationId": applicationId }
1471
1201
  return await execute_async(
1472
1202
  _doordeck_headless_sdk.getApplication,
1473
- [self.resource, json.dumps(dataclasses.asdict(data))],
1474
- lambda r: ApplicationResponse(**get_success_result(r))
1203
+ [self.resource, json.dumps(data)]
1475
1204
  )
1476
1205
 
1477
- async def update_application_name(self, data):
1206
+ async def update_application_name(self, applicationId: str, name: str):
1207
+ data = {
1208
+ "applicationId": applicationId,
1209
+ "name": name
1210
+ }
1478
1211
  return await execute_async(
1479
1212
  _doordeck_headless_sdk.updateApplicationName,
1480
- [self.resource, json.dumps(dataclasses.asdict(data))]
1213
+ [self.resource, json.dumps(data)]
1481
1214
  )
1482
1215
 
1483
- async def update_application_company_name(self, data):
1216
+ async def update_application_company_name(self, applicationId: str, companyName: str):
1217
+ data = {
1218
+ "applicationId": applicationId,
1219
+ "companyName": companyName
1220
+ }
1484
1221
  return await execute_async(
1485
1222
  _doordeck_headless_sdk.updateApplicationCompanyName,
1486
- [self.resource, json.dumps(dataclasses.asdict(data))]
1223
+ [self.resource, json.dumps(data)]
1487
1224
  )
1488
1225
 
1489
- async def update_application_mailing_address(self, data):
1226
+ async def update_application_mailing_address(self, applicationId: str, mailingAddress: str):
1227
+ data = {
1228
+ "applicationId": applicationId,
1229
+ "mailingAddress": mailingAddress
1230
+ }
1490
1231
  return await execute_async(
1491
1232
  _doordeck_headless_sdk.updateApplicationMailingAddress,
1492
- [self.resource, json.dumps(dataclasses.asdict(data))]
1233
+ [self.resource, json.dumps(data)]
1493
1234
  )
1494
1235
 
1495
- async def update_application_privacy_policy(self, data):
1236
+ async def update_application_privacy_policy(self, applicationId: str, privacyPolicy: str):
1237
+ data = {
1238
+ "applicationId": applicationId,
1239
+ "privacyPolicy": privacyPolicy
1240
+ }
1496
1241
  return await execute_async(
1497
1242
  _doordeck_headless_sdk.updateApplicationPrivacyPolicy,
1498
- [self.resource, json.dumps(dataclasses.asdict(data))]
1243
+ [self.resource, json.dumps(data)]
1499
1244
  )
1500
1245
 
1501
- async def update_application_support_contact(self, data):
1246
+ async def update_application_support_contact(self, applicationId: str, supportContact: str):
1247
+ data = {
1248
+ "applicationId": applicationId,
1249
+ "supportContact": supportContact
1250
+ }
1502
1251
  return await execute_async(
1503
1252
  _doordeck_headless_sdk.updateApplicationSupportContact,
1504
- [self.resource, json.dumps(dataclasses.asdict(data))]
1253
+ [self.resource, json.dumps(data)]
1505
1254
  )
1506
1255
 
1507
- async def update_application_app_link(self, data):
1256
+ async def update_application_app_link(self, applicationId: str, appLink: str):
1257
+ data = {
1258
+ "applicationId": applicationId,
1259
+ "appLink": appLink
1260
+ }
1508
1261
  return await execute_async(
1509
1262
  _doordeck_headless_sdk.updateApplicationAppLink,
1510
- [self.resource, json.dumps(dataclasses.asdict(data))]
1263
+ [self.resource, json.dumps(data)]
1511
1264
  )
1512
1265
 
1513
- async def update_application_email_preferences(self, data):
1266
+ async def update_application_email_preferences(self, applicationId: str, emailPreferences: EmailPreferences):
1267
+ data = {
1268
+ "applicationId": applicationId,
1269
+ "emailPreferences": dataclasses.asdict(emailPreferences)
1270
+ }
1514
1271
  return await execute_async(
1515
1272
  _doordeck_headless_sdk.updateApplicationEmailPreferences,
1516
- [self.resource, json.dumps(dataclasses.asdict(data))]
1273
+ [self.resource, json.dumps(data)]
1517
1274
  )
1518
1275
 
1519
- async def update_application_logo_url(self, data):
1276
+ async def update_application_logo_url(self, applicationId: str, logoUrl: str):
1277
+ data = {
1278
+ "applicationId": applicationId,
1279
+ "logoUrl": logoUrl
1280
+ }
1520
1281
  return await execute_async(
1521
1282
  _doordeck_headless_sdk.updateApplicationLogoUrl,
1522
- [self.resource, json.dumps(dataclasses.asdict(data))]
1283
+ [self.resource, json.dumps(data)]
1523
1284
  )
1524
1285
 
1525
- async def delete_application(self, data):
1286
+ async def delete_application(self, applicationId: str):
1287
+ data = { "applicationId": applicationId }
1526
1288
  return await execute_async(
1527
1289
  _doordeck_headless_sdk.deleteApplication,
1528
- [self.resource, json.dumps(dataclasses.asdict(data))]
1290
+ [self.resource, json.dumps(data)]
1529
1291
  )
1530
1292
 
1531
- async def get_logo_upload_url(self, data):
1293
+ async def get_logo_upload_url(self, applicationId: str, contentType: str):
1294
+ data = {
1295
+ "applicationId": applicationId,
1296
+ "contentType": contentType
1297
+ }
1532
1298
  return await execute_async(
1533
1299
  _doordeck_headless_sdk.getLogoUploadUrl,
1534
- [self.resource, json.dumps(dataclasses.asdict(data))],
1535
- lambda r: GetLogoUploadUrlResponse(**get_success_result(r))
1300
+ [self.resource, json.dumps(data)]
1536
1301
  )
1537
1302
 
1538
- async def add_auth_key(self, data):
1303
+ async def add_auth_key(self, applicationId: str, key: AuthKey):
1304
+ data = {
1305
+ "applicationId": applicationId,
1306
+ "key": dataclasses.asdict(key)
1307
+ }
1539
1308
  return await execute_async(
1540
1309
  _doordeck_headless_sdk.addAuthKey,
1541
- [self.resource, json.dumps(dataclasses.asdict(data))]
1310
+ [self.resource, json.dumps(data)]
1542
1311
  )
1543
1312
 
1544
- async def add_auth_issuer(self, data):
1313
+ async def add_auth_issuer(self, applicationId: str, url: str):
1314
+ data = {
1315
+ "applicationId": applicationId,
1316
+ "url": url
1317
+ }
1545
1318
  return await execute_async(
1546
1319
  _doordeck_headless_sdk.addAuthIssuer,
1547
- [self.resource, json.dumps(dataclasses.asdict(data))]
1320
+ [self.resource, json.dumps(data)]
1548
1321
  )
1549
1322
 
1550
- async def delete_auth_issuer(self, data):
1323
+ async def delete_auth_issuer(self, applicationId: str, url: str):
1324
+ data = {
1325
+ "applicationId": applicationId,
1326
+ "url": url
1327
+ }
1551
1328
  return await execute_async(
1552
1329
  _doordeck_headless_sdk.deleteAuthIssuer,
1553
- [self.resource, json.dumps(dataclasses.asdict(data))]
1330
+ [self.resource, json.dumps(data)]
1554
1331
  )
1555
1332
 
1556
- async def add_cors_domain(self, data):
1333
+ async def add_cors_domain(self, applicationId: str, url: str):
1334
+ data = {
1335
+ "applicationId": applicationId,
1336
+ "url": url
1337
+ }
1557
1338
  return await execute_async(
1558
1339
  _doordeck_headless_sdk.addCorsDomain,
1559
- [self.resource, json.dumps(dataclasses.asdict(data))]
1340
+ [self.resource, json.dumps(data)]
1560
1341
  )
1561
1342
 
1562
- async def remove_cors_domain(self, data):
1343
+ async def remove_cors_domain(self, applicationId: str, url: str):
1344
+ data = {
1345
+ "applicationId": applicationId,
1346
+ "url": url
1347
+ }
1563
1348
  return await execute_async(
1564
1349
  _doordeck_headless_sdk.removeCorsDomain,
1565
- [self.resource, json.dumps(dataclasses.asdict(data))]
1350
+ [self.resource, json.dumps(data)]
1566
1351
  )
1567
1352
 
1568
- async def add_application_owner(self, data):
1353
+ async def add_application_owner(self, applicationId: str, userId: str):
1354
+ data = {
1355
+ "applicationId": applicationId,
1356
+ "userId": userId
1357
+ }
1569
1358
  return await execute_async(
1570
1359
  _doordeck_headless_sdk.addApplicationOwner,
1571
- [self.resource, json.dumps(dataclasses.asdict(data))]
1360
+ [self.resource, json.dumps(data)]
1572
1361
  )
1573
1362
 
1574
- async def remove_application_owner(self, data):
1363
+ async def remove_application_owner(self, applicationId: str, userId: str):
1364
+ data = {
1365
+ "applicationId": applicationId,
1366
+ "userId": userId
1367
+ }
1575
1368
  return await execute_async(
1576
1369
  _doordeck_headless_sdk.removeApplicationOwner,
1577
- [self.resource, json.dumps(dataclasses.asdict(data))]
1370
+ [self.resource, json.dumps(data)]
1578
1371
  )
1579
1372
 
1580
- async def get_application_owners_details(self, data):
1373
+ async def get_application_owners_details(self, applicationId: str):
1374
+ data = { "applicationId": applicationId }
1581
1375
  return await execute_async(
1582
1376
  _doordeck_headless_sdk.getApplicationOwnersDetails,
1583
- [self.resource, json.dumps(dataclasses.asdict(data))],
1584
- lambda r: [ApplicationOwnerDetailsResponse(**item) for item in get_success_result(r)]
1377
+ [self.resource, json.dumps(data)]
1585
1378
  )
1586
1379
 
1587
1380
 
@@ -1593,22 +1386,21 @@ class Sites(object):
1593
1386
  async def list_sites(self):
1594
1387
  return await execute_async(
1595
1388
  _doordeck_headless_sdk.listSites,
1596
- [self.resource],
1597
- lambda r: [SiteResponse(**item) for item in get_success_result(r)]
1389
+ [self.resource]
1598
1390
  )
1599
1391
 
1600
- async def get_locks_for_site(self, data):
1392
+ async def get_locks_for_site(self, siteId: str):
1393
+ data = { "siteId": siteId }
1601
1394
  return await execute_async(
1602
1395
  _doordeck_headless_sdk.getLocksForSite,
1603
- [self.resource, json.dumps(dataclasses.asdict(data))],
1604
- lambda r: [SiteLocksResponse(**item) for item in get_success_result(r)]
1396
+ [self.resource, json.dumps(data)]
1605
1397
  )
1606
1398
 
1607
- async def get_users_for_site(self, data):
1399
+ async def get_users_for_site(self, siteId: str):
1400
+ data = { "siteId": siteId }
1608
1401
  return await execute_async(
1609
1402
  _doordeck_headless_sdk.getUsersForSite,
1610
- [self.resource, json.dumps(dataclasses.asdict(data))],
1611
- lambda r: [UserForSiteResponse(**item) for item in get_success_result(r)]
1403
+ [self.resource, json.dumps(data)]
1612
1404
  )
1613
1405
 
1614
1406
 
@@ -1617,28 +1409,34 @@ class Tiles(object):
1617
1409
  def __init__(self, resource):
1618
1410
  self.resource = resource
1619
1411
 
1620
- async def get_locks_belonging_to_tile(self, data):
1412
+ async def get_locks_belonging_to_tile(self, tileId: str):
1413
+ data = { "tileId": tileId }
1621
1414
  return await execute_async(
1622
1415
  _doordeck_headless_sdk.getLocksBelongingToTile,
1623
- [self.resource, json.dumps(dataclasses.asdict(data))],
1624
- lambda r: TileLocksResponse(**get_success_result(r))
1416
+ [self.resource, json.dumps(data)]
1625
1417
  )
1626
1418
 
1627
- async def associate_multiple_locks(self, data):
1419
+ async def associate_multiple_locks(self, tileId: str, siteId: str, lockIds: List[str]):
1420
+ data = {
1421
+ "tileId": tileId,
1422
+ "siteId": siteId,
1423
+ "lockIds": lockIds
1424
+ }
1628
1425
  return await execute_async(
1629
1426
  _doordeck_headless_sdk.associateMultipleLocks,
1630
- [self.resource, json.dumps(dataclasses.asdict(data))]
1427
+ [self.resource, json.dumps(data)]
1631
1428
  )
1632
1429
 
1633
1430
 
1634
1431
  class InitializeSdk(object):
1635
1432
 
1636
- def __init__(self, api_environment, cloud_auth_token = None, cloud_refresh_token = None, fusion_host = None):
1637
- self.sdkApiEnvironment = _doordeck_headless_sdk.getApiEnvironmentByName(Doordeck_Headless_Sdk_kref_com_doordeck_multiplatform_sdk_model_data_ApiEnvironment(), api_environment.name)
1433
+ def __init__(self, api_environment: typing.Literal["DEV", "STAGING", "PROD"] = "PROD", cloud_auth_token: str = None, cloud_refresh_token: str = None, fusion_host: str = None):
1434
+ self.sdkApiEnvironment = _doordeck_headless_sdk.getApiEnvironmentByName(Doordeck_Headless_Sdk_kref_com_doordeck_multiplatform_sdk_model_data_ApiEnvironment(), api_environment)
1638
1435
  self.sdkConfig = _doordeck_headless_sdk.buildSdkConfig(self.sdkApiEnvironment, cloud_auth_token, cloud_refresh_token, fusion_host)
1639
1436
  self.sdk = initialize(Doordeck_Headless_Sdk_kref_com_doordeck_multiplatform_sdk_KDoordeckFactory(), self.sdkConfig)
1640
1437
  self.accountless = Accountless(accountless(self.sdk))
1641
1438
  self.account = Account(account(self.sdk))
1439
+ self.fusion = Fusion(fusion(self.sdk))
1642
1440
  self.helper = Helper(helper(self.sdk))
1643
1441
  self.lockOperations = LockOperations(lockOperations(self.sdk))
1644
1442
  self.platform = Platform(platform(self.sdk))