Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1225 commits
Select commit Hold shift + click to select a range
0d8a83a
Update Big Segment store overviews (#503)
ldhenry Nov 22, 2023
554727b
Add username and tlsEnabled formVariables (#505)
ldhenry Nov 29, 2023
3a0d156
Change redis default username to empty string (#506)
ldhenry Nov 29, 2023
a02a496
add externalId field (#507)
monsagri Nov 29, 2023
0998295
new image from linda (#504)
mmrj Nov 30, 2023
4c5c013
Bump @babel/traverse from 7.12.12 to 7.23.2 (#497)
dependabot[bot] Nov 30, 2023
e607cba
[sc-225010] Big Segment store: copyedit manifests (#509)
mmrj Nov 30, 2023
41bca35
Add more regions to DynamoDB manifest (#510)
ldhenry Dec 1, 2023
800b74f
adding Cortex integration
Dec 4, 2023
518ab37
Merge pull request #511 from launchdarkly/dob/mergePublicCortex
Dec 5, 2023
ee0dc30
big segments no longer require capitalization (#512)
mmrj Dec 28, 2023
c8fd0ea
add chronosphere and bitrise
Jan 24, 2024
e8819d0
Merge branch 'main' into dob/sc-231112/mergeNewIntegrations
Jan 24, 2024
1c513e4
Merge pull request #514 from launchdarkly/dob/sc-231112/mergeNewInteg…
Jan 24, 2024
990d409
add Sumatra integration
Feb 6, 2024
bf2c7d8
revert rudderstack
Feb 6, 2024
e7f7308
Merge pull request #515 from launchdarkly/dob/sc-232630
Feb 6, 2024
f77b49e
Adding Ditto integration
Feb 22, 2024
1615f08
Merge pull request #516 from launchdarkly/dob/sc-234226/ditto
Feb 23, 2024
7e07e85
feat: add github flaglink capability (#517)
jazanne Mar 1, 2024
dbbf258
bump github manifest version (#519)
jazanne Mar 1, 2024
5c785ab
adding zeoptap
Mar 22, 2024
437d307
Merge pull request #520 from launchdarkly/dob/zeotap0
Mar 22, 2024
17f05f2
action fix for Chronosphere
Mar 26, 2024
174f509
Merge pull request #521 from launchdarkly/dob/sc-237945/chronosphere
Mar 26, 2024
923b4b4
adding Tealium
Apr 29, 2024
46332c7
Merge pull request #523 from launchdarkly/dob/sc-242199/mergeTealium
Apr 29, 2024
cb47481
add Port integration
May 15, 2024
80977d4
add Last9 integration
May 22, 2024
b08d11e
Merge pull request #524 from launchdarkly/dob/sc-244364/addPort
May 23, 2024
cf5fc01
Merge branch 'main' into dob/sc-245274/addLast9
May 23, 2024
0004ebe
Merge pull request #525 from launchdarkly/dob/sc-245274/addLast9
May 23, 2024
25da71b
merge last9 fix
May 30, 2024
d8e51d3
Merge pull request #526 from launchdarkly/dob/sc-245886/last9fix
May 30, 2024
19c85e8
add flagImport capability, add split manifest (#527)
monsagri Jun 27, 2024
c9e7944
[sc-248580] add dummy manifest (#528)
monsagri Jun 28, 2024
c7af304
Updates readme
ember-stevens Jul 3, 2024
4998dcf
Merge pull request #529 from launchdarkly/emberstevens/sc-154449/copy…
ember-stevens Jul 8, 2024
77ff9b6
[sc-249572] Transfer code ownership to ecosystem team (#530)
ldhenry Jul 17, 2024
cc378ca
Add release BE (#531)
ldhenry Jul 22, 2024
832c99c
remove all references to import for release (#532)
monsagri Jul 22, 2024
e9a9fae
Revert "remove all references to import for release (#532)" (#533)
ldhenry Jul 22, 2024
abea72b
add a few fields (#534)
monsagri Jul 24, 2024
f09c45e
remove statsig and homegrown placeholders (#536)
monsagri Jul 25, 2024
de69d22
update split manifest (#537)
monsagri Jul 29, 2024
01791ad
fix casing (#539)
monsagri Jul 30, 2024
c3e6715
[sc-251044] add preliminary custom approvals manifest (#535)
sloloris Jul 31, 2024
d586d09
Use /result/status as the expected JSON path for Custom Approvals sta…
ldhenry Aug 1, 2024
9747e02
Tealium: fix regex in inclusion matcher
ldhenry Aug 2, 2024
82063d7
Merge pull request #541 from launchdarkly/hbarrow/sc-252055/escalatio…
Aug 2, 2024
8399357
add docs link for split, add new category for split (#543)
monsagri Aug 5, 2024
4973538
Add generic icons to custom-approvals integration (#544)
ldhenry Aug 5, 2024
6ebbeb4
add (#545)
sloloris Aug 6, 2024
0d8d210
[sc-252253] Add comment field to custom approvals 2 (#546)
sloloris Aug 6, 2024
37ad082
fix again (#547)
sloloris Aug 6, 2024
9d921a6
extra curly brace (#548)
sloloris Aug 6, 2024
a2fb143
[sc-251044] Add sample approval form variables to Custom Approvals ma…
ldhenry Aug 6, 2024
180b0f1
make template field optional for flag import integrations (#551)
monsagri Aug 7, 2024
b8d6565
[sc-251520] Add unleash import manifest (#550)
monsagri Aug 7, 2024
5231532
mark includeErrorResponseBody as required (#554)
monsagri Aug 7, 2024
467e1d4
make memberListRequest optional (#555)
sloloris Aug 7, 2024
9f98ed0
[sc-251540] Add approvalFormVariables to replace flagFormVariables (#…
sloloris Aug 7, 2024
74397f0
add baseurl field for unleash (#556)
monsagri Aug 7, 2024
216922a
Fix typo in CODEOWNERS files (#557)
ldhenry Aug 13, 2024
4f0e76e
remove flag form variables (#559)
sloloris Aug 20, 2024
5db9a78
update description for unleash key (#558)
monsagri Aug 20, 2024
f694a8a
[sc-253947] Add new allowadditionalapprovalformvariables (#560)
sloloris Aug 21, 2024
10fec12
Update MS Teams templates to support new Adaptive card format (#561)
ldhenry Aug 21, 2024
6e5dc85
[sc-253948] MS Teams: don't HTML escape URI and wrap all text blocks …
ldhenry Aug 21, 2024
3135277
comment is actually approvalDescription (#564)
sloloris Aug 26, 2024
9ad896c
[sc-254510] Change allowAdditionalApprovalFormVariables to allowAppro…
sloloris Aug 27, 2024
b780eb1
pull from regular form variables (#566)
sloloris Sep 2, 2024
ad9a31a
try again (#567)
sloloris Sep 2, 2024
9948edf
Updated custom approvals name and enabled additional form vars
ctawiah Sep 5, 2024
d61f5d6
Merge pull request #568 from launchdarkly/ctawiah/update-custom-appro…
ctawiah Sep 5, 2024
fd95cab
[sc-255286] Pull in Kosli and Convex integrations from public mirror …
ldhenry Sep 5, 2024
1257859
upload sruthy's logo (#570)
sloloris Sep 10, 2024
fd857bc
[sc-255824] Clean up redundant custom approvals manifest (#571)
sloloris Sep 11, 2024
1a333f8
Update PagerDuty POC (#573)
ldhenry Sep 17, 2024
60f1399
Backmerge public (#572)
ldhenry Sep 17, 2024
c1bd33a
Add includeErrorResponseBody to PagerDuty manfiest (#574)
ldhenry Sep 18, 2024
fb57852
adding Netlify integration
Sep 18, 2024
3ca0dce
Merge pull request #575 from launchdarkly/dob/mergePubInt
Sep 18, 2024
93cff6a
Update PagerDuty POC (#576)
ldhenry Sep 18, 2024
be2a85e
update link (#577)
sloloris Sep 19, 2024
01be3a0
Clean up PagerDuty manifest (#580)
ldhenry Sep 20, 2024
4ab0b2d
Fix incorrect defaultValue in servicenow-normal manifest (#581)
ldhenry Sep 20, 2024
1917db6
replace horizontal icon (#579)
sloloris Sep 20, 2024
b11097d
Add Jira issue linker (#578)
ldhenry Sep 20, 2024
1d1ff2b
update Netlify integration string
Sep 26, 2024
fad85d2
Merge pull request #582 from launchdarkly/dob/ECO-2/netlify
Sep 26, 2024
dc1e2a3
Increase ServiceNow member list limit to 100000 (#584)
ldhenry Oct 3, 2024
2cf1dfc
add top-level property (#585)
sloloris Oct 7, 2024
003597f
[REL-2888] finalize custom-approvals manifest (#583)
sloloris Oct 7, 2024
d9b87df
fix (#586)
sloloris Oct 7, 2024
aeb3cad
Bumped jest version
ctawiah Oct 11, 2024
6275b0e
Merge pull request #588 from launchdarkly/ctawiah/bump-jest-version
ctawiah Oct 11, 2024
27e6cd7
[RO-460] Add event hook integration capability schema
lucywyman Oct 10, 2024
769a8b8
Merge branch 'main' into RO-460-add-eda-event-hook-integration-capabi…
lucywyman Oct 11, 2024
e5d8bbd
Merge pull request #587 from launchdarkly/RO-460-add-eda-event-hook-i…
lucywyman Oct 11, 2024
8bcfdc2
Added environment selector and multi select form variable types
ctawiah Oct 14, 2024
ae1db80
Add manifest for snowflake experimentation integration
blake-wilson Oct 14, 2024
f8be2c1
Merge pull request #589 from launchdarkly/ctawiah/REL-3202/add-env-an…
ctawiah Oct 14, 2024
ccf9709
Enable integration configurations API for snowflake-experimentation
blake-wilson Oct 14, 2024
061cb6c
Fix JSON syntax
blake-wilson Oct 14, 2024
9a0e97a
Check in assets
blake-wilson Oct 14, 2024
b4f0001
End overview message in period
blake-wilson Oct 14, 2024
926a3fa
Run prettier
blake-wilson Oct 14, 2024
5839500
Fix validation error
blake-wilson Oct 14, 2024
1146077
[RO-471] Add PagerDuty integration manifest
lucywyman Oct 14, 2024
986346a
Merge pull request #591 from launchdarkly/RO-471-create-pager-duty-in…
lucywyman Oct 16, 2024
cb67101
Remove duplicate region variable
blake-wilson Oct 16, 2024
861a601
adding roadie integration
Oct 21, 2024
20c9968
Merge branch 'main' into dob/ECO-5/backstage
Oct 21, 2024
ad00379
Merge pull request #592 from launchdarkly/dob/ECO-5/backstage
Oct 21, 2024
b0f6ee3
[RO-471] Allow integration config form for PagerDuty integration
lucywyman Oct 21, 2024
0842e64
Merge pull request #593 from launchdarkly/allow-integration-config-fo…
lucywyman Oct 21, 2024
7aed590
remove default value
dariushar Oct 21, 2024
e4487e1
fix validation error
dariushar Oct 21, 2024
63030a3
run prettier
dariushar Oct 21, 2024
f209aef
Merge pull request #594 from launchdarkly/RO-568-should-render-config…
dariushar Oct 21, 2024
63d5789
Added tests for integration configs and multi select
ctawiah Oct 21, 2024
14dcbd5
Merge pull request #595 from launchdarkly/ctawiah/REL-3383/tests-for-…
ctawiah Oct 22, 2024
42b688d
update pagerduty-rg payload templates
dariushar Oct 23, 2024
855de62
[RO-580] Fix event hook type parsing
lucywyman Oct 25, 2024
63de845
Merge pull request #598 from launchdarkly/RO-580-fix-resolve-event-hook
lucywyman Oct 25, 2024
4fe6a76
removing links for now
dariushar Oct 25, 2024
7faea1e
Merge branch 'main' into RO-517-template-pager-duty-api-payload-per-e…
dariushar Oct 25, 2024
0be5381
Merge pull request #596 from launchdarkly/RO-517-template-pager-duty-…
lucywyman Oct 25, 2024
b3af078
Add public key to snowflake experimentation integration
blake-wilson Oct 28, 2024
c96c38b
Run prettier:write
blake-wilson Oct 28, 2024
b491810
Vercel: explicitly set user-agent header (#599)
ldhenry Oct 29, 2024
1223214
[RO-471] Fix PagerDuty URL for release guardian integration
lucywyman Oct 29, 2024
10432af
Merge pull request #600 from launchdarkly/RO-471-add-oauth-pagerduty-rg
lucywyman Oct 29, 2024
cae92cd
Use environment selector for snowflake experimentation config
blake-wilson Oct 29, 2024
7527549
Remove duplicate description
blake-wilson Oct 29, 2024
c609c17
Merge remote-tracking branch 'origin/main' into DPROD-235-create-mani…
blake-wilson Oct 29, 2024
b8a886d
Merge pull request #590 from launchdarkly/DPROD-235-create-manifest-f…
blake-wilson Oct 29, 2024
21e89f3
Hbarrow/backmerge public (#601)
ldhenry Oct 31, 2024
203d1a8
[REL-3702] Update merge to public script (#602)
ldhenry Oct 31, 2024
556269f
[RO-663] Fix invalid JSON in request body
lucywyman Oct 31, 2024
3f751d9
Merge pull request #603 from launchdarkly/fix-json-typos
lucywyman Oct 31, 2024
2957462
[RO-663] Fix invalid JSON in request body
lucywyman Oct 31, 2024
59060a9
Merge branch 'main' into fix-json-typos
lucywyman Oct 31, 2024
9877afd
Merge pull request #604 from launchdarkly/fix-json-typos
lucywyman Oct 31, 2024
e231e22
[RO-663] Fix invalid JSON in request body (#606)
carmenquan Oct 31, 2024
8ec7cab
Make integrationKey for PagerDuty-RG not secret (#608)
carmenquan Oct 31, 2024
2b6d9b4
Remove organization, account, and region in favor of 'account_url'
blake-wilson Nov 1, 2024
5ebc98a
Camel case new form field
blake-wilson Nov 1, 2024
aa86c74
Use 'uri' data type for accountURL form variable
blake-wilson Nov 1, 2024
7bdefe8
Merge pull request #609 from launchdarkly/DPROD-335-remove-orchestrat…
blake-wilson Nov 4, 2024
69b8178
[REL-3171] Start on ServiceNow native (#597)
ldhenry Nov 5, 2024
7d99f42
[RO-664] Interpolate measured rollout flag name for Pagerduty - Guardian
lucywyman Nov 5, 2024
fcf5887
Rename event selector values to match event kinds in payload
lucywyman Nov 6, 2024
9aa60ee
[REL-3869] servicenow-c0: Disable assignment group override per custo…
ldhenry Nov 6, 2024
056292e
Merge branch 'main' into RO-664-interpolate-measured-rollout-id-into-…
lucywyman Nov 6, 2024
f7cccf2
Merge pull request #611 from launchdarkly/RO-664-interpolate-measured…
lucywyman Nov 6, 2024
db7093d
[RO-671] Send flag tags and other metadata to PD
lucywyman Nov 7, 2024
0e2c761
Add links to servicenow-c0 manifest (#613)
ldhenry Nov 7, 2024
0901b97
Merge branch 'main' into RO-671-send-flag-tags-and-other-metadata-to-…
lucywyman Nov 7, 2024
4793871
Merge pull request #614 from launchdarkly/RO-671-send-flag-tags-and-o…
lucywyman Nov 7, 2024
51c3c68
[RO-684] Rename pagerduty-rg to pagerduty-guardian-edition
lucywyman Nov 7, 2024
726dd32
Correct event filter defaults
lucywyman Nov 7, 2024
fc1f0c0
Merge pull request #615 from launchdarkly/RO-684-rename-pager-duty-rg…
lucywyman Nov 7, 2024
efaa849
[RO-737] Correctly structure pagerduty requests
lucywyman Nov 14, 2024
c348dae
Merge pull request #616 from launchdarkly/RO-737-add-flag-link-to-pag…
lucywyman Nov 15, 2024
61b1301
Correct description of "warehouse" field in prototype form (#618)
Nov 19, 2024
b5dd6a0
add hideEmpty property for form fields
awinders-launchdarkly Nov 20, 2024
775e878
Merge branch 'main' into awinders-EXPT-1378-create-new-functionality-…
awinders-launchdarkly Nov 20, 2024
cfe1536
Merge pull request #619 from launchdarkly/awinders-EXPT-1378-create-n…
awinders-launchdarkly Nov 20, 2024
7ed4d33
add new integration for snowflake export
awinders-launchdarkly Nov 20, 2024
55849a4
updates to manifest
awinders-launchdarkly Nov 21, 2024
cb61671
add periods
awinders-launchdarkly Nov 21, 2024
867d802
Update integrations/snowflake-export/manifest.json
awinders-launchdarkly Nov 22, 2024
932f188
Update integrations/snowflake-export/manifest.json
awinders-launchdarkly Nov 22, 2024
888d2a1
Merge pull request #620 from launchdarkly/awinders-EXPT-1379-create-e…
awinders-launchdarkly Nov 22, 2024
bd3be6b
add new SNE integration
awinders-launchdarkly Nov 20, 2024
afcae62
add new otherCapabilities
awinders-launchdarkly Nov 25, 2024
ede9a2c
regenerated
awinders-launchdarkly Nov 25, 2024
8251fc4
add hidden, secret, private key for validation reasons
awinders-launchdarkly Nov 25, 2024
4fbd377
servicenow-c0: Add project key and name (#622)
ldhenry Nov 27, 2024
814fedd
[IDE-722] Migrating from Circle to GHA (#623)
ldhenry Nov 28, 2024
e84b934
Bump semver and nodemon
dependabot[bot] Nov 28, 2024
550fffa
name change
awinders-launchdarkly Dec 2, 2024
8dbbb5c
build
awinders-launchdarkly Dec 2, 2024
a0cf0db
Merge branch 'main' into awinders-EXPT-1380-create-sne-integration
awinders-launchdarkly Dec 2, 2024
dbcfeb8
Merge pull request #621 from launchdarkly/awinders-EXPT-1380-create-s…
awinders-launchdarkly Dec 2, 2024
530f0e9
change integration type from snowflake-export to snowflake-v2
awinders-launchdarkly Dec 2, 2024
99b8a4c
Merge pull request #625 from launchdarkly/awinders-update-integration…
awinders-launchdarkly Dec 3, 2024
18d0dc4
Merge branch 'main' into dependabot/npm_and_yarn/multi-cc43097b48
lucywyman Dec 3, 2024
284da34
Merge pull request #624 from launchdarkly/dependabot/npm_and_yarn/mul…
lucywyman Dec 3, 2024
cee6b5a
update RSA key isOptional values
awinders-launchdarkly Dec 3, 2024
add5047
add default value
awinders-launchdarkly Dec 3, 2024
a120363
Merge branch 'main' into awinders-snowflake-exp-update
awinders-launchdarkly Dec 4, 2024
996554f
Merge pull request #626 from launchdarkly/awinders-snowflake-exp-update
awinders-launchdarkly Dec 4, 2024
c22cb09
Bump path-to-regexp and express (#627)
dependabot[bot] Dec 6, 2024
96723b7
Bump cross-spawn from 7.0.3 to 7.0.6 (#617)
dependabot[bot] Dec 6, 2024
69fde33
add new capability (#628)
awinders-launchdarkly Dec 10, 2024
6fe353b
[REL-4728] Create manifest for Fastly POC (#629)
ldhenry Dec 10, 2024
3b3ab08
(feat) SNE: Persist sync task id on SNE config (#631)
cmaija Dec 18, 2024
8c92ff5
[EXPT-1536] change placeholder (#630)
awinders-launchdarkly Jan 7, 2025
8b353e3
(feat) add event last seen task id to manifest (#632)
cmaija Jan 7, 2025
9c60786
copy changes for snowflake experimentation (#634)
awinders-launchdarkly Jan 14, 2025
09a3c19
[REL-5363] add new flagCleanup capability (#635)
monsagri Jan 16, 2025
38ea8fc
[REL-5366] Ffeldberg/rel 5366/add a manifest for the gitar integratio…
monsagri Jan 17, 2025
1af29ee
[REL-5366] add field for github org name and move formVariables (#637)
monsagri Jan 17, 2025
e2d2e4a
add new form variable to better support public keys (#638)
awinders-launchdarkly Jan 24, 2025
f61a7dd
[REL-5585] send date field for splunk integration (#639)
monsagri Jan 27, 2025
b4f2af7
Update COCDEOWNERS (#640)
ldhenry Jan 31, 2025
fc6ca9d
Backmerge public (#641)
ldhenry Jan 31, 2025
0cd31ec
ServiceNow Normal: add the option to skip change window (#643)
ldhenry Feb 7, 2025
a107c7e
use publicKey formvariable type (#644)
awinders-launchdarkly Feb 7, 2025
5409b8e
feat(fastly): add official assets (#645)
ldhenry Feb 10, 2025
b2c5a1e
chore: disable Jira Issue linker comments (#646)
ldhenry Feb 17, 2025
d3c74cd
[DOCS-835] docs: copy updates to Gitar manifest.json (#642)
mmrj Feb 26, 2025
b97f552
update launchdarklyDocs manifest links to use new URLs (#650)
mmrj Feb 26, 2025
479762d
Update GitHub Action SHA to latest version (#648)
ldhenry Feb 27, 2025
a6002a6
Add manifest for snowflake product analytics integration (#651)
babboe1 Mar 3, 2025
591cde0
Add Crossplane card (#652)
ldhenry Mar 14, 2025
879291f
[PA-254] Update Snowflake Product Analytics manifest with improved de…
babboe1 Mar 21, 2025
47d921c
Rename Snowflake Product Analytics to Snowflake Native Product Analyt…
babboe1 Apr 1, 2025
9287cba
Refactor: Replace houseware url with LaunchDarkly documentation in Ma…
babboe1 Apr 4, 2025
c97c4db
Remove jira linker (#656)
BehnH Apr 4, 2025
5d94569
[PA-329] Feat: Add JSON schema for internal configuration URL capabil…
babboe1 Apr 8, 2025
23cd574
Feature: Implement warehouse Native Product Analytics integration wi…
babboe1 Apr 10, 2025
da63673
[REL-6866] Imiller/rel 6866/reconcile integration framework repos (#661)
sloloris Apr 29, 2025
3b8c7e6
Remove Snowflake Product Analytics integration v1 files including man…
babboe1 May 1, 2025
f5da733
Refactor: Update manifest files for BigQuery, Databricks, and Snowfla…
babboe1 May 6, 2025
c799d70
add new oauth manifest (#664)
sloloris Jun 20, 2025
42a4ada
triple-escape approval and comment fields to avoid escaping breaking …
sloloris Jun 26, 2025
8886d1a
Add manifests for BigQuery and Databricks (#666)
XieX Jun 27, 2025
a521b48
fix typo (#667)
sloloris Jul 22, 2025
0798726
Rename databricks and bigquery manifest kinds (#668)
XieX Jul 24, 2025
4ea4d58
[REL-7176] add integration for dynatrace api v2 (#669)
blaqbern Jul 30, 2025
38ae286
fix quotes (#670)
sloloris Aug 4, 2025
a033572
[PA-842] Imiller/pa 842/add buttonAction capability (#671)
sloloris Aug 5, 2025
45785b7
allowIntegrationConfigurations (#672)
sloloris Aug 5, 2025
75e148c
add (#673)
sloloris Aug 5, 2025
22e8b9f
[PA-842] Pa 842/add button action to manifest (#674)
sloloris Aug 5, 2025
2298bef
Refactor Devin Flag Cleanup integration to a more general Devin Integ…
DhruvLD Aug 6, 2025
c56db72
[PA-842] allow for multiple different request bodies in buttonAction …
sloloris Aug 6, 2025
5de37b7
fix the jsonBody for the sdkSetup Devin (#677)
DhruvLD Aug 7, 2025
46e3830
[REL-8809] Adding AI config test run manifest (#678)
ctawiah Aug 26, 2025
e372c8a
feat: [SEC-7263] Add dependency-scan GitHub Actions workflow (#679)
pkaeding Sep 12, 2025
4aea267
[REL-8880] merge
sloloris Oct 8, 2025
6c4fcca
[REL-8880] add docs directory back
sloloris Oct 8, 2025
53b5388
[REL-8880] merge main
sloloris Oct 8, 2025
c8bcab9
[REL-8880] remove devin moonshot integration
sloloris Oct 8, 2025
5d8c133
[REL-8880] remove pr gha
sloloris Oct 8, 2025
895418f
[REL-8880] remove dependency scan
sloloris Oct 8, 2025
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
15 changes: 0 additions & 15 deletions .github/workflows/pull_request.yml

This file was deleted.

12 changes: 10 additions & 2 deletions __tests__/validateIntegrationManifests.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,14 @@ const OAUTH_INTEGRATIONS = [
'sentry',
'servicenow',
'servicenow-normal',
'servicenow-app',
'custom-approvals-oauth',
]; // add oauth integrations here
const INTEGRATIONS_WITH_DUP_OAUTH_KEYS = ['servicenow', 'servicenow-normal']; // these are integrations we expect to have duplicate oauth integration keys for various reasons
const INTEGRATIONS_WITH_DUP_OAUTH_KEYS = [
'servicenow',
'servicenow-normal',
'servicenow-app',
]; // these are integrations we expect to have duplicate oauth integration keys for various reasons

var parse = require('url-parse');

Expand Down Expand Up @@ -431,8 +437,10 @@ describe('All integrations', () => {
test.each(manifests)(
'at least one externalCapability has been defined if no manifest capabilities for %s',
(key, manifest) => {
const integrationsWithNoCapabilities = ['aiconfig-test-run'];
const capabilities = _.get(manifest, 'capabilities', null);
if (!capabilities) {

if (!capabilities && !integrationsWithNoCapabilities.includes(key)) {
const otherCapabilities = _.get(manifest, 'otherCapabilities', null);
expect(otherCapabilities).not.toBeNull();
expect(otherCapabilities.length).toBeGreaterThan(0);
Expand Down
299 changes: 299 additions & 0 deletions docs/capabilities.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,299 @@
# Capabilities
Copy link
Member Author

Choose a reason for hiding this comment

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

i have genuinely no idea where these came from as they don't appear to have previously been on either public or private repo. but they're great docs

Copy link
Contributor

Choose a reason for hiding this comment

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

These were intentionally deleted from this repo to prefer the documentation on our public docs site so we should not reintroduce them here.


Your integration's `capabilities` describe how it interacts with LaunchDarkly.

We support three capabilities:

- [Audit log events hook](#audit-log-events-hook-auditlogeventshook) (`auditLogEventsHook`)
- [Trigger](#trigger-trigger) (`trigger`)
- [Reserved custom properties](#reserved-custom-properties-reservedcustomproperties) (`reservedCustomProperties`)

## Audit log events hook (`auditLogEventsHook`)

An audit log events hook is a webhook that LaunchDarkly sends whenever an
event happens inside of LaunchDarkly. Each of these events
result in an event being published to LaunchDarkly's audit log.
You can use this capability to send data to or trigger an event in another service.

The `auditLogEventsHook` has three properties:

1. [`endpoint`](#endpoint):
Describes the HTTP handler that will receive the webhook.
2. [`templates`](#templates):
A map of template paths relative to your integration's directory. You can use templates to transform the raw audit log events to a format that your integration expects. These templates can be any file type.
3. [`defaultPolicy`](#default-policy):
An array of [LaunchDarkly
policies](https://docs.launchdarkly.com/home/account-security/custom-roles/policies) that
act as a filter determining which events to send to your webhook endpoint.

Here's an example of an audit log events hook capability that subscribes to flag
events in a LaunchDarkly account:

```json
"capabilities": {
"auditLogEventsHook": {
"endpoint": {
"url": "{{endpointUrl}}",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer {{apiToken}}"
}
]
},
"templates": {
"flag": "templates/flag.json"
},
"defaultPolicy": [
{
"effect": "allow",
"resources": ["proj/*:env/production:flag/*"],
"actions": ["*"]
}
]
}
}
```

### Endpoint

Every `auditLogEventsHook` capability must specify the endpoint to which LaunchDarkly should send webhook data. This specification must include all appropriate request semantics including the URL, method, and headers.

In the example
above, a few of the properties (`endpoint.url` and
`endpoint.headers[].value`) accept template variables. These template
variables can reference any `formVariables` you've defined in your manifest.
The templating language we use is based off of a subset of the
Handlebars syntax.

To learn more, read [Handlebars' documentation](https://handlebarsjs.com/).

There are a few properties that allow you to substitute template variables at
runtime. The main ones are the `endpoint.url` and the
`endpoint.headers[].value`. This lets you configure a dynamic endpoint
based on the `formVariables` your integration collects from the user. Examples follow.

This example uses the `endpointUrl` form variable as the URL of the endpoint and the `apiToken` as a `Bearer` token in the `Authorization` header:

```json
"endpoint": {
"url": "{{endpointUrl}}",
"method": "POST",
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer {{apiToken}}"
}
]
},
```

This example uses the `apiToken` formVariable as a query parameter on the URL:

```json
"endpoint": {
"url": "https://example.com/apiToken?={{apiToken}}",
"method": "POST"
},
```

### Templates

Before the `auditLogEventsHook` capability sends the request to the endpoint
handling your webhook, you can transform the body of the request
sent to your handler.

In your manifest, you can specify templates to be executed when webhook events are of kinds `flag`, `project`, and `environment`. Additionally, you can specify a `default` template as a catch-all for any event without a more specific template. A `validation` template is also provided in case you want to provide users with the ability to validate their connection by sending a test event from LaunchDarkly to your service.

```json
"templates": {
"default": "templates/default.json.hbs",
"flag": "templates/flag.json.hbs",
"project": "templates/project.json.hbs",
"environment": "templates/environment.json.hbs",
"validation": "templates/default.json.hbs"
},
```

If you don't provide one or more templates, LaunchDarkly
sends you a default JSON payload that looks like this:

```json
{
"_links": {
"canonical": {
"href": "/api/v2/flags/always-snippet/example-test",
"type": "application/json"
},
"parent": {
"href": "/api/v2/auditlog",
"type": "application/json"
},
"self": {
"href": "/api/v2/auditlog/5defebd006121dd9f7ea90d0",
"type": "application/json"
},
"site": {
"href": "/always-snippet/production/features/example-test",
"type": "text/html"
}
},
"_id": "5defebd006121dd9f7ea90d0",
"_accountId": "",
"timestamp": {
"milliseconds": 1580778134028,
"seconds": 1580778134,
"rfc3339": "2020-02-04T01:02:14Z"
},
"kind": "flag",
"name": "Example test",
"description": "",
"shortDescription": "",
"comment": "This is just a test",
"member": {
"_links": {
"parent": {
"href": "/api/v2/members",
"type": "application/json"
},
"self": {
"href": "/api/v2/members/569f514183f2164430000002",
"type": "application/json"
}
},
"_id": "569f514183f2164430000002",
"email": "[email protected]",
"firstName": "Henry",
"lastName": "Barrow"
},
"titleVerb": "",
"markdownTitle": "[Henrietta Powell](mailto:[email protected]) turned on the flag [Example test](http://app.launchdarkly/exampledotcom/production/features/example-test) in `Production`",
"title": "Henrietta Powell turned on the flag Example test in 'Production'",
"target": {
"_links": null,
"name": ""
}
}
```

If you choose to provide one or more
`templates`,
LaunchDarkly renders your template using the context data above. Your
template can be any text based format, but you must specify the appropriate
`Content-Type` header in your `endpoint.headers` property to match the content
type of your template body.

We use a basic subset of the Handlebars template syntax to render
your template.

To learn more about Handlebars' sysntax, read [Handlebars' Language
Guide](https://handlebarsjs.com/guide/).

In addition to the basic language syntax, we support the following [built-in
helpers](https://handlebarsjs.com/guide/builtin-helpers.html):

- `if`
- `unless`
- `each`
- `with`
- `lookup`

Furthermore, the following custom helpers are supported:

- `equal` - renders a block if the string version of both arguments are equals
- `pathEncode` - URL path encodes the string version of the argument
- `queryEncode` - URL query encodes the string version of the argument

To test your templates, you can run `npm run preview $INTEGRATION_NAME` or use the [Handlebars
Sandbox](http://tryhandlebarsjs.com/).

### Default policy

When you configure your integration, customers can specify an array of [LaunchDarkly
policies](https://docs.launchdarkly.com/home/account-security/custom-roles/policies) filter which events to send to your webhook endpoint.

To simplify onboarding your integration, you can specify a default policy which follows best practices for your integration's use case.

Assuming your integration only cares about flag activity, we recommend the following default policy. This policy specifies that LaunchDarkly will notify your integration of all flag activity across production environments from all projects.

Here is the policy:

```json
"defaultPolicy": [
{
"effect": "allow",
"resources": ["proj/*:env/production:flag/*"],
"actions": ["*"]
}
]
```

### Validation

To preview your integration's templates with sample data, run `npm run preview INTEGRATION_NAME`.

Alternatively, to produce a sample `curl` command, run `npm run curl INTEGRATION_NAME`. This returns data with your integration's service as if it was sent by the audit log event hook capability.

## Trigger (`trigger`)

**At the time of this writing, LaunchDarkly's trigger functionality is only available to customers opted in to an early access program. Email [[email protected]](mailto:[email protected]) to request access.**

The trigger capability is used to generate a unique webhook URL that your service can request to generate a user-defined flag change in LaunchDarkly.

By default, the trigger URL contains a globally unique path parameter to provide security in the form of an [unguessable URL](https://www.schneier.com/blog/archives/2015/07/googles_unguess.html). However, if your service supports additional security settings such as shared secrets when firing webhooks, you can specify those with the optional `auth` object. **Note**: at launch, the `auth` attribute is unsupported and should be omitted.

The required `documentation` field must be a link to documentation outlining how webhooks should be configured in your service.

If the integration offers the option to send test events / webhook requests, the optional `testEventNameRegexp` fields allows you to specify regex to match the expected `eventName` value below. This will tell our integration framework not to make any real flag or resource changes associated with matching events.

If your webhooks' request bodies are non-empty, you can specify the optional `parser` object with one or more of `eventName`, `value`, and `url`. The provided values will flow through LaunchDarkly into the resulting audit log messages when your service invokes a trigger in LaunchDarkly.

Here is a sample `trigger` capability including all optional properties:

```json
"trigger": {
"documentation": "https://example.com/configuring-webhooks",
"auth": {
"type": "sharedSecret"
},
"parser": {
"eventName": "/event",
"value": "/value",
"url": "/links/self/href"
},
}
```

**Note**: if an integration only has the trigger capability, the word "trigger" will be added to its name in the LaunchDarkly UI. For this reason, do not include the word "trigger" in the manifest name. See the [generic-trigger manifest](/integrations/generic-trigger/manifest.json) for an example.

## Reserved custom properties (`reservedCustomProperties`)

Custom properties allow you to store data in LaunchDarkly alongside a feature flag. For example, you can use custom properties to indicate flag-level associations with data on your service. If you don't have any flag-level associations or configurations, you don't need to use this capability.

To learn more, read [Custom properties](https://docs.launchdarkly.com/home/advanced/custom-properties).

By default, users must specify a custom property name and key when they attach the custom property value to a feature flag. This step introduces the possibility of user error. To prevent this, developers can _reserve_ a custom property for their integration, which makes it much easier for users to correctly add the property's value to feature flags.

Reserved custom properties are simple to define. Their only requirements are a `name` and `key`.

After your integration is configured by a user, the custom property starts appearing in the dropdown on the flag's Settings page.

Here is a sample `reservedCustomProperties` capability:

```json
"reservedCustomProperties": [
{
"name": "Foobar Entities",
"key": "foobar"
}
],
```
44 changes: 44 additions & 0 deletions docs/form-variables.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Form variables

Most integrations need to collect one or more pieces of configuration data
that supports the integration, such as API tokens or webhook endpoints.

To support these configurations, describe a set of
`formVariables` that define these configuration properties.

Here's an example:

```json
"formVariables": [
{
"key": "endpointUrl",
"name": "Webhook endpoint URL",
"description": "Enter the URL to the webhook endpoint",
"defaultValue": "https://example.com/inbound_webhook",
"type": "url"
},
{
"key": "apiToken",
"name": "API Key",
"description": "Enter your [API key](https://example.com/api) here",
"type": "string",
"isSecret": true
}
],
```

The `formVariables` entry above displays as the following UI in the [LaunchDarkly Integrations
page](https://app.launchdarkly.com/default/integrations):

![Example configuration
form](https://gist.githubusercontent.com/rmanalan/447b78a8c00a46c8638cca834c3009a3/raw/810d8941f29c0306021a973bd6cf10c42bdea03b/goaltender-config-ui.png)

Form variables apply to the entire integration configuration. There are no capability-specific form variables.

The `formVariables[].description` will be used as a field label on the UI. You
can use simple markdown to link a word or phrase to an external URL.

Accepted form variable types are `string`, `boolean`, `uri`, `enum`, and `dynamicEnum`.
Optionally, you can set `isSecret` or `isOptional` if necessary, or provide guidance with `placeholder` and `defaultValue`. If you provide a `defaultValue`, you must also set `isOptional` to `true` and vice versa.

To learn more, read the [manifest schema](../manifest.schema.json).
Loading