Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 2 additions & 14 deletions .github/workflows/generate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ jobs:
commit_user_name: ${{ secrets.GIT_USER_NAME }}
commit_user_email: ${{ secrets.GIT_USER_EMAIL }}
commit_author: ${{ secrets.GIT_USER_NAME }} <${{ secrets.GIT_USER_EMAIL }}>
validate-paths:
name: Validate paths
validate:
name: Validate paths and links
needs: commit
runs-on: ubuntu-latest
timeout-minutes: 30
Expand All @@ -80,17 +80,5 @@ jobs:
uses: ./.github/actions/setup
- name: Validate SUMMARY.md paths
run: npm run validate-paths
validate-links:
name: Validate links
needs: commit
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Setup
uses: ./.github/actions/setup
- name: Validate cross-site links
run: npm run validate-links
19 changes: 15 additions & 4 deletions codegen/validate-links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ const absoluteUrlPattern = new RegExp(

// Matches markdown links like [text](path) but not images ![text](path),
// absolute URLs, anchors-only, GitBook template tags, or angle-bracket paths.
// The capture group handles escaped parens \( and \) inside the link target.
const relativeLinkPattern =
/(?<!!)\]\((?!https?:\/\/|mailto:|#|{%|<|cursor:|file:)([^)]+)\)/g
/(?<!!)\]\((?!https?:\/\/|mailto:|#|{%|<|cursor:|file:)((?:[^)\\]|\\.)+)\)/g

interface BrokenLink {
file: string
Expand Down Expand Up @@ -88,9 +89,6 @@ function checkRelativeLink(file: string, line: number, rawLink: string): void {
const linkPath = rawLink.replace(/ "mention"$/, '').split('#')[0]
if (linkPath == null || linkPath === '') return

// Skip asset references
if (linkPath.includes('.gitbook/assets')) return

// Strip GitBook markdown escapes and decode URL encoding
const cleanPath = decodeURIComponent(
linkPath.replaceAll('\\(', '(').replaceAll('\\)', ')').replaceAll('\\', ''),
Expand All @@ -99,6 +97,19 @@ function checkRelativeLink(file: string, line: number, rawLink: string): void {
const fileDir = dirname(file)
const resolved = resolve(fileDir, cleanPath)

// Check asset references exist
if (linkPath.includes('.gitbook/assets')) {
if (!existsSync(resolved)) {
brokenLinks.push({
file,
line,
url: rawLink,
reason: `Asset not found: ${resolved}`,
})
}
return
}

// Check if target exists as file, as README.md in directory, or as directory
if (!existsSync(resolved) && !existsSync(join(resolved, 'README.md'))) {
brokenLinks.push({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ echo json_encode($locks);

Next, you can perform the basic action of locking and unlocking the door.

\{% openapi src="../../.gitbook/assets/openapi.json" path="/locks/lock\_door" method="post" %\} [openapi.json](../../.gitbook/assets/openapi.json) \{% endopenapi %\}
\{% openapi src="../.gitbook/assets/openapi.json" path="/locks/lock\_door" method="post" %\} [openapi.json](../.gitbook/assets/openapi.json) \{% endopenapi %\}

#### Unlock a door

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ Create a Seam production workspace to connect your Visionline account to Seam. Y
1. Log in to [Seam Console](https://console.seam.co/).
2. In the upper-left corner, click the workspace switcher.

![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../.gitbook/assets/workspace-switcher.png)
![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../guides/.gitbook/assets/workspace-switcher.png)
3. Click **New Workspace**.
4. In the **Add a Workspace** dialog, type a name for your new workspace and your company name.
5. Disable **Sandbox mode**.

![To create a production workspace, disable sandbox mode.](../../../../../.gitbook/assets/add-production-workspace.png)
![To create a production workspace, disable sandbox mode.](../../../../../guides/.gitbook/assets/add-production-workspace.png)
6. Click **Create Workspace**.
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ To create a production workspace.
1. Log in to [Seam Console](https://console.seam.co/).
2. In the upper-left corner, click the workspace switcher.

![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../.gitbook/assets/workspace-switcher.png)
![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../guides/.gitbook/assets/workspace-switcher.png)
3. Click **New Workspace**.
4. In the **Add a Workspace** dialog, type a name for your new workspace and your company name.
5. Disable **Sandbox mode**.

![To create a production workspace, disable sandbox mode.](../../../../../.gitbook/assets/add-production-workspace.png)
![To create a production workspace, disable sandbox mode.](../../../../../guides/.gitbook/assets/add-production-workspace.png)
6. Click **Create Workspace**.
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ Create a Seam production workspace to connect your Visionline account to Seam. Y
1. Log in to [Seam Console](https://console.seam.co/).
2. In the upper-left corner, click the workspace switcher.

![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../.gitbook/assets/workspace-switcher.png)
![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../guides/.gitbook/assets/workspace-switcher.png)
3. Click **New Workspace**.
4. In the **Add a Workspace** dialog, type a name for your new workspace and your company name.
5. Disable **Sandbox mode**.

![To create a production workspace, disable sandbox mode.](../../../../../.gitbook/assets/add-production-workspace.png)
![To create a production workspace, disable sandbox mode.](../../../../../guides/.gitbook/assets/add-production-workspace.png)
6. Click **Create Workspace**.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The first step in developing and testing your Visionline plastic card encoding a
1. Log in to [Seam Console](https://console.seam.co/).
2. In the upper-left corner, click the workspace switcher.

![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../.gitbook/assets/workspace-switcher.png)
![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../guides/.gitbook/assets/workspace-switcher.png)
3. Click **New Workspace**.
4. In the **Add a Workspace** dialog, type a name for your new workspace and your company name.
5. Enable **Sandbox mode**.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ To create a production workspace.
1. Log in to [Seam Console](https://console.seam.co/).
2. In the upper-left corner, click the workspace switcher.

![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../.gitbook/assets/workspace-switcher.png)
![Use the Seam Console workspace switcher to switch between workspaces and create new workspaces.](../../../../../guides/.gitbook/assets/workspace-switcher.png)
3. Click **New Workspace**.
4. In the **Add a Workspace** dialog, type a name for your new workspace and your company name.
5. Disable **Sandbox mode**.

![To create a production workspace, disable sandbox mode.](../../../../../.gitbook/assets/add-production-workspace.png)
![To create a production workspace, disable sandbox mode.](../../../../../guides/.gitbook/assets/add-production-workspace.png)
6. Click **Create Workspace**.
2 changes: 1 addition & 1 deletion docs/brand-guides/get-started-with-kwikset-wifi-locks.md
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ puts some_lock.inspect

Next, you can perform the basic action of locking and unlocking the door.

{% openapi src="../.gitbook/assets/openapi (1).json" path="/locks/lock\_door" method="post" %} [openapi (1).json](../.gitbook/assets/openapi%20\(1\).json) {% endopenapi %}
{% openapi src=".gitbook/assets/openapi (1).json" path="/locks/lock\_door" method="post" %} [openapi (1).json](.gitbook/assets/openapi%20\(1\).json) {% endopenapi %}

#### Unlock a door

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,8 +273,8 @@ echo json_encode($locks);

Next, you can perform the basic action of locking and unlocking a door.

{% openapi src="../../.gitbook/assets/openapi.json" path="/locks/lock_door" method="post" %}
[openapi.json](../../.gitbook/assets/openapi.json)
{% openapi src="../.gitbook/assets/openapi.json" path="/locks/lock_door" method="post" %}
[openapi.json](../.gitbook/assets/openapi.json)
{% endopenapi %}

## Unlock a door
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ Next, you can perform the basic action of locking and unlocking the door.

<div data-gb-custom-block data-tag="openapi" data-src='../.gitbook/assets/openapi.json' data-path='/locks/lock_door' data-method='post'>

[openapi.json](../../.gitbook/assets/openapi.json)
[openapi.json](../.gitbook/assets/openapi.json)

</div>

Expand Down
4 changes: 2 additions & 2 deletions docs/brand-guides/yale-locks.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Yale manufacturers some of the most advanced smart locks on the market such as t
The Seam integration is tailored for Yale Locks that are connected via the following platforms:

* [**Yale Home**](https://www.yalehome.com/au/en/products/smart-products/yale-home-app) **or** [**Yale Access**](https://www.yalehome.com/us/en/products/smart-technology/yale-access) **apps**: Some Yale locks come with built-in WiFi support, enabling them to connect directly to the Yale Home app (for global implementations) or Yale Access app (for North American implementations). However, for locks without integrated WiFi, you must install the [Yale Access Upgrade Kit](https://amzn.to/3OyUVOT) for compatibility with these apps.\
![](../.gitbook/assets/d2d0a-yd-accesskit_ya_enc1.jpg)\
![](.gitbook/assets/d2d0a-yd-accesskit_ya_enc1.jpg)\
[**Yale Access Upgrade Kit**](https://www.amazon.com/Yale-Bluetooth-Upgrade-Assure-Levers/dp/B07GPXN936?hvadid=309748512713\&hvpos=\&hvnetw=g\&hvrand=898690352114198212\&hvpone=\&hvptwo=\&hvqmt=\&hvdev=c\&hvdvcmdl=\&hvlocint=\&hvlocphy=9031939\&hvtargid=pla-628163958927\&psc=1\&linkCode=sl1\&tag=seam0f-20\&linkId=2a3f40625fb6f9267c822adfd793a950\&language=en_US\&ref_=as_li_ss_tl)

{% hint style="info" %}
Seam does not currently support integration with the Yale Smart Living app (for implementations in Europe, the Middle East, India, and Africa) or the Yale Connect app (mainly for implementations in Latin America).
{% endhint %}

* **Z-Wave with** [**Aeotec SmartThings**](https://amzn.to/44OulH1): To use Yale Locks with these Z-Wave based hubs, the lock must have the [Yale Z-Wave network module](https://amzn.to/3DC9nis) installed. This module ensures seamless communication between the lock and the hub, allowing for integration into broader smart home setups.\
![](../.gitbook/assets/yale-ayr202-zwv-usa-assure-lock-z-wave-plus-network-module-ayr202-zwv-usa.jpeg)\
![](.gitbook/assets/yale-ayr202-zwv-usa-assure-lock-z-wave-plus-network-module-ayr202-zwv-usa.jpeg)\
[**Yale Z-Wave Network Module**](https://www.amazon.com/Yale-Z-wave-Module-Electronic-AYR202-ZWV-USA/dp/B07B1G5LR9?crid=1M97DIL3OHT0E\&keywords=yale+z-wave+plus+module\&qid=1690480444\&sprefix=yale+z-wave+plus+module,aps,318\&sr=8-1\&ufe=app_do:amzn1.fos.f5122f16-c3e8-4386-bf32-63e904010ad0\&linkCode=sl1\&tag=seam0f-20\&linkId=62ce481be465b16a59d4e8e1f69e4965\&language=en_US\&ref_=as_li_ss_tl)

When purchasing a Yale Lock or a network module separately, always verify the specific compatibility needs for your desired setup.
Expand Down
Loading