@enbox/agent 0.0.1
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/dist/browser.js +2215 -0
- package/dist/browser.js.map +7 -0
- package/dist/browser.mjs +2215 -0
- package/dist/browser.mjs.map +7 -0
- package/dist/cjs/index.js +8530 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/agent-did-resolver-cache.js +87 -0
- package/dist/esm/agent-did-resolver-cache.js.map +1 -0
- package/dist/esm/bearer-identity.js +41 -0
- package/dist/esm/bearer-identity.js.map +1 -0
- package/dist/esm/connect.js +191 -0
- package/dist/esm/connect.js.map +1 -0
- package/dist/esm/crypto-api.js +346 -0
- package/dist/esm/crypto-api.js.map +1 -0
- package/dist/esm/did-api.js +278 -0
- package/dist/esm/did-api.js.map +1 -0
- package/dist/esm/dwn-api.js +336 -0
- package/dist/esm/dwn-api.js.map +1 -0
- package/dist/esm/dwn-registrar.js +120 -0
- package/dist/esm/dwn-registrar.js.map +1 -0
- package/dist/esm/hd-identity-vault.js +729 -0
- package/dist/esm/hd-identity-vault.js.map +1 -0
- package/dist/esm/identity-api.js +262 -0
- package/dist/esm/identity-api.js.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/local-key-manager.js +498 -0
- package/dist/esm/local-key-manager.js.map +1 -0
- package/dist/esm/oidc.js +507 -0
- package/dist/esm/oidc.js.map +1 -0
- package/dist/esm/permissions-api.js +322 -0
- package/dist/esm/permissions-api.js.map +1 -0
- package/dist/esm/prototyping/clients/dwn-rpc-types.js +2 -0
- package/dist/esm/prototyping/clients/dwn-rpc-types.js.map +1 -0
- package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js +74 -0
- package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js.map +1 -0
- package/dist/esm/prototyping/clients/http-dwn-rpc-client.js +105 -0
- package/dist/esm/prototyping/clients/http-dwn-rpc-client.js.map +1 -0
- package/dist/esm/prototyping/clients/json-rpc-socket.js +150 -0
- package/dist/esm/prototyping/clients/json-rpc-socket.js.map +1 -0
- package/dist/esm/prototyping/clients/json-rpc.js +58 -0
- package/dist/esm/prototyping/clients/json-rpc.js.map +1 -0
- package/dist/esm/prototyping/clients/server-info-types.js +2 -0
- package/dist/esm/prototyping/clients/server-info-types.js.map +1 -0
- package/dist/esm/prototyping/clients/web-socket-clients.js +90 -0
- package/dist/esm/prototyping/clients/web-socket-clients.js.map +1 -0
- package/dist/esm/prototyping/common/object.js +14 -0
- package/dist/esm/prototyping/common/object.js.map +1 -0
- package/dist/esm/prototyping/common/type-utils.js +2 -0
- package/dist/esm/prototyping/common/type-utils.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js +147 -0
- package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/aes-kw.js +137 -0
- package/dist/esm/prototyping/crypto/algorithms/aes-kw.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/ecdsa.js +307 -0
- package/dist/esm/prototyping/crypto/algorithms/ecdsa.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/eddsa.js +264 -0
- package/dist/esm/prototyping/crypto/algorithms/eddsa.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/hkdf.js +39 -0
- package/dist/esm/prototyping/crypto/algorithms/hkdf.js.map +1 -0
- package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js +41 -0
- package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js.map +1 -0
- package/dist/esm/prototyping/crypto/crypto-error.js +41 -0
- package/dist/esm/prototyping/crypto/crypto-error.js.map +1 -0
- package/dist/esm/prototyping/crypto/dsa.js +236 -0
- package/dist/esm/prototyping/crypto/dsa.js.map +1 -0
- package/dist/esm/prototyping/crypto/jose/jwe-compact.js +130 -0
- package/dist/esm/prototyping/crypto/jose/jwe-compact.js.map +1 -0
- package/dist/esm/prototyping/crypto/jose/jwe-flattened.js +294 -0
- package/dist/esm/prototyping/crypto/jose/jwe-flattened.js.map +1 -0
- package/dist/esm/prototyping/crypto/jose/jwe.js +308 -0
- package/dist/esm/prototyping/crypto/jose/jwe.js.map +1 -0
- package/dist/esm/prototyping/crypto/primitives/aes-gcm.js +352 -0
- package/dist/esm/prototyping/crypto/primitives/aes-gcm.js.map +1 -0
- package/dist/esm/prototyping/crypto/primitives/aes-kw.js +247 -0
- package/dist/esm/prototyping/crypto/primitives/aes-kw.js.map +1 -0
- package/dist/esm/prototyping/crypto/primitives/hkdf.js +80 -0
- package/dist/esm/prototyping/crypto/primitives/hkdf.js.map +1 -0
- package/dist/esm/prototyping/crypto/primitives/pbkdf2.js +85 -0
- package/dist/esm/prototyping/crypto/primitives/pbkdf2.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/cipher.js +2 -0
- package/dist/esm/prototyping/crypto/types/cipher.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/crypto-api.js +2 -0
- package/dist/esm/prototyping/crypto/types/crypto-api.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/key-converter.js +2 -0
- package/dist/esm/prototyping/crypto/types/key-converter.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/key-deriver.js +2 -0
- package/dist/esm/prototyping/crypto/types/key-deriver.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/key-io.js +2 -0
- package/dist/esm/prototyping/crypto/types/key-io.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/key-manager.js +2 -0
- package/dist/esm/prototyping/crypto/types/key-manager.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/key-wrapper.js +2 -0
- package/dist/esm/prototyping/crypto/types/key-wrapper.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/params-direct.js +2 -0
- package/dist/esm/prototyping/crypto/types/params-direct.js.map +1 -0
- package/dist/esm/prototyping/crypto/types/params-kms.js +2 -0
- package/dist/esm/prototyping/crypto/types/params-kms.js.map +1 -0
- package/dist/esm/prototyping/crypto/utils.js +19 -0
- package/dist/esm/prototyping/crypto/utils.js.map +1 -0
- package/dist/esm/prototyping/dids/resolver-cache-memory.js +77 -0
- package/dist/esm/prototyping/dids/resolver-cache-memory.js.map +1 -0
- package/dist/esm/prototyping/dids/utils.js +9 -0
- package/dist/esm/prototyping/dids/utils.js.map +1 -0
- package/dist/esm/rpc-client.js +123 -0
- package/dist/esm/rpc-client.js.map +1 -0
- package/dist/esm/store-data-protocols.js +38 -0
- package/dist/esm/store-data-protocols.js.map +1 -0
- package/dist/esm/store-data.js +320 -0
- package/dist/esm/store-data.js.map +1 -0
- package/dist/esm/store-did.js +136 -0
- package/dist/esm/store-did.js.map +1 -0
- package/dist/esm/store-identity.js +140 -0
- package/dist/esm/store-identity.js.map +1 -0
- package/dist/esm/store-key.js +136 -0
- package/dist/esm/store-key.js.map +1 -0
- package/dist/esm/sync-api.js +61 -0
- package/dist/esm/sync-api.js.map +1 -0
- package/dist/esm/sync-engine-level.js +618 -0
- package/dist/esm/sync-engine-level.js.map +1 -0
- package/dist/esm/test-harness.js +239 -0
- package/dist/esm/test-harness.js.map +1 -0
- package/dist/esm/types/agent.js +2 -0
- package/dist/esm/types/agent.js.map +1 -0
- package/dist/esm/types/dwn.js +31 -0
- package/dist/esm/types/dwn.js.map +1 -0
- package/dist/esm/types/identity-vault.js +2 -0
- package/dist/esm/types/identity-vault.js.map +1 -0
- package/dist/esm/types/identity.js +2 -0
- package/dist/esm/types/identity.js.map +1 -0
- package/dist/esm/types/key-manager.js +2 -0
- package/dist/esm/types/key-manager.js.map +1 -0
- package/dist/esm/types/permissions.js +2 -0
- package/dist/esm/types/permissions.js.map +1 -0
- package/dist/esm/types/sync.js +2 -0
- package/dist/esm/types/sync.js.map +1 -0
- package/dist/esm/types/vc.js +5 -0
- package/dist/esm/types/vc.js.map +1 -0
- package/dist/esm/utils-internal.js +147 -0
- package/dist/esm/utils-internal.js.map +1 -0
- package/dist/esm/utils.js +161 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/agent-did-resolver-cache.d.ts +30 -0
- package/dist/types/agent-did-resolver-cache.d.ts.map +1 -0
- package/dist/types/bearer-identity.d.ts +31 -0
- package/dist/types/bearer-identity.d.ts.map +1 -0
- package/dist/types/connect.d.ts +88 -0
- package/dist/types/connect.d.ts.map +1 -0
- package/dist/types/crypto-api.d.ts +286 -0
- package/dist/types/crypto-api.d.ts.map +1 -0
- package/dist/types/did-api.d.ts +119 -0
- package/dist/types/did-api.d.ts.map +1 -0
- package/dist/types/dwn-api.d.ts +66 -0
- package/dist/types/dwn-api.d.ts.map +1 -0
- package/dist/types/dwn-registrar.d.ts +29 -0
- package/dist/types/dwn-registrar.d.ts.map +1 -0
- package/dist/types/hd-identity-vault.d.ts +306 -0
- package/dist/types/hd-identity-vault.d.ts.map +1 -0
- package/dist/types/identity-api.d.ts +107 -0
- package/dist/types/identity-api.d.ts.map +1 -0
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/local-key-manager.d.ts +311 -0
- package/dist/types/local-key-manager.d.ts.map +1 -0
- package/dist/types/oidc.d.ts +247 -0
- package/dist/types/oidc.d.ts.map +1 -0
- package/dist/types/permissions-api.d.ts +35 -0
- package/dist/types/permissions-api.d.ts.map +1 -0
- package/dist/types/prototyping/clients/dwn-rpc-types.d.ts +45 -0
- package/dist/types/prototyping/clients/dwn-rpc-types.d.ts.map +1 -0
- package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts +57 -0
- package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts.map +1 -0
- package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts +13 -0
- package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts.map +1 -0
- package/dist/types/prototyping/clients/json-rpc-socket.d.ts +43 -0
- package/dist/types/prototyping/clients/json-rpc-socket.d.ts.map +1 -0
- package/dist/types/prototyping/clients/json-rpc.d.ts +49 -0
- package/dist/types/prototyping/clients/json-rpc.d.ts.map +1 -0
- package/dist/types/prototyping/clients/server-info-types.d.ts +20 -0
- package/dist/types/prototyping/clients/server-info-types.d.ts.map +1 -0
- package/dist/types/prototyping/clients/web-socket-clients.d.ts +10 -0
- package/dist/types/prototyping/clients/web-socket-clients.d.ts.map +1 -0
- package/dist/types/prototyping/common/object.d.ts +2 -0
- package/dist/types/prototyping/common/object.d.ts.map +1 -0
- package/dist/types/prototyping/common/type-utils.d.ts +7 -0
- package/dist/types/prototyping/common/type-utils.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts +151 -0
- package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts +109 -0
- package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts +160 -0
- package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts +157 -0
- package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts +21 -0
- package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts +21 -0
- package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/crypto-error.d.ts +29 -0
- package/dist/types/prototyping/crypto/crypto-error.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/dsa.d.ts +169 -0
- package/dist/types/prototyping/crypto/dsa.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts +135 -0
- package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts +134 -0
- package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/jose/jwe.d.ts +378 -0
- package/dist/types/prototyping/crypto/jose/jwe.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts +245 -0
- package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts +103 -0
- package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/primitives/hkdf.d.ts +90 -0
- package/dist/types/prototyping/crypto/primitives/hkdf.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts +84 -0
- package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/cipher.d.ts +14 -0
- package/dist/types/prototyping/crypto/types/cipher.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/crypto-api.d.ts +35 -0
- package/dist/types/prototyping/crypto/types/crypto-api.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/key-converter.d.ts +49 -0
- package/dist/types/prototyping/crypto/types/key-converter.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/key-deriver.d.ts +50 -0
- package/dist/types/prototyping/crypto/types/key-deriver.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/key-io.d.ts +49 -0
- package/dist/types/prototyping/crypto/types/key-io.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/key-manager.d.ts +69 -0
- package/dist/types/prototyping/crypto/types/key-manager.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/key-wrapper.d.ts +14 -0
- package/dist/types/prototyping/crypto/types/key-wrapper.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/params-direct.d.ts +75 -0
- package/dist/types/prototyping/crypto/types/params-direct.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/types/params-kms.d.ts +63 -0
- package/dist/types/prototyping/crypto/types/params-kms.d.ts.map +1 -0
- package/dist/types/prototyping/crypto/utils.d.ts +7 -0
- package/dist/types/prototyping/crypto/utils.d.ts.map +1 -0
- package/dist/types/prototyping/dids/resolver-cache-memory.d.ts +57 -0
- package/dist/types/prototyping/dids/resolver-cache-memory.d.ts.map +1 -0
- package/dist/types/prototyping/dids/utils.d.ts +3 -0
- package/dist/types/prototyping/dids/utils.d.ts.map +1 -0
- package/dist/types/rpc-client.d.ts +51 -0
- package/dist/types/rpc-client.d.ts.map +1 -0
- package/dist/types/store-data-protocols.d.ts +4 -0
- package/dist/types/store-data-protocols.d.ts.map +1 -0
- package/dist/types/store-data.d.ts +95 -0
- package/dist/types/store-data.d.ts.map +1 -0
- package/dist/types/store-did.d.ts +33 -0
- package/dist/types/store-did.d.ts.map +1 -0
- package/dist/types/store-identity.d.ts +34 -0
- package/dist/types/store-identity.d.ts.map +1 -0
- package/dist/types/store-key.d.ts +32 -0
- package/dist/types/store-key.d.ts.map +1 -0
- package/dist/types/sync-api.d.ts +41 -0
- package/dist/types/sync-api.d.ts.map +1 -0
- package/dist/types/sync-engine-level.d.ts +85 -0
- package/dist/types/sync-engine-level.d.ts.map +1 -0
- package/dist/types/test-harness.d.ts +69 -0
- package/dist/types/test-harness.d.ts.map +1 -0
- package/dist/types/types/agent.d.ts +172 -0
- package/dist/types/types/agent.d.ts.map +1 -0
- package/dist/types/types/dwn.d.ts +178 -0
- package/dist/types/types/dwn.d.ts.map +1 -0
- package/dist/types/types/identity-vault.d.ts +129 -0
- package/dist/types/types/identity-vault.d.ts.map +1 -0
- package/dist/types/types/identity.d.ts +16 -0
- package/dist/types/types/identity.d.ts.map +1 -0
- package/dist/types/types/key-manager.d.ts +9 -0
- package/dist/types/types/key-manager.d.ts.map +1 -0
- package/dist/types/types/permissions.d.ts +98 -0
- package/dist/types/types/permissions.d.ts.map +1 -0
- package/dist/types/types/sync.d.ts +66 -0
- package/dist/types/types/sync.d.ts.map +1 -0
- package/dist/types/types/vc.d.ts +7 -0
- package/dist/types/types/vc.d.ts.map +1 -0
- package/dist/types/utils-internal.d.ts +50 -0
- package/dist/types/utils-internal.d.ts.map +1 -0
- package/dist/types/utils.d.ts +37 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +112 -0
- package/src/agent-did-resolver-cache.ts +95 -0
- package/src/bearer-identity.ts +42 -0
- package/src/connect.ts +296 -0
- package/src/crypto-api.ts +593 -0
- package/src/did-api.ts +429 -0
- package/src/dwn-api.ts +462 -0
- package/src/dwn-registrar.ts +127 -0
- package/src/hd-identity-vault.ts +853 -0
- package/src/identity-api.ts +324 -0
- package/src/index.ts +30 -0
- package/src/local-key-manager.ts +672 -0
- package/src/oidc.ts +857 -0
- package/src/permissions-api.ts +408 -0
- package/src/prototyping/clients/dwn-rpc-types.ts +55 -0
- package/src/prototyping/clients/dwn-server-info-cache-memory.ts +79 -0
- package/src/prototyping/clients/http-dwn-rpc-client.ts +110 -0
- package/src/prototyping/clients/json-rpc-socket.ts +169 -0
- package/src/prototyping/clients/json-rpc.ts +113 -0
- package/src/prototyping/clients/server-info-types.ts +21 -0
- package/src/prototyping/clients/web-socket-clients.ts +100 -0
- package/src/prototyping/common/object.ts +15 -0
- package/src/prototyping/common/type-utils.ts +6 -0
- package/src/prototyping/crypto/algorithms/aes-gcm.ts +211 -0
- package/src/prototyping/crypto/algorithms/aes-kw.ts +164 -0
- package/src/prototyping/crypto/algorithms/ecdsa.ts +365 -0
- package/src/prototyping/crypto/algorithms/eddsa.ts +310 -0
- package/src/prototyping/crypto/algorithms/hkdf.ts +40 -0
- package/src/prototyping/crypto/algorithms/pbkdf2.ts +44 -0
- package/src/prototyping/crypto/crypto-error.ts +45 -0
- package/src/prototyping/crypto/dsa.ts +367 -0
- package/src/prototyping/crypto/jose/jwe-compact.ts +225 -0
- package/src/prototyping/crypto/jose/jwe-flattened.ts +459 -0
- package/src/prototyping/crypto/jose/jwe.ts +653 -0
- package/src/prototyping/crypto/primitives/aes-gcm.ts +374 -0
- package/src/prototyping/crypto/primitives/aes-kw.ts +271 -0
- package/src/prototyping/crypto/primitives/hkdf.ts +121 -0
- package/src/prototyping/crypto/primitives/pbkdf2.ts +116 -0
- package/src/prototyping/crypto/types/cipher.ts +17 -0
- package/src/prototyping/crypto/types/crypto-api.ts +78 -0
- package/src/prototyping/crypto/types/key-converter.ts +53 -0
- package/src/prototyping/crypto/types/key-deriver.ts +56 -0
- package/src/prototyping/crypto/types/key-io.ts +51 -0
- package/src/prototyping/crypto/types/key-manager.ts +83 -0
- package/src/prototyping/crypto/types/key-wrapper.ts +17 -0
- package/src/prototyping/crypto/types/params-direct.ts +95 -0
- package/src/prototyping/crypto/types/params-kms.ts +76 -0
- package/src/prototyping/crypto/utils.ts +41 -0
- package/src/prototyping/dids/resolver-cache-memory.ts +83 -0
- package/src/prototyping/dids/utils.ts +10 -0
- package/src/rpc-client.ts +162 -0
- package/src/store-data-protocols.ts +40 -0
- package/src/store-data.ts +400 -0
- package/src/store-did.ts +105 -0
- package/src/store-identity.ts +109 -0
- package/src/store-key.ts +104 -0
- package/src/sync-api.ts +71 -0
- package/src/sync-engine-level.ts +714 -0
- package/src/test-harness.ts +330 -0
- package/src/types/agent.ts +195 -0
- package/src/types/dwn.ts +278 -0
- package/src/types/identity-vault.ts +137 -0
- package/src/types/identity.ts +18 -0
- package/src/types/key-manager.ts +15 -0
- package/src/types/permissions.ts +115 -0
- package/src/types/sync.ts +58 -0
- package/src/types/vc.ts +7 -0
- package/src/utils-internal.ts +157 -0
- package/src/utils.ts +181 -0
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
11
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
12
|
+
var m = o[Symbol.asyncIterator], i;
|
|
13
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
14
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
15
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
16
|
+
};
|
|
17
|
+
import ms from 'ms';
|
|
18
|
+
import { Level } from 'level';
|
|
19
|
+
import { monotonicFactory } from 'ulidx';
|
|
20
|
+
import { NodeStream } from '@enbox/common';
|
|
21
|
+
import { DwnInterfaceName, DwnMethodName, } from '@enbox/dwn-sdk-js';
|
|
22
|
+
import { DwnInterface } from './types/dwn.js';
|
|
23
|
+
import { getDwnServiceEndpointUrls, isRecordsWrite } from './utils.js';
|
|
24
|
+
import { AgentPermissionsApi } from './permissions-api.js';
|
|
25
|
+
export class SyncEngineLevel {
|
|
26
|
+
;
|
|
27
|
+
constructor({ agent, dataPath, db }) {
|
|
28
|
+
this._syncLock = false;
|
|
29
|
+
this._agent = agent;
|
|
30
|
+
this._permissionsApi = new AgentPermissionsApi({ agent: agent });
|
|
31
|
+
this._db = (db) ? db : new Level(dataPath !== null && dataPath !== void 0 ? dataPath : 'DATA/AGENT/SYNC_STORE');
|
|
32
|
+
this._ulidFactory = monotonicFactory();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Retrieves the `Web5PlatformAgent` execution context.
|
|
36
|
+
*
|
|
37
|
+
* @returns The `Web5PlatformAgent` instance that represents the current execution context.
|
|
38
|
+
* @throws Will throw an error if the `agent` instance property is undefined.
|
|
39
|
+
*/
|
|
40
|
+
get agent() {
|
|
41
|
+
if (this._agent === undefined) {
|
|
42
|
+
throw new Error('SyncEngineLevel: Unable to determine agent execution context.');
|
|
43
|
+
}
|
|
44
|
+
return this._agent;
|
|
45
|
+
}
|
|
46
|
+
set agent(agent) {
|
|
47
|
+
this._agent = agent;
|
|
48
|
+
this._permissionsApi = new AgentPermissionsApi({ agent: agent });
|
|
49
|
+
}
|
|
50
|
+
clear() {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
yield this._permissionsApi.clear();
|
|
53
|
+
yield this._db.clear();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
close() {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
yield this._db.close();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
pull() {
|
|
62
|
+
var _a;
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
const syncPeerState = yield this.getSyncPeerState({ syncDirection: 'pull' });
|
|
65
|
+
yield this.enqueueOperations({ syncDirection: 'pull', syncPeerState });
|
|
66
|
+
const pullQueue = this.getPullQueue();
|
|
67
|
+
const pullJobs = yield pullQueue.iterator().all();
|
|
68
|
+
const deleteOperations = [];
|
|
69
|
+
const errored = new Set();
|
|
70
|
+
for (let job of pullJobs) {
|
|
71
|
+
const [key] = job;
|
|
72
|
+
const { did, dwnUrl, messageCid, delegateDid, protocol } = SyncEngineLevel.parseSyncMessageParamsKey(key);
|
|
73
|
+
// If a particular DWN service endpoint is unreachable, skip subsequent pull operations.
|
|
74
|
+
if (errored.has(dwnUrl)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const messageExists = yield this.messageExists(did, messageCid);
|
|
78
|
+
if (messageExists) {
|
|
79
|
+
deleteOperations.push({ type: 'del', key: key });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
let permissionGrantId;
|
|
83
|
+
let granteeDid;
|
|
84
|
+
if (delegateDid) {
|
|
85
|
+
try {
|
|
86
|
+
const messagesReadGrant = yield this._permissionsApi.getPermissionForRequest({
|
|
87
|
+
connectedDid: did,
|
|
88
|
+
messageType: DwnInterface.MessagesRead,
|
|
89
|
+
delegateDid,
|
|
90
|
+
protocol,
|
|
91
|
+
cached: true
|
|
92
|
+
});
|
|
93
|
+
permissionGrantId = messagesReadGrant.grant.id;
|
|
94
|
+
granteeDid = delegateDid;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('SyncEngineLevel: pull - Error fetching MessagesRead permission grant for delegate DID', error);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const messagesRead = yield this.agent.processDwnRequest({
|
|
102
|
+
store: false,
|
|
103
|
+
author: did,
|
|
104
|
+
target: did,
|
|
105
|
+
messageType: DwnInterface.MessagesRead,
|
|
106
|
+
granteeDid,
|
|
107
|
+
messageParams: {
|
|
108
|
+
messageCid,
|
|
109
|
+
permissionGrantId
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
let reply;
|
|
113
|
+
try {
|
|
114
|
+
reply = (yield this.agent.rpc.sendDwnRequest({
|
|
115
|
+
dwnUrl, targetDid: did,
|
|
116
|
+
message: messagesRead.message,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
errored.add(dwnUrl);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (reply.status.code !== 200 || !((_a = reply.entry) === null || _a === void 0 ? void 0 : _a.message)) {
|
|
124
|
+
yield this.addMessage(did, messageCid);
|
|
125
|
+
deleteOperations.push({ type: 'del', key: key });
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const replyEntry = reply.entry;
|
|
129
|
+
const message = replyEntry.message;
|
|
130
|
+
// if the message includes data we convert it to a Node readable stream
|
|
131
|
+
// otherwise we set it as undefined, as the message does not include data
|
|
132
|
+
// this occurs when the message is a RecordsWrite message that has been updated
|
|
133
|
+
const dataStream = isRecordsWrite(replyEntry) && replyEntry.data ?
|
|
134
|
+
NodeStream.fromWebReadable({ readableStream: replyEntry.data })
|
|
135
|
+
: undefined;
|
|
136
|
+
const pullReply = yield this.agent.dwn.node.processMessage(did, message, { dataStream: dataStream });
|
|
137
|
+
if (SyncEngineLevel.syncMessageReplyIsSuccessful(pullReply)) {
|
|
138
|
+
yield this.addMessage(did, messageCid);
|
|
139
|
+
deleteOperations.push({ type: 'del', key: key });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
yield pullQueue.batch(deleteOperations);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
push() {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const syncPeerState = yield this.getSyncPeerState({ syncDirection: 'push' });
|
|
148
|
+
yield this.enqueueOperations({ syncDirection: 'push', syncPeerState });
|
|
149
|
+
const pushQueue = this.getPushQueue();
|
|
150
|
+
const pushJobs = yield pushQueue.iterator().all();
|
|
151
|
+
const deleteOperations = [];
|
|
152
|
+
const errored = new Set();
|
|
153
|
+
for (let job of pushJobs) {
|
|
154
|
+
const [key] = job;
|
|
155
|
+
const { did, delegateDid, protocol, dwnUrl, messageCid } = SyncEngineLevel.parseSyncMessageParamsKey(key);
|
|
156
|
+
// If a particular DWN service endpoint is unreachable, skip subsequent push operations.
|
|
157
|
+
if (errored.has(dwnUrl)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
// Attempt to retrieve the message from the local DWN.
|
|
161
|
+
const dwnMessage = yield this.getDwnMessage({ author: did, messageCid, delegateDid, protocol });
|
|
162
|
+
// If the message does not exist on the local DWN, remove the sync operation from the
|
|
163
|
+
// push queue, update the push watermark for this DID/DWN endpoint combination, add the
|
|
164
|
+
// message to the local message store, and continue to the next job.
|
|
165
|
+
if (!dwnMessage) {
|
|
166
|
+
deleteOperations.push({ type: 'del', key: key });
|
|
167
|
+
yield this.addMessage(did, messageCid);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const reply = yield this.agent.rpc.sendDwnRequest({
|
|
172
|
+
dwnUrl,
|
|
173
|
+
targetDid: did,
|
|
174
|
+
data: dwnMessage.data,
|
|
175
|
+
message: dwnMessage.message
|
|
176
|
+
});
|
|
177
|
+
// Update the watermark and add the messageCid to the Sync Message Store if either:
|
|
178
|
+
if (SyncEngineLevel.syncMessageReplyIsSuccessful(reply)) {
|
|
179
|
+
yield this.addMessage(did, messageCid);
|
|
180
|
+
deleteOperations.push({ type: 'del', key: key });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (_a) {
|
|
184
|
+
// Error is intentionally ignored; 'errored' set is updated with 'dwnUrl'.
|
|
185
|
+
errored.add(dwnUrl);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
yield pushQueue.batch(deleteOperations);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
registerIdentity({ did, options }) {
|
|
192
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
+
// Get a reference to the `registeredIdentities` sublevel.
|
|
194
|
+
const registeredIdentities = this._db.sublevel('registeredIdentities');
|
|
195
|
+
const existing = yield this.getIdentityOptions(did);
|
|
196
|
+
if (existing) {
|
|
197
|
+
throw new Error(`SyncEngineLevel: Identity with DID ${did} is already registered.`);
|
|
198
|
+
}
|
|
199
|
+
// if no options are provided, we default to no delegateDid and all protocols (empty array)
|
|
200
|
+
options !== null && options !== void 0 ? options : (options = { protocols: [] });
|
|
201
|
+
// Add (or overwrite, if present) the Identity's DID as a registered identity.
|
|
202
|
+
yield registeredIdentities.put(did, JSON.stringify(options));
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
unregisterIdentity(did) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
const registeredIdentities = this._db.sublevel('registeredIdentities');
|
|
208
|
+
const existing = yield this.getIdentityOptions(did);
|
|
209
|
+
if (!existing) {
|
|
210
|
+
throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);
|
|
211
|
+
}
|
|
212
|
+
yield registeredIdentities.del(did);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
getIdentityOptions(did) {
|
|
216
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
217
|
+
const registeredIdentities = this._db.sublevel('registeredIdentities');
|
|
218
|
+
try {
|
|
219
|
+
const options = yield registeredIdentities.get(did);
|
|
220
|
+
if (options) {
|
|
221
|
+
return JSON.parse(options);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const e = error;
|
|
226
|
+
// `Level`` throws an error if the key is not present. Return `undefined` in this case.
|
|
227
|
+
if (e.code === 'LEVEL_NOT_FOUND') {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
throw new Error(`SyncEngineLevel: Error reading level: ${e.code}.`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
updateIdentityOptions({ did, options }) {
|
|
237
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
238
|
+
const registeredIdentities = this._db.sublevel('registeredIdentities');
|
|
239
|
+
const existingOptions = yield this.getIdentityOptions(did);
|
|
240
|
+
if (!existingOptions) {
|
|
241
|
+
throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);
|
|
242
|
+
}
|
|
243
|
+
yield registeredIdentities.put(did, JSON.stringify(options));
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
sync(direction) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
if (this._syncLock) {
|
|
249
|
+
throw new Error('SyncEngineLevel: Sync operation is already in progress.');
|
|
250
|
+
}
|
|
251
|
+
this._syncLock = true;
|
|
252
|
+
try {
|
|
253
|
+
if (!direction || direction === 'push') {
|
|
254
|
+
yield this.push();
|
|
255
|
+
}
|
|
256
|
+
if (!direction || direction === 'pull') {
|
|
257
|
+
yield this.pull();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
this._syncLock = false;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
startSync({ interval }) {
|
|
266
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
+
// Convert the interval string to milliseconds.
|
|
268
|
+
const intervalMilliseconds = ms(interval);
|
|
269
|
+
const intervalSync = () => __awaiter(this, void 0, void 0, function* () {
|
|
270
|
+
if (this._syncLock) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
clearInterval(this._syncIntervalId);
|
|
274
|
+
this._syncIntervalId = undefined;
|
|
275
|
+
try {
|
|
276
|
+
yield this.sync();
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
console.error('SyncEngineLevel: Error during sync operation', error);
|
|
280
|
+
}
|
|
281
|
+
if (!this._syncIntervalId) {
|
|
282
|
+
this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
if (this._syncIntervalId) {
|
|
286
|
+
clearInterval(this._syncIntervalId);
|
|
287
|
+
}
|
|
288
|
+
// Set up a new interval.
|
|
289
|
+
this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);
|
|
290
|
+
// initiate an immediate sync
|
|
291
|
+
if (!this._syncLock) {
|
|
292
|
+
yield this.sync();
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* stopSync currently awaits the completion of the current sync operation before stopping the sync interval.
|
|
298
|
+
* TODO: implement a signal to gracefully stop sync immediately https://github.com/TBD54566975/web5-js/issues/890
|
|
299
|
+
*/
|
|
300
|
+
stopSync(timeout = 2000) {
|
|
301
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
302
|
+
let elapsedTimeout = 0;
|
|
303
|
+
while (this._syncLock) {
|
|
304
|
+
if (elapsedTimeout >= timeout) {
|
|
305
|
+
throw new Error(`SyncEngineLevel: Existing sync operation did not complete within ${timeout} milliseconds.`);
|
|
306
|
+
}
|
|
307
|
+
elapsedTimeout += 100;
|
|
308
|
+
yield new Promise((resolve) => setTimeout(resolve, timeout < 100 ? timeout : 100));
|
|
309
|
+
}
|
|
310
|
+
if (this._syncIntervalId) {
|
|
311
|
+
clearInterval(this._syncIntervalId);
|
|
312
|
+
this._syncIntervalId = undefined;
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* 202: message was successfully written to the remote DWN
|
|
318
|
+
* 204: an initial write message was written without any data, cannot yet be read until a subsequent message is written with data
|
|
319
|
+
* 409: message was already present on the remote DWN
|
|
320
|
+
* RecordsDelete and the status code is 404: the initial write message was not found or the message was already deleted
|
|
321
|
+
*/
|
|
322
|
+
static syncMessageReplyIsSuccessful(reply) {
|
|
323
|
+
var _a, _b;
|
|
324
|
+
return reply.status.code === 202 ||
|
|
325
|
+
// a 204 status code is returned when the message was accepted without any data.
|
|
326
|
+
// This is the case for an initial RecordsWrite messages for records that have been updated.
|
|
327
|
+
// For context: https://github.com/TBD54566975/dwn-sdk-js/issues/695
|
|
328
|
+
reply.status.code === 204 ||
|
|
329
|
+
reply.status.code === 409 ||
|
|
330
|
+
(
|
|
331
|
+
// If the message is a RecordsDelete and the status code is 404, the initial write message was not found or the message was already deleted
|
|
332
|
+
((_a = reply.entry) === null || _a === void 0 ? void 0 : _a.message.descriptor.interface) === DwnInterfaceName.Records &&
|
|
333
|
+
((_b = reply.entry) === null || _b === void 0 ? void 0 : _b.message.descriptor.method) === DwnMethodName.Delete &&
|
|
334
|
+
reply.status.code === 404);
|
|
335
|
+
}
|
|
336
|
+
enqueueOperations({ syncDirection, syncPeerState }) {
|
|
337
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
338
|
+
const enqueueOps = yield Promise.allSettled(syncPeerState.map((syncState) => __awaiter(this, void 0, void 0, function* () {
|
|
339
|
+
// Get the event log from the remote DWN if pull sync, or local DWN if push sync.
|
|
340
|
+
const eventLog = yield this.getDwnEventLog({
|
|
341
|
+
did: syncState.did,
|
|
342
|
+
delegateDid: syncState.delegateDid,
|
|
343
|
+
dwnUrl: syncState.dwnUrl,
|
|
344
|
+
cursor: syncState.cursor,
|
|
345
|
+
protocol: syncState.protocol,
|
|
346
|
+
syncDirection
|
|
347
|
+
});
|
|
348
|
+
const syncOperations = [];
|
|
349
|
+
for (let messageCid of eventLog) {
|
|
350
|
+
const watermark = this._ulidFactory();
|
|
351
|
+
const operationKey = SyncEngineLevel.generateSyncMessageParamsKey(Object.assign(Object.assign({}, syncState), { watermark,
|
|
352
|
+
messageCid }));
|
|
353
|
+
syncOperations.push({ type: 'put', key: operationKey, value: '' });
|
|
354
|
+
}
|
|
355
|
+
if (syncOperations.length > 0) {
|
|
356
|
+
const syncQueue = (syncDirection === 'pull')
|
|
357
|
+
? this.getPullQueue()
|
|
358
|
+
: this.getPushQueue();
|
|
359
|
+
yield syncQueue.batch(syncOperations);
|
|
360
|
+
}
|
|
361
|
+
})));
|
|
362
|
+
// log any errors that occurred during the enqueuing process
|
|
363
|
+
enqueueOps.forEach((result, index) => {
|
|
364
|
+
if (result.status === 'rejected') {
|
|
365
|
+
const peerState = syncPeerState[index];
|
|
366
|
+
console.error(`SyncEngineLevel: Error enqueuing sync operation for peerState: ${JSON.stringify(peerState)}`, result.reason);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
static generateSyncMessageParamsKey({ did, delegateDid, dwnUrl, protocol, watermark, messageCid }) {
|
|
372
|
+
// Use "did~dwnUrl~watermark~messageCid" as the key in the sync queue.
|
|
373
|
+
// Note: It is critical that `watermark` precedes `messageCid` to ensure that when the sync
|
|
374
|
+
// jobs are pulled off the queue, they are lexographically sorted oldest to newest.
|
|
375
|
+
//
|
|
376
|
+
// `protocol` and `delegateDid` may be undefined, which is fine, its part of the key will be stored as an empty string.
|
|
377
|
+
// Later, when parsing the key, we will handle this case and return an actual undefined.
|
|
378
|
+
// This is information useful for subset and delegated sync.
|
|
379
|
+
return [did, delegateDid, dwnUrl, protocol, watermark, messageCid].join('~');
|
|
380
|
+
}
|
|
381
|
+
static parseSyncMessageParamsKey(key) {
|
|
382
|
+
// The order is import here, see `generateKey` for more information.
|
|
383
|
+
const [did, delegateDidString, dwnUrl, protocolString, watermark, messageCid] = key.split('~');
|
|
384
|
+
// `protocol` or `delegateDid` may be parsed as an empty string, so we need to handle that case and returned an actual undefined.
|
|
385
|
+
const protocol = protocolString === '' ? undefined : protocolString;
|
|
386
|
+
const delegateDid = delegateDidString === '' ? undefined : delegateDidString;
|
|
387
|
+
return { did, delegateDid, dwnUrl, watermark, messageCid, protocol };
|
|
388
|
+
}
|
|
389
|
+
getDwnEventLog({ did, delegateDid, dwnUrl, syncDirection, cursor, protocol }) {
|
|
390
|
+
var _a;
|
|
391
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
392
|
+
let messagesReply = {};
|
|
393
|
+
let permissionGrantId;
|
|
394
|
+
if (delegateDid) {
|
|
395
|
+
// fetch the grants for the delegate DID
|
|
396
|
+
try {
|
|
397
|
+
const messagesQueryGrant = yield this._permissionsApi.getPermissionForRequest({
|
|
398
|
+
connectedDid: did,
|
|
399
|
+
messageType: DwnInterface.MessagesQuery,
|
|
400
|
+
delegateDid,
|
|
401
|
+
protocol,
|
|
402
|
+
cached: true
|
|
403
|
+
});
|
|
404
|
+
permissionGrantId = messagesQueryGrant.grant.id;
|
|
405
|
+
}
|
|
406
|
+
catch (error) {
|
|
407
|
+
console.error('SyncEngineLevel: Error fetching MessagesQuery permission grant for delegate DID', error);
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
if (syncDirection === 'pull') {
|
|
412
|
+
// filter for a specific protocol if one is provided
|
|
413
|
+
const filters = protocol ? [{ protocol }] : [];
|
|
414
|
+
// When sync is a pull, get the event log from the remote DWN.
|
|
415
|
+
const messagesQueryMessage = yield this.agent.dwn.processRequest({
|
|
416
|
+
store: false,
|
|
417
|
+
target: did,
|
|
418
|
+
author: did,
|
|
419
|
+
messageType: DwnInterface.MessagesQuery,
|
|
420
|
+
granteeDid: delegateDid,
|
|
421
|
+
messageParams: { filters, cursor, permissionGrantId }
|
|
422
|
+
});
|
|
423
|
+
try {
|
|
424
|
+
messagesReply = (yield this.agent.rpc.sendDwnRequest({
|
|
425
|
+
dwnUrl: dwnUrl,
|
|
426
|
+
targetDid: did,
|
|
427
|
+
message: messagesQueryMessage.message,
|
|
428
|
+
}));
|
|
429
|
+
}
|
|
430
|
+
catch (_b) {
|
|
431
|
+
// If a particular DWN service endpoint is unreachable, silently ignore.
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
else if (syncDirection === 'push') {
|
|
435
|
+
const filters = protocol ? [{ protocol }] : [];
|
|
436
|
+
// When sync is a push, get the event log from the local DWN.
|
|
437
|
+
const messagesQueryDwnResponse = yield this.agent.dwn.processRequest({
|
|
438
|
+
author: did,
|
|
439
|
+
target: did,
|
|
440
|
+
messageType: DwnInterface.MessagesQuery,
|
|
441
|
+
granteeDid: delegateDid,
|
|
442
|
+
messageParams: { filters, cursor, permissionGrantId }
|
|
443
|
+
});
|
|
444
|
+
messagesReply = messagesQueryDwnResponse.reply;
|
|
445
|
+
}
|
|
446
|
+
const eventLog = (_a = messagesReply.entries) !== null && _a !== void 0 ? _a : [];
|
|
447
|
+
if (messagesReply.cursor) {
|
|
448
|
+
this.setCursor(did, dwnUrl, syncDirection, messagesReply.cursor, protocol);
|
|
449
|
+
}
|
|
450
|
+
return eventLog;
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
getDwnMessage({ author, delegateDid, protocol, messageCid }) {
|
|
454
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
455
|
+
let permissionGrantId;
|
|
456
|
+
if (delegateDid) {
|
|
457
|
+
try {
|
|
458
|
+
const messagesReadGrant = yield this._permissionsApi.getPermissionForRequest({
|
|
459
|
+
connectedDid: author,
|
|
460
|
+
messageType: DwnInterface.MessagesRead,
|
|
461
|
+
delegateDid,
|
|
462
|
+
protocol,
|
|
463
|
+
cached: true
|
|
464
|
+
});
|
|
465
|
+
permissionGrantId = messagesReadGrant.grant.id;
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
console.error('SyncEngineLevel: push - Error fetching MessagesRead permission grant for delegate DID', error);
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
let { reply } = yield this.agent.dwn.processRequest({
|
|
473
|
+
author: author,
|
|
474
|
+
target: author,
|
|
475
|
+
messageType: DwnInterface.MessagesRead,
|
|
476
|
+
granteeDid: delegateDid,
|
|
477
|
+
messageParams: { messageCid, permissionGrantId }
|
|
478
|
+
});
|
|
479
|
+
// Absence of a messageEntry or message within messageEntry can happen because updating a
|
|
480
|
+
// Record creates another RecordsWrite with the same recordId. Only the first and
|
|
481
|
+
// most recent RecordsWrite messages are kept for a given recordId. Any RecordsWrite messages
|
|
482
|
+
// that aren't the first or most recent are discarded by the DWN.
|
|
483
|
+
if (reply.status.code !== 200 || !reply.entry) {
|
|
484
|
+
return undefined;
|
|
485
|
+
}
|
|
486
|
+
const messageEntry = reply.entry;
|
|
487
|
+
let dwnMessageWithBlob = { message: messageEntry.message };
|
|
488
|
+
// If the message is a RecordsWrite, either data will be present,
|
|
489
|
+
// OR we have to fetch it using a RecordsRead.
|
|
490
|
+
if (isRecordsWrite(messageEntry) && messageEntry.data) {
|
|
491
|
+
const dataBytes = yield NodeStream.consumeToBytes({ readable: messageEntry.data });
|
|
492
|
+
dwnMessageWithBlob.data = new Blob([dataBytes], { type: messageEntry.message.descriptor.dataFormat });
|
|
493
|
+
}
|
|
494
|
+
return dwnMessageWithBlob;
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
getSyncPeerState({ syncDirection }) {
|
|
498
|
+
var _a, e_1, _b, _c;
|
|
499
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
500
|
+
// Array to accumulate the list of sync peers for each DID.
|
|
501
|
+
const syncPeerState = [];
|
|
502
|
+
try {
|
|
503
|
+
// iterate over all registered identities
|
|
504
|
+
for (var _d = true, _e = __asyncValues(this._db.sublevel('registeredIdentities').iterator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
505
|
+
_c = _f.value;
|
|
506
|
+
_d = false;
|
|
507
|
+
const [did, options] = _c;
|
|
508
|
+
const { protocols, delegateDid } = yield new Promise((resolve) => {
|
|
509
|
+
try {
|
|
510
|
+
const { protocols, delegateDid } = JSON.parse(options);
|
|
511
|
+
resolve({ protocols, delegateDid });
|
|
512
|
+
}
|
|
513
|
+
catch (error) {
|
|
514
|
+
resolve({ protocols: [] });
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
// First, confirm the DID can be resolved and extract the DWN service endpoint URLs.
|
|
518
|
+
const dwnEndpointUrls = yield getDwnServiceEndpointUrls(did, this.agent.did);
|
|
519
|
+
if (dwnEndpointUrls.length === 0) {
|
|
520
|
+
// Silently ignore and do not try to perform Sync for any DID that does not have a DWN
|
|
521
|
+
// service endpoint published in its DID document.
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
// Get the cursor (or undefined) for each (DID, DWN service endpoint, sync direction)
|
|
525
|
+
// combination and add it to the sync peer state array.
|
|
526
|
+
for (let dwnUrl of dwnEndpointUrls) {
|
|
527
|
+
if (protocols.length === 0) {
|
|
528
|
+
const cursor = yield this.getCursor(did, dwnUrl, syncDirection);
|
|
529
|
+
syncPeerState.push({ did, delegateDid, dwnUrl, cursor });
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
for (const protocol of protocols) {
|
|
533
|
+
const cursor = yield this.getCursor(did, dwnUrl, syncDirection, protocol);
|
|
534
|
+
syncPeerState.push({ did, delegateDid, dwnUrl, cursor, protocol });
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
541
|
+
finally {
|
|
542
|
+
try {
|
|
543
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
544
|
+
}
|
|
545
|
+
finally { if (e_1) throw e_1.error; }
|
|
546
|
+
}
|
|
547
|
+
return syncPeerState;
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
getCursor(did, dwnUrl, direction, protocol) {
|
|
551
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
552
|
+
// if a protocol is provided, we append it to the key
|
|
553
|
+
const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :
|
|
554
|
+
`${did}~${dwnUrl}~${direction}`;
|
|
555
|
+
const cursorsStore = this.getCursorStore();
|
|
556
|
+
try {
|
|
557
|
+
const cursorValue = yield cursorsStore.get(cursorKey);
|
|
558
|
+
if (cursorValue) {
|
|
559
|
+
return JSON.parse(cursorValue);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
catch (error) {
|
|
563
|
+
// Don't throw when a key wasn't found.
|
|
564
|
+
if (error.notFound) {
|
|
565
|
+
return undefined;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
setCursor(did, dwnUrl, direction, cursor, protocol) {
|
|
571
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
572
|
+
const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :
|
|
573
|
+
`${did}~${dwnUrl}~${direction}`;
|
|
574
|
+
const cursorsStore = this.getCursorStore();
|
|
575
|
+
yield cursorsStore.put(cursorKey, JSON.stringify(cursor));
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* The message store is used to prevent "echoes" that occur during a sync pull operation.
|
|
580
|
+
* After a message is confirmed to already be synchronized on the local DWN, its CID is added
|
|
581
|
+
* to the message store to ensure that any subsequent pull attempts are skipped.
|
|
582
|
+
*/
|
|
583
|
+
messageExists(did, messageCid) {
|
|
584
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
585
|
+
const messageStore = this.getMessageStore(did);
|
|
586
|
+
// If the `messageCid` exists in this DID's store, return true. Otherwise, return false.
|
|
587
|
+
try {
|
|
588
|
+
yield messageStore.get(messageCid);
|
|
589
|
+
return true;
|
|
590
|
+
}
|
|
591
|
+
catch (error) {
|
|
592
|
+
if (error.notFound) {
|
|
593
|
+
return false;
|
|
594
|
+
}
|
|
595
|
+
throw error;
|
|
596
|
+
}
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
addMessage(did, messageCid) {
|
|
600
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
601
|
+
const messageStore = this.getMessageStore(did);
|
|
602
|
+
return yield messageStore.put(messageCid, '');
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
getMessageStore(did) {
|
|
606
|
+
return this._db.sublevel('history').sublevel(did).sublevel('messages');
|
|
607
|
+
}
|
|
608
|
+
getCursorStore() {
|
|
609
|
+
return this._db.sublevel('cursors');
|
|
610
|
+
}
|
|
611
|
+
getPushQueue() {
|
|
612
|
+
return this._db.sublevel('pushQueue');
|
|
613
|
+
}
|
|
614
|
+
getPullQueue() {
|
|
615
|
+
return this._db.sublevel('pullQueue');
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
//# sourceMappingURL=sync-engine-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-engine-level.js","sourceRoot":"","sources":["../../src/sync-engine-level.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAUA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA8B3D,MAAM,OAAO,eAAe;IAYc,CAAC;IAOzC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAyB;QAHlD,cAAS,GAAG,KAAK,CAAC;QAIxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAkB,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAiB,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,uBAAuB,CAAC,CAAC;QACtF,IAAI,CAAC,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;SAClF;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,KAAwB;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAkB,EAAE,CAAC,CAAC;IAChF,CAAC;IAEY,KAAK;;YAChB,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KAAA;IAEY,KAAK;;YAChB,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KAAA;IAEa,IAAI;;;YAChB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAEvE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;YAElD,MAAM,gBAAgB,GAA0B,EAAE,CAAC;YACnD,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;YAEvC,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;gBAC1G,wFAAwF;gBACxF,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBACvB,SAAS;iBACV;gBAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAChE,IAAI,aAAa,EAAE;oBACjB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjD,SAAS;iBACV;gBAED,IAAI,iBAAqC,CAAC;gBAC1C,IAAI,UAA8B,CAAC;gBACnC,IAAI,WAAW,EAAE;oBACf,IAAI;wBACF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC;4BAC3E,YAAY,EAAG,GAAG;4BAClB,WAAW,EAAI,YAAY,CAAC,YAAY;4BACxC,WAAW;4BACX,QAAQ;4BACR,MAAM,EAAS,IAAI;yBACpB,CAAC,CAAC;wBAEH,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC/C,UAAU,GAAG,WAAW,CAAC;qBAC1B;oBAAC,OAAM,KAAS,EAAE;wBACjB,OAAO,CAAC,KAAK,CAAC,uFAAuF,EAAE,KAAK,CAAC,CAAC;wBAC9G,SAAS;qBACV;iBACF;gBAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;oBACtD,KAAK,EAAW,KAAK;oBACrB,MAAM,EAAU,GAAG;oBACnB,MAAM,EAAU,GAAG;oBACnB,WAAW,EAAK,YAAY,CAAC,YAAY;oBACzC,UAAU;oBACV,aAAa,EAAG;wBACd,UAAU;wBACV,iBAAiB;qBAClB;iBACF,CAAC,CAAC;gBAEH,IAAI,KAAwB,CAAC;gBAE7B,IAAI;oBACF,KAAK,IAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;wBAC1C,MAAM,EAAW,SAAS,EAAG,GAAG;wBAChC,OAAO,EAAK,YAAY,CAAC,OAAO;qBACjC,CAAsB,CAAA,CAAC;iBACzB;gBAAC,OAAM,CAAC,EAAE;oBACT,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpB,SAAS;iBACV;gBAED,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,CAAA,EAAE;oBACtD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBACvC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjD,SAAS;iBACV;gBAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBACnC,uEAAuE;gBACvE,yEAAyE;gBACzE,+EAA+E;gBAC/E,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;oBAChE,UAAU,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,IAAiC,EAAE,CAAC;oBAC5F,CAAC,CAAC,SAAS,CAAC;gBAEd,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,UAAiB,EAAE,CAAC,CAAC;gBAC5G,IAAI,eAAe,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE;oBAC3D,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBACvC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;iBAClD;aACF;YAED,MAAM,SAAS,CAAC,KAAK,CAAC,gBAAuB,CAAC,CAAC;;KAChD;IAEa,IAAI;;YAChB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAEvE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;YAElD,MAAM,gBAAgB,GAA0B,EAAE,CAAC;YACnD,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;YAEvC,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;gBAC1G,wFAAwF;gBACxF,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;oBACvB,SAAS;iBACV;gBAED,sDAAsD;gBACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEhG,qFAAqF;gBACrF,uFAAuF;gBACvF,oEAAoE;gBACpE,IAAI,CAAC,UAAU,EAAE;oBACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBAEvC,SAAS;iBACV;gBAED,IAAI;oBACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;wBAChD,MAAM;wBACN,SAAS,EAAG,GAAG;wBACf,IAAI,EAAQ,UAAU,CAAC,IAAI;wBAC3B,OAAO,EAAK,UAAU,CAAC,OAAO;qBAC/B,CAAC,CAAC;oBAEH,mFAAmF;oBACnF,IAAI,eAAe,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;wBACvD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;wBACvC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;qBAClD;iBACF;gBAAC,WAAM;oBACN,0EAA0E;oBAC1E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBACrB;aACF;YAED,MAAM,SAAS,CAAC,KAAK,CAAC,gBAAuB,CAAC,CAAC;QACjD,CAAC;KAAA;IAEY,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAkD;;YAC5F,0DAA0D;YAC1D,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,yBAAyB,CAAC,CAAC;aACrF;YAED,2FAA2F;YAC3F,OAAO,aAAP,OAAO,cAAP,OAAO,IAAP,OAAO,GAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAC;YAE9B,8EAA8E;YAC9E,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEY,kBAAkB,CAAC,GAAW;;YACzC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,qBAAqB,CAAC,CAAC;aACjF;YAED,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;KAAA;IAEY,kBAAkB,CAAC,GAAW;;YACzC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACvE,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpD,IAAI,OAAO,EAAE;oBACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;iBACnD;aACF;YAAC,OAAM,KAAK,EAAE;gBACb,MAAM,CAAC,GAAG,KAAyB,CAAC;gBACpC,wFAAwF;gBACxF,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBAChC,OAAO;iBACR;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;iBACrE;aACF;QACH,CAAC;KAAA;IAEY,qBAAqB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAiD;;YAChG,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,eAAe,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,qBAAqB,CAAC,CAAC;aACjF;YAED,MAAM,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEY,IAAI,CAAC,SAA2B;;YAC3C,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;aAC5E;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI;gBACF,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE;oBACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;iBACnB;gBACD,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE;oBACtC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;iBACnB;aACF;oBAAS;gBACR,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB;QACH,CAAC;KAAA;IAEY,SAAS,CAAC,EAAE,QAAQ,EAEhC;;YACC,+CAA+C;YAC/C,MAAM,oBAAoB,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;YAE1C,MAAM,YAAY,GAAG,GAAS,EAAE;gBAC9B,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,OAAO;iBACR;gBAED,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBAEjC,IAAI;oBACF,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;iBACnB;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;iBACtE;gBAED,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;oBACzB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;iBACxE;YACH,CAAC,CAAA,CAAC;YAEF,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aACrC;YAED,yBAAyB;YACzB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;YAEvE,6BAA6B;YAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;aACnB;QACH,CAAC;KAAA;IAED;;;OAGG;IACU,QAAQ,CAAC,UAAkB,IAAI;;YAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;YAEvB,OAAM,IAAI,CAAC,SAAS,EAAE;gBACpB,IAAI,cAAc,IAAI,OAAO,EAAE;oBAC7B,MAAM,IAAI,KAAK,CAAC,oEAAoE,OAAO,gBAAgB,CAAC,CAAC;iBAC9G;gBAED,cAAc,IAAI,GAAG,CAAC;gBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACpF;YAED,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;aAClC;QACH,CAAC;KAAA;IAED;;;;;OAKG;IACK,MAAM,CAAC,4BAA4B,CAAC,KAAwB;;QAClE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG;YAC9B,gFAAgF;YAChF,4FAA4F;YAC5F,oEAAoE;YACpE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG;YACzB,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG;YACzB;YACE,2IAA2I;YAC3I,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,CAAC,UAAU,CAAC,SAAS,MAAK,gBAAgB,CAAC,OAAO;gBACtE,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,CAAC,UAAU,CAAC,MAAM,MAAK,aAAa,CAAC,MAAM;gBAC/D,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAC1B,CAAC;IACN,CAAC;IAEa,iBAAiB,CAAC,EAAE,aAAa,EAAE,aAAa,EAG7D;;YACC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;gBAChF,iFAAiF;gBACjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;oBACzC,GAAG,EAAW,SAAS,CAAC,GAAG;oBAC3B,WAAW,EAAG,SAAS,CAAC,WAAW;oBACnC,MAAM,EAAQ,SAAS,CAAC,MAAM;oBAC9B,MAAM,EAAQ,SAAS,CAAC,MAAM;oBAC9B,QAAQ,EAAM,SAAS,CAAC,QAAQ;oBAChC,aAAa;iBACd,CAAC,CAAC;gBAEH,MAAM,cAAc,GAA0B,EAAE,CAAC;gBAEjD,KAAK,IAAI,UAAU,IAAI,QAAQ,EAAE;oBAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtC,MAAM,YAAY,GAAG,eAAe,CAAC,4BAA4B,iCAC5D,SAAS,KACZ,SAAS;wBACT,UAAU,IACV,CAAC;oBAEH,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;iBACpE;gBAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,MAAM,SAAS,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;wBAC1C,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;wBACrB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACxB,MAAM,SAAS,CAAC,KAAK,CAAC,cAAqB,CAAC,CAAC;iBAC9C;YACH,CAAC,CAAA,CAAC,CAAC,CAAC;YAEJ,4DAA4D;YAC5D,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACnC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;oBAChC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;oBACvC,OAAO,CAAC,KAAK,CAAC,kEAAkE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC7H;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEO,MAAM,CAAC,4BAA4B,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAoB;QACzH,sEAAsE;QACtE,2FAA2F;QAC3F,yFAAyF;QACzF,EAAE;QACF,8HAA8H;QAC9H,+FAA+F;QAC/F,mEAAmE;QACnE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChF,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,GAAW;QAClD,oEAAoE;QACpE,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/F,iIAAiI;QACjI,MAAM,QAAQ,GAAG,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;QACpE,MAAM,WAAW,GAAG,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC7E,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvE,CAAC;IAEa,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAOvF;;;YACC,IAAI,aAAa,GAAG,EAAwB,CAAC;YAC7C,IAAI,iBAAqC,CAAC;YAC1C,IAAI,WAAW,EAAE;gBACf,wCAAwC;gBACxC,IAAI;oBACF,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC;wBAC5E,YAAY,EAAG,GAAG;wBAClB,WAAW,EAAI,YAAY,CAAC,aAAa;wBACzC,WAAW;wBACX,QAAQ;wBACR,MAAM,EAAS,IAAI;qBACpB,CAAC,CAAC;oBAEH,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;iBACjD;gBAAC,OAAM,KAAS,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,iFAAiF,EAAE,KAAK,CAAC,CAAC;oBACxG,OAAO,EAAE,CAAC;iBACX;aACF;YAED,IAAI,aAAa,KAAK,MAAM,EAAE;gBAC5B,oDAAoD;gBACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,8DAA8D;gBAC9D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;oBAC/D,KAAK,EAAW,KAAK;oBACrB,MAAM,EAAU,GAAG;oBACnB,MAAM,EAAU,GAAG;oBACnB,WAAW,EAAK,YAAY,CAAC,aAAa;oBAC1C,UAAU,EAAM,WAAW;oBAC3B,aAAa,EAAG,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE;iBACvD,CAAC,CAAC;gBAEH,IAAI;oBACF,aAAa,IAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;wBAClD,MAAM,EAAM,MAAM;wBAClB,SAAS,EAAG,GAAG;wBACf,OAAO,EAAK,oBAAoB,CAAC,OAAO;qBACzC,CAAuB,CAAA,CAAC;iBAC1B;gBAAC,WAAM;oBACN,wEAAwE;iBACzE;aAEF;iBAAM,IAAI,aAAa,KAAK,MAAM,EAAE;gBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,6DAA6D;gBAC7D,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;oBACnE,MAAM,EAAU,GAAG;oBACnB,MAAM,EAAU,GAAG;oBACnB,WAAW,EAAK,YAAY,CAAC,aAAa;oBAC1C,UAAU,EAAM,WAAW;oBAC3B,aAAa,EAAG,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE;iBACvD,CAAC,CAAC;gBACH,aAAa,GAAG,wBAAwB,CAAC,KAA2B,CAAC;aACtE;YAED,MAAM,QAAQ,GAAG,MAAA,aAAa,CAAC,OAAO,mCAAI,EAAE,CAAC;YAC7C,IAAI,aAAa,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC5E;YAED,OAAO,QAAQ,CAAC;;KACjB;IAEa,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAKtE;;YACC,IAAI,iBAAqC,CAAC;YAC1C,IAAI,WAAW,EAAE;gBACf,IAAI;oBACF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC;wBAC3E,YAAY,EAAG,MAAM;wBACrB,WAAW,EAAI,YAAY,CAAC,YAAY;wBACxC,WAAW;wBACX,QAAQ;wBACR,MAAM,EAAS,IAAI;qBACpB,CAAC,CAAC;oBAEH,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;iBAChD;gBAAC,OAAM,KAAS,EAAE;oBACjB,OAAO,CAAC,KAAK,CAAC,uFAAuF,EAAE,KAAK,CAAC,CAAC;oBAC9G,OAAO;iBACR;aACF;YAED,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;gBAClD,MAAM,EAAU,MAAM;gBACtB,MAAM,EAAU,MAAM;gBACtB,WAAW,EAAK,YAAY,CAAC,YAAY;gBACzC,UAAU,EAAM,WAAW;gBAC3B,aAAa,EAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE;aAClD,CAAC,CAAC;YAGH,yFAAyF;YACzF,iFAAiF;YACjF,6FAA6F;YAC7F,iEAAiE;YACjE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC7C,OAAO,SAAS,CAAC;aAClB;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAM,CAAC;YAElC,IAAI,kBAAkB,GAA6C,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC;YAErG,iEAAiE;YACjE,8CAA8C;YAC9C,IAAI,cAAc,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE;gBACrD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnF,kBAAkB,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAE,SAAS,CAAE,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;aACzG;YAED,OAAO,kBAAkB,CAAC;QAC5B,CAAC;KAAA;IAEa,gBAAgB,CAAC,EAAE,aAAa,EAE7C;;;YAEC,2DAA2D;YAC3D,MAAM,aAAa,GAAgB,EAAE,CAAC;;gBAEtC,yCAAyC;gBACzC,KAAqC,eAAA,KAAA,cAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE,CAAA,IAAA,sDAAE;oBAAtD,cAAoD;oBAApD,WAAoD;oBAA9E,MAAM,CAAE,GAAG,EAAE,OAAO,CAAE,KAAA,CAAA;oBAE/B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,EAAE;wBACpF,IAAI;4BACF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;4BAC9E,OAAO,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;yBACrC;wBAAC,OAAM,KAAU,EAAE;4BAClB,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;yBAC5B;oBACH,CAAC,CAAC,CAAC;oBAEH,oFAAoF;oBACpF,MAAM,eAAe,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7E,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;wBAChC,sFAAsF;wBACtF,kDAAkD;wBAClD,SAAS;qBACV;oBAED,qFAAqF;oBACrF,uDAAuD;oBACvD,KAAK,IAAI,MAAM,IAAI,eAAe,EAAE;wBAClC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;4BAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;4BAChE,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;yBAC1D;6BAAM;4BACL,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gCAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;gCAC1E,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;6BACpE;yBACF;qBACF;iBACF;;;;;;;;;YAED,OAAO,aAAa,CAAC;;KACtB;IAEa,SAAS,CAAC,GAAW,EAAE,MAAc,EAAE,SAAwB,EAAE,QAAiB;;YAE9F,qDAAqD;YACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACxE,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YAElC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI;gBACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,IAAI,WAAW,EAAE;oBACf,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAqB,CAAC;iBACpD;aACF;YAAC,OAAM,KAAU,EAAE;gBAClB,uCAAuC;gBACvC,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB,OAAO,SAAS,CAAC;iBAClB;aACF;QACH,CAAC;KAAA;IAEa,SAAS,CAAC,GAAW,EAAE,MAAc,EAAE,SAAwB,EAAE,MAAwB,EAAE,QAAiB;;YACxH,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACxE,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,MAAM,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;KAAA;IAED;;;;OAIG;IACW,aAAa,CAAC,GAAW,EAAE,UAAkB;;YACzD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE/C,wFAAwF;YACxF,IAAI;gBACF,MAAM,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,KAAU,EAAE;gBACnB,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB,OAAO,KAAK,CAAC;iBACd;gBACD,MAAM,KAAK,CAAC;aACb;QACH,CAAC;KAAA;IAEa,UAAU,CAAC,GAAW,EAAE,UAAkB;;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE/C,OAAO,MAAM,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;KAAA;IAEO,eAAe,CAAC,GAAW;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzE,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;CACF"}
|