Skip to content

feat: implement Zaplie for DevOps extension#1

Merged
BenGWeeks merged 3 commits into
mainfrom
feature/zaplie-extension
Feb 2, 2026
Merged

feat: implement Zaplie for DevOps extension#1
BenGWeeks merged 3 commits into
mainfrom
feature/zaplie-extension

Conversation

@BenGWeeks
Copy link
Copy Markdown
Contributor

Summary

Implements the complete Zaplie for DevOps extension that enables 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 (unified with ZapDesk)

Tech Stack

  • React 18 with Fluent UI v9
  • TypeScript 5 with strict mode
  • Webpack 5 for bundling
  • qrcode.react for QR generation

Documentation

  • CLAUDE.md - AI assistant context
  • docs/SOLUTION_DESIGN.adoc - Architecture documentation
  • docs/DEPLOY.adoc - Deployment guide
  • docs/TROUBLESHOOTING.adoc - Troubleshooting guide
  • details.md - Marketplace listing

CI/CD

  • .github/workflows/ci.yml - Lint, format, build on push/PR
  • .github/workflows/publish.yml - Marketplace publishing on version tags

Test plan

  • Build VSIX with bun run package-dev
  • Install in test Azure DevOps organization
  • Configure Lightning address in Organization Settings → Zaplie Settings
  • Verify "Zap" appears in work item context menu
  • Test zap dialog with amount selection and QR code
  • Verify comment posted after confirming zap

🤖 Generated with Claude Code

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>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread scripts/services/graphService.ts Outdated
Comment thread package.json Outdated
Comment thread scripts/components/QRCodeDisplay.tsx Outdated
Comment thread scripts/utils/lnurl.ts Outdated
Comment thread scripts/components/ZapDialog.tsx
Comment thread gulpfile.js Outdated
Comment thread scripts/services/lightningService.ts Outdated
Comment thread scripts/services/workItemService.ts Outdated
Comment thread img/zap-icon.png Outdated
Comment thread gulpfile.js Outdated
@BenGWeeks BenGWeeks requested a review from Copilot February 2, 2026 20:03
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread img/logo.png Outdated
BenGWeeks and others added 2 commits February 2, 2026 20:14
- 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>
@BenGWeeks BenGWeeks merged commit 84baab4 into main Feb 2, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants