@qlever-llc/trellis 0.8.4 → 0.9.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/trellis-generate.js +0 -0
- package/esm/auth/browser/login.d.ts.map +1 -1
- package/esm/auth/browser/login.js +46 -3
- package/esm/auth/browser/portal.d.ts.map +1 -1
- package/esm/auth/browser/portal.js +5 -1
- package/esm/auth/browser/session.d.ts +18 -7
- package/esm/auth/browser/session.d.ts.map +1 -1
- package/esm/auth/browser/session.js +47 -11
- package/esm/auth/browser/storage.d.ts +6 -1
- package/esm/auth/browser/storage.d.ts.map +1 -1
- package/esm/auth/browser/storage.js +15 -3
- package/esm/auth/browser.d.ts +2 -2
- package/esm/auth/browser.d.ts.map +1 -1
- package/esm/auth/browser.js +1 -1
- package/esm/auth/device_activation.d.ts +36 -33
- package/esm/auth/device_activation.d.ts.map +1 -1
- package/esm/auth/device_activation.js +26 -22
- package/esm/auth/mod.d.ts +4 -4
- package/esm/auth/mod.d.ts.map +1 -1
- package/esm/auth/mod.js +2 -2
- package/esm/auth/proof.d.ts +3 -1
- package/esm/auth/proof.d.ts.map +1 -1
- package/esm/auth/proof.js +21 -15
- package/esm/auth/protocol.d.ts +2457 -941
- package/esm/auth/protocol.d.ts.map +1 -1
- package/esm/auth/protocol.js +747 -375
- package/esm/auth/schemas.d.ts +25 -4
- package/esm/auth/schemas.d.ts.map +1 -1
- package/esm/auth/schemas.js +14 -4
- package/esm/auth/session_auth.d.ts +1 -1
- package/esm/auth/session_auth.d.ts.map +1 -1
- package/esm/auth/session_auth.js +7 -1
- package/esm/client_connect.d.ts +2 -0
- package/esm/client_connect.d.ts.map +1 -1
- package/esm/client_connect.js +76 -15
- package/esm/contract.d.ts +3 -0
- package/esm/contract.d.ts.map +1 -1
- package/esm/contract_support/mod.d.ts +422 -43
- package/esm/contract_support/mod.d.ts.map +1 -1
- package/esm/contract_support/mod.js +734 -33
- package/esm/contract_support/protocol.d.ts +20 -5
- package/esm/contract_support/protocol.d.ts.map +1 -1
- package/esm/contract_support/protocol.js +18 -10
- package/esm/contract_support/runtime.d.ts +11 -0
- package/esm/contract_support/runtime.d.ts.map +1 -1
- package/esm/contract_support/schema_pointers.d.ts.map +1 -1
- package/esm/contract_support/schema_pointers.js +32 -14
- package/esm/device.d.ts +2 -0
- package/esm/device.d.ts.map +1 -1
- package/esm/device.js +3 -0
- package/esm/errors/AuthError.d.ts +2 -1
- package/esm/errors/AuthError.d.ts.map +1 -1
- package/esm/errors/AuthError.js +8 -3
- package/esm/errors/index.d.ts +4 -4
- package/esm/errors/index.d.ts.map +1 -1
- package/esm/errors/index.js +1 -0
- package/esm/generated-sdk/auth/api.d.ts +27 -9
- package/esm/generated-sdk/auth/api.d.ts.map +1 -1
- package/esm/generated-sdk/auth/api.js +16 -590
- package/esm/generated-sdk/auth/client.d.ts +91 -85
- package/esm/generated-sdk/auth/client.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.d.ts +1 -1
- package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.js +4 -2
- package/esm/generated-sdk/auth/mod.d.ts +1 -0
- package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
- package/esm/generated-sdk/auth/owned_api.d.ts +3 -0
- package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -0
- package/esm/generated-sdk/auth/owned_api.js +594 -0
- package/esm/generated-sdk/auth/schemas.d.ts +9959 -5160
- package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/auth/schemas.js +136 -137
- package/esm/generated-sdk/auth/types.d.ts +2418 -1557
- package/esm/generated-sdk/auth/types.d.ts.map +1 -1
- package/esm/generated-sdk/auth/types.js +1 -1
- package/esm/generated-sdk/health/api.d.ts +24 -9
- package/esm/generated-sdk/health/api.d.ts.map +1 -1
- package/esm/generated-sdk/health/api.js +12 -20
- package/esm/generated-sdk/health/client.d.ts +2 -1
- package/esm/generated-sdk/health/client.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.js +2 -0
- package/esm/generated-sdk/health/owned_api.d.ts +3 -0
- package/esm/generated-sdk/health/owned_api.d.ts.map +1 -0
- package/esm/generated-sdk/health/owned_api.js +16 -0
- package/esm/generated-sdk/health/types.d.ts +2 -0
- package/esm/generated-sdk/health/types.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/api.d.ts +33 -9
- package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/api.js +22 -87
- package/esm/generated-sdk/jobs/client.d.ts +9 -2
- package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.d.ts +1 -1
- package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.js +4 -2
- package/esm/generated-sdk/jobs/owned_api.d.ts +3 -0
- package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -0
- package/esm/generated-sdk/jobs/owned_api.js +118 -0
- package/esm/generated-sdk/jobs/schemas.d.ts +336 -123
- package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/schemas.js +17 -15
- package/esm/generated-sdk/jobs/types.d.ts +144 -34
- package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/types.js +36 -1
- package/esm/generated-sdk/state/api.d.ts +27 -9
- package/esm/generated-sdk/state/api.d.ts.map +1 -1
- package/esm/generated-sdk/state/api.js +16 -71
- package/esm/generated-sdk/state/client.d.ts +4 -2
- package/esm/generated-sdk/state/client.d.ts.map +1 -1
- package/esm/generated-sdk/state/contract.d.ts +1 -1
- package/esm/generated-sdk/state/contract.d.ts.map +1 -1
- package/esm/generated-sdk/state/contract.js +4 -2
- package/esm/generated-sdk/state/owned_api.d.ts +3 -0
- package/esm/generated-sdk/state/owned_api.d.ts.map +1 -0
- package/esm/generated-sdk/state/owned_api.js +66 -0
- package/esm/generated-sdk/state/schemas.d.ts +264 -284
- package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/state/schemas.js +6 -6
- package/esm/generated-sdk/state/types.d.ts +24 -23
- package/esm/generated-sdk/state/types.d.ts.map +1 -1
- package/esm/generated-sdk/state/types.js +1 -1
- package/esm/generated-sdk/trellis-core/api.d.ts +27 -9
- package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/api.js +16 -39
- package/esm/generated-sdk/trellis-core/client.d.ts +5 -2
- package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.d.ts +1 -1
- package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.js +4 -2
- package/esm/generated-sdk/trellis-core/owned_api.d.ts +3 -0
- package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -0
- package/esm/generated-sdk/trellis-core/owned_api.js +42 -0
- package/esm/generated-sdk/trellis-core/schemas.d.ts +259 -11
- package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/schemas.js +5 -3
- package/esm/generated-sdk/trellis-core/types.d.ts +56 -1
- package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/types.js +1 -1
- package/esm/helpers.d.ts.map +1 -1
- package/esm/index.d.ts +4 -3
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -0
- package/esm/jobs.d.ts +10 -1
- package/esm/jobs.d.ts.map +1 -1
- package/esm/jobs.js +16 -1
- package/esm/kv.d.ts.map +1 -1
- package/esm/kv.js +10 -4
- package/esm/models/auth/rpc/Logout.d.ts +4 -4
- package/esm/models/auth/rpc/Logout.d.ts.map +1 -1
- package/esm/models/auth/rpc/Logout.js +2 -2
- package/esm/models/trellis/Page.d.ts +2 -0
- package/esm/models/trellis/Page.d.ts.map +1 -0
- package/esm/models/trellis/Page.js +1 -0
- package/esm/models/trellis/State.d.ts +1 -0
- package/esm/models/trellis/State.d.ts.map +1 -1
- package/esm/models/trellis/State.js +1 -0
- package/esm/models/trellis/rpc/StateList.d.ts +9 -12
- package/esm/models/trellis/rpc/StateList.d.ts.map +1 -1
- package/esm/models/trellis/rpc/StateList.js +16 -18
- package/esm/npm/src/auth/browser/login.d.ts.map +1 -1
- package/esm/npm/src/auth/browser/login.js +46 -3
- package/esm/npm/src/auth/browser/portal.d.ts.map +1 -1
- package/esm/npm/src/auth/browser/portal.js +5 -1
- package/esm/npm/src/auth/browser/session.d.ts +18 -7
- package/esm/npm/src/auth/browser/session.d.ts.map +1 -1
- package/esm/npm/src/auth/browser/session.js +47 -11
- package/esm/npm/src/auth/browser/storage.d.ts +6 -1
- package/esm/npm/src/auth/browser/storage.d.ts.map +1 -1
- package/esm/npm/src/auth/browser/storage.js +15 -3
- package/esm/npm/src/auth/browser.d.ts +2 -2
- package/esm/npm/src/auth/browser.d.ts.map +1 -1
- package/esm/npm/src/auth/browser.js +1 -1
- package/esm/npm/src/auth/device_activation.d.ts +36 -33
- package/esm/npm/src/auth/device_activation.d.ts.map +1 -1
- package/esm/npm/src/auth/device_activation.js +26 -22
- package/esm/npm/src/auth/mod.d.ts +4 -4
- package/esm/npm/src/auth/mod.d.ts.map +1 -1
- package/esm/npm/src/auth/mod.js +2 -2
- package/esm/npm/src/auth/proof.d.ts +3 -1
- package/esm/npm/src/auth/proof.d.ts.map +1 -1
- package/esm/npm/src/auth/proof.js +21 -15
- package/esm/npm/src/auth/protocol.d.ts +2457 -941
- package/esm/npm/src/auth/protocol.d.ts.map +1 -1
- package/esm/npm/src/auth/protocol.js +747 -375
- package/esm/npm/src/auth/schemas.d.ts +25 -4
- package/esm/npm/src/auth/schemas.d.ts.map +1 -1
- package/esm/npm/src/auth/schemas.js +14 -4
- package/esm/npm/src/auth/session_auth.d.ts +1 -1
- package/esm/npm/src/auth/session_auth.d.ts.map +1 -1
- package/esm/npm/src/auth/session_auth.js +7 -1
- package/esm/npm/src/client_connect.d.ts +2 -0
- package/esm/npm/src/client_connect.d.ts.map +1 -1
- package/esm/npm/src/client_connect.js +76 -15
- package/esm/npm/src/contract.d.ts +3 -0
- package/esm/npm/src/contract.d.ts.map +1 -1
- package/esm/npm/src/contract_support/mod.d.ts +422 -43
- package/esm/npm/src/contract_support/mod.d.ts.map +1 -1
- package/esm/npm/src/contract_support/mod.js +734 -33
- package/esm/npm/src/contract_support/protocol.d.ts +20 -5
- package/esm/npm/src/contract_support/protocol.d.ts.map +1 -1
- package/esm/npm/src/contract_support/protocol.js +18 -10
- package/esm/npm/src/contract_support/runtime.d.ts +11 -0
- package/esm/npm/src/contract_support/runtime.d.ts.map +1 -1
- package/esm/npm/src/contract_support/schema_pointers.d.ts.map +1 -1
- package/esm/npm/src/contract_support/schema_pointers.js +32 -14
- package/esm/npm/src/device/deno.d.ts.map +1 -1
- package/esm/npm/src/device/deno.js +6 -0
- package/esm/npm/src/device.d.ts +2 -0
- package/esm/npm/src/device.d.ts.map +1 -1
- package/esm/npm/src/device.js +3 -0
- package/esm/npm/src/errors/AuthError.d.ts +2 -1
- package/esm/npm/src/errors/AuthError.d.ts.map +1 -1
- package/esm/npm/src/errors/AuthError.js +8 -3
- package/esm/npm/src/errors/index.d.ts +4 -4
- package/esm/npm/src/errors/index.d.ts.map +1 -1
- package/esm/npm/src/errors/index.js +1 -0
- package/esm/npm/src/generate.js +39 -26
- package/esm/npm/src/helpers.d.ts.map +1 -1
- package/esm/npm/src/index.d.ts +4 -3
- package/esm/npm/src/index.d.ts.map +1 -1
- package/esm/npm/src/index.js +1 -0
- package/esm/npm/src/jobs.d.ts +10 -1
- package/esm/npm/src/jobs.d.ts.map +1 -1
- package/esm/npm/src/jobs.js +16 -1
- package/esm/npm/src/kv.d.ts.map +1 -1
- package/esm/npm/src/kv.js +10 -4
- package/esm/npm/src/models/auth/rpc/Logout.d.ts +4 -4
- package/esm/npm/src/models/auth/rpc/Logout.d.ts.map +1 -1
- package/esm/npm/src/models/auth/rpc/Logout.js +2 -2
- package/esm/npm/src/models/trellis/Page.d.ts +2 -0
- package/esm/npm/src/models/trellis/Page.d.ts.map +1 -0
- package/esm/npm/src/models/trellis/Page.js +1 -0
- package/esm/npm/src/models/trellis/State.d.ts +1 -0
- package/esm/npm/src/models/trellis/State.d.ts.map +1 -1
- package/esm/npm/src/models/trellis/State.js +1 -0
- package/esm/npm/src/models/trellis/rpc/StateList.d.ts +9 -12
- package/esm/npm/src/models/trellis/rpc/StateList.d.ts.map +1 -1
- package/esm/npm/src/models/trellis/rpc/StateList.js +16 -18
- package/esm/npm/src/operations.d.ts +16 -7
- package/esm/npm/src/operations.d.ts.map +1 -1
- package/esm/npm/src/operations.js +84 -19
- package/esm/npm/src/runtime_transport.d.ts +2 -0
- package/esm/npm/src/runtime_transport.d.ts.map +1 -1
- package/esm/npm/src/runtime_transport.js +1 -0
- package/esm/npm/src/server/internal_jobs/active-job.d.ts +2 -1
- package/esm/npm/src/server/internal_jobs/active-job.d.ts.map +1 -1
- package/esm/npm/src/server/internal_jobs/active-job.js +3 -0
- package/esm/npm/src/server/internal_jobs/job-manager.d.ts +4 -1
- package/esm/npm/src/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/esm/npm/src/server/internal_jobs/job-manager.js +61 -1
- package/esm/npm/src/server/internal_jobs/projection.js +1 -0
- package/esm/npm/src/server/internal_jobs/runtime-worker.d.ts +13 -1
- package/esm/npm/src/server/internal_jobs/runtime-worker.d.ts.map +1 -1
- package/esm/npm/src/server/internal_jobs/runtime-worker.js +73 -13
- package/esm/npm/src/server/internal_jobs/types.d.ts +19 -0
- package/esm/npm/src/server/internal_jobs/types.d.ts.map +1 -1
- package/esm/npm/src/server/internal_jobs/types.js +10 -0
- package/esm/npm/src/server/runtime.d.ts +1 -0
- package/esm/npm/src/server/runtime.d.ts.map +1 -1
- package/esm/npm/src/server/service.d.ts +10 -1
- package/esm/npm/src/server/service.d.ts.map +1 -1
- package/esm/npm/src/server/service.js +210 -64
- package/esm/npm/src/server/transfer.d.ts.map +1 -1
- package/esm/npm/src/server/transfer.js +4 -0
- package/esm/npm/src/server.d.ts.map +1 -1
- package/esm/npm/src/server.js +337 -34
- package/esm/npm/src/store.d.ts +8 -1
- package/esm/npm/src/store.d.ts.map +1 -1
- package/esm/npm/src/store.js +46 -8
- package/esm/npm/src/transfer.d.ts +3 -0
- package/esm/npm/src/transfer.d.ts.map +1 -1
- package/esm/npm/src/transfer.js +20 -30
- package/esm/npm/src/trellis.d.ts +85 -22
- package/esm/npm/src/trellis.d.ts.map +1 -1
- package/esm/npm/src/trellis.js +525 -61
- package/esm/operations.d.ts +16 -7
- package/esm/operations.d.ts.map +1 -1
- package/esm/operations.js +84 -19
- package/esm/runtime_transport.d.ts +2 -0
- package/esm/runtime_transport.d.ts.map +1 -1
- package/esm/runtime_transport.js +1 -0
- package/esm/store.d.ts +8 -1
- package/esm/store.d.ts.map +1 -1
- package/esm/store.js +46 -8
- package/esm/transfer.d.ts +3 -0
- package/esm/transfer.d.ts.map +1 -1
- package/esm/transfer.js +20 -30
- package/esm/trellis.d.ts +85 -22
- package/esm/trellis.d.ts.map +1 -1
- package/esm/trellis.js +525 -61
- package/package.json +6 -3
- package/script/auth/browser/login.d.ts.map +1 -1
- package/script/auth/browser/login.js +46 -3
- package/script/auth/browser/portal.d.ts.map +1 -1
- package/script/auth/browser/portal.js +5 -1
- package/script/auth/browser/session.d.ts +18 -7
- package/script/auth/browser/session.d.ts.map +1 -1
- package/script/auth/browser/session.js +47 -11
- package/script/auth/browser/storage.d.ts +6 -1
- package/script/auth/browser/storage.d.ts.map +1 -1
- package/script/auth/browser/storage.js +15 -3
- package/script/auth/browser.d.ts +2 -2
- package/script/auth/browser.d.ts.map +1 -1
- package/script/auth/browser.js +2 -1
- package/script/auth/device_activation.d.ts +36 -33
- package/script/auth/device_activation.d.ts.map +1 -1
- package/script/auth/device_activation.js +25 -21
- package/script/auth/mod.d.ts +4 -4
- package/script/auth/mod.d.ts.map +1 -1
- package/script/auth/mod.js +132 -137
- package/script/auth/proof.d.ts +3 -1
- package/script/auth/proof.d.ts.map +1 -1
- package/script/auth/proof.js +21 -15
- package/script/auth/protocol.d.ts +2457 -941
- package/script/auth/protocol.d.ts.map +1 -1
- package/script/auth/protocol.js +749 -377
- package/script/auth/schemas.d.ts +25 -4
- package/script/auth/schemas.d.ts.map +1 -1
- package/script/auth/schemas.js +16 -5
- package/script/auth/session_auth.d.ts +1 -1
- package/script/auth/session_auth.d.ts.map +1 -1
- package/script/auth/session_auth.js +7 -1
- package/script/client_connect.d.ts +2 -0
- package/script/client_connect.d.ts.map +1 -1
- package/script/client_connect.js +76 -15
- package/script/contract.d.ts +3 -0
- package/script/contract.d.ts.map +1 -1
- package/script/contract_support/mod.d.ts +422 -43
- package/script/contract_support/mod.d.ts.map +1 -1
- package/script/contract_support/mod.js +757 -51
- package/script/contract_support/protocol.d.ts +20 -5
- package/script/contract_support/protocol.d.ts.map +1 -1
- package/script/contract_support/protocol.js +20 -11
- package/script/contract_support/runtime.d.ts +11 -0
- package/script/contract_support/runtime.d.ts.map +1 -1
- package/script/contract_support/schema_pointers.d.ts.map +1 -1
- package/script/contract_support/schema_pointers.js +32 -14
- package/script/device.d.ts +2 -0
- package/script/device.d.ts.map +1 -1
- package/script/device.js +3 -0
- package/script/errors/AuthError.d.ts +2 -1
- package/script/errors/AuthError.d.ts.map +1 -1
- package/script/errors/AuthError.js +8 -3
- package/script/errors/index.d.ts +4 -4
- package/script/errors/index.d.ts.map +1 -1
- package/script/errors/index.js +1 -0
- package/script/generated-sdk/auth/api.d.ts +27 -9
- package/script/generated-sdk/auth/api.d.ts.map +1 -1
- package/script/generated-sdk/auth/api.js +17 -591
- package/script/generated-sdk/auth/client.d.ts +91 -85
- package/script/generated-sdk/auth/client.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.d.ts +1 -1
- package/script/generated-sdk/auth/contract.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.js +4 -2
- package/script/generated-sdk/auth/mod.d.ts +1 -0
- package/script/generated-sdk/auth/mod.d.ts.map +1 -1
- package/script/generated-sdk/auth/owned_api.d.ts +3 -0
- package/script/generated-sdk/auth/owned_api.d.ts.map +1 -0
- package/script/generated-sdk/auth/owned_api.js +597 -0
- package/script/generated-sdk/auth/schemas.d.ts +9959 -5160
- package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/script/generated-sdk/auth/schemas.js +139 -140
- package/script/generated-sdk/auth/types.d.ts +2418 -1557
- package/script/generated-sdk/auth/types.d.ts.map +1 -1
- package/script/generated-sdk/auth/types.js +1 -1
- package/script/generated-sdk/health/api.d.ts +24 -9
- package/script/generated-sdk/health/api.d.ts.map +1 -1
- package/script/generated-sdk/health/api.js +13 -21
- package/script/generated-sdk/health/client.d.ts +2 -1
- package/script/generated-sdk/health/client.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.js +2 -0
- package/script/generated-sdk/health/owned_api.d.ts +3 -0
- package/script/generated-sdk/health/owned_api.d.ts.map +1 -0
- package/script/generated-sdk/health/owned_api.js +19 -0
- package/script/generated-sdk/health/types.d.ts +2 -0
- package/script/generated-sdk/health/types.d.ts.map +1 -1
- package/script/generated-sdk/jobs/api.d.ts +33 -9
- package/script/generated-sdk/jobs/api.d.ts.map +1 -1
- package/script/generated-sdk/jobs/api.js +23 -88
- package/script/generated-sdk/jobs/client.d.ts +9 -2
- package/script/generated-sdk/jobs/client.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.d.ts +1 -1
- package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.js +4 -2
- package/script/generated-sdk/jobs/owned_api.d.ts +3 -0
- package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -0
- package/script/generated-sdk/jobs/owned_api.js +154 -0
- package/script/generated-sdk/jobs/schemas.d.ts +336 -123
- package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/script/generated-sdk/jobs/schemas.js +18 -16
- package/script/generated-sdk/jobs/types.d.ts +144 -34
- package/script/generated-sdk/jobs/types.d.ts.map +1 -1
- package/script/generated-sdk/jobs/types.js +38 -2
- package/script/generated-sdk/state/api.d.ts +27 -9
- package/script/generated-sdk/state/api.d.ts.map +1 -1
- package/script/generated-sdk/state/api.js +17 -72
- package/script/generated-sdk/state/client.d.ts +4 -2
- package/script/generated-sdk/state/client.d.ts.map +1 -1
- package/script/generated-sdk/state/contract.d.ts +1 -1
- package/script/generated-sdk/state/contract.d.ts.map +1 -1
- package/script/generated-sdk/state/contract.js +4 -2
- package/script/generated-sdk/state/owned_api.d.ts +3 -0
- package/script/generated-sdk/state/owned_api.d.ts.map +1 -0
- package/script/generated-sdk/state/owned_api.js +69 -0
- package/script/generated-sdk/state/schemas.d.ts +264 -284
- package/script/generated-sdk/state/schemas.d.ts.map +1 -1
- package/script/generated-sdk/state/schemas.js +6 -6
- package/script/generated-sdk/state/types.d.ts +24 -23
- package/script/generated-sdk/state/types.d.ts.map +1 -1
- package/script/generated-sdk/state/types.js +1 -1
- package/script/generated-sdk/trellis-core/api.d.ts +27 -9
- package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/api.js +17 -40
- package/script/generated-sdk/trellis-core/client.d.ts +5 -2
- package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.d.ts +1 -1
- package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.js +4 -2
- package/script/generated-sdk/trellis-core/owned_api.d.ts +3 -0
- package/script/generated-sdk/trellis-core/owned_api.d.ts.map +1 -0
- package/script/generated-sdk/trellis-core/owned_api.js +45 -0
- package/script/generated-sdk/trellis-core/schemas.d.ts +259 -11
- package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/schemas.js +6 -4
- package/script/generated-sdk/trellis-core/types.d.ts +56 -1
- package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/types.js +1 -1
- package/script/helpers.d.ts.map +1 -1
- package/script/index.d.ts +4 -3
- package/script/index.d.ts.map +1 -1
- package/script/index.js +5 -2
- package/script/jobs.d.ts +10 -1
- package/script/jobs.d.ts.map +1 -1
- package/script/jobs.js +17 -2
- package/script/kv.d.ts.map +1 -1
- package/script/kv.js +10 -4
- package/script/models/auth/rpc/Logout.d.ts +4 -4
- package/script/models/auth/rpc/Logout.d.ts.map +1 -1
- package/script/models/auth/rpc/Logout.js +3 -3
- package/script/models/trellis/Page.d.ts +2 -0
- package/script/models/trellis/Page.d.ts.map +1 -0
- package/script/models/trellis/Page.js +6 -0
- package/script/models/trellis/State.d.ts +1 -0
- package/script/models/trellis/State.d.ts.map +1 -1
- package/script/models/trellis/State.js +1 -0
- package/script/models/trellis/rpc/StateList.d.ts +9 -12
- package/script/models/trellis/rpc/StateList.d.ts.map +1 -1
- package/script/models/trellis/rpc/StateList.js +16 -18
- package/script/npm/src/auth/browser/login.d.ts.map +1 -1
- package/script/npm/src/auth/browser/login.js +46 -3
- package/script/npm/src/auth/browser/portal.d.ts.map +1 -1
- package/script/npm/src/auth/browser/portal.js +5 -1
- package/script/npm/src/auth/browser/session.d.ts +18 -7
- package/script/npm/src/auth/browser/session.d.ts.map +1 -1
- package/script/npm/src/auth/browser/session.js +47 -11
- package/script/npm/src/auth/browser/storage.d.ts +6 -1
- package/script/npm/src/auth/browser/storage.d.ts.map +1 -1
- package/script/npm/src/auth/browser/storage.js +15 -3
- package/script/npm/src/auth/browser.d.ts +2 -2
- package/script/npm/src/auth/browser.d.ts.map +1 -1
- package/script/npm/src/auth/browser.js +2 -1
- package/script/npm/src/auth/device_activation.d.ts +36 -33
- package/script/npm/src/auth/device_activation.d.ts.map +1 -1
- package/script/npm/src/auth/device_activation.js +25 -21
- package/script/npm/src/auth/mod.d.ts +4 -4
- package/script/npm/src/auth/mod.d.ts.map +1 -1
- package/script/npm/src/auth/mod.js +132 -137
- package/script/npm/src/auth/proof.d.ts +3 -1
- package/script/npm/src/auth/proof.d.ts.map +1 -1
- package/script/npm/src/auth/proof.js +21 -15
- package/script/npm/src/auth/protocol.d.ts +2457 -941
- package/script/npm/src/auth/protocol.d.ts.map +1 -1
- package/script/npm/src/auth/protocol.js +749 -377
- package/script/npm/src/auth/schemas.d.ts +25 -4
- package/script/npm/src/auth/schemas.d.ts.map +1 -1
- package/script/npm/src/auth/schemas.js +16 -5
- package/script/npm/src/auth/session_auth.d.ts +1 -1
- package/script/npm/src/auth/session_auth.d.ts.map +1 -1
- package/script/npm/src/auth/session_auth.js +7 -1
- package/script/npm/src/client_connect.d.ts +2 -0
- package/script/npm/src/client_connect.d.ts.map +1 -1
- package/script/npm/src/client_connect.js +76 -15
- package/script/npm/src/contract.d.ts +3 -0
- package/script/npm/src/contract.d.ts.map +1 -1
- package/script/npm/src/contract_support/mod.d.ts +422 -43
- package/script/npm/src/contract_support/mod.d.ts.map +1 -1
- package/script/npm/src/contract_support/mod.js +757 -51
- package/script/npm/src/contract_support/protocol.d.ts +20 -5
- package/script/npm/src/contract_support/protocol.d.ts.map +1 -1
- package/script/npm/src/contract_support/protocol.js +20 -11
- package/script/npm/src/contract_support/runtime.d.ts +11 -0
- package/script/npm/src/contract_support/runtime.d.ts.map +1 -1
- package/script/npm/src/contract_support/schema_pointers.d.ts.map +1 -1
- package/script/npm/src/contract_support/schema_pointers.js +32 -14
- package/script/npm/src/device/deno.d.ts.map +1 -1
- package/script/npm/src/device/deno.js +6 -0
- package/script/npm/src/device.d.ts +2 -0
- package/script/npm/src/device.d.ts.map +1 -1
- package/script/npm/src/device.js +3 -0
- package/script/npm/src/errors/AuthError.d.ts +2 -1
- package/script/npm/src/errors/AuthError.d.ts.map +1 -1
- package/script/npm/src/errors/AuthError.js +8 -3
- package/script/npm/src/errors/index.d.ts +4 -4
- package/script/npm/src/errors/index.d.ts.map +1 -1
- package/script/npm/src/errors/index.js +1 -0
- package/script/npm/src/generate.js +39 -59
- package/script/npm/src/helpers.d.ts.map +1 -1
- package/script/npm/src/index.d.ts +4 -3
- package/script/npm/src/index.d.ts.map +1 -1
- package/script/npm/src/index.js +5 -2
- package/script/npm/src/jobs.d.ts +10 -1
- package/script/npm/src/jobs.d.ts.map +1 -1
- package/script/npm/src/jobs.js +17 -2
- package/script/npm/src/kv.d.ts.map +1 -1
- package/script/npm/src/kv.js +10 -4
- package/script/npm/src/models/auth/rpc/Logout.d.ts +4 -4
- package/script/npm/src/models/auth/rpc/Logout.d.ts.map +1 -1
- package/script/npm/src/models/auth/rpc/Logout.js +3 -3
- package/script/npm/src/models/trellis/Page.d.ts +2 -0
- package/script/npm/src/models/trellis/Page.d.ts.map +1 -0
- package/script/npm/src/models/trellis/Page.js +6 -0
- package/script/npm/src/models/trellis/State.d.ts +1 -0
- package/script/npm/src/models/trellis/State.d.ts.map +1 -1
- package/script/npm/src/models/trellis/State.js +1 -0
- package/script/npm/src/models/trellis/rpc/StateList.d.ts +9 -12
- package/script/npm/src/models/trellis/rpc/StateList.d.ts.map +1 -1
- package/script/npm/src/models/trellis/rpc/StateList.js +16 -18
- package/script/npm/src/operations.d.ts +16 -7
- package/script/npm/src/operations.d.ts.map +1 -1
- package/script/npm/src/operations.js +84 -19
- package/script/npm/src/runtime_transport.d.ts +2 -0
- package/script/npm/src/runtime_transport.d.ts.map +1 -1
- package/script/npm/src/runtime_transport.js +2 -1
- package/script/npm/src/server/internal_jobs/active-job.d.ts +2 -1
- package/script/npm/src/server/internal_jobs/active-job.d.ts.map +1 -1
- package/script/npm/src/server/internal_jobs/active-job.js +3 -0
- package/script/npm/src/server/internal_jobs/job-manager.d.ts +4 -1
- package/script/npm/src/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/script/npm/src/server/internal_jobs/job-manager.js +61 -1
- package/script/npm/src/server/internal_jobs/projection.js +1 -0
- package/script/npm/src/server/internal_jobs/runtime-worker.d.ts +13 -1
- package/script/npm/src/server/internal_jobs/runtime-worker.d.ts.map +1 -1
- package/script/npm/src/server/internal_jobs/runtime-worker.js +74 -13
- package/script/npm/src/server/internal_jobs/types.d.ts +19 -0
- package/script/npm/src/server/internal_jobs/types.d.ts.map +1 -1
- package/script/npm/src/server/internal_jobs/types.js +11 -1
- package/script/npm/src/server/runtime.d.ts +1 -0
- package/script/npm/src/server/runtime.d.ts.map +1 -1
- package/script/npm/src/server/service.d.ts +10 -1
- package/script/npm/src/server/service.d.ts.map +1 -1
- package/script/npm/src/server/service.js +208 -62
- package/script/npm/src/server/transfer.d.ts.map +1 -1
- package/script/npm/src/server/transfer.js +4 -0
- package/script/npm/src/server.d.ts.map +1 -1
- package/script/npm/src/server.js +336 -33
- package/script/npm/src/store.d.ts +8 -1
- package/script/npm/src/store.d.ts.map +1 -1
- package/script/npm/src/store.js +46 -8
- package/script/npm/src/transfer.d.ts +3 -0
- package/script/npm/src/transfer.d.ts.map +1 -1
- package/script/npm/src/transfer.js +19 -29
- package/script/npm/src/trellis.d.ts +85 -22
- package/script/npm/src/trellis.d.ts.map +1 -1
- package/script/npm/src/trellis.js +525 -61
- package/script/operations.d.ts +16 -7
- package/script/operations.d.ts.map +1 -1
- package/script/operations.js +84 -19
- package/script/runtime_transport.d.ts +2 -0
- package/script/runtime_transport.d.ts.map +1 -1
- package/script/runtime_transport.js +2 -1
- package/script/store.d.ts +8 -1
- package/script/store.d.ts.map +1 -1
- package/script/store.js +46 -8
- package/script/transfer.d.ts +3 -0
- package/script/transfer.d.ts.map +1 -1
- package/script/transfer.js +19 -29
- package/script/trellis.d.ts +85 -22
- package/script/trellis.d.ts.map +1 -1
- package/script/trellis.js +525 -61
- package/src/_dnt.polyfills.ts +274 -0
- package/src/_dnt.shims.ts +64 -0
- package/src/auth/browser/login.ts +295 -0
- package/src/auth/browser/portal.ts +75 -0
- package/src/auth/browser/session.ts +197 -0
- package/src/auth/browser/storage.ts +105 -0
- package/src/auth/browser.ts +82 -0
- package/src/auth/device_activation.ts +715 -0
- package/src/auth/keys.ts +116 -0
- package/src/auth/mod.ts +298 -0
- package/src/auth/proof.ts +111 -0
- package/src/auth/protocol.ts +1629 -0
- package/src/auth/schemas.ts +145 -0
- package/src/auth/session_auth.ts +167 -0
- package/src/auth/time.ts +15 -0
- package/src/auth/trellis_id.ts +9 -0
- package/src/auth/types.ts +4 -0
- package/src/auth/utils.ts +87 -0
- package/src/auth.ts +2 -0
- package/src/browser.ts +8 -0
- package/src/client.ts +164 -0
- package/src/client_connect.ts +1328 -0
- package/src/codec.ts +107 -0
- package/src/connection.ts +466 -0
- package/src/contract.ts +84 -0
- package/src/contract_support/canonical.ts +217 -0
- package/src/contract_support/mod.ts +5079 -0
- package/src/contract_support/protocol.ts +213 -0
- package/src/contract_support/runtime.ts +129 -0
- package/src/contract_support/schema_pointers.ts +161 -0
- package/src/contracts.ts +9 -0
- package/src/device/deno.ts +941 -0
- package/src/device.ts +989 -0
- package/src/env.ts +1 -0
- package/src/errors/AuthError.ts +82 -0
- package/src/errors/KVError.ts +47 -0
- package/src/errors/RemoteError.ts +111 -0
- package/src/errors/StoreError.ts +43 -0
- package/src/errors/TransferError.ts +43 -0
- package/src/errors/TransportError.ts +48 -0
- package/src/errors/TrellisError.ts +20 -0
- package/src/errors/ValidationError.ts +80 -0
- package/src/errors/index.ts +195 -0
- package/src/generate.ts +329 -0
- package/src/globals.ts +26 -0
- package/src/health.ts +28 -0
- package/src/helpers.ts +63 -0
- package/src/host/mod.ts +9 -0
- package/src/host/node.ts +9 -0
- package/src/index.ts +233 -0
- package/src/jobs.ts +344 -0
- package/src/kv.ts +564 -0
- package/src/models/auth/rpc/Logout.ts +15 -0
- package/src/models/trellis/Page.ts +6 -0
- package/src/models/trellis/State.ts +55 -0
- package/src/models/trellis/TrellisError.ts +21 -0
- package/src/models/trellis/rpc/StateDelete.ts +13 -0
- package/src/models/trellis/rpc/StateGet.ts +25 -0
- package/src/models/trellis/rpc/StateList.ts +26 -0
- package/src/models/trellis/rpc/StatePut.ts +42 -0
- package/src/operations.ts +1508 -0
- package/src/runtime_transport.ts +132 -0
- package/src/sdk/auth.ts +2 -0
- package/src/sdk/core.ts +2 -0
- package/src/sdk/health.ts +2 -0
- package/src/sdk/jobs.ts +2 -0
- package/src/sdk/state.ts +2 -0
- package/src/server/health.ts +379 -0
- package/src/server/health_rpc.ts +51 -0
- package/src/server/health_schemas.ts +61 -0
- package/src/server/internal_jobs/active-job.ts +115 -0
- package/src/server/internal_jobs/bindings.ts +26 -0
- package/src/server/internal_jobs/cancellation-registry.ts +71 -0
- package/src/server/internal_jobs/heartbeat.ts +120 -0
- package/src/server/internal_jobs/job-manager.ts +456 -0
- package/src/server/internal_jobs/projection.ts +48 -0
- package/src/server/internal_jobs/runtime-worker.ts +741 -0
- package/src/server/internal_jobs/types.ts +124 -0
- package/src/server/runtime.ts +27 -0
- package/src/server/service.ts +2377 -0
- package/src/server/subscription.ts +143 -0
- package/src/server/transfer.ts +962 -0
- package/src/server.ts +1725 -0
- package/src/server_logger.ts +10 -0
- package/src/service/deno.ts +18 -0
- package/src/service/mod.ts +68 -0
- package/src/service/node.ts +18 -0
- package/src/store.ts +658 -0
- package/src/tasks.ts +34 -0
- package/src/telemetry/carrier.ts +35 -0
- package/src/telemetry/core.ts +31 -0
- package/src/telemetry/env.ts +23 -0
- package/src/telemetry/mod.ts +26 -0
- package/src/telemetry/nats.ts +15 -0
- package/src/telemetry/result.ts +20 -0
- package/src/telemetry/trace.ts +39 -0
- package/src/telemetry/trellis.ts +1 -0
- package/src/tracing.ts +28 -0
- package/src/transfer.ts +602 -0
- package/src/trellis.ts +3650 -0
- package/esm/models/trellis/Paginate.d.ts +0 -7
- package/esm/models/trellis/Paginate.d.ts.map +0 -1
- package/esm/models/trellis/Paginate.js +0 -5
- package/esm/npm/src/models/trellis/Paginate.d.ts +0 -7
- package/esm/npm/src/models/trellis/Paginate.d.ts.map +0 -1
- package/esm/npm/src/models/trellis/Paginate.js +0 -5
- package/script/models/trellis/Paginate.d.ts +0 -7
- package/script/models/trellis/Paginate.d.ts.map +0 -1
- package/script/models/trellis/Paginate.js +0 -11
- package/script/npm/src/models/trellis/Paginate.d.ts +0 -7
- package/script/npm/src/models/trellis/Paginate.d.ts.map +0 -1
- package/script/npm/src/models/trellis/Paginate.js +0 -11
|
@@ -0,0 +1,715 @@
|
|
|
1
|
+
import type { StaticDecode } from "typebox";
|
|
2
|
+
import { Type } from "typebox";
|
|
3
|
+
import { Value } from "typebox/value";
|
|
4
|
+
import type { BaseError } from "@qlever-llc/result";
|
|
5
|
+
import { AsyncResult } from "@qlever-llc/result";
|
|
6
|
+
import type { OperationRef } from "../operations.js";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
importEd25519PrivateKeyFromSeedBase64url,
|
|
10
|
+
importEd25519PublicKeyFromBase64url,
|
|
11
|
+
publicKeyBase64urlFromPrivateKey,
|
|
12
|
+
} from "./keys.js";
|
|
13
|
+
import type { NatsAuthTokenV1 } from "./schemas.js";
|
|
14
|
+
import {
|
|
15
|
+
AuthDevicesConnectInfoGetResponseSchema,
|
|
16
|
+
AuthDevicesConnectInfoGetSchema,
|
|
17
|
+
AuthDeviceUserAuthoritiesListResponseSchema,
|
|
18
|
+
AuthDeviceUserAuthoritiesListSchema,
|
|
19
|
+
AuthDeviceUserAuthoritiesRevokeResponseSchema,
|
|
20
|
+
AuthDeviceUserAuthoritiesRevokeSchema,
|
|
21
|
+
AuthResolveDeviceUserAuthoritiesProgressSchema,
|
|
22
|
+
AuthResolveDeviceUserAuthoritiesResponseSchema,
|
|
23
|
+
AuthResolveDeviceUserAuthoritiesSchema,
|
|
24
|
+
WaitForDeviceActivationRequestSchema,
|
|
25
|
+
WaitForDeviceActivationResponseSchema,
|
|
26
|
+
} from "./protocol.js";
|
|
27
|
+
import {
|
|
28
|
+
base64urlDecode,
|
|
29
|
+
base64urlEncode,
|
|
30
|
+
sha256,
|
|
31
|
+
toArrayBuffer,
|
|
32
|
+
utf8,
|
|
33
|
+
} from "./utils.js";
|
|
34
|
+
import { buildNatsConnectSignaturePayload } from "./session_auth.js";
|
|
35
|
+
|
|
36
|
+
const DEVICE_IDENTITY_HKDF_INFO = "trellis/device-identity/v1";
|
|
37
|
+
const DEVICE_ACTIVATION_HKDF_INFO = "trellis/device-activate/v1";
|
|
38
|
+
const DEVICE_QR_MAC_DOMAIN = "trellis-device-qr/v1";
|
|
39
|
+
const DEVICE_CONFIRMATION_DOMAIN = "trellis-device-confirm/v1";
|
|
40
|
+
const CROCKFORD_ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
41
|
+
const DEFAULT_WAIT_POLL_INTERVAL_MS = 3_000;
|
|
42
|
+
|
|
43
|
+
export const DeviceActivationPayloadSchema = Type.Object({
|
|
44
|
+
v: Type.Literal(1),
|
|
45
|
+
publicIdentityKey: Type.String({ minLength: 1 }),
|
|
46
|
+
nonce: Type.String({ minLength: 1 }),
|
|
47
|
+
qrMac: Type.String({ minLength: 1 }),
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export const DeviceActivationWaitRequestSchema =
|
|
51
|
+
WaitForDeviceActivationRequestSchema;
|
|
52
|
+
|
|
53
|
+
export type DeviceActivationPayload = StaticDecode<
|
|
54
|
+
typeof DeviceActivationPayloadSchema
|
|
55
|
+
>;
|
|
56
|
+
export type DeviceActivationWaitRequest = StaticDecode<
|
|
57
|
+
typeof DeviceActivationWaitRequestSchema
|
|
58
|
+
>;
|
|
59
|
+
export type WaitForDeviceActivationResponse = StaticDecode<
|
|
60
|
+
typeof WaitForDeviceActivationResponseSchema
|
|
61
|
+
>;
|
|
62
|
+
export type AuthResolveDeviceUserAuthoritiesInput = StaticDecode<
|
|
63
|
+
typeof AuthResolveDeviceUserAuthoritiesSchema
|
|
64
|
+
>;
|
|
65
|
+
export type AuthResolveDeviceUserAuthoritiesProgress = StaticDecode<
|
|
66
|
+
typeof AuthResolveDeviceUserAuthoritiesProgressSchema
|
|
67
|
+
>;
|
|
68
|
+
export type AuthResolveDeviceUserAuthoritiesOutput = StaticDecode<
|
|
69
|
+
typeof AuthResolveDeviceUserAuthoritiesResponseSchema
|
|
70
|
+
>;
|
|
71
|
+
export type AuthDeviceUserAuthoritiesListInput = StaticDecode<
|
|
72
|
+
typeof AuthDeviceUserAuthoritiesListSchema
|
|
73
|
+
>;
|
|
74
|
+
export type AuthDeviceUserAuthoritiesListOutput = StaticDecode<
|
|
75
|
+
typeof AuthDeviceUserAuthoritiesListResponseSchema
|
|
76
|
+
>;
|
|
77
|
+
export type AuthDeviceUserAuthoritiesRevokeInput = StaticDecode<
|
|
78
|
+
typeof AuthDeviceUserAuthoritiesRevokeSchema
|
|
79
|
+
>;
|
|
80
|
+
export type AuthDeviceUserAuthoritiesRevokeResponse = StaticDecode<
|
|
81
|
+
typeof AuthDeviceUserAuthoritiesRevokeResponseSchema
|
|
82
|
+
>;
|
|
83
|
+
export type GetDeviceConnectInfoInput = StaticDecode<
|
|
84
|
+
typeof AuthDevicesConnectInfoGetSchema
|
|
85
|
+
>;
|
|
86
|
+
export type GetDeviceConnectInfoOutput = StaticDecode<
|
|
87
|
+
typeof AuthDevicesConnectInfoGetResponseSchema
|
|
88
|
+
>;
|
|
89
|
+
|
|
90
|
+
export type DeviceIdentity = {
|
|
91
|
+
identitySeed: Uint8Array;
|
|
92
|
+
identitySeedBase64url: string;
|
|
93
|
+
publicIdentityKey: string;
|
|
94
|
+
activationKey: Uint8Array;
|
|
95
|
+
activationKeyBase64url: string;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
type DeviceActivationRpcMethod =
|
|
99
|
+
| "Auth.DeviceUserAuthorities.List"
|
|
100
|
+
| "Auth.DeviceUserAuthorities.Revoke"
|
|
101
|
+
| "Auth.Devices.ConnectInfo.Get";
|
|
102
|
+
|
|
103
|
+
type AuthResolveDeviceUserAuthoritiesOperationShape = {
|
|
104
|
+
subject: string;
|
|
105
|
+
input: typeof AuthResolveDeviceUserAuthoritiesSchema;
|
|
106
|
+
progress: typeof AuthResolveDeviceUserAuthoritiesProgressSchema;
|
|
107
|
+
output: typeof AuthResolveDeviceUserAuthoritiesResponseSchema;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export type AuthResolveDeviceUserAuthoritiesOperation = OperationRef<
|
|
111
|
+
AuthResolveDeviceUserAuthoritiesOperationShape,
|
|
112
|
+
AuthResolveDeviceUserAuthoritiesProgress,
|
|
113
|
+
AuthResolveDeviceUserAuthoritiesOutput
|
|
114
|
+
>;
|
|
115
|
+
|
|
116
|
+
type DeviceActivationRpcInputMap = {
|
|
117
|
+
"Auth.DeviceUserAuthorities.List": AuthDeviceUserAuthoritiesListInput;
|
|
118
|
+
"Auth.DeviceUserAuthorities.Revoke": AuthDeviceUserAuthoritiesRevokeInput;
|
|
119
|
+
"Auth.Devices.ConnectInfo.Get": GetDeviceConnectInfoInput;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
type DeviceActivationRpcOutputMap = {
|
|
123
|
+
"Auth.DeviceUserAuthorities.List": AuthDeviceUserAuthoritiesListOutput;
|
|
124
|
+
"Auth.DeviceUserAuthorities.Revoke": AuthDeviceUserAuthoritiesRevokeResponse;
|
|
125
|
+
"Auth.Devices.ConnectInfo.Get": GetDeviceConnectInfoOutput;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
type RequestClient = {
|
|
129
|
+
request<M extends DeviceActivationRpcMethod>(
|
|
130
|
+
method: M,
|
|
131
|
+
input: DeviceActivationRpcInputMap[M],
|
|
132
|
+
opts?: unknown,
|
|
133
|
+
): AsyncResult<DeviceActivationRpcOutputMap[M], BaseError>;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
type ResolveDeviceUserAuthoritiesOperationClient = {
|
|
137
|
+
operation(method: "Auth.DeviceUserAuthorities.Resolve"): {
|
|
138
|
+
input(
|
|
139
|
+
input: AuthResolveDeviceUserAuthoritiesInput,
|
|
140
|
+
): {
|
|
141
|
+
start(): AsyncResult<
|
|
142
|
+
AuthResolveDeviceUserAuthoritiesOperation,
|
|
143
|
+
BaseError
|
|
144
|
+
>;
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export type DeviceActivationTransport =
|
|
150
|
+
& RequestClient
|
|
151
|
+
& ResolveDeviceUserAuthoritiesOperationClient;
|
|
152
|
+
|
|
153
|
+
function concatBytes(parts: Uint8Array[]): Uint8Array {
|
|
154
|
+
const size = parts.reduce((total, part) => total + part.length, 0);
|
|
155
|
+
const bytes = new Uint8Array(size);
|
|
156
|
+
let offset = 0;
|
|
157
|
+
for (const part of parts) {
|
|
158
|
+
bytes.set(part, offset);
|
|
159
|
+
offset += part.length;
|
|
160
|
+
}
|
|
161
|
+
return bytes;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function normalizeSecretBytes(
|
|
165
|
+
value: Uint8Array | string,
|
|
166
|
+
name: string,
|
|
167
|
+
): Uint8Array {
|
|
168
|
+
if (typeof value === "string") {
|
|
169
|
+
const decoded = base64urlDecode(value);
|
|
170
|
+
if (decoded.length === 0) throw new Error(`${name} must not be empty`);
|
|
171
|
+
return decoded;
|
|
172
|
+
}
|
|
173
|
+
if (value.length === 0) throw new Error(`${name} must not be empty`);
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async function hkdfSha256(
|
|
178
|
+
inputKeyingMaterial: Uint8Array,
|
|
179
|
+
info: string,
|
|
180
|
+
length: number,
|
|
181
|
+
): Promise<Uint8Array> {
|
|
182
|
+
const key = await crypto.subtle.importKey(
|
|
183
|
+
"raw",
|
|
184
|
+
toArrayBuffer(inputKeyingMaterial),
|
|
185
|
+
"HKDF",
|
|
186
|
+
false,
|
|
187
|
+
["deriveBits"],
|
|
188
|
+
);
|
|
189
|
+
const derivedBits = await crypto.subtle.deriveBits(
|
|
190
|
+
{
|
|
191
|
+
name: "HKDF",
|
|
192
|
+
hash: "SHA-256",
|
|
193
|
+
salt: toArrayBuffer(new Uint8Array(0)),
|
|
194
|
+
info: toArrayBuffer(utf8(info)),
|
|
195
|
+
},
|
|
196
|
+
key,
|
|
197
|
+
length * 8,
|
|
198
|
+
);
|
|
199
|
+
return new Uint8Array(derivedBits);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async function hmacSha256(
|
|
203
|
+
keyBytes: Uint8Array,
|
|
204
|
+
data: Uint8Array,
|
|
205
|
+
): Promise<Uint8Array> {
|
|
206
|
+
const key = await crypto.subtle.importKey(
|
|
207
|
+
"raw",
|
|
208
|
+
toArrayBuffer(keyBytes),
|
|
209
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
210
|
+
false,
|
|
211
|
+
["sign"],
|
|
212
|
+
);
|
|
213
|
+
return new Uint8Array(
|
|
214
|
+
await crypto.subtle.sign("HMAC", key, toArrayBuffer(data)),
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function crockfordEncode(bytes: Uint8Array): string {
|
|
219
|
+
let value = 0;
|
|
220
|
+
let bits = 0;
|
|
221
|
+
let output = "";
|
|
222
|
+
for (const byte of bytes) {
|
|
223
|
+
value = (value << 8) | byte;
|
|
224
|
+
bits += 8;
|
|
225
|
+
while (bits >= 5) {
|
|
226
|
+
bits -= 5;
|
|
227
|
+
output += CROCKFORD_ALPHABET[(value >>> bits) & 31] ?? "0";
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (bits > 0) {
|
|
231
|
+
output += CROCKFORD_ALPHABET[(value << (5 - bits)) & 31] ?? "0";
|
|
232
|
+
}
|
|
233
|
+
return output;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function normalizeCrockford(value: string): string {
|
|
237
|
+
return value.trim().toUpperCase().replace(/O/g, "0").replace(/[IL]/g, "1");
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
async function sleep(ms: number, signal?: AbortSignal): Promise<void> {
|
|
241
|
+
if (signal?.aborted) {
|
|
242
|
+
throw signal.reason ?? new DOMException("Aborted", "AbortError");
|
|
243
|
+
}
|
|
244
|
+
await new Promise<void>((resolve, reject) => {
|
|
245
|
+
const timer = setTimeout(() => {
|
|
246
|
+
signal?.removeEventListener("abort", onAbort);
|
|
247
|
+
resolve();
|
|
248
|
+
}, ms);
|
|
249
|
+
function onAbort() {
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
reject(signal?.reason ?? new DOMException("Aborted", "AbortError"));
|
|
252
|
+
}
|
|
253
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function retryAfterDelayMs(response: Response): number | null {
|
|
258
|
+
const value = response.headers.get("Retry-After");
|
|
259
|
+
if (!value) return null;
|
|
260
|
+
|
|
261
|
+
const seconds = Number(value);
|
|
262
|
+
if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1_000;
|
|
263
|
+
|
|
264
|
+
const dateMs = Date.parse(value);
|
|
265
|
+
if (!Number.isFinite(dateMs)) return null;
|
|
266
|
+
return Math.max(0, dateMs - Date.now());
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
async function responseErrorDetail(response: Response): Promise<string | null> {
|
|
270
|
+
const text = await response.text();
|
|
271
|
+
if (!text) return null;
|
|
272
|
+
|
|
273
|
+
try {
|
|
274
|
+
const parsed = JSON.parse(text) as Record<string, unknown>;
|
|
275
|
+
if (typeof parsed.reason === "string" && parsed.reason.length > 0) {
|
|
276
|
+
return parsed.reason;
|
|
277
|
+
}
|
|
278
|
+
if (typeof parsed.message === "string" && parsed.message.length > 0) {
|
|
279
|
+
return parsed.message;
|
|
280
|
+
}
|
|
281
|
+
} catch {
|
|
282
|
+
// Fall through to raw text below.
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return text;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
export async function deriveDeviceIdentity(
|
|
289
|
+
deviceRootSecret: Uint8Array,
|
|
290
|
+
): Promise<DeviceIdentity> {
|
|
291
|
+
if (deviceRootSecret.length !== 32) {
|
|
292
|
+
throw new Error(
|
|
293
|
+
`Invalid device root secret length: ${deviceRootSecret.length} (expected 32)`,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
const identitySeed = await hkdfSha256(
|
|
297
|
+
deviceRootSecret,
|
|
298
|
+
DEVICE_IDENTITY_HKDF_INFO,
|
|
299
|
+
32,
|
|
300
|
+
);
|
|
301
|
+
const activationKey = await hkdfSha256(
|
|
302
|
+
deviceRootSecret,
|
|
303
|
+
DEVICE_ACTIVATION_HKDF_INFO,
|
|
304
|
+
32,
|
|
305
|
+
);
|
|
306
|
+
const identitySeedBase64url = base64urlEncode(identitySeed);
|
|
307
|
+
const identityPrivateKey = await importEd25519PrivateKeyFromSeedBase64url(
|
|
308
|
+
identitySeedBase64url,
|
|
309
|
+
);
|
|
310
|
+
const publicIdentityKey = await publicKeyBase64urlFromPrivateKey(
|
|
311
|
+
identityPrivateKey,
|
|
312
|
+
);
|
|
313
|
+
return {
|
|
314
|
+
identitySeed,
|
|
315
|
+
identitySeedBase64url,
|
|
316
|
+
publicIdentityKey,
|
|
317
|
+
activationKey,
|
|
318
|
+
activationKeyBase64url: base64urlEncode(activationKey),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export async function deriveDeviceQrMac(input: {
|
|
323
|
+
activationKey: Uint8Array | string;
|
|
324
|
+
publicIdentityKey: string;
|
|
325
|
+
nonce: string;
|
|
326
|
+
}): Promise<string> {
|
|
327
|
+
const activationKey = normalizeSecretBytes(
|
|
328
|
+
input.activationKey,
|
|
329
|
+
"activationKey",
|
|
330
|
+
);
|
|
331
|
+
const mac = await hmacSha256(
|
|
332
|
+
activationKey,
|
|
333
|
+
concatBytes([
|
|
334
|
+
utf8(DEVICE_QR_MAC_DOMAIN),
|
|
335
|
+
utf8(input.publicIdentityKey),
|
|
336
|
+
utf8(input.nonce),
|
|
337
|
+
]),
|
|
338
|
+
);
|
|
339
|
+
return base64urlEncode(mac.slice(0, 8));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export async function buildDeviceActivationPayload(input: {
|
|
343
|
+
activationKey: Uint8Array | string;
|
|
344
|
+
publicIdentityKey: string;
|
|
345
|
+
nonce: string;
|
|
346
|
+
}): Promise<DeviceActivationPayload> {
|
|
347
|
+
const qrMac = await deriveDeviceQrMac(input);
|
|
348
|
+
return {
|
|
349
|
+
v: 1,
|
|
350
|
+
publicIdentityKey: input.publicIdentityKey,
|
|
351
|
+
nonce: input.nonce,
|
|
352
|
+
qrMac,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export function encodeDeviceActivationPayload(
|
|
357
|
+
payload: DeviceActivationPayload,
|
|
358
|
+
): string {
|
|
359
|
+
return base64urlEncode(utf8(JSON.stringify(payload)));
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export function parseDeviceActivationPayload(
|
|
363
|
+
value: string,
|
|
364
|
+
): DeviceActivationPayload {
|
|
365
|
+
const decoded = new TextDecoder().decode(base64urlDecode(value));
|
|
366
|
+
const parsed = JSON.parse(decoded);
|
|
367
|
+
if (!Value.Check(DeviceActivationPayloadSchema, parsed)) {
|
|
368
|
+
throw new Error("Invalid device activation payload");
|
|
369
|
+
}
|
|
370
|
+
return parsed;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export async function startDeviceActivationRequest(args: {
|
|
374
|
+
trellisUrl: string;
|
|
375
|
+
payload: DeviceActivationPayload;
|
|
376
|
+
}): Promise<
|
|
377
|
+
{
|
|
378
|
+
flowId: string;
|
|
379
|
+
instanceId: string;
|
|
380
|
+
deploymentId: string;
|
|
381
|
+
activationUrl: string;
|
|
382
|
+
}
|
|
383
|
+
> {
|
|
384
|
+
const response = await fetch(
|
|
385
|
+
new URL("/auth/devices/activate/requests", args.trellisUrl),
|
|
386
|
+
{
|
|
387
|
+
method: "POST",
|
|
388
|
+
headers: { "Content-Type": "application/json" },
|
|
389
|
+
body: JSON.stringify({ payload: args.payload }),
|
|
390
|
+
},
|
|
391
|
+
);
|
|
392
|
+
if (!response.ok) {
|
|
393
|
+
const detail = await responseErrorDetail(response);
|
|
394
|
+
throw new Error(
|
|
395
|
+
`Device activation request failed: ${response.status}${
|
|
396
|
+
detail ? ` ${detail}` : ""
|
|
397
|
+
}`,
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const parsed = await response.json() as Record<string, unknown>;
|
|
402
|
+
if (
|
|
403
|
+
typeof parsed.flowId !== "string" ||
|
|
404
|
+
typeof parsed.instanceId !== "string" ||
|
|
405
|
+
typeof parsed.deploymentId !== "string" ||
|
|
406
|
+
typeof parsed.activationUrl !== "string"
|
|
407
|
+
) {
|
|
408
|
+
throw new Error("Device activation request returned an invalid response");
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
return {
|
|
412
|
+
flowId: parsed.flowId,
|
|
413
|
+
instanceId: parsed.instanceId,
|
|
414
|
+
deploymentId: parsed.deploymentId,
|
|
415
|
+
activationUrl: parsed.activationUrl,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export async function deriveDeviceConfirmationCode(input: {
|
|
420
|
+
activationKey: Uint8Array | string;
|
|
421
|
+
publicIdentityKey: string;
|
|
422
|
+
nonce: string;
|
|
423
|
+
}): Promise<string> {
|
|
424
|
+
const activationKey = normalizeSecretBytes(
|
|
425
|
+
input.activationKey,
|
|
426
|
+
"activationKey",
|
|
427
|
+
);
|
|
428
|
+
const mac = await hmacSha256(
|
|
429
|
+
activationKey,
|
|
430
|
+
concatBytes([
|
|
431
|
+
utf8(DEVICE_CONFIRMATION_DOMAIN),
|
|
432
|
+
utf8(input.publicIdentityKey),
|
|
433
|
+
utf8(input.nonce),
|
|
434
|
+
]),
|
|
435
|
+
);
|
|
436
|
+
return crockfordEncode(mac.slice(0, 5)).slice(0, 8);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
export async function verifyDeviceConfirmationCode(input: {
|
|
440
|
+
activationKey: Uint8Array | string;
|
|
441
|
+
publicIdentityKey: string;
|
|
442
|
+
nonce: string;
|
|
443
|
+
confirmationCode: string;
|
|
444
|
+
}): Promise<boolean> {
|
|
445
|
+
const expected = await deriveDeviceConfirmationCode(input);
|
|
446
|
+
return normalizeCrockford(expected) ===
|
|
447
|
+
normalizeCrockford(input.confirmationCode);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export function buildDeviceWaitProofInput(
|
|
451
|
+
flowId: string,
|
|
452
|
+
publicIdentityKey: string,
|
|
453
|
+
nonce: string,
|
|
454
|
+
iat: number,
|
|
455
|
+
contractDigest: string,
|
|
456
|
+
): Uint8Array {
|
|
457
|
+
const enc = new TextEncoder();
|
|
458
|
+
const flowIdBytes = enc.encode(flowId);
|
|
459
|
+
const publicIdentityKeyBytes = enc.encode(publicIdentityKey);
|
|
460
|
+
const nonceBytes = enc.encode(nonce);
|
|
461
|
+
const iatBytes = enc.encode(String(iat));
|
|
462
|
+
const contractDigestBytes = enc.encode(contractDigest);
|
|
463
|
+
const buf = new Uint8Array(
|
|
464
|
+
4 + flowIdBytes.length +
|
|
465
|
+
4 + publicIdentityKeyBytes.length +
|
|
466
|
+
4 + nonceBytes.length +
|
|
467
|
+
4 + iatBytes.length +
|
|
468
|
+
4 + contractDigestBytes.length,
|
|
469
|
+
);
|
|
470
|
+
const view = new DataView(buf.buffer);
|
|
471
|
+
let offset = 0;
|
|
472
|
+
view.setUint32(offset, flowIdBytes.length);
|
|
473
|
+
offset += 4;
|
|
474
|
+
buf.set(flowIdBytes, offset);
|
|
475
|
+
offset += flowIdBytes.length;
|
|
476
|
+
view.setUint32(offset, publicIdentityKeyBytes.length);
|
|
477
|
+
offset += 4;
|
|
478
|
+
buf.set(publicIdentityKeyBytes, offset);
|
|
479
|
+
offset += publicIdentityKeyBytes.length;
|
|
480
|
+
view.setUint32(offset, nonceBytes.length);
|
|
481
|
+
offset += 4;
|
|
482
|
+
buf.set(nonceBytes, offset);
|
|
483
|
+
offset += nonceBytes.length;
|
|
484
|
+
view.setUint32(offset, iatBytes.length);
|
|
485
|
+
offset += 4;
|
|
486
|
+
buf.set(iatBytes, offset);
|
|
487
|
+
offset += iatBytes.length;
|
|
488
|
+
view.setUint32(offset, contractDigestBytes.length);
|
|
489
|
+
offset += 4;
|
|
490
|
+
buf.set(contractDigestBytes, offset);
|
|
491
|
+
return buf;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
export async function signDeviceWaitRequest(args: {
|
|
495
|
+
flowId: string;
|
|
496
|
+
publicIdentityKey: string;
|
|
497
|
+
nonce: string;
|
|
498
|
+
identitySeed: Uint8Array | string;
|
|
499
|
+
contractDigest: string;
|
|
500
|
+
iat?: number;
|
|
501
|
+
}): Promise<DeviceActivationWaitRequest> {
|
|
502
|
+
const identitySeed = normalizeSecretBytes(args.identitySeed, "identitySeed");
|
|
503
|
+
const identityPrivateKey = await importEd25519PrivateKeyFromSeedBase64url(
|
|
504
|
+
base64urlEncode(identitySeed),
|
|
505
|
+
);
|
|
506
|
+
const iat = args.iat ?? Math.floor(Date.now() / 1_000);
|
|
507
|
+
const proofInput = buildDeviceWaitProofInput(
|
|
508
|
+
args.flowId,
|
|
509
|
+
args.publicIdentityKey,
|
|
510
|
+
args.nonce,
|
|
511
|
+
iat,
|
|
512
|
+
args.contractDigest,
|
|
513
|
+
);
|
|
514
|
+
const proofHash = await sha256(proofInput);
|
|
515
|
+
const signature = new Uint8Array(
|
|
516
|
+
await crypto.subtle.sign(
|
|
517
|
+
"Ed25519",
|
|
518
|
+
identityPrivateKey,
|
|
519
|
+
toArrayBuffer(proofHash),
|
|
520
|
+
),
|
|
521
|
+
);
|
|
522
|
+
return {
|
|
523
|
+
flowId: args.flowId,
|
|
524
|
+
publicIdentityKey: args.publicIdentityKey,
|
|
525
|
+
nonce: args.nonce,
|
|
526
|
+
contractDigest: args.contractDigest,
|
|
527
|
+
iat,
|
|
528
|
+
sig: base64urlEncode(signature),
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
export async function createDeviceNatsAuthToken(args: {
|
|
533
|
+
publicIdentityKey: string;
|
|
534
|
+
identitySeed: Uint8Array | string;
|
|
535
|
+
contractDigest: string;
|
|
536
|
+
iat?: number;
|
|
537
|
+
}): Promise<NatsAuthTokenV1 & { contractDigest: string }> {
|
|
538
|
+
const identitySeed = normalizeSecretBytes(args.identitySeed, "identitySeed");
|
|
539
|
+
const identityPrivateKey = await importEd25519PrivateKeyFromSeedBase64url(
|
|
540
|
+
base64urlEncode(identitySeed),
|
|
541
|
+
);
|
|
542
|
+
const iat = args.iat ?? Math.floor(Date.now() / 1_000);
|
|
543
|
+
const digest = await crypto.subtle.digest(
|
|
544
|
+
"SHA-256",
|
|
545
|
+
toArrayBuffer(
|
|
546
|
+
utf8(
|
|
547
|
+
`nats-connect:${
|
|
548
|
+
buildNatsConnectSignaturePayload(iat, args.contractDigest)
|
|
549
|
+
}`,
|
|
550
|
+
),
|
|
551
|
+
),
|
|
552
|
+
);
|
|
553
|
+
const signature = new Uint8Array(
|
|
554
|
+
await crypto.subtle.sign("Ed25519", identityPrivateKey, digest),
|
|
555
|
+
);
|
|
556
|
+
return {
|
|
557
|
+
v: 1,
|
|
558
|
+
sessionKey: args.publicIdentityKey,
|
|
559
|
+
iat,
|
|
560
|
+
sig: base64urlEncode(signature),
|
|
561
|
+
contractDigest: args.contractDigest,
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
export async function waitForDeviceActivation(args: {
|
|
566
|
+
trellisUrl: string;
|
|
567
|
+
flowId: string;
|
|
568
|
+
publicIdentityKey: string;
|
|
569
|
+
nonce: string;
|
|
570
|
+
identitySeed: Uint8Array | string;
|
|
571
|
+
contractDigest: string;
|
|
572
|
+
signal?: AbortSignal;
|
|
573
|
+
pollIntervalMs?: number;
|
|
574
|
+
}): Promise<
|
|
575
|
+
Extract<WaitForDeviceActivationResponse, { status: "activated" }>
|
|
576
|
+
> {
|
|
577
|
+
const pollIntervalMs = args.pollIntervalMs ?? DEFAULT_WAIT_POLL_INTERVAL_MS;
|
|
578
|
+
while (true) {
|
|
579
|
+
const request = await signDeviceWaitRequest(args);
|
|
580
|
+
let response: Response;
|
|
581
|
+
try {
|
|
582
|
+
response = await fetch(
|
|
583
|
+
new URL("/auth/devices/activate/wait", args.trellisUrl),
|
|
584
|
+
{
|
|
585
|
+
method: "POST",
|
|
586
|
+
headers: { "Content-Type": "application/json" },
|
|
587
|
+
body: JSON.stringify(request),
|
|
588
|
+
signal: args.signal,
|
|
589
|
+
},
|
|
590
|
+
);
|
|
591
|
+
} catch (error) {
|
|
592
|
+
if (args.signal?.aborted) {
|
|
593
|
+
throw error;
|
|
594
|
+
}
|
|
595
|
+
await sleep(pollIntervalMs, args.signal);
|
|
596
|
+
continue;
|
|
597
|
+
}
|
|
598
|
+
if (!response.ok) {
|
|
599
|
+
if (response.status === 429) {
|
|
600
|
+
const retryAfterMs = retryAfterDelayMs(response);
|
|
601
|
+
await sleep(
|
|
602
|
+
retryAfterMs === null
|
|
603
|
+
? pollIntervalMs
|
|
604
|
+
: Math.max(pollIntervalMs, retryAfterMs),
|
|
605
|
+
args.signal,
|
|
606
|
+
);
|
|
607
|
+
continue;
|
|
608
|
+
}
|
|
609
|
+
const detail = await responseErrorDetail(response);
|
|
610
|
+
throw new Error(
|
|
611
|
+
detail
|
|
612
|
+
? `device activation wait failed: ${response.status} ${detail}`
|
|
613
|
+
: `device activation wait failed: ${response.status}`,
|
|
614
|
+
);
|
|
615
|
+
}
|
|
616
|
+
const body = await response.json();
|
|
617
|
+
if (!Value.Check(WaitForDeviceActivationResponseSchema, body)) {
|
|
618
|
+
throw new Error("Invalid device activation wait response");
|
|
619
|
+
}
|
|
620
|
+
if (body.status === "pending") {
|
|
621
|
+
await sleep(pollIntervalMs, args.signal);
|
|
622
|
+
continue;
|
|
623
|
+
}
|
|
624
|
+
if (body.status === "rejected") {
|
|
625
|
+
throw new Error(
|
|
626
|
+
`device activation rejected: ${body.reason ?? "unknown_reason"}`,
|
|
627
|
+
);
|
|
628
|
+
}
|
|
629
|
+
return body;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
export async function getDeviceConnectInfo(args: {
|
|
634
|
+
trellisUrl: string;
|
|
635
|
+
publicIdentityKey: string;
|
|
636
|
+
identitySeed: Uint8Array | string;
|
|
637
|
+
contractDigest: string;
|
|
638
|
+
iat?: number;
|
|
639
|
+
}): Promise<GetDeviceConnectInfoOutput> {
|
|
640
|
+
const request = await signDeviceWaitRequest({
|
|
641
|
+
flowId: "connect-info",
|
|
642
|
+
publicIdentityKey: args.publicIdentityKey,
|
|
643
|
+
identitySeed: args.identitySeed,
|
|
644
|
+
contractDigest: args.contractDigest,
|
|
645
|
+
nonce: "connect-info",
|
|
646
|
+
iat: args.iat,
|
|
647
|
+
});
|
|
648
|
+
const payload: GetDeviceConnectInfoInput = {
|
|
649
|
+
publicIdentityKey: request.publicIdentityKey,
|
|
650
|
+
contractDigest: args.contractDigest,
|
|
651
|
+
iat: request.iat,
|
|
652
|
+
sig: request.sig,
|
|
653
|
+
};
|
|
654
|
+
const response = await fetch(
|
|
655
|
+
new URL("/auth/devices/connect-info", args.trellisUrl),
|
|
656
|
+
{
|
|
657
|
+
method: "POST",
|
|
658
|
+
headers: { "Content-Type": "application/json" },
|
|
659
|
+
body: JSON.stringify(payload),
|
|
660
|
+
},
|
|
661
|
+
);
|
|
662
|
+
if (!response.ok) {
|
|
663
|
+
throw new Error(`device connect info failed: ${response.status}`);
|
|
664
|
+
}
|
|
665
|
+
const body = await response.json();
|
|
666
|
+
if (!Value.Check(AuthDevicesConnectInfoGetResponseSchema, body)) {
|
|
667
|
+
throw new Error("Invalid device connect info response");
|
|
668
|
+
}
|
|
669
|
+
return body;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
export function createDeviceActivationClient(
|
|
673
|
+
client: DeviceActivationTransport,
|
|
674
|
+
) {
|
|
675
|
+
return {
|
|
676
|
+
resolveDeviceUserAuthorities(input: AuthResolveDeviceUserAuthoritiesInput) {
|
|
677
|
+
return client.operation("Auth.DeviceUserAuthorities.Resolve").input(input)
|
|
678
|
+
.start()
|
|
679
|
+
.orThrow();
|
|
680
|
+
},
|
|
681
|
+
listDeviceActivations(input: AuthDeviceUserAuthoritiesListInput) {
|
|
682
|
+
return client.request("Auth.DeviceUserAuthorities.List", input).orThrow();
|
|
683
|
+
},
|
|
684
|
+
revokeDeviceActivation(input: AuthDeviceUserAuthoritiesRevokeInput) {
|
|
685
|
+
return client.request("Auth.DeviceUserAuthorities.Revoke", input)
|
|
686
|
+
.orThrow();
|
|
687
|
+
},
|
|
688
|
+
getDeviceConnectInfo(input: GetDeviceConnectInfoInput) {
|
|
689
|
+
return client.request("Auth.Devices.ConnectInfo.Get", input).orThrow();
|
|
690
|
+
},
|
|
691
|
+
};
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
export async function verifyDeviceWaitSignature(
|
|
695
|
+
input: DeviceActivationWaitRequest,
|
|
696
|
+
): Promise<boolean> {
|
|
697
|
+
const publicKey = await importEd25519PublicKeyFromBase64url(
|
|
698
|
+
input.publicIdentityKey,
|
|
699
|
+
);
|
|
700
|
+
const proofHash = await sha256(
|
|
701
|
+
buildDeviceWaitProofInput(
|
|
702
|
+
input.flowId,
|
|
703
|
+
input.publicIdentityKey,
|
|
704
|
+
input.nonce,
|
|
705
|
+
input.iat,
|
|
706
|
+
input.contractDigest,
|
|
707
|
+
),
|
|
708
|
+
);
|
|
709
|
+
return await crypto.subtle.verify(
|
|
710
|
+
"Ed25519",
|
|
711
|
+
publicKey,
|
|
712
|
+
toArrayBuffer(base64urlDecode(input.sig)),
|
|
713
|
+
toArrayBuffer(proofHash),
|
|
714
|
+
);
|
|
715
|
+
}
|