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