{ "configuration": {}, "description": "Description", "documentation": { "sections": [ { "content": "## File Hierarchy\n", "filename": "file_hierarchy.md", "format": "Markdown", "order": 1, "title": "" }, { "content": "## Perspectives\n\n### Security\n\nHighlights models and relationships identified as a part of [threat modeling](https://www.threatmodelingmanifesto.org/).\n\nIdentified threats are expected to be itemized in the perspective description, tagged with an appropriate `Security: threat` tag, and include a `!docs` property that describes the threat and mitigations. [`-> (relationships)`](https://docs.structurizr.com/dsl/language#relationship) do not allow for a `!docs` property, so a `url` property is used instead, linking to the appropriate section of the published docs.\n\n#### Example Model or Relationship\n\n##### Example Threat\n\n- **Type**: type\n- **Priority**: TBD/Low/Medium/High/Critical\n- **Likelihood**: TBD/Low/Medium/High/Critical\n- **Impact**: TBD/Low/Medium/High/Critical\n\ndescription of the threat.\n\n###### Example Threat Mitigations\n\ndescribe the mitigations for the threat and whether or not they are complete\n\n### SRE\n\nHighlights concerns and requirements for cloud deployments.\n", "filename": "perspectives.md", "format": "Markdown", "order": 2, "title": "" }, { "content": "## Tags\n\n### Admin\n\n### API\n\n### Auth\n\n### Azure\n\n### Billing\n\n### Bitwarden Employee\n\n### Browser\n\n### CLI\n\n### Cloud Host Requirement\n\n### Database\n\n### Desktop\n\n### Directory\n\n### Events\n\n### External\n\n### HealthCheck\n\n### Icons\n\n### LDAP\n\n### MSP\n\n### Mobile\n\n### Queue\n\n### SCIM\n\n### Security:Privacy\n\n### Self-Hosted\n\n### Web\n", "filename": "tags.md", "format": "Markdown", "order": 3, "title": "" } ] }, "id": 1, "lastModifiedAgent": "structurizr-ui", "lastModifiedDate": "2025-07-28T21:38:09Z", "model": { "people": [ { "description": "An end user of the Bitwarden System", "id": "1", "location": "Unspecified", "name": "Bitwarden User", "properties": { "structurizr.dsl.identifier": "user" }, "relationships": [ { "description": "Uses", "destinationId": "10", "id": "42", "sourceId": "1", "tags": "Relationship" }, { "description": "Uses", "destinationId": "9", "id": "43", "linkedRelationshipId": "42", "sourceId": "1" }, { "description": "Uses", "destinationId": "11", "id": "44", "sourceId": "1", "tags": "Relationship" }, { "description": "Uses", "destinationId": "12", "id": "45", "sourceId": "1", "tags": "Relationship" }, { "description": "Uses", "destinationId": "13", "id": "46", "sourceId": "1", "tags": "Relationship" } ], "tags": "Element,Person" }, { "description": "Either a Bitwarden site-reliability engineer or administrator of a self-hosted instance", "id": "2", "location": "Unspecified", "name": "System Admin", "properties": { "structurizr.dsl.identifier": "system_admin" }, "tags": "Element,Person,Bitwarden Employee,Self-Host Admin" }, { "description": "A customer success engineer. Inspects bitwarden state through the admin portal and internal tools", "group": "Bitwarden Controlled", "id": "3", "location": "Unspecified", "name": "Customer Success", "properties": { "structurizr.dsl.identifier": "customer_success" }, "tags": "Element,Person,Bitwarden Employee" }, { "description": "An administrator of an organization", "id": "17", "location": "Unspecified", "name": "Organization Admin", "properties": { "structurizr.dsl.identifier": "admin" }, "relationships": [ { "description": "Administers Organizations", "destinationId": "10", "id": "47", "sourceId": "17", "tags": "Relationship" }, { "description": "Administers Organizations", "destinationId": "9", "id": "48", "linkedRelationshipId": "47", "sourceId": "17" } ], "tags": "Element,Person,Admin" }, { "description": "And employee of a managed service provider", "id": "18", "location": "Unspecified", "name": "MSP", "properties": { "structurizr.dsl.identifier": "provider" }, "relationships": [ { "description": "Administers Providers and Organizations", "destinationId": "10", "id": "49", "sourceId": "18", "tags": "Relationship" }, { "description": "Administers Providers and Organizations", "destinationId": "9", "id": "50", "linkedRelationshipId": "49", "sourceId": "18" } ], "tags": "Element,Person,MSP" } ], "properties": { "structurizr.groupSeparator": "/" }, "softwareSystems": [ { "containers": [ { "components": [ { "documentation": {}, "id": "6", "name": "Billing", "properties": { "structurizr.dsl.identifier": "server.api.billing" }, "tags": "Element,Component,Billing" } ], "documentation": {}, "id": "5", "name": "API", "properties": { "structurizr.dsl.identifier": "server.api" }, "relationships": [ { "description": "Validates JWTs with", "destinationId": "19", "id": "65", "sourceId": "5", "tags": "Relationship", "url": "https://bitwarden.com" } ], "tags": "Element,Container,API" }, { "documentation": {}, "id": "7", "name": "Events", "properties": { "structurizr.dsl.identifier": "server.events" }, "tags": "Element,Container,Events" }, { "documentation": {}, "id": "8", "name": "Notifications", "properties": { "structurizr.dsl.identifier": "server.notifications" }, "tags": "Element,Container" }, { "documentation": {}, "id": "19", "name": "Identity", "properties": { "structurizr.dsl.identifier": "server.identity" }, "tags": "Element,Container,Auth" }, { "description": "The Icons service provides favicons for websites.", "documentation": {}, "id": "38", "name": "Icons", "properties": { "structurizr.dsl.identifier": "server.icons" }, "tags": "Element,Container" } ], "documentation": {}, "group": "Bitwarden Controlled", "id": "4", "location": "Unspecified", "name": "Bitwarden Server", "properties": { "structurizr.dsl.identifier": "server" }, "tags": "Element,Software System" }, { "containers": [ { "documentation": {}, "id": "10", "name": "Web Application", "properties": { "structurizr.dsl.identifier": "clients.web" }, "relationships": [ { "description": "Makes requests to", "destinationId": "5", "id": "51", "sourceId": "10", "tags": "Relationship" }, { "description": "Makes requests to", "destinationId": "4", "id": "52", "linkedRelationshipId": "51", "sourceId": "10" }, { "description": "Authenticates with", "destinationId": "19", "id": "60", "sourceId": "10", "tags": "Relationship" } ], "tags": "Element,Container,Web" }, { "documentation": {}, "id": "11", "name": "Browser Extension", "properties": { "structurizr.dsl.identifier": "clients.browser_extension" }, "relationships": [ { "description": "Connects to IPC to request biometric authentication", "destinationId": "24", "id": "28", "sourceId": "11", "tags": "Relationship" }, { "description": "Connects to IPC to request biometric authentication", "destinationId": "13", "id": "29", "linkedRelationshipId": "28", "sourceId": "11" }, { "description": "Makes requests to", "destinationId": "5", "id": "54", "sourceId": "11", "tags": "Relationship" }, { "description": "Makes requests to", "destinationId": "4", "id": "55", "linkedRelationshipId": "54", "sourceId": "11" }, { "description": "Authenticates With", "destinationId": "19", "id": "62", "sourceId": "11", "tags": "Relationship" } ], "tags": "Element,Container,Browser" }, { "documentation": {}, "id": "12", "name": "CLI", "properties": { "structurizr.dsl.identifier": "clients.cli" }, "relationships": [ { "description": "Makes requests to", "destinationId": "5", "id": "56", "sourceId": "12", "tags": "Relationship" }, { "description": "Makes requests to", "destinationId": "4", "id": "57", "linkedRelationshipId": "56", "sourceId": "12" }, { "description": "Authenticates With", "destinationId": "19", "id": "63", "sourceId": "12", "tags": "Relationship" } ], "tags": "Element,Container,CLI" }, { "components": [ { "description": "Handles biometric authentication for the Bitwarden desktop application.", "documentation": {}, "id": "22", "name": "Biometric Authentication", "properties": { "structurizr.dsl.identifier": "clients.desktop.biometric" }, "relationships": [ { "description": "Read/Write user keys", "destinationId": "23", "id": "31", "sourceId": "22", "tags": "Relationship", "technology": "Napi Rust FFI" }, { "description": "Requests user verification for biometric authentication", "destinationId": "26", "id": "35", "sourceId": "22", "tags": "Relationship" } ], "tags": "Element,Component" }, { "description": "CRUD operations on keys-values stored by the OS.", "documentation": {}, "id": "23", "name": "OS Password Management Native Module", "properties": { "structurizr.dsl.identifier": "clients.desktop.password" }, "relationships": [ { "description": "CRUD operations on keys stored in the OS secure storage", "destinationId": "25", "id": "32", "sourceId": "23", "tags": "Relationship" } ], "tags": "Element,Component", "technology": "rust module" }, { "description": "Inter-process communication between the desktop application and the browser extension.", "documentation": {}, "id": "24", "name": "IPC", "properties": { "structurizr.dsl.identifier": "clients.desktop.ipc" }, "relationships": [ { "description": "Relays biometric authentication requests to", "destinationId": "22", "id": "30", "sourceId": "24", "tags": "Relationship" } ], "tags": "Element,Component", "technology": "Sockets" } ], "documentation": {}, "id": "13", "name": "Desktop Application", "properties": { "structurizr.dsl.identifier": "clients.desktop" }, "relationships": [ { "description": "CRUD operations on keys stored in the OS secure storage", "destinationId": "25", "id": "33", "linkedRelationshipId": "32", "sourceId": "13" }, { "description": "Requests user verification for biometric authentication", "destinationId": "26", "id": "36", "linkedRelationshipId": "35", "sourceId": "13" }, { "description": "Makes requests to", "destinationId": "5", "id": "58", "sourceId": "13", "tags": "Relationship" }, { "description": "Makes requests to", "destinationId": "4", "id": "59", "linkedRelationshipId": "58", "sourceId": "13" }, { "description": "Authenticates With", "destinationId": "19", "id": "64", "sourceId": "13", "tags": "Relationship" } ], "tags": "Element,Container,Desktop" } ], "documentation": {}, "group": "Bitwarden Controlled", "id": "9", "location": "Unspecified", "name": "Clients", "properties": { "structurizr.dsl.identifier": "clients" }, "relationships": [ { "description": "CRUD operations on keys stored in the OS secure storage", "destinationId": "25", "id": "34", "linkedRelationshipId": "32", "sourceId": "9" }, { "description": "Requests user verification for biometric authentication", "destinationId": "26", "id": "37", "linkedRelationshipId": "35", "sourceId": "9" }, { "description": "Requests icons for cleartext urls from", "destinationId": "38", "id": "39", "sourceId": "9", "tags": "Relationship" }, { "description": "Requests icons for cleartext urls from", "destinationId": "4", "id": "40", "linkedRelationshipId": "39", "sourceId": "9" }, { "description": "Makes requests to", "destinationId": "5", "id": "53", "linkedRelationshipId": "51", "sourceId": "9" }, { "description": "Authenticates with", "destinationId": "19", "id": "61", "linkedRelationshipId": "60", "sourceId": "9" }, { "description": "Posts local usage events to", "destinationId": "7", "id": "66", "sourceId": "9", "tags": "Relationship" } ], "tags": "Element,Software System" }, { "documentation": {}, "group": "Bitwarden Controlled", "id": "14", "location": "Unspecified", "name": "Key Connector", "properties": { "structurizr.dsl.identifier": "key_connector" }, "relationships": [ { "description": "Validates JWTs with", "destinationId": "19", "id": "69", "sourceId": "14", "tags": "Relationship" }, { "description": "Validates JWTs with", "destinationId": "4", "id": "70", "linkedRelationshipId": "69", "sourceId": "14" } ], "tags": "Element,Software System" }, { "description": "Self-hosted instances of Bitwarden servers", "documentation": {}, "id": "15", "location": "Unspecified", "name": "Self-Hosted Instances", "properties": { "structurizr.dsl.identifier": "self_hosted_instances" }, "relationships": [ { "description": "Sends push notification proxy requests to", "destinationId": "8", "id": "67", "sourceId": "15", "tags": "Relationship" }, { "description": "Sends push notification proxy requests to", "destinationId": "4", "id": "68", "linkedRelationshipId": "67", "sourceId": "15" } ], "tags": "Element,Software System,Self-Hosted,External" }, { "documentation": {}, "id": "16", "location": "Unspecified", "name": "External Websites", "properties": { "structurizr.dsl.identifier": "external_websites" }, "tags": "Element,Software System,External,Icons" }, { "description": "Handles credit cards and subscriptions.", "documentation": {}, "group": "Payment Systems", "id": "20", "location": "Unspecified", "name": "Stripe", "properties": { "structurizr.dsl.identifier": "stripe" }, "tags": "Element,Software System,External,Billing" }, { "description": "Handles PayPal and cryptocurrency.", "documentation": {}, "group": "Payment Systems", "id": "21", "location": "Unspecified", "name": "Braintree", "properties": { "structurizr.dsl.identifier": "braintree" }, "tags": "Element,Software System,External,Billing" }, { "description": "The operating system's secure storage for sensitive data, such as Windows Credential Locker or macOS Keychain.", "documentation": {}, "id": "25", "location": "Unspecified", "name": "OS Secure Storage", "properties": { "structurizr.dsl.identifier": "os_secure_storage" }, "tags": "Element,Software System,External" }, { "description": "The operating system's user verification system, such as Windows Hello or macOS Touch ID.", "documentation": {}, "id": "26", "location": "Unspecified", "name": "OS User Verification", "properties": { "structurizr.dsl.identifier": "os_user_verification" }, "tags": "Element,Software System,External" }, { "description": "A Windows Hello signer that can be used to sign requests for the Bitwarden desktop application.", "documentation": {}, "id": "27", "location": "Unspecified", "name": "Windows Hello Signer", "properties": { "structurizr.dsl.identifier": "windows_hello_signer" }, "tags": "Element,Software System,External,Windows-Biometric" }, { "documentation": {}, "id": "41", "location": "Unspecified", "name": "DNS", "properties": { "structurizr.dsl.identifier": "dns" }, "tags": "Element,Software System,External,Icons" } ] }, "name": "Bitwarden Server System", "properties": { "structurizr.dsl": "d29ya3NwYWNlICJCaXR3YXJkZW4gU2VydmVyIFN5c3RlbSIgewoKICAhaWRlbnRpZmllcnMgaGllcmFyY2hpY2FsCgogICFkb2NzICJ1c2FnZV9kb2NzIgogIG1vZGVsIHsKICAgIHByb3BlcnRpZXMgewogICAgICAic3RydWN0dXJpenIuZ3JvdXBTZXBhcmF0b3IiICIvIgogICAgfQoKICAgICMgSW5jbHVkZSBzaGFyZWQgbGV2ZWwgbW9kZWxzCiAgICAjIFBlcnNvbiB0eXBlcwogICAgdXNlciA9IHBlcnNvbiAiQml0d2FyZGVuIFVzZXIiICJBbiBlbmQgdXNlciBvZiB0aGUgQml0d2FyZGVuIFN5c3RlbSIKICAgIHN5c3RlbV9hZG1pbiA9IHBlcnNvbiAiU3lzdGVtIEFkbWluIiAiRWl0aGVyIGEgQml0d2FyZGVuIHNpdGUtcmVsaWFiaWxpdHkgZW5naW5lZXIgb3IgYWRtaW5pc3RyYXRvciBvZiBhIHNlbGYtaG9zdGVkIGluc3RhbmNlIiB7CiAgICAgIHRhZ3MgIkJpdHdhcmRlbiBFbXBsb3llZSIgIlNlbGYtSG9zdCBBZG1pbiIKICAgIH0KICAgIAogICAgCiAgICBid19jb250cm9sbGVkID0gZ3JvdXAgIkJpdHdhcmRlbiBDb250cm9sbGVkIiB7CiAgICAgICMgQml0d2FyZGVuIHN0YWZmCiAgICAgIGN1c3RvbWVyX3N1Y2Nlc3MgPSBwZXJzb24gIkN1c3RvbWVyIFN1Y2Nlc3MiICJBIGN1c3RvbWVyIHN1Y2Nlc3MgZW5naW5lZXIuIEluc3BlY3RzIGJpdHdhcmRlbiBzdGF0ZSB0aHJvdWdoIHRoZSBhZG1pbiBwb3J0YWwgYW5kIGludGVybmFsIHRvb2xzIiB7CiAgICAgICAgdGFncyAiQml0d2FyZGVuIEVtcGxveWVlIgogICAgICB9CiAgICAgIAogICAgICAjIFJvb3Qgc3lzdGVtcwogICAgICBzZXJ2ZXIgPSBzb2Z0d2FyZVN5c3RlbSAiQml0d2FyZGVuIFNlcnZlciIgewogICAgICAgIGFwaSA9IGNvbnRhaW5lciAiQVBJIiB7CiAgICAgICAgICBiaWxsaW5nID0gY29tcG9uZW50ICJCaWxsaW5nIiB7CiAgICAgICAgICAgIHRhZ3MgIkJpbGxpbmciCiAgICAgICAgICB9CiAgICAgICAgICB0YWdzICJBUEkiCiAgICAgICAgfQogICAgICAgIGV2ZW50cyA9IGNvbnRhaW5lciAiRXZlbnRzIiB7CiAgICAgICAgICB0YWdzICJFdmVudHMiCiAgICAgICAgfQogICAgICAgIG5vdGlmaWNhdGlvbnMgPSBjb250YWluZXIgIk5vdGlmaWNhdGlvbnMiCiAgICAgIH0KICAgICAgY2xpZW50cyA9IHNvZnR3YXJlU3lzdGVtICJDbGllbnRzIiB7CiAgICAgICAgd2ViID0gY29udGFpbmVyICJXZWIgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIldlYiIKICAgICAgICB9CiAgICAgICAgYnJvd3Nlcl9leHRlbnNpb24gPSBjb250YWluZXIgIkJyb3dzZXIgRXh0ZW5zaW9uIiB7CiAgICAgICAgICB0YWdzICJCcm93c2VyIgogICAgICAgIH0KICAgICAgICBjbGkgPSBjb250YWluZXIgIkNMSSIgewogICAgICAgICAgdGFncyAiQ0xJIgogICAgICAgIH0KICAgICAgICBkZXNrdG9wID0gY29udGFpbmVyICJEZXNrdG9wIEFwcGxpY2F0aW9uIiB7CiAgICAgICAgICB0YWdzICJEZXNrdG9wIgogICAgICAgIH0KICAgICAgfQogICAgICBrZXlfY29ubmVjdG9yID0gc29mdHdhcmVTeXN0ZW0gIktleSBDb25uZWN0b3IiIAogICAgfQogICAgCiAgICBzZWxmX2hvc3RlZF9pbnN0YW5jZXMgPSBzb2Z0d2FyZVN5c3RlbSAiU2VsZi1Ib3N0ZWQgSW5zdGFuY2VzIiB7CiAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkIgogICAgICB0YWdzICJFeHRlcm5hbCIKICAgICAgZGVzY3JpcHRpb24gIlNlbGYtaG9zdGVkIGluc3RhbmNlcyBvZiBCaXR3YXJkZW4gc2VydmVycyIKICAgIH0KICAgIAogICAgZXh0ZXJuYWxfd2Vic2l0ZXMgPSBzb2Z0d2FyZVN5c3RlbSAiRXh0ZXJuYWwgV2Vic2l0ZXMiIHsKICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgIHRhZ3MgIkljb25zIgogICAgfQoKICAgICMgSW5jbHVkZSB0ZWFtIGxldmVsIG1vZGVscwogICAgYWRtaW4gPSBwZXJzb24gIk9yZ2FuaXphdGlvbiBBZG1pbiIgIkFuIGFkbWluaXN0cmF0b3Igb2YgYW4gb3JnYW5pemF0aW9uIiB7CiAgICAgIHRhZ3MgIkFkbWluIgogICAgfQogICAgcHJvdmlkZXIgPSBwZXJzb24gIk1TUCIgIkFuZCBlbXBsb3llZSBvZiBhIG1hbmFnZWQgc2VydmljZSBwcm92aWRlciIgewogICAgICB0YWdzICJNU1AiCiAgICB9CiAgICAKICAgICFlbGVtZW50IHNlcnZlciB7CiAgICAgIGlkZW50aXR5ID0gY29udGFpbmVyICJJZGVudGl0eSIgewogICAgICAgIHRhZ3MgIkF1dGgiCiAgICAgIH0KICAgIH0KICAgICMgRXh0ZXJuYWwgdmVuZG9ycwogICAgZ3JvdXAgIlBheW1lbnQgU3lzdGVtcyIgewogICAgICBzdHJpcGUgPSBzb2Z0d2FyZVN5c3RlbSAiU3RyaXBlIiB7CiAgICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBjcmVkaXQgY2FyZHMgYW5kIHN1YnNjcmlwdGlvbnMuIgogICAgICB9CiAgICAgIGJyYWludHJlZSA9IHNvZnR3YXJlU3lzdGVtICJCcmFpbnRyZWUiIHsKICAgICAgICB0YWdzICJFeHRlcm5hbCIKICAgICAgICB0YWdzICJCaWxsaW5nIgogICAgICAgIGRlc2NyaXB0aW9uICJIYW5kbGVzIFBheVBhbCBhbmQgY3J5cHRvY3VycmVuY3kuIgogICAgICB9CiAgICB9CiAgICAKICAgICFlbGVtZW50IGNsaWVudHMuZGVza3RvcCB7CiAgICAgIGJpb21ldHJpYyA9IGNvbXBvbmVudCAiQmlvbWV0cmljIEF1dGhlbnRpY2F0aW9uIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkhhbmRsZXMgYmlvbWV0cmljIGF1dGhlbnRpY2F0aW9uIGZvciB0aGUgQml0d2FyZGVuIGRlc2t0b3AgYXBwbGljYXRpb24uIgogICAgICB9CiAgICAKICAgICAgcGFzc3dvcmQgPSBjb21wb25lbnQgIk9TIFBhc3N3b3JkIE1hbmFnZW1lbnQgTmF0aXZlIE1vZHVsZSIgewogICAgICAgIGRlc2NyaXB0aW9uICJDUlVEIG9wZXJhdGlvbnMgb24ga2V5cy12YWx1ZXMgc3RvcmVkIGJ5IHRoZSBPUy4iCiAgICAgICAgdGVjaG5vbG9neSAicnVzdCBtb2R1bGUiCiAgICAgIH0KICAgIAogICAgICBpcGMgPSBjb21wb25lbnQgIklQQyIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgZGVza3RvcCBhcHBsaWNhdGlvbiBhbmQgdGhlIGJyb3dzZXIgZXh0ZW5zaW9uLiIKICAgICAgICB0ZWNobm9sb2d5ICJTb2NrZXRzIgogICAgICB9CiAgICB9CiAgICAKICAgIG9zX3NlY3VyZV9zdG9yYWdlID0gc29mdHdhcmVTeXN0ZW0gIk9TIFNlY3VyZSBTdG9yYWdlIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICBkZXNjcmlwdGlvbiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBzZWN1cmUgc3RvcmFnZSBmb3Igc2Vuc2l0aXZlIGRhdGEsIHN1Y2ggYXMgV2luZG93cyBDcmVkZW50aWFsIExvY2tlciBvciBtYWNPUyBLZXljaGFpbi4iCiAgICB9CiAgICAKICAgIG9zX3VzZXJfdmVyaWZpY2F0aW9uID0gc29mdHdhcmVTeXN0ZW0gIk9TIFVzZXIgVmVyaWZpY2F0aW9uIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICBkZXNjcmlwdGlvbiAiVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyB1c2VyIHZlcmlmaWNhdGlvbiBzeXN0ZW0sIHN1Y2ggYXMgV2luZG93cyBIZWxsbyBvciBtYWNPUyBUb3VjaCBJRC4iCiAgICB9CiAgICAKICAgIHdpbmRvd3NfaGVsbG9fc2lnbmVyID0gc29mdHdhcmVTeXN0ZW0gIldpbmRvd3MgSGVsbG8gU2lnbmVyIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIiAiV2luZG93cy1CaW9tZXRyaWMiCiAgICAgIGRlc2NyaXB0aW9uICJBIFdpbmRvd3MgSGVsbG8gc2lnbmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2lnbiByZXF1ZXN0cyBmb3IgdGhlIEJpdHdhcmRlbiBkZXNrdG9wIGFwcGxpY2F0aW9uLiIKICAgIH0KICAgIAogICAgY2xpZW50cy5icm93c2VyX2V4dGVuc2lvbiAtPiBjbGllbnRzLmRlc2t0b3AuaXBjICJDb25uZWN0cyB0byBJUEMgdG8gcmVxdWVzdCBiaW9tZXRyaWMgYXV0aGVudGljYXRpb24iCiAgICBjbGllbnRzLmRlc2t0b3AuaXBjIC0+IGNsaWVudHMuZGVza3RvcC5iaW9tZXRyaWMgIlJlbGF5cyBiaW9tZXRyaWMgYXV0aGVudGljYXRpb24gcmVxdWVzdHMgdG8iCiAgICAKICAgIGNsaWVudHMuZGVza3RvcC5iaW9tZXRyaWMgLT4gY2xpZW50cy5kZXNrdG9wLnBhc3N3b3JkICJSZWFkL1dyaXRlIHVzZXIga2V5cyIgIk5hcGkgUnVzdCBGRkkiCiAgICBjbGllbnRzLmRlc2t0b3AucGFzc3dvcmQgLT4gb3Nfc2VjdXJlX3N0b3JhZ2UgIkNSVUQgb3BlcmF0aW9ucyBvbiBrZXlzIHN0b3JlZCBpbiB0aGUgT1Mgc2VjdXJlIHN0b3JhZ2UiCiAgICBjbGllbnRzLmRlc2t0b3AuYmlvbWV0cmljIC0+IG9zX3VzZXJfdmVyaWZpY2F0aW9uICJSZXF1ZXN0cyB1c2VyIHZlcmlmaWNhdGlvbiBmb3IgYmlvbWV0cmljIGF1dGhlbnRpY2F0aW9uIgogICAgIWVsZW1lbnQgc2VydmVyIHsKICAgICAgaWNvbnMgPSBjb250YWluZXIgIkljb25zIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBJY29ucyBzZXJ2aWNlIHByb3ZpZGVzIGZhdmljb25zIGZvciB3ZWJzaXRlcy4iCiAgICAgICAgY2xpZW50cyAtPiBzZXJ2ZXIuaWNvbnMgIlJlcXVlc3RzIGljb25zIGZvciBjbGVhcnRleHQgdXJscyBmcm9tIiAKICAgICAgfQogICAgfQogICAgCiAgICBkbnMgPSBzb2Z0d2FyZVN5c3RlbSAiRE5TIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICB0YWdzICJJY29ucyIKICAgIH0KCiAgICAjIEluY2x1ZGUgc2hhcmVkIGxldmVsIHJlbGF0aW9uc2hpcHMKICAgICMgVXNlciBSZWxhdGlvbnNoaXBzCiAgICB1c2VyIC0+IGNsaWVudHMud2ViICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmJyb3dzZXJfZXh0ZW5zaW9uICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmNsaSAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5kZXNrdG9wICJVc2VzIgogICAgYWRtaW4gLT4gY2xpZW50cy53ZWIgIkFkbWluaXN0ZXJzIE9yZ2FuaXphdGlvbnMiCiAgICBwcm92aWRlciAtPiBjbGllbnRzLndlYiAiQWRtaW5pc3RlcnMgUHJvdmlkZXJzIGFuZCBPcmdhbml6YXRpb25zIgogICAgCiAgICAjIEhpZ2gtbGV2ZWwgQ2xpZW50IFJlbGF0aW9uc2hpcHMKICAgIGNsaWVudHMud2ViIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5icm93c2VyX2V4dGVuc2lvbiAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuY2xpIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5kZXNrdG9wIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy53ZWIgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIHdpdGgiCiAgICBjbGllbnRzLmJyb3dzZXJfZXh0ZW5zaW9uIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgY2xpZW50cy5jbGkgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBjbGllbnRzLmRlc2t0b3AgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBzZXJ2ZXIuYXBpIC0+IHNlcnZlci5pZGVudGl0eSAiVmFsaWRhdGVzIEpXVHMgd2l0aCIgewogICAgICB1cmwgImh0dHBzOi8vYml0d2FyZGVuLmNvbSIKICAgIH0KICAgIGNsaWVudHMgLT4gc2VydmVyLmV2ZW50cyAiUG9zdHMgbG9jYWwgdXNhZ2UgZXZlbnRzIHRvIgogICAgCiAgICAjIHNlbGYgaG9zdCBwaG9uZSBob21lCiAgICBzZWxmX2hvc3RlZF9pbnN0YW5jZXMgLT4gc2VydmVyLm5vdGlmaWNhdGlvbnMgIlNlbmRzIHB1c2ggbm90aWZpY2F0aW9uIHByb3h5IHJlcXVlc3RzIHRvIgoKCiAgICBrZXlfY29ubmVjdG9yIC0+IHNlcnZlci5pZGVudGl0eSAiVmFsaWRhdGVzIEpXVHMgd2l0aCIKICB9CgogIHZpZXdzIHsKICAgIHN0eWxlcyB7CiAgICAgIGVsZW1lbnQgIlBlcnNvbiIgewogICAgICAgIGJhY2tncm91bmQgIzMxMDdkMwogICAgICAgIHNoYXBlIHBlcnNvbgogICAgICB9CiAgICAgIGVsZW1lbnQgIk1TUCIgewogICAgICAgIGJhY2tncm91bmQgIzMxMDdkMwogICAgICAgIHNoYXBlIHBlcnNvbgogICAgICB9CiAgICB9CiAgICBjb21wb25lbnQgY2xpZW50cy5kZXNrdG9wICJkZXNrdG9wX2Jpb21ldHJpY3NfbWFjb3MiIHsKICAgICAgaW5jbHVkZSAqCiAgICAgIGluY2x1ZGUgb3NfdXNlcl92ZXJpZmljYXRpb24KICAgICAgYXV0b0xheW91dCB0YgogICAgfQogICAgLy8gVE9ETzogQWRkIFdpbmRvd3MgYW5kIExpbnV4LCBleGNsdWRpbmcgcmVsZXZhbnQgVGFncwoKICAgIHN5c3RlbUxhbmRzY2FwZSAiQml0d2FyZGVuIiB7CiAgICAgIGluY2x1ZGUgKgogICAgfQoKICAgIGNvbnRhaW5lciBjbGllbnRzICJiaXR3YXJkZW5fanNfY2xpZW50cyIgewogICAgICBpbmNsdWRlICoKICAgIH0KCiAgICAvLyBUaGlzIGlzIGxhc3QgdG8gb3ZlcnJpZGUgdGVhbSBzdHlsZXMgd2l0aCBjb21tb24gc3R5bGVzCiAgICBzdHlsZXMgewogICAgICB0aGVtZSBkZWZhdWx0CiAgICAgIGVsZW1lbnQgIkVsZW1lbnQiIHsKICAgICAgICBjb2xvciAjM2MzYjNiCiAgICAgIH0KICAgICAgZWxlbWVudCAiUGVyc29uIiB7CiAgICAgICAgYmFja2dyb3VuZCAjZDM0NDA3CiAgICAgICAgc2hhcGUgcGVyc29uCiAgICAgIH0KICAgICAgZWxlbWVudCAiQ29udGFpbmVyIiB7CiAgICAgICAgYmFja2dyb3VuZCAjZjg4NzI4CiAgICAgIH0KICAgICAgZWxlbWVudCAiTVNQIiB7CiAgICAgICAgYmFja2dyb3VuZCAjMzEwN2QzCiAgICAgIH0KICAgICAgZWxlbWVudCAiUXVldWUiIHsKICAgICAgICBzaGFwZSBwaXBlCiAgICAgIH0KICAgICAgZWxlbWVudCAiTW9iaWxlIiB7CiAgICAgICAgc2hhcGUgbW9iaWxlRGV2aWNlUG9ydHJhaXQKICAgICAgfQogICAgICBlbGVtZW50ICJXZWIiIHsKICAgICAgICBzaGFwZSB3ZWJCcm93c2VyCiAgICAgIH0KICAgICAgZWxlbWVudCAiRGF0YWJhc2UiIHsKICAgICAgICBzaGFwZSBjeWxpbmRlcgogICAgICB9CiAgICAgIGVsZW1lbnQgIkV4dGVybmFsIiB7CiAgICAgICAgY29sb3IgIzAwMDAwMAogICAgICAgIGJhY2tncm91bmQgI2I1YjViNQogICAgICB9CiAgICB9CiAgfQp9" }, "views": { "componentViews": [ { "automaticLayout": { "applied": true, "edgeSeparation": 0, "implementation": "Graphviz", "nodeSeparation": 300, "rankDirection": "TopBottom", "rankSeparation": 300, "vertices": false }, "containerId": "13", "dimensions": { "height": 3100, "width": 1620 }, "elements": [ { "id": "11", "x": 220, "y": 165 }, { "id": "22", "x": 220, "y": 1365 }, { "id": "23", "x": 220, "y": 1965 }, { "id": "24", "x": 220, "y": 765 }, { "id": "25", "x": 220, "y": 2565 }, { "id": "26", "x": 970, "y": 1965 } ], "externalContainerBoundariesVisible": false, "key": "desktop_biometrics_macos", "order": 1, "relationships": [ { "id": "28" }, { "id": "30" }, { "id": "31" }, { "id": "32" }, { "id": "35" } ] } ], "configuration": { "branding": {}, "lastSavedView": "desktop_biometrics_macos", "metadataSymbols": "SquareBrackets", "styles": { "elements": [ { "background": "#d34407", "shape": "Person", "tag": "Person" }, { "background": "#3107d3", "shape": "Person", "tag": "MSP" }, { "color": "#3c3b3b", "tag": "Element" }, { "background": "#f88728", "tag": "Container" }, { "shape": "Pipe", "tag": "Queue" }, { "shape": "MobileDevicePortrait", "tag": "Mobile" }, { "shape": "WebBrowser", "tag": "Web" }, { "shape": "Cylinder", "tag": "Database" }, { "background": "#b5b5b5", "color": "#000000", "tag": "External" } ] }, "terminology": {}, "themes": ["https://static.structurizr.com/themes/default/theme.json"] }, "containerViews": [ { "dimensions": { "height": 2616, "width": 3304 }, "elements": [ { "id": "1", "x": 1658, "y": 208 }, { "id": "4", "x": 1012, "y": 2108 }, { "id": "10", "x": 533, "y": 908 }, { "id": "11", "x": 2033, "y": 908 }, { "id": "12", "x": 1283, "y": 908 }, { "id": "13", "x": 2033, "y": 1508 }, { "id": "17", "x": 908, "y": 208 }, { "id": "18", "x": 208, "y": 208 }, { "id": "25", "x": 1896, "y": 2108 }, { "id": "26", "x": 2646, "y": 2108 } ], "externalSoftwareSystemBoundariesVisible": false, "key": "bitwarden_js_clients", "order": 3, "paperSize": "A3_Landscape", "relationships": [ { "id": "29" }, { "id": "33" }, { "id": "36" }, { "id": "42", "vertices": [ { "x": 1133, "y": 804 } ] }, { "id": "44" }, { "id": "45" }, { "id": "46", "vertices": [ { "x": 2633, "y": 804 }, { "x": 2633, "y": 1208 } ] }, { "id": "47" }, { "id": "49" }, { "id": "52" }, { "id": "55" }, { "id": "57", "vertices": [ { "x": 1350, "y": 1508 } ] }, { "id": "59" } ], "softwareSystemId": "9" } ], "systemLandscapeViews": [ { "dimensions": { "height": 2308, "width": 8191 }, "elements": [ { "id": "1", "x": 1733, "y": 279 }, { "id": "2", "x": 6083, "y": 279 }, { "id": "3", "x": 1708, "y": 979 }, { "id": "4", "x": 958, "y": 1679 }, { "id": "9", "x": 2408, "y": 1029 }, { "id": "14", "x": 958, "y": 1029 }, { "id": "15", "x": 208, "y": 1029 }, { "id": "16", "x": 5333, "y": 329 }, { "id": "17", "x": 2433, "y": 279 }, { "id": "18", "x": 3133, "y": 279 }, { "id": "20", "x": 4583, "y": 329 }, { "id": "21", "x": 3833, "y": 329 }, { "id": "25", "x": 3067, "y": 1679 }, { "id": "26", "x": 3817, "y": 1679 }, { "id": "27", "x": 6783, "y": 329 }, { "id": "41", "x": 7533, "y": 329 } ], "enterpriseBoundaryVisible": true, "key": "Bitwarden", "order": 2, "paperSize": "A1_Landscape", "relationships": [ { "id": "34" }, { "id": "37" }, { "id": "40", "vertices": [ { "x": 2258, "y": 1379 } ] }, { "id": "43" }, { "id": "48" }, { "id": "50" }, { "id": "68" }, { "id": "70" } ] } ] } }