feat: implement Zaplie for DevOps extension#1
Merged
Conversation
Add Bitcoin Lightning tipping (zaps) for Azure DevOps work items. Features: - Work item context menu action to zap assignees - Preset amounts (100, 500, 1000, 5000 sats) and custom amounts - QR code generation for Lightning wallet scanning - Automatic comment posting on zap confirmation - Settings hub for Lightning address configuration - Lightning address storage via Microsoft Graph user extensions Tech stack: - React 18 with Fluent UI v9 - TypeScript 5 with strict mode - Webpack 5 for bundling - qrcode.react for QR generation Includes CI/CD workflows for automated publishing to VS Marketplace. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Implements a full Azure DevOps extension (“Zaplie for DevOps”) that enables Bitcoin Lightning “zaps” (tips) from work item context menus, plus an org settings hub for configuring Lightning addresses.
Changes:
- Adds the Azure DevOps extension manifest (contributions/scopes), packaging setup, and bundling pipeline (Gulp + Webpack + TypeScript).
- Implements the React/Fluent UI UI for the zap dialog, amount selection, QR/invoice display, and settings form.
- Adds Lightning (LNURL-pay) invoice fetching + address validation and Microsoft Graph-based Lightning address storage, plus documentation and CI/CD workflows.
Reviewed changes
Copilot reviewed 30 out of 33 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| zapAction.html | Action entry HTML wrapper to initialize VSS and load zap module/styles. |
| settings.html | Settings hub entry HTML wrapper to initialize VSS and load settings module/styles. |
| webpack.config.js | Webpack build for AMD output bundling the React/TS entry points. |
| vss-extension.json | Extension manifest defining contributions, scopes, and packaged files. |
| tsconfig.json | TypeScript AMD/ES5 configuration for the extension code. |
| styles/zap.scss | Base styling for action/settings containers and common UI states. |
| scripts/zapAction.tsx | Work item context-menu action bootstrapping + assignee/address lookup and comment posting. |
| scripts/settings.tsx | Settings hub bootstrapping + load/save/delete Lightning address. |
| scripts/types/index.ts | Shared type definitions and default zap presets. |
| scripts/utils/lnurl.ts | Lightning address parsing/formatting helpers. |
| scripts/services/lightningService.ts | LNURL-pay metadata/invoice fetching and validation helpers. |
| scripts/services/workItemService.ts | Work item assignee lookup and comment-posting utilities. |
| scripts/services/graphService.ts | Microsoft Graph calls for storing Lightning addresses as user extensions. |
| scripts/components/ZapDialog.tsx | Main zap dialog UI, invoice loading, confirmation, and clipboard actions. |
| scripts/components/AmountSelector.tsx | Preset/custom sat amount selection control. |
| scripts/components/QRCodeDisplay.tsx | QR code rendering, copy actions, and wallet deep link UI. |
| scripts/components/SettingsForm.tsx | Lightning address settings UI with validation/testing and save/delete actions. |
| gulpfile.js | Build orchestration (webpack, styles, HTML inlining, VSIX creation). |
| package.json | Dependencies and scripts for lint/format/build/package and Bun workflow usage. |
| .eslintrc.json | ESLint config for TS/React code quality checks. |
| .prettierrc | Prettier formatting rules. |
| .gitignore | Ignored build/artifact paths for Node/Bun + VSIX outputs. |
| .github/workflows/ci.yml | CI workflow to lint/format and build the extension. |
| .github/workflows/publish.yml | Publishing workflow to build and publish VSIX packages. |
| README.md | Project README (usage, development, and docs links). |
| details.md | Marketplace listing content for the extension. |
| docs/SOLUTION_DESIGN.adoc | Architecture and design documentation for the extension. |
| docs/DEPLOY.adoc | Deployment and publishing guide. |
| docs/TROUBLESHOOTING.adoc | Troubleshooting guide for common runtime/build issues. |
| CLAUDE.md | AI assistant context and project notes. |
| img/logo.png | Placeholder extension logo asset (currently not a real PNG). |
| img/zap-icon.png | Placeholder toolbar/icon asset (currently not a real PNG). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 30 out of 33 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Add documentation about VSS token limitations for Graph API access - Sync package.json version to 1.0.2 to match vss-extension.json - Normalize invoice URI to always include lightning: prefix for deep linking - Fix Lightning address validation to require exactly one @ and trim whitespace - Add aria-label accessibility attributes to icon-only buttons - Conditionally enable BundleAnalyzerPlugin only when ANALYZE env var is set - Remove tslint task and dependencies (using ESLint instead) - Fix subdomain validation to use dot boundary (prevent evil-example.com matching example.com) - Add HTML escaping to formatZapComment to prevent XSS - Replace placeholder text files with actual valid PNG images - Remove unused path require from gulpfile.js Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new contribution for work-item-toolbar-menu target - Zap action now accessible from both context menu and work item form toolbar - Bump version to 1.0.3 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the complete Zaplie for DevOps extension that enables Bitcoin Lightning tipping (zaps) for Azure DevOps work items.
Features
Tech Stack
Documentation
CI/CD
.github/workflows/ci.yml- Lint, format, build on push/PR.github/workflows/publish.yml- Marketplace publishing on version tagsTest plan
bun run package-dev🤖 Generated with Claude Code