doordeck-headless-sdk 0.85.0__py3-none-any.whl → 0.87.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.
Potentially problematic release.
This version of doordeck-headless-sdk might be problematic. Click here for more details.
- doordeck_headless_sdk/Doordeck.Headless.Sdk.dll +0 -0
- doordeck_headless_sdk/_doordeck_headless_sdk.pyd +0 -0
- doordeck_headless_sdk/doordeck_headless_sdk.py +605 -807
- {doordeck_headless_sdk-0.85.0.dist-info → doordeck_headless_sdk-0.87.0.dist-info}/METADATA +2 -2
- doordeck_headless_sdk-0.87.0.dist-info/RECORD +9 -0
- doordeck_headless_sdk-0.85.0.dist-info/RECORD +0 -9
- {doordeck_headless_sdk-0.85.0.dist-info → doordeck_headless_sdk-0.87.0.dist-info}/WHEEL +0 -0
- {doordeck_headless_sdk-0.85.0.dist-info → doordeck_headless_sdk-0.87.0.dist-info}/licenses/LICENSE +0 -0
- {doordeck_headless_sdk-0.85.0.dist-info → doordeck_headless_sdk-0.87.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
184
|
+
if response.failure is None:
|
|
187
185
|
return
|
|
188
|
-
exception_type = response
|
|
189
|
-
exception_message = response
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
UNSUPPORTED = "UNSUPPORTED"
|
|
260
|
+
def __post_init__(self):
|
|
261
|
+
self.type = "alpeta"
|
|
268
262
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
|
295
|
-
|
|
296
|
-
|
|
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
|
|
301
|
-
|
|
295
|
+
class AxisController(LockController):
|
|
296
|
+
type: str = field(init=False)
|
|
297
|
+
baseUrl: str
|
|
298
|
+
doorIdentifier: str
|
|
302
299
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
publicKey: str
|
|
300
|
+
def __post_init__(self):
|
|
301
|
+
self.type = "axis"
|
|
306
302
|
|
|
307
303
|
@dataclass
|
|
308
|
-
class
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
|
|
313
|
-
|
|
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
|
|
319
|
-
|
|
320
|
-
|
|
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
|
|
324
|
-
|
|
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
|
|
329
|
-
|
|
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
|
|
334
|
-
|
|
345
|
+
class LenelController(LockController):
|
|
346
|
+
type: str = field(init=False)
|
|
347
|
+
baseUrl: str
|
|
348
|
+
username: str
|
|
335
349
|
password: str
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
350
|
+
directoryId: str
|
|
351
|
+
panelId: str
|
|
352
|
+
readerId: str
|
|
339
353
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
code: str
|
|
354
|
+
def __post_init__(self):
|
|
355
|
+
self.type = "lenel"
|
|
343
356
|
|
|
344
357
|
@dataclass
|
|
345
|
-
class
|
|
346
|
-
|
|
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
|
|
350
|
-
|
|
351
|
-
|
|
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
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
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
|
-
|
|
364
|
-
|
|
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
|
|
371
|
-
|
|
390
|
+
class IntegraV1Controller(LockController):
|
|
391
|
+
type: str = field(init=False)
|
|
392
|
+
username: str
|
|
372
393
|
password: str
|
|
394
|
+
controllerId: int
|
|
373
395
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
publicKey: str
|
|
396
|
+
def __post_init__(self):
|
|
397
|
+
self.type = "integra"
|
|
377
398
|
|
|
378
399
|
@dataclass
|
|
379
|
-
class
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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
|
|
388
|
-
|
|
412
|
+
class DataSource:
|
|
413
|
+
driverClass: str
|
|
414
|
+
url: str
|
|
415
|
+
user: str
|
|
416
|
+
password: str
|
|
389
417
|
|
|
390
418
|
@dataclass
|
|
391
|
-
class
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
419
|
+
class PacController(LockController):
|
|
420
|
+
type: str = field(init=False)
|
|
421
|
+
dataSource: DataSource
|
|
422
|
+
outputChannel: int
|
|
423
|
+
controllerSerial: int
|
|
395
424
|
|
|
396
|
-
|
|
397
|
-
|
|
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
|
|
404
|
-
|
|
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
|
-
|
|
407
|
-
|
|
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
|
|
413
|
-
|
|
414
|
-
|
|
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
|
-
|
|
417
|
-
|
|
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
|
|
423
|
-
|
|
424
|
-
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
523
|
-
baseOperation:
|
|
524
|
-
shareLock:
|
|
498
|
+
class ShareLockOperation:
|
|
499
|
+
baseOperation: BaseOperation
|
|
500
|
+
shareLock: ShareLock
|
|
525
501
|
|
|
526
502
|
@dataclass
|
|
527
|
-
class
|
|
528
|
-
baseOperation:
|
|
529
|
-
users: typing.List[
|
|
503
|
+
class BatchShareLockOperation:
|
|
504
|
+
baseOperation: BaseOperation
|
|
505
|
+
users: typing.List[ShareLock]
|
|
530
506
|
|
|
531
507
|
@dataclass
|
|
532
|
-
class
|
|
533
|
-
baseOperation:
|
|
508
|
+
class RevokeAccessToLockOperation:
|
|
509
|
+
baseOperation: BaseOperation
|
|
534
510
|
users: typing.List[str]
|
|
535
511
|
|
|
536
512
|
@dataclass
|
|
537
|
-
class
|
|
538
|
-
baseOperation:
|
|
513
|
+
class UpdateSecureSettingUnlockDuration:
|
|
514
|
+
baseOperation: BaseOperation
|
|
539
515
|
unlockDuration: int
|
|
540
516
|
|
|
541
517
|
@dataclass
|
|
542
|
-
class
|
|
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
|
|
551
|
-
baseOperation:
|
|
526
|
+
class UnlockOperation:
|
|
527
|
+
baseOperation: BaseOperation
|
|
552
528
|
directAccessEndpoints: typing.Optional[typing.List[str]] = None
|
|
553
529
|
|
|
554
530
|
@dataclass
|
|
555
|
-
class
|
|
556
|
-
baseOperation:
|
|
557
|
-
unlockBetween: typing.Optional[
|
|
531
|
+
class UpdateSecureSettingUnlockBetween:
|
|
532
|
+
baseOperation: BaseOperation
|
|
533
|
+
unlockBetween: typing.Optional[UnlockBetween] = None
|
|
558
534
|
|
|
559
535
|
|
|
560
536
|
@dataclass
|
|
561
|
-
class
|
|
537
|
+
class EmailCallToAction:
|
|
562
538
|
actionTarget: str
|
|
563
539
|
headline: str
|
|
564
540
|
actionText: str
|
|
565
541
|
|
|
566
542
|
@dataclass
|
|
567
|
-
class
|
|
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[
|
|
549
|
+
callToAction: typing.Optional[EmailCallToAction] = None
|
|
574
550
|
|
|
575
551
|
@dataclass
|
|
576
|
-
class
|
|
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[
|
|
559
|
+
emailPreferences: typing.Optional[EmailPreferences] = None
|
|
584
560
|
logoUrl: typing.Optional[str] = None
|
|
585
561
|
|
|
586
562
|
@dataclass
|
|
587
|
-
class
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
1110
|
-
lambda r: TokenResponse(**get_success_result(r))
|
|
699
|
+
[self.resource, json.dumps(data)]
|
|
1111
700
|
)
|
|
1112
701
|
|
|
1113
|
-
async def registration(self,
|
|
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(
|
|
1117
|
-
lambda r: TokenResponse(**get_success_result(r))
|
|
712
|
+
[self.resource, json.dumps(data)]
|
|
1118
713
|
)
|
|
1119
714
|
|
|
1120
|
-
async def verify_email(self,
|
|
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(
|
|
719
|
+
[self.resource, json.dumps(data)]
|
|
1124
720
|
)
|
|
1125
721
|
|
|
1126
|
-
async def password_reset(self,
|
|
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(
|
|
726
|
+
[self.resource, json.dumps(data)]
|
|
1130
727
|
)
|
|
1131
728
|
|
|
1132
|
-
async def password_reset_verify(self,
|
|
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(
|
|
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
|
|
749
|
+
return name
|
|
1148
750
|
|
|
1149
|
-
def set_cloud_auth_token(self,
|
|
1150
|
-
_doordeck_headless_sdk.setCloudAuthToken(self.resource,
|
|
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,
|
|
1159
|
-
_doordeck_headless_sdk.setCloudRefreshToken(self.resource,
|
|
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,
|
|
1165
|
-
_doordeck_headless_sdk.setFusionHost(self.resource,
|
|
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,
|
|
1171
|
-
_doordeck_headless_sdk.setFusionAuthToken(self.resource,
|
|
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,
|
|
1177
|
-
_doordeck_headless_sdk.setUserId(self.resource,
|
|
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,
|
|
1183
|
-
_doordeck_headless_sdk.setUserEmail(self.resource,
|
|
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,
|
|
1195
|
-
|
|
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
|
-
|
|
1208
|
-
|
|
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,
|
|
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(
|
|
899
|
+
[self.resource, json.dumps(data)]
|
|
1220
900
|
)
|
|
1221
901
|
|
|
1222
|
-
async def assisted_login(self,
|
|
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(
|
|
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,
|
|
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(
|
|
1233
|
-
lambda r: AssistedRegisterEphemeralKeyResponse(**get_success_result(r))
|
|
916
|
+
[self.resource, json.dumps(data)]
|
|
1234
917
|
)
|
|
1235
918
|
|
|
1236
|
-
async def assisted_register(self,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
987
|
+
[self.resource, json.dumps(data)]
|
|
1287
988
|
)
|
|
1288
989
|
|
|
1289
|
-
async def update_lock_favourite(self,
|
|
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(
|
|
997
|
+
[self.resource, json.dumps(data)]
|
|
1293
998
|
)
|
|
1294
999
|
|
|
1295
|
-
async def update_lock_colour(self,
|
|
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(
|
|
1007
|
+
[self.resource, json.dumps(data)]
|
|
1299
1008
|
)
|
|
1300
1009
|
|
|
1301
|
-
async def update_lock_setting_default_name(self,
|
|
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(
|
|
1017
|
+
[self.resource, json.dumps(data)]
|
|
1305
1018
|
)
|
|
1306
1019
|
|
|
1307
|
-
async def set_lock_setting_permitted_addresses(self,
|
|
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(
|
|
1027
|
+
[self.resource, json.dumps(data)]
|
|
1311
1028
|
)
|
|
1312
1029
|
|
|
1313
|
-
async def update_lock_setting_hidden(self,
|
|
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(
|
|
1037
|
+
[self.resource, json.dumps(data)]
|
|
1317
1038
|
)
|
|
1318
1039
|
|
|
1319
|
-
async def set_lock_setting_time_restrictions(self,
|
|
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(
|
|
1047
|
+
[self.resource, json.dumps(data)]
|
|
1323
1048
|
)
|
|
1324
1049
|
|
|
1325
|
-
async def update_lock_setting_location_restrictions(self,
|
|
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(
|
|
1057
|
+
[self.resource, json.dumps(data)]
|
|
1329
1058
|
)
|
|
1330
1059
|
|
|
1331
|
-
async def get_user_public_key(self,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
1213
|
+
[self.resource, json.dumps(data)]
|
|
1481
1214
|
)
|
|
1482
1215
|
|
|
1483
|
-
async def update_application_company_name(self,
|
|
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(
|
|
1223
|
+
[self.resource, json.dumps(data)]
|
|
1487
1224
|
)
|
|
1488
1225
|
|
|
1489
|
-
async def update_application_mailing_address(self,
|
|
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(
|
|
1233
|
+
[self.resource, json.dumps(data)]
|
|
1493
1234
|
)
|
|
1494
1235
|
|
|
1495
|
-
async def update_application_privacy_policy(self,
|
|
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(
|
|
1243
|
+
[self.resource, json.dumps(data)]
|
|
1499
1244
|
)
|
|
1500
1245
|
|
|
1501
|
-
async def update_application_support_contact(self,
|
|
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(
|
|
1253
|
+
[self.resource, json.dumps(data)]
|
|
1505
1254
|
)
|
|
1506
1255
|
|
|
1507
|
-
async def update_application_app_link(self,
|
|
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(
|
|
1263
|
+
[self.resource, json.dumps(data)]
|
|
1511
1264
|
)
|
|
1512
1265
|
|
|
1513
|
-
async def update_application_email_preferences(self,
|
|
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(
|
|
1273
|
+
[self.resource, json.dumps(data)]
|
|
1517
1274
|
)
|
|
1518
1275
|
|
|
1519
|
-
async def update_application_logo_url(self,
|
|
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(
|
|
1283
|
+
[self.resource, json.dumps(data)]
|
|
1523
1284
|
)
|
|
1524
1285
|
|
|
1525
|
-
async def delete_application(self,
|
|
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(
|
|
1290
|
+
[self.resource, json.dumps(data)]
|
|
1529
1291
|
)
|
|
1530
1292
|
|
|
1531
|
-
async def get_logo_upload_url(self,
|
|
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(
|
|
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,
|
|
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(
|
|
1310
|
+
[self.resource, json.dumps(data)]
|
|
1542
1311
|
)
|
|
1543
1312
|
|
|
1544
|
-
async def add_auth_issuer(self,
|
|
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(
|
|
1320
|
+
[self.resource, json.dumps(data)]
|
|
1548
1321
|
)
|
|
1549
1322
|
|
|
1550
|
-
async def delete_auth_issuer(self,
|
|
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(
|
|
1330
|
+
[self.resource, json.dumps(data)]
|
|
1554
1331
|
)
|
|
1555
1332
|
|
|
1556
|
-
async def add_cors_domain(self,
|
|
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(
|
|
1340
|
+
[self.resource, json.dumps(data)]
|
|
1560
1341
|
)
|
|
1561
1342
|
|
|
1562
|
-
async def remove_cors_domain(self,
|
|
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(
|
|
1350
|
+
[self.resource, json.dumps(data)]
|
|
1566
1351
|
)
|
|
1567
1352
|
|
|
1568
|
-
async def add_application_owner(self,
|
|
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(
|
|
1360
|
+
[self.resource, json.dumps(data)]
|
|
1572
1361
|
)
|
|
1573
1362
|
|
|
1574
|
-
async def remove_application_owner(self,
|
|
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(
|
|
1370
|
+
[self.resource, json.dumps(data)]
|
|
1578
1371
|
)
|
|
1579
1372
|
|
|
1580
|
-
async def get_application_owners_details(self,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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
|
|
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))
|