homebridge-securitysystem 0.0.1-matter

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.
Files changed (257) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.yml +46 -0
  3. package/.github/ISSUE_TEMPLATE/feature-request.yml +17 -0
  4. package/.github/ISSUE_TEMPLATE/questions-answers.yml +40 -0
  5. package/.github/demo.jpg +0 -0
  6. package/.github/dependabot.yml +19 -0
  7. package/.github/release.yml +36 -0
  8. package/.github/workflows/build-package.yml +49 -0
  9. package/.github/workflows/bump-version.yml +59 -0
  10. package/.github/workflows/dependency-review.yml +26 -0
  11. package/.github/workflows/publish.yml +155 -0
  12. package/.github/workflows/stale-activity.yml +27 -0
  13. package/AGENTS.md +247 -0
  14. package/CHANGELOG.md +572 -0
  15. package/CODE_OF_CONDUCT.md +128 -0
  16. package/CONTRIBUTING.md +5 -0
  17. package/LICENSE +21 -0
  18. package/README.md +47 -0
  19. package/SECURITY.md +12 -0
  20. package/config.schema.json +934 -0
  21. package/dist/conditions/already-triggered-condition.d.ts +10 -0
  22. package/dist/conditions/already-triggered-condition.js +22 -0
  23. package/dist/conditions/already-triggered-condition.js.map +1 -0
  24. package/dist/conditions/arming-in-progress-condition.d.ts +10 -0
  25. package/dist/conditions/arming-in-progress-condition.js +21 -0
  26. package/dist/conditions/arming-in-progress-condition.js.map +1 -0
  27. package/dist/conditions/arming-lock-condition.d.ts +10 -0
  28. package/dist/conditions/arming-lock-condition.js +43 -0
  29. package/dist/conditions/arming-lock-condition.js.map +1 -0
  30. package/dist/conditions/condition.d.ts +22 -0
  31. package/dist/conditions/condition.js +19 -0
  32. package/dist/conditions/condition.js.map +1 -0
  33. package/dist/conditions/double-knock-condition.d.ts +24 -0
  34. package/dist/conditions/double-knock-condition.js +73 -0
  35. package/dist/conditions/double-knock-condition.js.map +1 -0
  36. package/dist/conditions/not-armed-condition.d.ts +10 -0
  37. package/dist/conditions/not-armed-condition.js +26 -0
  38. package/dist/conditions/not-armed-condition.js.map +1 -0
  39. package/dist/conditions/trigger-already-running-condition.d.ts +10 -0
  40. package/dist/conditions/trigger-already-running-condition.js +21 -0
  41. package/dist/conditions/trigger-already-running-condition.js.map +1 -0
  42. package/dist/constants/default-constant.d.ts +24 -0
  43. package/dist/constants/default-constant.js +27 -0
  44. package/dist/constants/default-constant.js.map +1 -0
  45. package/dist/constants/homekit-constant.d.ts +2 -0
  46. package/dist/constants/homekit-constant.js +3 -0
  47. package/dist/constants/homekit-constant.js.map +1 -0
  48. package/dist/constants/matter-constant.d.ts +21 -0
  49. package/dist/constants/matter-constant.js +61 -0
  50. package/dist/constants/matter-constant.js.map +1 -0
  51. package/dist/handlers/sensor-handler.d.ts +24 -0
  52. package/dist/handlers/sensor-handler.js +63 -0
  53. package/dist/handlers/sensor-handler.js.map +1 -0
  54. package/dist/handlers/state-handler.d.ts +49 -0
  55. package/dist/handlers/state-handler.js +204 -0
  56. package/dist/handlers/state-handler.js.map +1 -0
  57. package/dist/handlers/switch-handler.d.ts +28 -0
  58. package/dist/handlers/switch-handler.js +95 -0
  59. package/dist/handlers/switch-handler.js.map +1 -0
  60. package/dist/handlers/trip-handler.d.ts +44 -0
  61. package/dist/handlers/trip-handler.js +156 -0
  62. package/dist/handlers/trip-handler.js.map +1 -0
  63. package/dist/homekit/homekit-registrar.d.ts +12 -0
  64. package/dist/homekit/homekit-registrar.js +23 -0
  65. package/dist/homekit/homekit-registrar.js.map +1 -0
  66. package/dist/homekit/service-factory.d.ts +12 -0
  67. package/dist/homekit/service-factory.js +24 -0
  68. package/dist/homekit/service-factory.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.js +7 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/interfaces/condition-context-interface.d.ts +14 -0
  73. package/dist/interfaces/condition-context-interface.js +2 -0
  74. package/dist/interfaces/condition-context-interface.js.map +1 -0
  75. package/dist/interfaces/hap-types-interface.d.ts +9 -0
  76. package/dist/interfaces/hap-types-interface.js +2 -0
  77. package/dist/interfaces/hap-types-interface.js.map +1 -0
  78. package/dist/interfaces/mqtt-status-payload-interface.d.ts +6 -0
  79. package/dist/interfaces/mqtt-status-payload-interface.js +2 -0
  80. package/dist/interfaces/mqtt-status-payload-interface.js.map +1 -0
  81. package/dist/interfaces/options-interface.d.ts +87 -0
  82. package/dist/interfaces/options-interface.js +2 -0
  83. package/dist/interfaces/options-interface.js.map +1 -0
  84. package/dist/interfaces/persisted-state-interface.d.ts +6 -0
  85. package/dist/interfaces/persisted-state-interface.js +2 -0
  86. package/dist/interfaces/persisted-state-interface.js.map +1 -0
  87. package/dist/interfaces/service-registry-interface.d.ts +10 -0
  88. package/dist/interfaces/service-registry-interface.js +2 -0
  89. package/dist/interfaces/service-registry-interface.js.map +1 -0
  90. package/dist/interfaces/system-state-interface.d.ts +22 -0
  91. package/dist/interfaces/system-state-interface.js +2 -0
  92. package/dist/interfaces/system-state-interface.js.map +1 -0
  93. package/dist/schemas/arming-lock-schema.d.ts +10 -0
  94. package/dist/schemas/arming-lock-schema.js +12 -0
  95. package/dist/schemas/arming-lock-schema.js.map +1 -0
  96. package/dist/schemas/error-schema.d.ts +4 -0
  97. package/dist/schemas/error-schema.js +7 -0
  98. package/dist/schemas/error-schema.js.map +1 -0
  99. package/dist/schemas/mode-request-schema.d.ts +10 -0
  100. package/dist/schemas/mode-request-schema.js +18 -0
  101. package/dist/schemas/mode-request-schema.js.map +1 -0
  102. package/dist/schemas/status-response-schema.d.ts +7 -0
  103. package/dist/schemas/status-response-schema.js +10 -0
  104. package/dist/schemas/status-response-schema.js.map +1 -0
  105. package/dist/schemas/trip-mode-request-schema.d.ts +9 -0
  106. package/dist/schemas/trip-mode-request-schema.js +24 -0
  107. package/dist/schemas/trip-mode-request-schema.js.map +1 -0
  108. package/dist/security-system-platform.d.ts +19 -0
  109. package/dist/security-system-platform.js +56 -0
  110. package/dist/security-system-platform.js.map +1 -0
  111. package/dist/security-system.d.ts +28 -0
  112. package/dist/security-system.js +169 -0
  113. package/dist/security-system.js.map +1 -0
  114. package/dist/services/command-service.d.ts +16 -0
  115. package/dist/services/command-service.js +65 -0
  116. package/dist/services/command-service.js.map +1 -0
  117. package/dist/services/configuration-service.d.ts +24 -0
  118. package/dist/services/configuration-service.js +189 -0
  119. package/dist/services/configuration-service.js.map +1 -0
  120. package/dist/services/event-bus-service.d.ts +12 -0
  121. package/dist/services/event-bus-service.js +17 -0
  122. package/dist/services/event-bus-service.js.map +1 -0
  123. package/dist/services/matter-service.d.ts +69 -0
  124. package/dist/services/matter-service.js +363 -0
  125. package/dist/services/matter-service.js.map +1 -0
  126. package/dist/services/mqtt-service.d.ts +16 -0
  127. package/dist/services/mqtt-service.js +97 -0
  128. package/dist/services/mqtt-service.js.map +1 -0
  129. package/dist/services/server-service.d.ts +28 -0
  130. package/dist/services/server-service.js +275 -0
  131. package/dist/services/server-service.js.map +1 -0
  132. package/dist/services/storage-service.d.ts +14 -0
  133. package/dist/services/storage-service.js +70 -0
  134. package/dist/services/storage-service.js.map +1 -0
  135. package/dist/services/webhook-service.d.ts +16 -0
  136. package/dist/services/webhook-service.js +68 -0
  137. package/dist/services/webhook-service.js.map +1 -0
  138. package/dist/tests/conditions.test.d.ts +1 -0
  139. package/dist/tests/conditions.test.js +175 -0
  140. package/dist/tests/conditions.test.js.map +1 -0
  141. package/dist/tests/matter-service.test.d.ts +1 -0
  142. package/dist/tests/matter-service.test.js +475 -0
  143. package/dist/tests/matter-service.test.js.map +1 -0
  144. package/dist/tests/mqtt-service.test.d.ts +1 -0
  145. package/dist/tests/mqtt-service.test.js +168 -0
  146. package/dist/tests/mqtt-service.test.js.map +1 -0
  147. package/dist/tests/sensor-handler.test.d.ts +1 -0
  148. package/dist/tests/sensor-handler.test.js +87 -0
  149. package/dist/tests/sensor-handler.test.js.map +1 -0
  150. package/dist/tests/server-service.test.d.ts +1 -0
  151. package/dist/tests/server-service.test.js +188 -0
  152. package/dist/tests/server-service.test.js.map +1 -0
  153. package/dist/tests/state-handler.test.d.ts +1 -0
  154. package/dist/tests/state-handler.test.js +276 -0
  155. package/dist/tests/state-handler.test.js.map +1 -0
  156. package/dist/tests/switch-handler.test.d.ts +1 -0
  157. package/dist/tests/switch-handler.test.js +186 -0
  158. package/dist/tests/switch-handler.test.js.map +1 -0
  159. package/dist/tests/trip-handler.test.d.ts +1 -0
  160. package/dist/tests/trip-handler.test.js +179 -0
  161. package/dist/tests/trip-handler.test.js.map +1 -0
  162. package/dist/timers/timer-manager.d.ts +31 -0
  163. package/dist/timers/timer-manager.js +118 -0
  164. package/dist/timers/timer-manager.js.map +1 -0
  165. package/dist/types/event-payload-map-type.d.ts +15 -0
  166. package/dist/types/event-payload-map-type.js +2 -0
  167. package/dist/types/event-payload-map-type.js.map +1 -0
  168. package/dist/types/event-type.d.ts +44 -0
  169. package/dist/types/event-type.js +20 -0
  170. package/dist/types/event-type.js.map +1 -0
  171. package/dist/types/matter-accessory-key-type.d.ts +7 -0
  172. package/dist/types/matter-accessory-key-type.js +2 -0
  173. package/dist/types/matter-accessory-key-type.js.map +1 -0
  174. package/dist/types/mode-type.d.ts +4 -0
  175. package/dist/types/mode-type.js +2 -0
  176. package/dist/types/mode-type.js.map +1 -0
  177. package/dist/types/origin-type.d.ts +9 -0
  178. package/dist/types/origin-type.js +11 -0
  179. package/dist/types/origin-type.js.map +1 -0
  180. package/dist/types/security-state-type.d.ts +11 -0
  181. package/dist/types/security-state-type.js +13 -0
  182. package/dist/types/security-state-type.js.map +1 -0
  183. package/dist/types/sensor-kind-type.d.ts +2 -0
  184. package/dist/types/sensor-kind-type.js +2 -0
  185. package/dist/types/sensor-kind-type.js.map +1 -0
  186. package/dist/types/service-result-type.d.ts +4 -0
  187. package/dist/types/service-result-type.js +2 -0
  188. package/dist/types/service-result-type.js.map +1 -0
  189. package/dist/utils/arming-util.d.ts +19 -0
  190. package/dist/utils/arming-util.js +24 -0
  191. package/dist/utils/arming-util.js.map +1 -0
  192. package/dist/utils/state-util.d.ts +8 -0
  193. package/dist/utils/state-util.js +29 -0
  194. package/dist/utils/state-util.js.map +1 -0
  195. package/docs/MQTT.md +50 -0
  196. package/package.json +64 -0
  197. package/src/@types/homebridge-lib.d.ts +11 -0
  198. package/src/conditions/already-triggered-condition.ts +24 -0
  199. package/src/conditions/arming-in-progress-condition.ts +23 -0
  200. package/src/conditions/arming-lock-condition.ts +50 -0
  201. package/src/conditions/condition.ts +31 -0
  202. package/src/conditions/double-knock-condition.ts +84 -0
  203. package/src/conditions/not-armed-condition.ts +30 -0
  204. package/src/conditions/trigger-already-running-condition.ts +23 -0
  205. package/src/constants/default-constant.ts +28 -0
  206. package/src/constants/homekit-constant.ts +2 -0
  207. package/src/constants/matter-constant.ts +69 -0
  208. package/src/handlers/sensor-handler.ts +78 -0
  209. package/src/handlers/state-handler.ts +257 -0
  210. package/src/handlers/switch-handler.ts +111 -0
  211. package/src/handlers/trip-handler.ts +193 -0
  212. package/src/homekit/homekit-registrar.ts +28 -0
  213. package/src/homekit/service-factory.ts +35 -0
  214. package/src/index.ts +9 -0
  215. package/src/interfaces/condition-context-interface.ts +15 -0
  216. package/src/interfaces/hap-types-interface.ts +11 -0
  217. package/src/interfaces/mqtt-status-payload-interface.ts +6 -0
  218. package/src/interfaces/options-interface.ts +116 -0
  219. package/src/interfaces/persisted-state-interface.ts +7 -0
  220. package/src/interfaces/service-registry-interface.ts +11 -0
  221. package/src/interfaces/system-state-interface.ts +25 -0
  222. package/src/schemas/arming-lock-schema.ts +12 -0
  223. package/src/schemas/error-schema.ts +7 -0
  224. package/src/schemas/mode-request-schema.ts +18 -0
  225. package/src/schemas/status-response-schema.ts +10 -0
  226. package/src/schemas/trip-mode-request-schema.ts +24 -0
  227. package/src/security-system-platform.ts +68 -0
  228. package/src/security-system.ts +199 -0
  229. package/src/services/command-service.ts +76 -0
  230. package/src/services/configuration-service.ts +224 -0
  231. package/src/services/event-bus-service.ts +21 -0
  232. package/src/services/matter-service.ts +446 -0
  233. package/src/services/mqtt-service.ts +123 -0
  234. package/src/services/server-service.ts +327 -0
  235. package/src/services/storage-service.ts +80 -0
  236. package/src/services/webhook-service.ts +77 -0
  237. package/src/tests/conditions.test.ts +212 -0
  238. package/src/tests/matter-service.test.ts +610 -0
  239. package/src/tests/mqtt-service.test.ts +231 -0
  240. package/src/tests/sensor-handler.test.ts +116 -0
  241. package/src/tests/server-service.test.ts +238 -0
  242. package/src/tests/state-handler.test.ts +371 -0
  243. package/src/tests/switch-handler.test.ts +234 -0
  244. package/src/tests/trip-handler.test.ts +244 -0
  245. package/src/timers/timer-manager.ts +141 -0
  246. package/src/types/event-payload-map-type.ts +25 -0
  247. package/src/types/event-type.ts +61 -0
  248. package/src/types/matter-accessory-key-type.ts +33 -0
  249. package/src/types/mode-type.ts +4 -0
  250. package/src/types/origin-type.ts +9 -0
  251. package/src/types/security-state-type.ts +11 -0
  252. package/src/types/sensor-kind-type.ts +2 -0
  253. package/src/types/service-result-type.ts +4 -0
  254. package/src/utils/arming-util.ts +44 -0
  255. package/src/utils/state-util.ts +32 -0
  256. package/tsconfig.json +26 -0
  257. package/vitest.config.ts +8 -0
package/.gitattributes ADDED
@@ -0,0 +1 @@
1
+ .github/workflows/*.lock.yml linguist-generated=true merge=ours
@@ -0,0 +1,46 @@
1
+ name: Bug Report
2
+ description: File a bug report
3
+ labels: [bug]
4
+ assignees:
5
+ - MiguelRipoll23
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for taking the time to fill out this bug report!
11
+ - type: input
12
+ id: plugin-version
13
+ attributes:
14
+ label: Plugin version
15
+ description: Installed version of the plugin
16
+ placeholder: 1.0.0
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: plugin-configuration
21
+ attributes:
22
+ label: Plugin configuration
23
+ description: Configuration of the plugin
24
+ validations:
25
+ required: true
26
+ - type: input
27
+ id: homebridge-version
28
+ attributes:
29
+ label: Homebridge version
30
+ description: Installed version of Homebridge
31
+ placeholder: 1.0.0
32
+ validations:
33
+ required: true
34
+ - type: textarea
35
+ id: what-happened
36
+ attributes:
37
+ label: What happened?
38
+ description: A description of the bug found plus the steps to reproduce the issue
39
+ validations:
40
+ required: true
41
+ - type: textarea
42
+ id: log
43
+ attributes:
44
+ label: Relevant log output
45
+ description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
46
+ render: bash
@@ -0,0 +1,17 @@
1
+ name: Feature Request
2
+ description: Suggest a new feature
3
+ labels: [enhancement]
4
+ assignees:
5
+ - MiguelRipoll23
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for taking the time to suggest new features!
11
+ - type: textarea
12
+ id: feature-description
13
+ attributes:
14
+ label: What are you missing?
15
+ description: A description of the feature suggested to be added
16
+ validations:
17
+ required: true
@@ -0,0 +1,40 @@
1
+ name: Questions & Answers
2
+ description: Get an answer
3
+ labels: [question]
4
+ assignees:
5
+ - MiguelRipoll23
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for taking the time to learn about this plugin!
11
+ - type: input
12
+ id: plugin-version
13
+ attributes:
14
+ label: Plugin version
15
+ description: Installed version of the plugin
16
+ placeholder: 1.0.0
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: plugin-configuration
21
+ attributes:
22
+ label: Plugin configuration
23
+ description: Configuration of the plugin
24
+ validations:
25
+ required: true
26
+ - type: input
27
+ id: homebridge-version
28
+ attributes:
29
+ label: Homebridge version
30
+ description: Installed version of Homebridge
31
+ placeholder: 1.0.0
32
+ validations:
33
+ required: true
34
+ - type: textarea
35
+ id: what-question
36
+ attributes:
37
+ label: What's your question?
38
+ description: A description of the question using your use case and expected behavior
39
+ validations:
40
+ required: true
Binary file
@@ -0,0 +1,19 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "github-actions"
9
+ directory: "/"
10
+ schedule:
11
+ interval: "daily"
12
+
13
+ - package-ecosystem: npm
14
+ directory: "/"
15
+ schedule:
16
+ interval: daily
17
+ time: "18:00"
18
+ timezone: Europe/Madrid
19
+ open-pull-requests-limit: 10
@@ -0,0 +1,36 @@
1
+ changelog:
2
+ exclude:
3
+ labels:
4
+ - ignore-for-release
5
+
6
+ categories:
7
+ - title: ☢️ Security
8
+ labels:
9
+ - security
10
+ - vulnerability
11
+
12
+ - title: 💥 Breaking Changes
13
+ labels:
14
+ - breaking
15
+ - breaking-change
16
+
17
+ - title: 🎉 New Features
18
+ labels:
19
+ - feature
20
+
21
+ - title: ✨ Enhancements
22
+ labels:
23
+ - enhancement
24
+
25
+ - title: 🐛 Bug Fixes
26
+ labels:
27
+ - bug
28
+ - bugfix
29
+
30
+ - title: 📦 Dependencies
31
+ labels:
32
+ - dependencies
33
+
34
+ - title: 🛠️ Other Changes
35
+ labels:
36
+ - "*"
@@ -0,0 +1,49 @@
1
+ name: Build package
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths-ignore:
8
+ - "**.md"
9
+ pull_request:
10
+ types: [opened, reopened, synchronize, ready_for_review, labeled, unlabeled]
11
+ paths-ignore:
12
+ - "**.md"
13
+
14
+ jobs:
15
+ build-package:
16
+ name: Build package
17
+ if: ${{ !contains(github.event.pull_request.labels.*.name, 'ignore-for-release') }}
18
+ runs-on: ubuntu-latest
19
+ permissions:
20
+ contents: read
21
+ id-token: write
22
+ attestations: write
23
+
24
+ steps:
25
+ - name: Checkout repository
26
+ uses: actions/checkout@v7
27
+
28
+ - name: Setup pnpm
29
+ uses: pnpm/action-setup@v6.0.10
30
+ with:
31
+ version: latest
32
+
33
+ - name: Setup node
34
+ uses: actions/setup-node@v7
35
+ with:
36
+ cache: "pnpm"
37
+ registry-url: https://registry.npmjs.org/
38
+
39
+ - name: Build package
40
+ run: |
41
+ pnpm install --frozen-lockfile
42
+ pnpm run build
43
+ pnpm pack
44
+
45
+ - name: Attest build provenance
46
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
47
+ uses: actions/attest-build-provenance@v4
48
+ with:
49
+ subject-path: "*.tgz"
@@ -0,0 +1,59 @@
1
+ name: Bump version
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ channel:
7
+ type: choice
8
+ default: beta
9
+ description: Pick channel
10
+ options:
11
+ - alpha
12
+ - beta
13
+ - stable
14
+
15
+ new-build-for-prerelease:
16
+ type: boolean
17
+ default: true
18
+ description: New build for prerelease
19
+
20
+ jobs:
21
+ bump-version:
22
+ name: Bump version
23
+ runs-on: ubuntu-latest
24
+ permissions:
25
+ contents: write
26
+ pull-requests: write
27
+
28
+ steps:
29
+ - name: Checkout branch
30
+ uses: actions/checkout@v7
31
+
32
+ - name: Setup node
33
+ uses: actions/setup-node@v7
34
+ with:
35
+ node-version: 24
36
+
37
+ - name: Get next version
38
+ uses: MiguelRipoll23/get-next-version@v3.2.1
39
+ id: get-next-version
40
+ with:
41
+ channel: ${{ inputs.channel }}
42
+ new-build-for-prerelease: ${{ inputs.new-build-for-prerelease }}
43
+
44
+ - name: Update version
45
+ run: |
46
+ npm version --no-git-tag-version ${{ env.NEXT_VERSION }}
47
+ env:
48
+ NEXT_VERSION: ${{ steps.get-next-version.outputs.next-version }}
49
+
50
+ - name: Create pull request
51
+ uses: peter-evans/create-pull-request@v8
52
+ with:
53
+ branch: version/${{ steps.get-next-version.outputs.next-version }}
54
+ commit-message: ${{ steps.get-next-version.outputs.next-version }}
55
+ title: Bump version to ${{ steps.get-next-version.outputs.next-version }}
56
+ body: Automated pull request triggered by a new release.
57
+ labels: new-release,ignore-for-release
58
+ reviewers: MiguelRipoll23
59
+ draft: true
@@ -0,0 +1,26 @@
1
+ # Dependency Review Action
2
+ #
3
+ # This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
4
+ #
5
+ # Source repository: https://github.com/actions/dependency-review-action
6
+ # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
7
+ name: Review dependencies
8
+ on:
9
+ pull_request:
10
+ types: [opened, reopened, synchronize, ready_for_review]
11
+ paths-ignore:
12
+ - "**.md"
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ review-dependencies:
19
+ name: Review Dependencies
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout Repository
23
+ uses: actions/checkout@v7
24
+
25
+ - name: Review Dependencies
26
+ uses: actions/dependency-review-action@v5
@@ -0,0 +1,155 @@
1
+ name: Publish package
2
+
3
+ on:
4
+ pull_request:
5
+ types:
6
+ - closed
7
+ branches:
8
+ - main
9
+
10
+ permissions:
11
+ id-token: write
12
+ contents: write
13
+
14
+ jobs:
15
+ create-tag:
16
+ name: Create tag
17
+ runs-on: ubuntu-latest
18
+
19
+ if: github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'new-release')
20
+
21
+ outputs:
22
+ tag-name: ${{ steps.get-tag-name.outputs.tag-name }}
23
+
24
+ steps:
25
+ - name: Checkout branch
26
+ uses: actions/checkout@v7
27
+
28
+ - name: Get tag name
29
+ id: get-tag-name
30
+ run: |
31
+ branch_name="${{ github.event.pull_request.head.ref }}"
32
+ tag_name=$(echo $branch_name | sed 's/version\///')
33
+ echo "tag-name=$tag_name" >> $GITHUB_OUTPUT
34
+
35
+ - name: Create tag
36
+ run: |
37
+ git tag "${{ env.TAG_NAME }}"
38
+ env:
39
+ TAG_NAME: ${{ steps.get-tag-name.outputs.tag-name }}
40
+
41
+ - name: Push tag to origin
42
+ run: git push origin "${{ env.TAG_NAME }}"
43
+ env:
44
+ TAG_NAME: ${{ steps.get-tag-name.outputs.tag-name }}
45
+
46
+ create-release:
47
+ name: Create release
48
+ needs: [create-tag]
49
+ runs-on: ubuntu-latest
50
+ if: needs.create-tag.outputs.tag-name != ''
51
+ permissions:
52
+ contents: write
53
+ steps:
54
+ - name: Create release
55
+ uses: ncipollo/release-action@v1
56
+ with:
57
+ tag: "${{ needs.create-tag.outputs.tag-name }}"
58
+ prerelease: ${{ contains(needs.create-tag.outputs.tag-name, '-') }}
59
+ generateReleaseNotes: true
60
+ allowUpdates: true
61
+
62
+ update-changelog:
63
+ name: Update changelog
64
+ needs: [create-tag, create-release]
65
+ runs-on: ubuntu-latest
66
+ if: needs.create-tag.outputs.tag-name != ''
67
+ permissions:
68
+ contents: write
69
+ steps:
70
+ - name: Checkout branch
71
+ uses: actions/checkout@v7
72
+ with:
73
+ ref: main
74
+
75
+ - name: Build changelog entry from auto release notes
76
+ env:
77
+ GITHUB_TOKEN: ${{ github.token }}
78
+ TAG_NAME: ${{ needs.create-tag.outputs.tag-name }}
79
+ run: |
80
+ release_notes_text="$(
81
+ gh api \
82
+ repos/${{ github.repository }}/releases/tags/${TAG_NAME} \
83
+ --jq '.body'
84
+ )"
85
+
86
+ if [ -z "${release_notes_text}" ]; then
87
+ echo "Release notes were not generated. Skipping changelog update."
88
+ exit 0
89
+ fi
90
+
91
+ current_date="$(date -u +%F)"
92
+ release_header="## ${TAG_NAME} - ${current_date}"
93
+
94
+ if [ -f CHANGELOG.md ] && grep -Fqx "${release_header}" CHANGELOG.md; then
95
+ echo "Changelog already contains ${release_header}. Skipping changelog update."
96
+ exit 0
97
+ fi
98
+
99
+ temporary_file_path="$(mktemp)"
100
+ {
101
+ echo "# Changelog"
102
+ echo
103
+ echo "${release_header}"
104
+ echo
105
+ echo "${release_notes_text}"
106
+ echo
107
+ if [ -f CHANGELOG.md ]; then
108
+ awk 'NR == 1 && $0 == "# Changelog" { next } { print }' CHANGELOG.md
109
+ fi
110
+ } > "${temporary_file_path}"
111
+
112
+ mv "${temporary_file_path}" CHANGELOG.md
113
+
114
+ - name: Commit changelog
115
+ run: |
116
+ git config user.name "github-actions[bot]"
117
+ git config user.email "github-actions[bot]@users.noreply.github.com"
118
+ git add CHANGELOG.md
119
+ if git diff --quiet --cached CHANGELOG.md; then
120
+ echo "No changelog updates to commit."
121
+ exit 0
122
+ fi
123
+ git commit -m "docs: update changelog for ${{ needs.create-tag.outputs.tag-name }}"
124
+ git push origin HEAD:main
125
+
126
+ publish-package:
127
+ name: Publish package
128
+ runs-on: ubuntu-latest
129
+ needs: [create-tag, create-release, update-changelog]
130
+
131
+ steps:
132
+ - name: Checkout branch
133
+ uses: actions/checkout@v7
134
+
135
+ - name: Setup pnpm
136
+ uses: pnpm/action-setup@v6.0.10
137
+ with:
138
+ version: latest
139
+
140
+ - name: Setup node
141
+ uses: actions/setup-node@v7
142
+ with:
143
+ node-version: 24
144
+ registry-url: https://registry.npmjs.org/
145
+
146
+ - name: Install dependencies
147
+ run: pnpm install --frozen-lockfile
148
+
149
+ - name: Get version
150
+ run: |
151
+ echo "NPM_VERSION=${{ needs.create-tag.outputs.tag-name }}" >> $GITHUB_ENV
152
+
153
+ - name: Publish package
154
+ run: |
155
+ pnpm publish --access public --no-git-checks --provenance --tag "$(if [[ $NPM_VERSION == *-* ]]; then echo beta; else echo latest; fi)"
@@ -0,0 +1,27 @@
1
+ # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
2
+ #
3
+ # You can adjust the behavior by modifying this file.
4
+ # For more information, see:
5
+ # https://github.com/actions/stale
6
+ name: Close stale activity
7
+
8
+ on:
9
+ schedule:
10
+ - cron: "19 9 * * *"
11
+
12
+ jobs:
13
+ stale:
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ issues: write
17
+ pull-requests: write
18
+
19
+ steps:
20
+ - uses: actions/stale@v11
21
+ with:
22
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
23
+ stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed in a few days if no further activity occurs. Thank you for your contributions."
24
+ stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed in a few days if no further activity occurs. Thank you for your contributions."
25
+ stale-issue-label: "stale"
26
+ stale-pr-label: "stale"
27
+ exempt-issue-labels: "feature,enhancement,unsupported,pinned"