unleash-server 5.2.7 → 5.3.0
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.
- package/dist/lib/addons/addon-schema.js +10 -0
- package/dist/lib/addons/addon-schema.js.map +1 -1
- package/dist/lib/addons/addon.d.ts +1 -0
- package/dist/lib/addons/addon.js.map +1 -1
- package/dist/lib/addons/datadog-definition.js +21 -0
- package/dist/lib/addons/datadog-definition.js.map +1 -1
- package/dist/lib/addons/datadog.d.ts +8 -1
- package/dist/lib/addons/datadog.js +14 -2
- package/dist/lib/addons/datadog.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +62 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/feature-event-formatter-md.d.ts +1 -0
- package/dist/lib/addons/feature-event-formatter-md.js +7 -0
- package/dist/lib/addons/feature-event-formatter-md.js.map +1 -1
- package/dist/lib/addons/index.d.ts +2 -1
- package/dist/lib/addons/index.js +12 -2
- package/dist/lib/addons/index.js.map +1 -1
- package/dist/lib/addons/installation-definition-schema.d.ts +2 -0
- package/dist/lib/addons/installation-definition-schema.js +13 -0
- package/dist/lib/addons/installation-definition-schema.js.map +1 -0
- package/dist/lib/addons/slack-app-definition.d.ts +3 -0
- package/dist/lib/addons/slack-app-definition.js +68 -0
- package/dist/lib/addons/slack-app-definition.js.map +1 -0
- package/dist/lib/addons/slack-app.d.ts +23 -0
- package/dist/lib/addons/slack-app.js +137 -0
- package/dist/lib/addons/slack-app.js.map +1 -0
- package/dist/lib/addons/slack-app.test.d.ts +1 -0
- package/dist/lib/addons/slack-app.test.js +191 -0
- package/dist/lib/addons/slack-app.test.js.map +1 -0
- package/dist/lib/addons/slack-definition.js +13 -0
- package/dist/lib/addons/slack-definition.js.map +1 -1
- package/dist/lib/addons/slack.d.ts +9 -1
- package/dist/lib/addons/slack.js +15 -3
- package/dist/lib/addons/slack.js.map +1 -1
- package/dist/lib/addons/slack.test.js +33 -0
- package/dist/lib/addons/slack.test.js.map +1 -1
- package/dist/lib/addons/teams-definition.js +13 -0
- package/dist/lib/addons/teams-definition.js.map +1 -1
- package/dist/lib/addons/teams.d.ts +6 -1
- package/dist/lib/addons/teams.js +11 -2
- package/dist/lib/addons/teams.js.map +1 -1
- package/dist/lib/addons/teams.test.js +28 -0
- package/dist/lib/addons/teams.test.js.map +1 -1
- package/dist/lib/addons/webhook-definition.js +13 -0
- package/dist/lib/addons/webhook-definition.js.map +1 -1
- package/dist/lib/addons/webhook.d.ts +1 -0
- package/dist/lib/addons/webhook.js +11 -1
- package/dist/lib/addons/webhook.js.map +1 -1
- package/dist/lib/addons/webhook.test.js +29 -0
- package/dist/lib/addons/webhook.test.js.map +1 -1
- package/dist/lib/create-config.js +2 -2
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/db/access-store.d.ts +0 -1
- package/dist/lib/db/access-store.js +1 -14
- package/dist/lib/db/access-store.js.map +1 -1
- package/dist/lib/db/client-metrics-store-v2.js +7 -2
- package/dist/lib/db/client-metrics-store-v2.js.map +1 -1
- package/dist/lib/db/context-field-store.js +9 -18
- package/dist/lib/db/context-field-store.js.map +1 -1
- package/dist/lib/db/event-store.d.ts +2 -0
- package/dist/lib/db/event-store.js +19 -9
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/feature-strategy-store.js +5 -0
- package/dist/lib/db/feature-strategy-store.js.map +1 -1
- package/dist/lib/db/feature-strategy-store.test.js +1 -0
- package/dist/lib/db/feature-strategy-store.test.js.map +1 -1
- package/dist/lib/db/feature-toggle-client-store.d.ts +7 -8
- package/dist/lib/db/feature-toggle-client-store.js +46 -24
- package/dist/lib/db/feature-toggle-client-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-store.d.ts +6 -0
- package/dist/lib/db/feature-toggle-store.js +35 -0
- package/dist/lib/db/feature-toggle-store.js.map +1 -1
- package/dist/lib/db/feature-type-store.d.ts +1 -0
- package/dist/lib/db/feature-type-store.js +12 -0
- package/dist/lib/db/feature-type-store.js.map +1 -1
- package/dist/lib/db/group-store.d.ts +5 -7
- package/dist/lib/db/group-store.js +51 -25
- package/dist/lib/db/group-store.js.map +1 -1
- package/dist/lib/db/index.js +1 -1
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/project-store.d.ts +3 -5
- package/dist/lib/db/project-store.js +19 -19
- package/dist/lib/db/project-store.js.map +1 -1
- package/dist/lib/db/segment-store.d.ts +2 -1
- package/dist/lib/db/segment-store.js +23 -20
- package/dist/lib/db/segment-store.js.map +1 -1
- package/dist/lib/db/segment-store.test.d.ts +1 -0
- package/dist/lib/db/segment-store.test.js +32 -0
- package/dist/lib/db/segment-store.test.js.map +1 -0
- package/dist/lib/error/bad-data-error.d.ts +1 -0
- package/dist/lib/error/bad-data-error.js +18 -5
- package/dist/lib/error/bad-data-error.js.map +1 -1
- package/dist/lib/error/content-type-error.d.ts +1 -0
- package/dist/lib/error/content-type-error.js +1 -0
- package/dist/lib/error/content-type-error.js.map +1 -1
- package/dist/lib/error/disabled-error.d.ts +1 -0
- package/dist/lib/error/disabled-error.js +4 -0
- package/dist/lib/error/disabled-error.js.map +1 -1
- package/dist/lib/error/feature-has-tag-error.d.ts +1 -0
- package/dist/lib/error/feature-has-tag-error.js +4 -0
- package/dist/lib/error/feature-has-tag-error.js.map +1 -1
- package/dist/lib/error/forbidden-error.d.ts +5 -0
- package/dist/lib/error/forbidden-error.js +12 -0
- package/dist/lib/error/forbidden-error.js.map +1 -0
- package/dist/lib/error/from-legacy-error.js +68 -0
- package/dist/lib/error/from-legacy-error.js.map +1 -1
- package/dist/lib/error/incompatible-project-error.d.ts +1 -0
- package/dist/lib/error/incompatible-project-error.js +1 -0
- package/dist/lib/error/incompatible-project-error.js.map +1 -1
- package/dist/lib/error/index.d.ts +3 -2
- package/dist/lib/error/index.js +5 -3
- package/dist/lib/error/index.js.map +1 -1
- package/dist/lib/error/invalid-operation-error.d.ts +1 -0
- package/dist/lib/error/invalid-operation-error.js +4 -0
- package/dist/lib/error/invalid-operation-error.js.map +1 -1
- package/dist/lib/error/invalid-token-error.d.ts +1 -0
- package/dist/lib/error/invalid-token-error.js +1 -0
- package/dist/lib/error/invalid-token-error.js.map +1 -1
- package/dist/lib/error/minimum-one-environment-error.d.ts +1 -0
- package/dist/lib/error/minimum-one-environment-error.js +4 -0
- package/dist/lib/error/minimum-one-environment-error.js.map +1 -1
- package/dist/lib/error/name-exists-error.d.ts +1 -0
- package/dist/lib/error/name-exists-error.js +4 -0
- package/dist/lib/error/name-exists-error.js.map +1 -1
- package/dist/lib/error/not-implemented-error.d.ts +1 -0
- package/dist/lib/error/not-implemented-error.js +4 -0
- package/dist/lib/error/not-implemented-error.js.map +1 -1
- package/dist/lib/error/notfound-error.d.ts +1 -0
- package/dist/lib/error/notfound-error.js +1 -0
- package/dist/lib/error/notfound-error.js.map +1 -1
- package/dist/lib/error/operation-denied-error.d.ts +1 -0
- package/dist/lib/error/operation-denied-error.js +4 -0
- package/dist/lib/error/operation-denied-error.js.map +1 -1
- package/dist/lib/error/owasp-validation-error.d.ts +1 -0
- package/dist/lib/error/owasp-validation-error.js +1 -0
- package/dist/lib/error/owasp-validation-error.js.map +1 -1
- package/dist/lib/error/password-mismatch.d.ts +1 -0
- package/dist/lib/error/password-mismatch.js +1 -0
- package/dist/lib/error/password-mismatch.js.map +1 -1
- package/dist/lib/error/password-undefined.d.ts +1 -0
- package/dist/lib/error/password-undefined.js +1 -0
- package/dist/lib/error/password-undefined.js.map +1 -1
- package/dist/lib/error/{no-access-error.d.ts → permission-error.d.ts} +3 -2
- package/dist/lib/error/{no-access-error.js → permission-error.js} +10 -7
- package/dist/lib/error/permission-error.js.map +1 -0
- package/dist/lib/error/project-without-owner-error.d.ts +1 -0
- package/dist/lib/error/project-without-owner-error.js +1 -0
- package/dist/lib/error/project-without-owner-error.js.map +1 -1
- package/dist/lib/error/role-in-use-error.d.ts +1 -0
- package/dist/lib/error/role-in-use-error.js +4 -0
- package/dist/lib/error/role-in-use-error.js.map +1 -1
- package/dist/lib/error/unauthorized-error.d.ts +1 -0
- package/dist/lib/error/unauthorized-error.js +4 -0
- package/dist/lib/error/unauthorized-error.js.map +1 -1
- package/dist/lib/error/unleash-error.d.ts +5 -3
- package/dist/lib/error/unleash-error.js +4 -61
- package/dist/lib/error/unleash-error.js.map +1 -1
- package/dist/lib/error/unleash-error.test.js +67 -37
- package/dist/lib/error/unleash-error.test.js.map +1 -1
- package/dist/lib/error/used-token-error.d.ts +1 -0
- package/dist/lib/error/used-token-error.js +1 -0
- package/dist/lib/error/used-token-error.js.map +1 -1
- package/dist/lib/features/export-import-toggles/export-import-controller.js +12 -7
- package/dist/lib/features/export-import-toggles/export-import-controller.js.map +1 -1
- package/dist/lib/features/export-import-toggles/import-permissions-service.js +1 -1
- package/dist/lib/features/export-import-toggles/import-permissions-service.js.map +1 -1
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js +1 -1
- package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
- package/dist/lib/features/group/createGroupService.d.ts +4 -0
- package/dist/lib/features/group/createGroupService.js +20 -0
- package/dist/lib/features/group/createGroupService.js.map +1 -0
- package/dist/lib/features/playground/feature-evaluator/client.d.ts +3 -1
- package/dist/lib/features/playground/feature-evaluator/client.js +33 -13
- package/dist/lib/features/playground/feature-evaluator/client.js.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/strategy/strategy.d.ts +3 -1
- package/dist/lib/features/playground/feature-evaluator/strategy/strategy.js +14 -1
- package/dist/lib/features/playground/feature-evaluator/strategy/strategy.js.map +1 -1
- package/dist/lib/features/playground/feature-evaluator/variant.d.ts +4 -4
- package/dist/lib/features/playground/feature-evaluator/variant.js +14 -10
- package/dist/lib/features/playground/feature-evaluator/variant.js.map +1 -1
- package/dist/lib/features/playground/offline-unleash-client.js +7 -0
- package/dist/lib/features/playground/offline-unleash-client.js.map +1 -1
- package/dist/lib/features/playground/offline-unleash-client.test.js +69 -0
- package/dist/lib/features/playground/offline-unleash-client.test.js.map +1 -1
- package/dist/lib/features/playground/playground-service.js +5 -3
- package/dist/lib/features/playground/playground-service.js.map +1 -1
- package/dist/lib/features/playground/playground.js +12 -15
- package/dist/lib/features/playground/playground.js.map +1 -1
- package/dist/lib/middleware/api-token-middleware.js +1 -1
- package/dist/lib/middleware/api-token-middleware.js.map +1 -1
- package/dist/lib/openapi/index.js +15 -3
- package/dist/lib/openapi/index.js.map +1 -1
- package/dist/lib/openapi/meta-schema-rules.test.js +0 -126
- package/dist/lib/openapi/meta-schema-rules.test.js.map +1 -1
- package/dist/lib/openapi/spec/addon-type-schema.d.ts +57 -0
- package/dist/lib/openapi/spec/addon-type-schema.js +50 -0
- package/dist/lib/openapi/spec/addon-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/addons-schema.d.ts +64 -0
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.d.ts +166 -4
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js +1 -2
- package/dist/lib/openapi/spec/advanced-playground-environment-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/advanced-playground-feature-schema.d.ts +331 -6
- package/dist/lib/openapi/spec/advanced-playground-response-schema.d.ts +662 -12
- package/dist/lib/openapi/spec/api-tokens-schema.d.ts +2 -2
- package/dist/lib/openapi/spec/api-tokens-schema.js +2 -2
- package/dist/lib/openapi/spec/api-tokens-schema.js.map +1 -1
- package/dist/lib/openapi/spec/batch-features-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/batch-features-schema.js +3 -0
- package/dist/lib/openapi/spec/batch-features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/batch-stale-schema.d.ts +7 -0
- package/dist/lib/openapi/spec/batch-stale-schema.js +7 -0
- package/dist/lib/openapi/spec/batch-stale-schema.js.map +1 -1
- package/dist/lib/openapi/spec/change-password-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/change-password-schema.js +5 -0
- package/dist/lib/openapi/spec/change-password-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-feature-schema.d.ts +121 -3
- package/dist/lib/openapi/spec/client-feature-schema.js +2 -0
- package/dist/lib/openapi/spec/client-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-features-schema.d.ts +246 -16
- package/dist/lib/openapi/spec/client-features-schema.js +5 -3
- package/dist/lib/openapi/spec/client-features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/client-features-schema.test.js +1 -2
- package/dist/lib/openapi/spec/client-features-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/client-segment-schema.d.ts +75 -0
- package/dist/lib/openapi/spec/client-segment-schema.js +35 -0
- package/dist/lib/openapi/spec/client-segment-schema.js.map +1 -0
- package/dist/lib/openapi/spec/clone-feature-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/clone-feature-schema.js +5 -0
- package/dist/lib/openapi/spec/clone-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/context-field-schema.d.ts +22 -3
- package/dist/lib/openapi/spec/context-field-schema.js +17 -3
- package/dist/lib/openapi/spec/context-field-schema.js.map +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.d.ts +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js +1 -1
- package/dist/lib/openapi/spec/context-field-strategies-schema.js.map +1 -1
- package/dist/lib/openapi/spec/context-fields-schema.d.ts +28 -3
- package/dist/lib/openapi/spec/context-fields-schema.js +1 -0
- package/dist/lib/openapi/spec/context-fields-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-api-token-schema.d.ts +130 -32
- package/dist/lib/openapi/spec/create-api-token-schema.js +71 -35
- package/dist/lib/openapi/spec/create-api-token-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-feature-schema.d.ts +9 -0
- package/dist/lib/openapi/spec/create-feature-schema.js +9 -0
- package/dist/lib/openapi/spec/create-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-feature-strategy-schema.d.ts +63 -2
- package/dist/lib/openapi/spec/create-feature-strategy-schema.js +12 -2
- package/dist/lib/openapi/spec/create-feature-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/create-group-schema.d.ts +61 -0
- package/dist/lib/openapi/spec/create-group-schema.js +43 -0
- package/dist/lib/openapi/spec/create-group-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-strategy-schema.d.ts +52 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js +60 -0
- package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-strategy-variant-schema.d.ts +54 -0
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js +53 -0
- package/dist/lib/openapi/spec/create-strategy-variant-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-user-response-schema.d.ts +98 -0
- package/dist/lib/openapi/spec/create-user-response-schema.js +31 -0
- package/dist/lib/openapi/spec/create-user-response-schema.js.map +1 -0
- package/dist/lib/openapi/spec/create-user-schema.d.ts +21 -1
- package/dist/lib/openapi/spec/create-user-schema.js +24 -1
- package/dist/lib/openapi/spec/create-user-schema.js.map +1 -1
- package/dist/lib/openapi/spec/email-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/email-schema.js +3 -0
- package/dist/lib/openapi/spec/email-schema.js.map +1 -1
- package/dist/lib/openapi/spec/environment-project-schema.d.ts +115 -2
- package/dist/lib/openapi/spec/environment-project-schema.js +2 -0
- package/dist/lib/openapi/spec/environment-project-schema.js.map +1 -1
- package/dist/lib/openapi/spec/environments-project-schema.d.ts +118 -2
- package/dist/lib/openapi/spec/environments-project-schema.js +3 -0
- package/dist/lib/openapi/spec/environments-project-schema.js.map +1 -1
- package/dist/lib/openapi/spec/environments-schema.d.ts +4 -0
- package/dist/lib/openapi/spec/environments-schema.js +4 -0
- package/dist/lib/openapi/spec/environments-schema.js.map +1 -1
- package/dist/lib/openapi/spec/event-schema.d.ts +130 -0
- package/dist/lib/openapi/spec/event-schema.js +42 -2
- package/dist/lib/openapi/spec/event-schema.js.map +1 -1
- package/dist/lib/openapi/spec/events-schema.d.ts +137 -0
- package/dist/lib/openapi/spec/events-schema.js +7 -0
- package/dist/lib/openapi/spec/events-schema.js.map +1 -1
- package/dist/lib/openapi/spec/export-query-schema.d.ts +7 -0
- package/dist/lib/openapi/spec/export-query-schema.js +7 -0
- package/dist/lib/openapi/spec/export-query-schema.js.map +1 -1
- package/dist/lib/openapi/spec/export-result-schema.d.ts +609 -17
- package/dist/lib/openapi/spec/export-result-schema.js +90 -0
- package/dist/lib/openapi/spec/export-result-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-environment-schema.d.ts +125 -3
- package/dist/lib/openapi/spec/feature-environment-schema.js +6 -0
- package/dist/lib/openapi/spec/feature-environment-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-events-schema.d.ts +141 -1
- package/dist/lib/openapi/spec/feature-events-schema.js +13 -1
- package/dist/lib/openapi/spec/feature-events-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-schema.d.ts +251 -6
- package/dist/lib/openapi/spec/feature-schema.js +7 -0
- package/dist/lib/openapi/spec/feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-schema.test.js +2 -2
- package/dist/lib/openapi/spec/feature-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/feature-strategy-schema.d.ts +61 -1
- package/dist/lib/openapi/spec/feature-strategy-schema.js +10 -1
- package/dist/lib/openapi/spec/feature-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-type-schema.d.ts +11 -1
- package/dist/lib/openapi/spec/feature-type-schema.js +11 -1
- package/dist/lib/openapi/spec/feature-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-types-schema.d.ts +42 -1
- package/dist/lib/openapi/spec/feature-types-schema.js +37 -0
- package/dist/lib/openapi/spec/feature-types-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feature-variants-schema.d.ts +11 -2
- package/dist/lib/openapi/spec/feature-variants-schema.js +4 -0
- package/dist/lib/openapi/spec/feature-variants-schema.js.map +1 -1
- package/dist/lib/openapi/spec/features-schema.d.ts +501 -12
- package/dist/lib/openapi/spec/features-schema.js +6 -0
- package/dist/lib/openapi/spec/features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/feedback-create-schema.d.ts +21 -0
- package/dist/lib/openapi/spec/feedback-create-schema.js +23 -0
- package/dist/lib/openapi/spec/feedback-create-schema.js.map +1 -0
- package/dist/lib/openapi/spec/feedback-response-schema.d.ts +33 -0
- package/dist/lib/openapi/spec/feedback-response-schema.js +35 -0
- package/dist/lib/openapi/spec/feedback-response-schema.js.map +1 -0
- package/dist/lib/openapi/spec/feedback-update-schema.d.ts +27 -0
- package/dist/lib/openapi/spec/feedback-update-schema.js +29 -0
- package/dist/lib/openapi/spec/feedback-update-schema.js.map +1 -0
- package/dist/lib/openapi/spec/group-schema.d.ts +107 -9
- package/dist/lib/openapi/spec/group-schema.js +20 -3
- package/dist/lib/openapi/spec/group-schema.js.map +1 -1
- package/dist/lib/openapi/spec/group-user-model-schema.d.ts +46 -3
- package/dist/lib/openapi/spec/group-user-model-schema.js +5 -0
- package/dist/lib/openapi/spec/group-user-model-schema.js.map +1 -1
- package/dist/lib/openapi/spec/groups-schema.d.ts +196 -15
- package/dist/lib/openapi/spec/groups-schema.js +2 -0
- package/dist/lib/openapi/spec/groups-schema.js.map +1 -1
- package/dist/lib/openapi/spec/health-overview-schema.d.ts +733 -16
- package/dist/lib/openapi/spec/health-overview-schema.js +10 -0
- package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/health-report-schema.d.ts +733 -16
- package/dist/lib/openapi/spec/id-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/id-schema.js +3 -0
- package/dist/lib/openapi/spec/id-schema.js.map +1 -1
- package/dist/lib/openapi/spec/import-toggles-schema.d.ts +1198 -63
- package/dist/lib/openapi/spec/import-toggles-schema.js +7 -0
- package/dist/lib/openapi/spec/import-toggles-schema.js.map +1 -1
- package/dist/lib/openapi/spec/import-toggles-validate-item-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/import-toggles-validate-item-schema.js +5 -0
- package/dist/lib/openapi/spec/import-toggles-validate-item-schema.js.map +1 -1
- package/dist/lib/openapi/spec/import-toggles-validate-schema.d.ts +18 -0
- package/dist/lib/openapi/spec/import-toggles-validate-schema.js +17 -0
- package/dist/lib/openapi/spec/import-toggles-validate-schema.js.map +1 -1
- package/dist/lib/openapi/spec/index.d.ts +15 -3
- package/dist/lib/openapi/spec/index.js +15 -3
- package/dist/lib/openapi/spec/index.js.map +1 -1
- package/dist/lib/openapi/spec/legal-value-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/legal-value-schema.js +5 -0
- package/dist/lib/openapi/spec/legal-value-schema.js.map +1 -1
- package/dist/lib/openapi/spec/login-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/login-schema.js +5 -0
- package/dist/lib/openapi/spec/login-schema.js.map +1 -1
- package/dist/lib/openapi/spec/me-schema.d.ts +69 -11
- package/dist/lib/openapi/spec/me-schema.js +7 -3
- package/dist/lib/openapi/spec/me-schema.js.map +1 -1
- package/dist/lib/openapi/spec/name-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/name-schema.js +3 -0
- package/dist/lib/openapi/spec/name-schema.js.map +1 -1
- package/dist/lib/openapi/spec/parameters-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/parameters-schema.js +1 -0
- package/dist/lib/openapi/spec/parameters-schema.js.map +1 -1
- package/dist/lib/openapi/spec/password-schema.d.ts +7 -0
- package/dist/lib/openapi/spec/password-schema.js +7 -0
- package/dist/lib/openapi/spec/password-schema.js.map +1 -1
- package/dist/lib/openapi/spec/patches-schema.d.ts +1 -0
- package/dist/lib/openapi/spec/patches-schema.js +1 -0
- package/dist/lib/openapi/spec/patches-schema.js.map +1 -1
- package/dist/lib/openapi/spec/permission-schema.d.ts +7 -0
- package/dist/lib/openapi/spec/permission-schema.js +7 -0
- package/dist/lib/openapi/spec/permission-schema.js.map +1 -1
- package/dist/lib/openapi/spec/playground-feature-schema.d.ts +165 -3
- package/dist/lib/openapi/spec/playground-feature-schema.js +0 -1
- package/dist/lib/openapi/spec/playground-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/playground-response-schema.d.ts +330 -5
- package/dist/lib/openapi/spec/playground-strategy-schema.d.ts +204 -0
- package/dist/lib/openapi/spec/playground-strategy-schema.js +49 -0
- package/dist/lib/openapi/spec/playground-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/profile-schema.d.ts +267 -7
- package/dist/lib/openapi/spec/profile-schema.js +5 -0
- package/dist/lib/openapi/spec/profile-schema.js.map +1 -1
- package/dist/lib/openapi/spec/project-environment-schema.d.ts +115 -2
- package/dist/lib/openapi/spec/project-environment-schema.js +2 -0
- package/dist/lib/openapi/spec/project-environment-schema.js.map +1 -1
- package/dist/lib/openapi/spec/project-overview-schema.d.ts +733 -16
- package/dist/lib/openapi/spec/project-overview-schema.js +10 -0
- package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
- package/dist/lib/openapi/spec/proxy-client-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/proxy-client-schema.js +3 -0
- package/dist/lib/openapi/spec/proxy-client-schema.js.map +1 -1
- package/dist/lib/openapi/spec/proxy-feature-schema.d.ts +20 -2
- package/dist/lib/openapi/spec/proxy-feature-schema.js +20 -3
- package/dist/lib/openapi/spec/proxy-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/proxy-features-schema.d.ts +22 -1
- package/dist/lib/openapi/spec/proxy-features-schema.js +2 -0
- package/dist/lib/openapi/spec/proxy-features-schema.js.map +1 -1
- package/dist/lib/openapi/spec/public-signup-token-schema.d.ts +52 -4
- package/dist/lib/openapi/spec/public-signup-tokens-schema.d.ts +104 -8
- package/dist/lib/openapi/spec/push-variants-schema.d.ts +7 -2
- package/dist/lib/openapi/spec/requests-per-second-schema.d.ts +16 -0
- package/dist/lib/openapi/spec/requests-per-second-schema.js +22 -2
- package/dist/lib/openapi/spec/requests-per-second-schema.js.map +1 -1
- package/dist/lib/openapi/spec/requests-per-second-segmented-schema.d.ts +17 -0
- package/dist/lib/openapi/spec/requests-per-second-segmented-schema.js +1 -0
- package/dist/lib/openapi/spec/requests-per-second-segmented-schema.js.map +1 -1
- package/dist/lib/openapi/spec/role-schema.d.ts +11 -1
- package/dist/lib/openapi/spec/role-schema.js +11 -1
- package/dist/lib/openapi/spec/role-schema.js.map +1 -1
- package/dist/lib/openapi/spec/search-events-schema.d.ts +9 -0
- package/dist/lib/openapi/spec/search-events-schema.js +10 -0
- package/dist/lib/openapi/spec/search-events-schema.js.map +1 -1
- package/dist/lib/openapi/spec/segment-schema.d.ts +23 -6
- package/dist/lib/openapi/spec/segment-schema.js +18 -15
- package/dist/lib/openapi/spec/segment-schema.js.map +1 -1
- package/dist/lib/openapi/spec/set-strategy-sort-order-schema.d.ts +6 -0
- package/dist/lib/openapi/spec/set-strategy-sort-order-schema.js +6 -0
- package/dist/lib/openapi/spec/set-strategy-sort-order-schema.js.map +1 -1
- package/dist/lib/openapi/spec/set-ui-config-schema.d.ts +4 -0
- package/dist/lib/openapi/spec/set-ui-config-schema.js +4 -0
- package/dist/lib/openapi/spec/set-ui-config-schema.js.map +1 -1
- package/dist/lib/openapi/spec/splash-request-schema.d.ts +21 -0
- package/dist/lib/openapi/spec/splash-request-schema.js +23 -0
- package/dist/lib/openapi/spec/splash-request-schema.js.map +1 -0
- package/dist/lib/openapi/spec/splash-response-schema.d.ts +27 -0
- package/dist/lib/openapi/spec/splash-response-schema.js +21 -0
- package/dist/lib/openapi/spec/splash-response-schema.js.map +1 -0
- package/dist/lib/openapi/spec/state-schema.d.ts +523 -19
- package/dist/lib/openapi/spec/state-schema.js +2 -0
- package/dist/lib/openapi/spec/state-schema.js.map +1 -1
- package/dist/lib/openapi/spec/strategies-schema.d.ts +9 -3
- package/dist/lib/openapi/spec/strategies-schema.js +5 -0
- package/dist/lib/openapi/spec/strategies-schema.js.map +1 -1
- package/dist/lib/openapi/spec/strategy-schema.d.ts +4 -3
- package/dist/lib/openapi/spec/strategy-schema.js +4 -3
- package/dist/lib/openapi/spec/strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/strategy-schema.test.js +5 -0
- package/dist/lib/openapi/spec/strategy-schema.test.js.map +1 -1
- package/dist/lib/openapi/spec/strategy-variant-schema.d.ts +54 -0
- package/dist/lib/openapi/spec/strategy-variant-schema.js +16 -0
- package/dist/lib/openapi/spec/strategy-variant-schema.js.map +1 -0
- package/dist/lib/openapi/spec/tag-type-schema.d.ts +7 -0
- package/dist/lib/openapi/spec/tag-type-schema.js +7 -0
- package/dist/lib/openapi/spec/tag-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/tag-types-schema.d.ts +11 -0
- package/dist/lib/openapi/spec/tag-types-schema.js +4 -0
- package/dist/lib/openapi/spec/tag-types-schema.js.map +1 -1
- package/dist/lib/openapi/spec/tag-with-version-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/tag-with-version-schema.js +3 -0
- package/dist/lib/openapi/spec/tag-with-version-schema.js.map +1 -1
- package/dist/lib/openapi/spec/telemetry-settings-schema.d.ts +22 -0
- package/dist/lib/openapi/spec/telemetry-settings-schema.js +24 -0
- package/dist/lib/openapi/spec/telemetry-settings-schema.js.map +1 -0
- package/dist/lib/openapi/spec/token-user-schema.d.ts +23 -2
- package/dist/lib/openapi/spec/token-user-schema.js +12 -1
- package/dist/lib/openapi/spec/token-user-schema.js.map +1 -1
- package/dist/lib/openapi/spec/ui-config-schema.d.ts +77 -1
- package/dist/lib/openapi/spec/ui-config-schema.js +53 -0
- package/dist/lib/openapi/spec/ui-config-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-api-token-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/update-api-token-schema.js +3 -0
- package/dist/lib/openapi/spec/update-api-token-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-feature-schema.d.ts +11 -14
- package/dist/lib/openapi/spec/update-feature-schema.js +11 -14
- package/dist/lib/openapi/spec/update-feature-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-feature-strategy-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/update-feature-strategy-schema.js +4 -0
- package/dist/lib/openapi/spec/update-feature-strategy-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-feature-type-lifetime-schema.d.ts +19 -0
- package/dist/lib/openapi/spec/update-feature-type-lifetime-schema.js +21 -0
- package/dist/lib/openapi/spec/update-feature-type-lifetime-schema.js.map +1 -0
- package/dist/lib/openapi/spec/update-strategy-schema.d.ts +47 -0
- package/dist/lib/openapi/spec/update-strategy-schema.js +55 -0
- package/dist/lib/openapi/spec/update-strategy-schema.js.map +1 -0
- package/dist/lib/openapi/spec/update-tag-type-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/update-tag-type-schema.js +5 -0
- package/dist/lib/openapi/spec/update-tag-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/update-user-schema.d.ts +15 -1
- package/dist/lib/openapi/spec/update-user-schema.js +18 -1
- package/dist/lib/openapi/spec/update-user-schema.js.map +1 -1
- package/dist/lib/openapi/spec/upsert-context-field-schema.d.ts +5 -0
- package/dist/lib/openapi/spec/user-schema.d.ts +41 -3
- package/dist/lib/openapi/spec/user-schema.js +41 -3
- package/dist/lib/openapi/spec/user-schema.js.map +1 -1
- package/dist/lib/openapi/spec/users-groups-base-schema.d.ts +194 -15
- package/dist/lib/openapi/spec/users-schema.d.ts +55 -4
- package/dist/lib/openapi/spec/users-schema.js +3 -0
- package/dist/lib/openapi/spec/users-schema.js.map +1 -1
- package/dist/lib/openapi/spec/users-search-schema.d.ts +41 -3
- package/dist/lib/openapi/spec/validate-feature-schema.d.ts +16 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js +18 -0
- package/dist/lib/openapi/spec/validate-feature-schema.js.map +1 -0
- package/dist/lib/openapi/spec/validate-password-schema.d.ts +3 -0
- package/dist/lib/openapi/spec/validate-password-schema.js +3 -0
- package/dist/lib/openapi/spec/validate-password-schema.js.map +1 -1
- package/dist/lib/openapi/spec/validate-tag-type-schema.d.ts +10 -0
- package/dist/lib/openapi/spec/validate-tag-type-schema.js +3 -0
- package/dist/lib/openapi/spec/validate-tag-type-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variant-flag-schema.d.ts +11 -0
- package/dist/lib/openapi/spec/variant-flag-schema.js +11 -0
- package/dist/lib/openapi/spec/variant-flag-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variant-schema.d.ts +7 -2
- package/dist/lib/openapi/spec/variant-schema.js +7 -2
- package/dist/lib/openapi/spec/variant-schema.js.map +1 -1
- package/dist/lib/openapi/spec/variants-schema.d.ts +7 -2
- package/dist/lib/openapi/spec/version-schema.d.ts +16 -1
- package/dist/lib/openapi/spec/version-schema.js +16 -1
- package/dist/lib/openapi/spec/version-schema.js.map +1 -1
- package/dist/lib/openapi/util/openapi-tags.d.ts +14 -2
- package/dist/lib/openapi/util/openapi-tags.js +9 -1
- package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
- package/dist/lib/openapi/util/standard-responses.d.ts +1 -1
- package/dist/lib/openapi/util/standard-responses.js +1 -1
- package/dist/lib/openapi/util/standard-responses.js.map +1 -1
- package/dist/lib/openapi/validate.js +1 -1
- package/dist/lib/openapi/validate.js.map +1 -1
- package/dist/lib/routes/admin-api/api-token.js +12 -0
- package/dist/lib/routes/admin-api/api-token.js.map +1 -1
- package/dist/lib/routes/admin-api/archive.d.ts +0 -1
- package/dist/lib/routes/admin-api/archive.js +20 -5
- package/dist/lib/routes/admin-api/archive.js.map +1 -1
- package/dist/lib/routes/admin-api/config.js +4 -0
- package/dist/lib/routes/admin-api/config.js.map +1 -1
- package/dist/lib/routes/admin-api/constraints.d.ts +2 -2
- package/dist/lib/routes/admin-api/constraints.js +5 -2
- package/dist/lib/routes/admin-api/constraints.js.map +1 -1
- package/dist/lib/routes/admin-api/context.d.ts +2 -1
- package/dist/lib/routes/admin-api/context.js +16 -4
- package/dist/lib/routes/admin-api/context.js.map +1 -1
- package/dist/lib/routes/admin-api/event.js +6 -3
- package/dist/lib/routes/admin-api/event.js.map +1 -1
- package/dist/lib/routes/admin-api/favorites.js +24 -4
- package/dist/lib/routes/admin-api/favorites.js.map +1 -1
- package/dist/lib/routes/admin-api/feature-type.d.ts +6 -0
- package/dist/lib/routes/admin-api/feature-type.js +37 -1
- package/dist/lib/routes/admin-api/feature-type.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.d.ts +2 -3
- package/dist/lib/routes/admin-api/feature.js +14 -3
- package/dist/lib/routes/admin-api/feature.js.map +1 -1
- package/dist/lib/routes/admin-api/index.js +2 -0
- package/dist/lib/routes/admin-api/index.js.map +1 -1
- package/dist/lib/routes/admin-api/project/project-archive.js +13 -4
- package/dist/lib/routes/admin-api/project/project-archive.js.map +1 -1
- package/dist/lib/routes/admin-api/project/project-features.d.ts +1 -1
- package/dist/lib/routes/admin-api/project/project-features.js +116 -27
- package/dist/lib/routes/admin-api/project/project-features.js.map +1 -1
- package/dist/lib/routes/admin-api/project/variants.js +26 -16
- package/dist/lib/routes/admin-api/project/variants.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.d.ts +6 -3
- package/dist/lib/routes/admin-api/strategy.js +40 -12
- package/dist/lib/routes/admin-api/strategy.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.test.js +5 -5
- package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
- package/dist/lib/routes/admin-api/tag-type.js +21 -1
- package/dist/lib/routes/admin-api/tag-type.js.map +1 -1
- package/dist/lib/routes/admin-api/tag.js +17 -1
- package/dist/lib/routes/admin-api/tag.js.map +1 -1
- package/dist/lib/routes/admin-api/telemetry.d.ts +14 -0
- package/dist/lib/routes/admin-api/telemetry.js +41 -0
- package/dist/lib/routes/admin-api/telemetry.js.map +1 -0
- package/dist/lib/routes/admin-api/user/user.js +20 -4
- package/dist/lib/routes/admin-api/user/user.js.map +1 -1
- package/dist/lib/routes/admin-api/user-admin.d.ts +3 -2
- package/dist/lib/routes/admin-api/user-admin.js +88 -14
- package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
- package/dist/lib/routes/admin-api/user-feedback.js +17 -7
- package/dist/lib/routes/admin-api/user-feedback.js.map +1 -1
- package/dist/lib/routes/admin-api/user-splash.js +9 -3
- package/dist/lib/routes/admin-api/user-splash.js.map +1 -1
- package/dist/lib/routes/auth/reset-password-controller.js +24 -4
- package/dist/lib/routes/auth/reset-password-controller.js.map +1 -1
- package/dist/lib/routes/auth/simple-password-provider.js +4 -0
- package/dist/lib/routes/auth/simple-password-provider.js.map +1 -1
- package/dist/lib/routes/client-api/feature.js +1 -1
- package/dist/lib/routes/client-api/feature.js.map +1 -1
- package/dist/lib/routes/client-api/feature.test.js +8 -3
- package/dist/lib/routes/client-api/feature.test.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.js +3 -3
- package/dist/lib/routes/client-api/metrics.js.map +1 -1
- package/dist/lib/routes/controller.js +2 -2
- package/dist/lib/routes/controller.js.map +1 -1
- package/dist/lib/routes/index.js +1 -3
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/routes/proxy-api/index.d.ts +1 -1
- package/dist/lib/routes/proxy-api/index.js +27 -4
- package/dist/lib/routes/proxy-api/index.js.map +1 -1
- package/dist/lib/segments/segment-service-interface.d.ts +2 -1
- package/dist/lib/server-impl.js +1 -0
- package/dist/lib/server-impl.js.map +1 -1
- package/dist/lib/services/addon-service.d.ts +2 -1
- package/dist/lib/services/addon-service.js +6 -2
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/client-metrics/metrics-service-v2.js +24 -13
- package/dist/lib/services/client-metrics/metrics-service-v2.js.map +1 -1
- package/dist/lib/services/event-announcer-service.d.ts +8 -0
- package/dist/lib/services/event-announcer-service.js +13 -0
- package/dist/lib/services/event-announcer-service.js.map +1 -0
- package/dist/lib/services/feature-service-potentially-stale.test.d.ts +1 -0
- package/dist/lib/services/feature-service-potentially-stale.test.js +44 -0
- package/dist/lib/services/feature-service-potentially-stale.test.js.map +1 -0
- package/dist/lib/services/feature-toggle-service.d.ts +5 -2
- package/dist/lib/services/feature-toggle-service.js +95 -16
- package/dist/lib/services/feature-toggle-service.js.map +1 -1
- package/dist/lib/services/feature-type-service.d.ts +1 -0
- package/dist/lib/services/feature-type-service.js +14 -0
- package/dist/lib/services/feature-type-service.js.map +1 -1
- package/dist/lib/services/group-service.d.ts +4 -4
- package/dist/lib/services/group-service.js.map +1 -1
- package/dist/lib/services/index.js +9 -1
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-schema.js +1 -0
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +2 -4
- package/dist/lib/services/project-service.js +4 -9
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/segment-service.d.ts +2 -1
- package/dist/lib/services/segment-service.js +3 -0
- package/dist/lib/services/segment-service.js.map +1 -1
- package/dist/lib/services/tag-type-service.d.ts +2 -2
- package/dist/lib/services/tag-type-service.js +5 -3
- package/dist/lib/services/tag-type-service.js.map +1 -1
- package/dist/lib/services/user-service.js +13 -7
- package/dist/lib/services/user-service.js.map +1 -1
- package/dist/lib/services/version-service.d.ts +1 -2
- package/dist/lib/services/version-service.js +2 -4
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/services/version-service.test.js +0 -57
- package/dist/lib/services/version-service.test.js.map +1 -1
- package/dist/lib/types/authentication-required.d.ts +1 -0
- package/dist/lib/types/authentication-required.js +1 -0
- package/dist/lib/types/authentication-required.js.map +1 -1
- package/dist/lib/types/events.d.ts +138 -99
- package/dist/lib/types/events.js +136 -3
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/experimental.d.ts +1 -1
- package/dist/lib/types/experimental.js +5 -5
- package/dist/lib/types/experimental.js.map +1 -1
- package/dist/lib/types/group.d.ts +7 -0
- package/dist/lib/types/group.js.map +1 -1
- package/dist/lib/types/model.d.ts +24 -2
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/services.d.ts +3 -0
- package/dist/lib/types/stores/event-store.d.ts +1 -0
- package/dist/lib/types/stores/feature-toggle-client-store.d.ts +2 -1
- package/dist/lib/types/stores/feature-toggle-store.d.ts +6 -0
- package/dist/lib/types/stores/feature-type-store.d.ts +1 -0
- package/dist/lib/types/stores/group-store.d.ts +4 -4
- package/dist/lib/types/stores/project-store.d.ts +3 -6
- package/dist/lib/types/stores/segment-store.d.ts +2 -1
- package/dist/lib/util/is-email.d.ts +7 -0
- package/dist/lib/util/is-email.js +9 -0
- package/dist/lib/util/is-email.js.map +1 -1
- package/dist/lib/util/load-index-html.js +1 -1
- package/dist/lib/util/load-index-html.js.map +1 -1
- package/dist/migrations/20230630080126-delete-deprecated-permissions.d.ts +2 -0
- package/dist/migrations/20230630080126-delete-deprecated-permissions.js +15 -0
- package/dist/migrations/20230630080126-delete-deprecated-permissions.js.map +1 -0
- package/dist/migrations/20230706123907-events-announced-column.d.ts +2 -0
- package/dist/migrations/20230706123907-events-announced-column.js +15 -0
- package/dist/migrations/20230706123907-events-announced-column.js.map +1 -0
- package/dist/migrations/20230711094214-add-potentially-stale-flag.d.ts +2 -0
- package/dist/migrations/20230711094214-add-potentially-stale-flag.js +18 -0
- package/dist/migrations/20230711094214-add-potentially-stale-flag.js.map +1 -0
- package/dist/migrations/20230711163311-project-feature-limit.d.ts +2 -0
- package/dist/migrations/20230711163311-project-feature-limit.js +13 -0
- package/dist/migrations/20230711163311-project-feature-limit.js.map +1 -0
- package/dist/migrations/20230712091834-strategy-variants.d.ts +2 -0
- package/dist/migrations/20230712091834-strategy-variants.js +81 -0
- package/dist/migrations/20230712091834-strategy-variants.js.map +1 -0
- package/dist/server-dev.js +5 -3
- package/dist/server-dev.js.map +1 -1
- package/dist/test/arbitraries.test.js +1 -1
- package/dist/test/arbitraries.test.js.map +1 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/api-token.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/api-token.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/archive.test.js +7 -1
- package/dist/test/e2e/api/admin/archive.test.js.map +1 -1
- package/dist/test/e2e/api/admin/config.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/config.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/favorites.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/favorites.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature-type.test.js +41 -1
- package/dist/test/e2e/api/admin/feature-type.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feedback.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/feedback.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/playground.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/features.e2e.test.js +152 -0
- package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/variants.e2e.test.js +28 -12
- package/dist/test/e2e/api/admin/project/variants.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/splash.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/splash.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/state.e2e.test.js +6 -6
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js +7 -1
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/openapi/openapi.e2e.test.js +9 -6
- package/dist/test/e2e/api/openapi/openapi.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/access-service.e2e.test.js +1 -1
- package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +26 -4
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/group-service.e2e.test.js +16 -0
- package/dist/test/e2e/services/group-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/user-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/event-store.e2e.test.js +3 -2
- package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +163 -0
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-type-store.e2e.test.js +13 -0
- package/dist/test/e2e/stores/feature-type-store.e2e.test.js.map +1 -1
- package/dist/test/fixtures/fake-event-store.d.ts +1 -0
- package/dist/test/fixtures/fake-event-store.js +3 -0
- package/dist/test/fixtures/fake-event-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-toggle-client-store.d.ts +1 -0
- package/dist/test/fixtures/fake-feature-toggle-client-store.js +10 -0
- package/dist/test/fixtures/fake-feature-toggle-client-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-toggle-store.d.ts +6 -0
- package/dist/test/fixtures/fake-feature-toggle-store.js +6 -0
- package/dist/test/fixtures/fake-feature-toggle-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-type-store.d.ts +1 -0
- package/dist/test/fixtures/fake-feature-type-store.js +8 -0
- package/dist/test/fixtures/fake-feature-type-store.js.map +1 -1
- package/dist/test/fixtures/fake-group-store.d.ts +4 -4
- package/dist/test/fixtures/fake-group-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-store.d.ts +3 -4
- package/dist/test/fixtures/fake-project-store.js +4 -13
- package/dist/test/fixtures/fake-project-store.js.map +1 -1
- package/dist/test/fixtures/fake-segment-store.d.ts +2 -1
- package/dist/test/fixtures/fake-segment-store.js +3 -0
- package/dist/test/fixtures/fake-segment-store.js.map +1 -1
- package/frontend/build/index.html +2 -2
- package/frontend/build/static/AdvancedPlayground-4c9d02ea.js +13 -0
- package/frontend/build/static/CreateProject-16b35d57.js +4 -0
- package/frontend/build/static/{Error-2c3030da.js → Error-50364f10.js} +1 -1
- package/frontend/build/static/{FeatureArchiveDialog-a529848e.js → FeatureArchiveDialog-fda1aa0c.js} +3 -3
- package/frontend/build/static/{FeatureMetricsChart-e8ede36a.js → FeatureMetricsChart-839cdf1e.js} +2 -2
- package/frontend/build/static/FeatureViewLazyExport-47bb7f13.js +7 -0
- package/frontend/build/static/LazyAdminExport-8ef0ca21.js +37 -0
- package/frontend/build/static/LazyProjectExport-49541c75.js +16 -0
- package/frontend/build/static/{NetworkOverview-e6f0a590.js → NetworkOverview-711050f3.js} +8 -8
- package/frontend/build/static/{NetworkTraffic-d1efc782.js → NetworkTraffic-e587c2c7.js} +1 -1
- package/frontend/build/static/RoleCell-9a62b4ed.js +1 -0
- package/frontend/build/static/StrategyItemContainer-4098c8ef.js +1 -0
- package/frontend/build/static/{chartjs-adapter-date-fns.esm-0d05c046.js → chartjs-adapter-date-fns.esm-d57aaddd.js} +1 -1
- package/frontend/build/static/demo-qr-c2ce85bd.png +0 -0
- package/frontend/build/static/{flowchart-elk-definition-170a3958-cc4ae597.js → flowchart-elk-definition-170a3958-4dece62b.js} +2 -2
- package/frontend/build/static/{index-a563ae6f.js → index-1c8194e0.js} +1 -1
- package/frontend/build/static/index-770afaee.css +1 -0
- package/frontend/build/static/{index-ade82986.js → index-9bb67f88.js} +1 -1
- package/frontend/build/static/index-9c528324.js +453 -0
- package/frontend/build/static/{is_dark-49e2e68f.js → is_dark-ba77f0b9.js} +1 -1
- package/frontend/build/static/{mindmap-definition-44684416-c6d3a96e.js → mindmap-definition-44684416-a4071c9f.js} +3 -3
- package/frontend/build/static/{timeline-definition-8e5a9bc6-920370f9.js → timeline-definition-8e5a9bc6-c996bf40.js} +2 -2
- package/frontend/build/static/{unknownify-30fed5e1.js → unknownify-db48ebae.js} +1 -1
- package/frontend/package.json +16 -16
- package/package.json +15 -13
- package/dist/lib/error/no-access-error.js.map +0 -1
- package/dist/lib/openapi/endpoint-descriptions.d.ts +0 -20
- package/dist/lib/openapi/endpoint-descriptions.js +0 -24
- package/dist/lib/openapi/endpoint-descriptions.js.map +0 -1
- package/dist/lib/openapi/spec/feedback-schema.d.ts +0 -24
- package/dist/lib/openapi/spec/feedback-schema.js +0 -26
- package/dist/lib/openapi/spec/feedback-schema.js.map +0 -1
- package/dist/lib/openapi/spec/splash-schema.d.ts +0 -20
- package/dist/lib/openapi/spec/splash-schema.js +0 -22
- package/dist/lib/openapi/spec/splash-schema.js.map +0 -1
- package/dist/lib/openapi/spec/upsert-strategy-schema.d.ts +0 -39
- package/dist/lib/openapi/spec/upsert-strategy-schema.js +0 -41
- package/dist/lib/openapi/spec/upsert-strategy-schema.js.map +0 -1
- package/frontend/build/static/AdvancedPlayground-bc3db7fd.js +0 -1
- package/frontend/build/static/CreateProject-4013b189.js +0 -4
- package/frontend/build/static/FeatureViewLazyExport-773303d1.js +0 -7
- package/frontend/build/static/LazyAdminExport-a9aeca56.js +0 -37
- package/frontend/build/static/LazyProjectExport-7c849a96.js +0 -13
- package/frontend/build/static/Playground-4fd4e26e.js +0 -1
- package/frontend/build/static/PlaygroundGuidancePopper-c761bfb7.js +0 -13
- package/frontend/build/static/RoleCell-cbb192fa.js +0 -1
- package/frontend/build/static/StrategyItemContainer-128fc163.js +0 -1
- package/frontend/build/static/demo-qr-1bebe2c9.png +0 -0
- package/frontend/build/static/index-66c635eb.css +0 -1
- package/frontend/build/static/index-bd571775.js +0 -450
- package/frontend/build/static/stringify-ec884b6d.js +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const web_api_1 = require("@slack/web-api");
|
|
7
|
+
const addon_1 = __importDefault(require("./addon"));
|
|
8
|
+
const slack_app_definition_1 = __importDefault(require("./slack-app-definition"));
|
|
9
|
+
const feature_event_formatter_md_1 = require("./feature-event-formatter-md");
|
|
10
|
+
const CACHE_SECONDS = 30;
|
|
11
|
+
class SlackAppAddon extends addon_1.default {
|
|
12
|
+
constructor(args) {
|
|
13
|
+
super(slack_app_definition_1.default, args);
|
|
14
|
+
this.msgFormatter = new feature_event_formatter_md_1.FeatureEventFormatterMd(args.unleashUrl, feature_event_formatter_md_1.LinkStyle.SLACK);
|
|
15
|
+
this.startCacheInvalidation();
|
|
16
|
+
}
|
|
17
|
+
async handleEvent(event, parameters) {
|
|
18
|
+
try {
|
|
19
|
+
const { accessToken, defaultChannels } = parameters;
|
|
20
|
+
if (!accessToken) {
|
|
21
|
+
this.logger.warn('No access token provided.');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const taggedChannels = this.findTaggedChannels(event);
|
|
25
|
+
const eventChannels = taggedChannels.length
|
|
26
|
+
? taggedChannels
|
|
27
|
+
: this.getDefaultChannels(defaultChannels);
|
|
28
|
+
if (!eventChannels.length) {
|
|
29
|
+
this.logger.debug(`No Slack channels found for event ${event.type}.`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (!this.slackClient || this.accessToken !== accessToken) {
|
|
33
|
+
const client = new web_api_1.WebClient(accessToken);
|
|
34
|
+
client.on(web_api_1.WebClientEvent.RATE_LIMITED, (numSeconds) => {
|
|
35
|
+
this.logger.debug(`Rate limit reached for event ${event.type}. Retry scheduled after ${numSeconds} seconds`);
|
|
36
|
+
});
|
|
37
|
+
this.slackClient = client;
|
|
38
|
+
this.accessToken = accessToken;
|
|
39
|
+
}
|
|
40
|
+
if (!this.slackChannels) {
|
|
41
|
+
const slackConversationsList = await this.slackClient.conversations.list({
|
|
42
|
+
types: 'public_channel,private_channel',
|
|
43
|
+
});
|
|
44
|
+
this.slackChannels = slackConversationsList.channels || [];
|
|
45
|
+
this.logger.debug(`Fetched ${this.slackChannels.length} Slack channels`);
|
|
46
|
+
}
|
|
47
|
+
const currentSlackChannels = [...this.slackChannels];
|
|
48
|
+
if (!currentSlackChannels.length) {
|
|
49
|
+
this.logger.warn('No Slack channels found.');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const text = this.msgFormatter.format(event);
|
|
53
|
+
const url = this.msgFormatter.featureLink(event);
|
|
54
|
+
const slackChannelsToPostTo = currentSlackChannels.filter(({ id, name }) => id && name && eventChannels.includes(name));
|
|
55
|
+
const requests = slackChannelsToPostTo.map(({ id }) => this.slackClient.chat.postMessage({
|
|
56
|
+
channel: id,
|
|
57
|
+
text,
|
|
58
|
+
attachments: [
|
|
59
|
+
{
|
|
60
|
+
actions: [
|
|
61
|
+
{
|
|
62
|
+
name: 'featureToggle',
|
|
63
|
+
text: 'Open in Unleash',
|
|
64
|
+
type: 'button',
|
|
65
|
+
value: 'featureToggle',
|
|
66
|
+
style: 'primary',
|
|
67
|
+
url,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
}));
|
|
73
|
+
const results = await Promise.allSettled(requests);
|
|
74
|
+
results
|
|
75
|
+
.filter(({ status }) => status === 'rejected')
|
|
76
|
+
.map(({ reason }) => this.logError(event, reason));
|
|
77
|
+
this.logger.info(`Handled event ${event.type} dispatching ${results.filter(({ status }) => status === 'fulfilled')
|
|
78
|
+
.length} out of ${requests.length} messages successfully.`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
this.logError(event, error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
findTaggedChannels({ tags }) {
|
|
85
|
+
if (tags) {
|
|
86
|
+
return tags
|
|
87
|
+
.filter((tag) => tag.type === 'slack')
|
|
88
|
+
.map((t) => t.value);
|
|
89
|
+
}
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
getDefaultChannels(defaultChannels) {
|
|
93
|
+
if (defaultChannels) {
|
|
94
|
+
return defaultChannels.split(',').map((c) => c.trim());
|
|
95
|
+
}
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
startCacheInvalidation() {
|
|
99
|
+
this.slackChannelsCacheTimeout = setInterval(() => {
|
|
100
|
+
this.slackChannels = undefined;
|
|
101
|
+
}, CACHE_SECONDS * 1000);
|
|
102
|
+
}
|
|
103
|
+
logError(event, error) {
|
|
104
|
+
if (!('code' in error)) {
|
|
105
|
+
this.logger.warn(`Error handling event ${event.type}.`, error);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (error.code === web_api_1.ErrorCode.PlatformError) {
|
|
109
|
+
const { data } = error;
|
|
110
|
+
this.logger.warn(`Error handling event ${event.type}. A platform error occurred: ${data}`, error);
|
|
111
|
+
}
|
|
112
|
+
else if (error.code === web_api_1.ErrorCode.RequestError) {
|
|
113
|
+
const { original } = error;
|
|
114
|
+
this.logger.warn(`Error handling event ${event.type}. A request error occurred: ${original}`, error);
|
|
115
|
+
}
|
|
116
|
+
else if (error.code === web_api_1.ErrorCode.RateLimitedError) {
|
|
117
|
+
const { retryAfter } = error;
|
|
118
|
+
this.logger.warn(`Error handling event ${event.type}. A rate limit error occurred: retry after ${retryAfter} seconds`, error);
|
|
119
|
+
}
|
|
120
|
+
else if (error.code === web_api_1.ErrorCode.HTTPError) {
|
|
121
|
+
const { statusCode } = error;
|
|
122
|
+
this.logger.warn(`Error handling event ${event.type}. An HTTP error occurred: status code ${statusCode}`, error);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.logger.warn(`Error handling event ${event.type}.`, error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
destroy() {
|
|
129
|
+
if (this.slackChannelsCacheTimeout) {
|
|
130
|
+
clearInterval(this.slackChannelsCacheTimeout);
|
|
131
|
+
this.slackChannelsCacheTimeout = undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.default = SlackAppAddon;
|
|
136
|
+
module.exports = SlackAppAddon;
|
|
137
|
+
//# sourceMappingURL=slack-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app.js","sourceRoot":"","sources":["../../../src/lib/addons/slack-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const events_1 = require("../types/events");
|
|
7
|
+
const slack_app_1 = __importDefault(require("./slack-app"));
|
|
8
|
+
const web_api_1 = require("@slack/web-api");
|
|
9
|
+
const slackApiCalls = [];
|
|
10
|
+
const conversationsList = jest.fn();
|
|
11
|
+
let postMessage = jest.fn().mockImplementation((options) => {
|
|
12
|
+
slackApiCalls.push(options);
|
|
13
|
+
return Promise.resolve();
|
|
14
|
+
});
|
|
15
|
+
jest.mock('@slack/web-api', () => ({
|
|
16
|
+
WebClient: jest.fn().mockImplementation(() => ({
|
|
17
|
+
conversations: {
|
|
18
|
+
list: conversationsList.mockImplementation(() => ({
|
|
19
|
+
channels: [
|
|
20
|
+
{
|
|
21
|
+
id: 1,
|
|
22
|
+
name: 'general',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 2,
|
|
26
|
+
name: 'another-channel-1',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 3,
|
|
30
|
+
name: 'another-channel-2',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
})),
|
|
34
|
+
},
|
|
35
|
+
chat: {
|
|
36
|
+
postMessage,
|
|
37
|
+
},
|
|
38
|
+
on: jest.fn(),
|
|
39
|
+
})),
|
|
40
|
+
ErrorCode: {
|
|
41
|
+
PlatformError: 'slack_webapi_platform_error',
|
|
42
|
+
},
|
|
43
|
+
WebClientEvent: {
|
|
44
|
+
RATE_LIMITED: 'rate_limited',
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
describe('SlackAppAddon', () => {
|
|
48
|
+
let addon;
|
|
49
|
+
const accessToken = 'test-access-token';
|
|
50
|
+
const loggerMock = {
|
|
51
|
+
debug: jest.fn(),
|
|
52
|
+
info: jest.fn(),
|
|
53
|
+
warn: jest.fn(),
|
|
54
|
+
error: jest.fn(),
|
|
55
|
+
fatal: jest.fn(),
|
|
56
|
+
};
|
|
57
|
+
const getLogger = jest.fn(() => loggerMock);
|
|
58
|
+
const mockError = {
|
|
59
|
+
code: web_api_1.ErrorCode.PlatformError,
|
|
60
|
+
data: 'Platform error message',
|
|
61
|
+
};
|
|
62
|
+
const event = {
|
|
63
|
+
id: 1,
|
|
64
|
+
createdAt: new Date(),
|
|
65
|
+
type: events_1.FEATURE_ENVIRONMENT_ENABLED,
|
|
66
|
+
createdBy: 'some@user.com',
|
|
67
|
+
project: 'default',
|
|
68
|
+
featureName: 'some-toggle',
|
|
69
|
+
environment: 'development',
|
|
70
|
+
data: {
|
|
71
|
+
name: 'some-toggle',
|
|
72
|
+
enabled: false,
|
|
73
|
+
type: 'release',
|
|
74
|
+
strategies: [{ name: 'default' }],
|
|
75
|
+
},
|
|
76
|
+
tags: [{ type: 'slack', value: 'general' }],
|
|
77
|
+
};
|
|
78
|
+
beforeEach(() => {
|
|
79
|
+
jest.useFakeTimers();
|
|
80
|
+
slackApiCalls.length = 0;
|
|
81
|
+
conversationsList.mockClear();
|
|
82
|
+
postMessage.mockClear();
|
|
83
|
+
addon = new slack_app_1.default({
|
|
84
|
+
getLogger,
|
|
85
|
+
unleashUrl: 'http://some-url.com',
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
afterEach(() => {
|
|
89
|
+
jest.useRealTimers();
|
|
90
|
+
addon.destroy();
|
|
91
|
+
});
|
|
92
|
+
it('should post message when feature is toggled', async () => {
|
|
93
|
+
await addon.handleEvent(event, { accessToken });
|
|
94
|
+
expect(slackApiCalls.length).toBe(1);
|
|
95
|
+
expect(slackApiCalls[0].channel).toBe(1);
|
|
96
|
+
expect(slackApiCalls[0]).toMatchSnapshot();
|
|
97
|
+
});
|
|
98
|
+
it('should post to all channels in tags', async () => {
|
|
99
|
+
const eventWith2Tags = {
|
|
100
|
+
...event,
|
|
101
|
+
tags: [
|
|
102
|
+
{ type: 'slack', value: 'general' },
|
|
103
|
+
{ type: 'slack', value: 'another-channel-1' },
|
|
104
|
+
],
|
|
105
|
+
};
|
|
106
|
+
await addon.handleEvent(eventWith2Tags, { accessToken });
|
|
107
|
+
expect(slackApiCalls.length).toBe(2);
|
|
108
|
+
expect(slackApiCalls[0].channel).toBe(1);
|
|
109
|
+
expect(slackApiCalls[0]).toMatchSnapshot();
|
|
110
|
+
expect(slackApiCalls[1].channel).toBe(2);
|
|
111
|
+
expect(slackApiCalls[1]).toMatchSnapshot();
|
|
112
|
+
});
|
|
113
|
+
it('should not post to unexisting tagged channels', async () => {
|
|
114
|
+
const eventWithUnexistingTaggedChannel = {
|
|
115
|
+
...event,
|
|
116
|
+
tags: [
|
|
117
|
+
{ type: 'slack', value: 'random' },
|
|
118
|
+
{ type: 'slack', value: 'another-channel-1' },
|
|
119
|
+
],
|
|
120
|
+
};
|
|
121
|
+
await addon.handleEvent(eventWithUnexistingTaggedChannel, {
|
|
122
|
+
accessToken,
|
|
123
|
+
});
|
|
124
|
+
expect(slackApiCalls.length).toBe(1);
|
|
125
|
+
expect(slackApiCalls[0].channel).toBe(2);
|
|
126
|
+
expect(slackApiCalls[0]).toMatchSnapshot();
|
|
127
|
+
});
|
|
128
|
+
it('should cache Slack channels', async () => {
|
|
129
|
+
await addon.handleEvent(event, { accessToken });
|
|
130
|
+
await addon.handleEvent(event, { accessToken });
|
|
131
|
+
expect(slackApiCalls.length).toBe(2);
|
|
132
|
+
expect(conversationsList).toHaveBeenCalledTimes(1);
|
|
133
|
+
});
|
|
134
|
+
it('should refresh Slack channels cache after 30 seconds', async () => {
|
|
135
|
+
await addon.handleEvent(event, { accessToken });
|
|
136
|
+
jest.advanceTimersByTime(30000);
|
|
137
|
+
await addon.handleEvent(event, { accessToken });
|
|
138
|
+
expect(slackApiCalls.length).toBe(2);
|
|
139
|
+
expect(conversationsList).toHaveBeenCalledTimes(2);
|
|
140
|
+
});
|
|
141
|
+
it('should not post a message if there are no tagged channels and no defaultChannels', async () => {
|
|
142
|
+
const eventWithoutTags = {
|
|
143
|
+
...event,
|
|
144
|
+
tags: [],
|
|
145
|
+
};
|
|
146
|
+
await addon.handleEvent(eventWithoutTags, {
|
|
147
|
+
accessToken,
|
|
148
|
+
});
|
|
149
|
+
expect(slackApiCalls.length).toBe(0);
|
|
150
|
+
});
|
|
151
|
+
it('should use defaultChannels if no tagged channels are found', async () => {
|
|
152
|
+
const eventWithoutTags = {
|
|
153
|
+
...event,
|
|
154
|
+
tags: [],
|
|
155
|
+
};
|
|
156
|
+
await addon.handleEvent(eventWithoutTags, {
|
|
157
|
+
accessToken,
|
|
158
|
+
defaultChannels: 'general, another-channel-1',
|
|
159
|
+
});
|
|
160
|
+
expect(slackApiCalls.length).toBe(2);
|
|
161
|
+
expect(slackApiCalls[0].channel).toBe(1);
|
|
162
|
+
expect(slackApiCalls[0]).toMatchSnapshot();
|
|
163
|
+
expect(slackApiCalls[1].channel).toBe(2);
|
|
164
|
+
expect(slackApiCalls[1]).toMatchSnapshot();
|
|
165
|
+
});
|
|
166
|
+
it('should log error when an API call fails', async () => {
|
|
167
|
+
postMessage = jest.fn().mockRejectedValue(mockError);
|
|
168
|
+
await addon.handleEvent(event, { accessToken });
|
|
169
|
+
expect(loggerMock.warn).toHaveBeenCalledWith(`Error handling event ${event.type}. A platform error occurred: Platform error message`, expect.any(Object));
|
|
170
|
+
});
|
|
171
|
+
it('should handle rejections in chat.postMessage', async () => {
|
|
172
|
+
const eventWith3Tags = {
|
|
173
|
+
...event,
|
|
174
|
+
tags: [
|
|
175
|
+
{ type: 'slack', value: 'general' },
|
|
176
|
+
{ type: 'slack', value: 'another-channel-1' },
|
|
177
|
+
{ type: 'slack', value: 'another-channel-2' },
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
postMessage = jest
|
|
181
|
+
.fn()
|
|
182
|
+
.mockResolvedValueOnce({ ok: true })
|
|
183
|
+
.mockResolvedValueOnce({ ok: true })
|
|
184
|
+
.mockRejectedValueOnce(mockError);
|
|
185
|
+
await addon.handleEvent(eventWith3Tags, { accessToken });
|
|
186
|
+
expect(postMessage).toHaveBeenCalledTimes(3);
|
|
187
|
+
expect(loggerMock.warn).toHaveBeenCalledWith(`Error handling event ${events_1.FEATURE_ENVIRONMENT_ENABLED}. A platform error occurred: Platform error message`, expect.any(Object));
|
|
188
|
+
expect(loggerMock.info).toHaveBeenCalledWith(`Handled event ${events_1.FEATURE_ENVIRONMENT_ENABLED} dispatching 2 out of 3 messages successfully.`);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=slack-app.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app.test.js","sourceRoot":"","sources":["../../../src/lib/addons/slack-app.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAsE;AACtE,4DAAwC;AACxC,4CAAqE;AAErE,MAAM,aAAa,GAA+B,EAAE,CAAC;AACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACpC,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE;IACvD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,aAAa,EAAE;YACX,IAAI,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9C,QAAQ,EAAE;oBACN;wBACI,EAAE,EAAE,CAAC;wBACL,IAAI,EAAE,SAAS;qBAClB;oBACD;wBACI,EAAE,EAAE,CAAC;wBACL,IAAI,EAAE,mBAAmB;qBAC5B;oBACD;wBACI,EAAE,EAAE,CAAC;wBACL,IAAI,EAAE,mBAAmB;qBAC5B;iBACJ;aACJ,CAAC,CAAC;SACN;QACD,IAAI,EAAE;YACF,WAAW;SACd;QACD,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;KAChB,CAAC,CAAC;IACH,SAAS,EAAE;QACP,aAAa,EAAE,6BAA6B;KAC/C;IACD,cAAc,EAAE;QACZ,YAAY,EAAE,cAAc;KAC/B;CACJ,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAI,KAAK,CAAC;IACV,MAAM,WAAW,GAAG,mBAAmB,CAAC;IACxC,MAAM,UAAU,GAAG;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACnB,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG;QACd,IAAI,EAAE,mBAAS,CAAC,aAAa;QAC7B,IAAI,EAAE,wBAAwB;KACjC,CAAC;IAEF,MAAM,KAAK,GAAW;QAClB,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,oCAA2B;QACjC,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE;YACF,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SACpC;QACD,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC9C,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACZ,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAC9B,WAAW,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,IAAI,mBAAa,CAAC;YACtB,SAAS;YACT,UAAU,EAAE,qBAAqB;SACpC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,cAAc,GAAW;YAC3B,GAAG,KAAK;YACR,IAAI,EAAE;gBACF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;gBACnC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE;aAChD;SACJ,CAAC;QAEF,MAAM,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,gCAAgC,GAAW;YAC7C,GAAG,KAAK;YACR,IAAI,EAAE;gBACF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAClC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE;aAChD;SACJ,CAAC;QAEF,MAAM,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE;YACtD,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,gBAAgB,GAAW;YAC7B,GAAG,KAAK;YACR,IAAI,EAAE,EAAE;SACX,CAAC;QAEF,MAAM,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACtC,WAAW;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,gBAAgB,GAAW;YAC7B,GAAG,KAAK;YACR,IAAI,EAAE,EAAE;SACX,CAAC;QAEF,MAAM,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACtC,WAAW;YACX,eAAe,EAAE,4BAA4B;SAChD,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACrD,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAErD,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACxC,wBAAwB,KAAK,CAAC,IAAI,qDAAqD,EACvF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACrB,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,cAAc,GAAW;YAC3B,GAAG,KAAK;YACR,IAAI,EAAE;gBACF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;gBACnC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBAC7C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE;aAChD;SACJ,CAAC;QAEF,WAAW,GAAG,IAAI;aACb,EAAE,EAAE;aACJ,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aACnC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aACnC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACxC,wBAAwB,oCAA2B,qDAAqD,EACxG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACrB,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACxC,iBAAiB,oCAA2B,gDAAgD,CAC/F,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -41,6 +41,18 @@ const slackDefinition = {
|
|
|
41
41
|
required: true,
|
|
42
42
|
sensitive: false,
|
|
43
43
|
},
|
|
44
|
+
{
|
|
45
|
+
name: 'customHeaders',
|
|
46
|
+
displayName: 'Extra HTTP Headers',
|
|
47
|
+
placeholder: `{
|
|
48
|
+
"ISTIO_USER_KEY": "hunter2",
|
|
49
|
+
"SOME_OTHER_CUSTOM_HTTP_HEADER": "SOMEVALUE"
|
|
50
|
+
}`,
|
|
51
|
+
description: `(Optional) Used to add extra HTTP Headers to the request the plugin fires off. Format here needs to be a valid json object of key value pairs where both key and value are strings`,
|
|
52
|
+
required: false,
|
|
53
|
+
sensitive: true,
|
|
54
|
+
type: 'textfield',
|
|
55
|
+
},
|
|
44
56
|
],
|
|
45
57
|
events: [
|
|
46
58
|
events_1.FEATURE_CREATED,
|
|
@@ -57,6 +69,7 @@ const slackDefinition = {
|
|
|
57
69
|
events_1.FEATURE_METADATA_UPDATED,
|
|
58
70
|
events_1.FEATURE_VARIANTS_UPDATED,
|
|
59
71
|
events_1.FEATURE_PROJECT_CHANGE,
|
|
72
|
+
events_1.FEATURE_POTENTIALLY_STALE_ON,
|
|
60
73
|
],
|
|
61
74
|
tagTypes: [
|
|
62
75
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-definition.js","sourceRoot":"","sources":["../../../src/lib/addons/slack-definition.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"slack-definition.js","sourceRoot":"","sources":["../../../src/lib/addons/slack-definition.ts"],"names":[],"mappings":";;AAAA,4CAgByB;AAGzB,MAAM,eAAe,GAAqB;IACtC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,0CAA0C;IACvD,gBAAgB,EAAE,8CAA8C;IAChE,UAAU,EAAE;QACR;YACI,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;SAClB;QACD;YACI,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,SAAS;YACtB,WAAW,EACP,4EAA4E;YAChF,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;SACnB;QACD;YACI,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,WAAW;YACxB,WAAW,EACP,gFAAgF;YACpF,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;SACnB;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EACP,iFAAiF;YACrF,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;SACnB;QACD;YACI,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,oBAAoB;YACjC,WAAW,EAAE;;;cAGX;YACF,WAAW,EAAE,oLAAoL;YACjM,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,WAAW;SACpB;KACJ;IACD,MAAM,EAAE;QACJ,wBAAe;QACf,wBAAe;QACf,yBAAgB;QAChB,wBAAe;QACf,yBAAgB;QAChB,0BAAiB;QACjB,oCAA2B;QAC3B,qCAA4B;QAC5B,gCAAuB;QACvB,gCAAuB;QACvB,6BAAoB;QACpB,iCAAwB;QACxB,iCAAwB;QACxB,+BAAsB;QACtB,qCAA4B;KAC/B;IACD,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,OAAO;YACb,WAAW,EACP,iEAAiE;YACrE,IAAI,EAAE,GAAG;SACZ;KACJ;CACJ,CAAC;AAEF,kBAAe,eAAe,CAAC"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import Addon from './addon';
|
|
2
2
|
import { IAddonConfig } from '../types/model';
|
|
3
3
|
import { IEvent } from '../types/events';
|
|
4
|
+
interface ISlackAddonParameters {
|
|
5
|
+
url: string;
|
|
6
|
+
username?: string;
|
|
7
|
+
defaultChannel: string;
|
|
8
|
+
emojiIcon?: string;
|
|
9
|
+
customHeaders?: string;
|
|
10
|
+
}
|
|
4
11
|
export default class SlackAddon extends Addon {
|
|
5
12
|
private msgFormatter;
|
|
6
13
|
constructor(args: IAddonConfig);
|
|
7
|
-
handleEvent(event: IEvent, parameters:
|
|
14
|
+
handleEvent(event: IEvent, parameters: ISlackAddonParameters): Promise<void>;
|
|
8
15
|
findSlackChannels({ tags }: Pick<IEvent, 'tags'>): string[];
|
|
9
16
|
}
|
|
17
|
+
export {};
|
package/dist/lib/addons/slack.js
CHANGED
|
@@ -13,7 +13,7 @@ class SlackAddon extends addon_1.default {
|
|
|
13
13
|
}
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
15
15
|
async handleEvent(event, parameters) {
|
|
16
|
-
const { url, defaultChannel, username = 'Unleash',
|
|
16
|
+
const { url, defaultChannel, username = 'Unleash', emojiIcon = ':unleash:', customHeaders, } = parameters;
|
|
17
17
|
const slackChannels = this.findSlackChannels(event);
|
|
18
18
|
if (slackChannels.length === 0) {
|
|
19
19
|
slackChannels.push(defaultChannel);
|
|
@@ -23,7 +23,7 @@ class SlackAddon extends addon_1.default {
|
|
|
23
23
|
const requests = slackChannels.map((channel) => {
|
|
24
24
|
const body = {
|
|
25
25
|
username,
|
|
26
|
-
icon_emoji:
|
|
26
|
+
icon_emoji: emojiIcon,
|
|
27
27
|
text,
|
|
28
28
|
channel: `#${channel}`,
|
|
29
29
|
attachments: [
|
|
@@ -41,9 +41,21 @@ class SlackAddon extends addon_1.default {
|
|
|
41
41
|
},
|
|
42
42
|
],
|
|
43
43
|
};
|
|
44
|
+
let extraHeaders = {};
|
|
45
|
+
if (typeof customHeaders === 'string' && customHeaders.length > 1) {
|
|
46
|
+
try {
|
|
47
|
+
extraHeaders = JSON.parse(customHeaders);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
this.logger.warn(`Could not parse the json in the customHeaders parameter. [${customHeaders}]`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
44
53
|
const requestOpts = {
|
|
45
54
|
method: 'POST',
|
|
46
|
-
headers: {
|
|
55
|
+
headers: {
|
|
56
|
+
'Content-Type': 'application/json',
|
|
57
|
+
...extraHeaders,
|
|
58
|
+
},
|
|
47
59
|
body: JSON.stringify(body),
|
|
48
60
|
};
|
|
49
61
|
return this.fetchRetry(url, requestOpts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/addons/slack.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAE5B,0EAAiD;AAGjD,6EAIsC;
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/addons/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,7 @@ test('Should call slack webhook', async () => {
|
|
|
43
43
|
};
|
|
44
44
|
const parameters = {
|
|
45
45
|
url: 'http://hooks.slack.com',
|
|
46
|
+
defaultChannel: 'general',
|
|
46
47
|
};
|
|
47
48
|
await addon.handleEvent(event, parameters);
|
|
48
49
|
expect(fetchRetryCalls.length).toBe(1);
|
|
@@ -66,6 +67,7 @@ test('Should call slack webhook for archived toggle', async () => {
|
|
|
66
67
|
};
|
|
67
68
|
const parameters = {
|
|
68
69
|
url: 'http://hooks.slack.com',
|
|
70
|
+
defaultChannel: 'general',
|
|
69
71
|
};
|
|
70
72
|
await addon.handleEvent(event, parameters);
|
|
71
73
|
expect(fetchRetryCalls.length).toBe(1);
|
|
@@ -90,6 +92,7 @@ test('Should call slack webhook for archived toggle with project info', async ()
|
|
|
90
92
|
};
|
|
91
93
|
const parameters = {
|
|
92
94
|
url: 'http://hooks.slack.com',
|
|
95
|
+
defaultChannel: 'general',
|
|
93
96
|
};
|
|
94
97
|
await addon.handleEvent(event, parameters);
|
|
95
98
|
expect(fetchRetryCalls.length).toBe(1);
|
|
@@ -115,6 +118,7 @@ test(`Should call webhook for toggled environment`, async () => {
|
|
|
115
118
|
};
|
|
116
119
|
const parameters = {
|
|
117
120
|
url: 'http://hooks.slack.com',
|
|
121
|
+
defaultChannel: 'general',
|
|
118
122
|
};
|
|
119
123
|
await addon.handleEvent(event, parameters);
|
|
120
124
|
expect(fetchRetryCalls).toHaveLength(1);
|
|
@@ -216,4 +220,33 @@ test('Should post to all channels in tags', async () => {
|
|
|
216
220
|
expect(req1.channel).toBe('#another-channel-1');
|
|
217
221
|
expect(req2.channel).toBe('#another-channel-2');
|
|
218
222
|
});
|
|
223
|
+
test('Should include custom headers from parameters in call to service', async () => {
|
|
224
|
+
const addon = new slack_1.default({
|
|
225
|
+
getLogger: no_logger_1.default,
|
|
226
|
+
unleashUrl: 'http://some-url.com',
|
|
227
|
+
});
|
|
228
|
+
const event = {
|
|
229
|
+
id: 2,
|
|
230
|
+
createdAt: new Date(),
|
|
231
|
+
type: events_1.FEATURE_ENVIRONMENT_DISABLED,
|
|
232
|
+
createdBy: 'some@user.com',
|
|
233
|
+
environment: 'development',
|
|
234
|
+
project: 'default',
|
|
235
|
+
featureName: 'some-toggle',
|
|
236
|
+
data: {
|
|
237
|
+
name: 'some-toggle',
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
const parameters = {
|
|
241
|
+
url: 'http://hooks.slack.com',
|
|
242
|
+
defaultChannel: 'general',
|
|
243
|
+
customHeaders: `{ "MY_CUSTOM_HEADER": "MY_CUSTOM_VALUE" }`,
|
|
244
|
+
};
|
|
245
|
+
await addon.handleEvent(event, parameters);
|
|
246
|
+
expect(fetchRetryCalls).toHaveLength(1);
|
|
247
|
+
expect(fetchRetryCalls[0].url).toBe(parameters.url);
|
|
248
|
+
expect(fetchRetryCalls[0].options.body).toMatch(/disabled/);
|
|
249
|
+
expect(fetchRetryCalls[0].options.body).toMatchSnapshot();
|
|
250
|
+
expect(fetchRetryCalls[0].options.headers).toMatchSnapshot();
|
|
251
|
+
});
|
|
219
252
|
//# sourceMappingURL=slack.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.test.js","sourceRoot":"","sources":["../../../src/lib/addons/slack.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAKyB;AAGzB,oDAAiC;AAEjC,8EAAqD;AAErD,IAAI,eAAe,GAAU,EAAE,CAAC;AAEhC,IAAI,CAAC,IAAI,CACL,SAAS,EACT,GAAG,EAAE,CACD,MAAM,KAAK;IAGP,YAAY,UAAU,EAAE,EAAE,SAAS,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QACtC,eAAe,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;QAC3C,eAAe,CAAC,IAAI,CAAC;YACjB,GAAG;YACH,OAAO;YACP,OAAO;YACP,OAAO;SACV,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;CACJ,CACR,CAAC;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;IACzC,MAAM,KAAK,GAAG,IAAI,eAAU,CAAC;QACzB,SAAS,EAAE,mBAAQ;QACnB,UAAU,EAAE,qBAAqB;KACpC,CAAC,CAAC;IACH,MAAM,KAAK,GAAW;QAClB,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,wBAAe;QACrB,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE;YACF,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;SACpC;KACJ,CAAC;IAEF,MAAM,UAAU,GAAG;QACf,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"slack.test.js","sourceRoot":"","sources":["../../../src/lib/addons/slack.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,18 @@ const teamsDefinition = {
|
|
|
15
15
|
required: true,
|
|
16
16
|
sensitive: true,
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
name: 'customHeaders',
|
|
20
|
+
displayName: 'Extra HTTP Headers',
|
|
21
|
+
placeholder: `{
|
|
22
|
+
"ISTIO_USER_KEY": "hunter2",
|
|
23
|
+
"SOME_OTHER_CUSTOM_HTTP_HEADER": "SOMEVALUE"
|
|
24
|
+
}`,
|
|
25
|
+
description: `(Optional) Used to add extra HTTP Headers to the request the plugin fires off. Format here needs to be a valid json object of key value pairs where both key and value are strings`,
|
|
26
|
+
required: false,
|
|
27
|
+
sensitive: true,
|
|
28
|
+
type: 'textfield',
|
|
29
|
+
},
|
|
18
30
|
],
|
|
19
31
|
events: [
|
|
20
32
|
events_1.FEATURE_CREATED,
|
|
@@ -31,6 +43,7 @@ const teamsDefinition = {
|
|
|
31
43
|
events_1.FEATURE_METADATA_UPDATED,
|
|
32
44
|
events_1.FEATURE_VARIANTS_UPDATED,
|
|
33
45
|
events_1.FEATURE_PROJECT_CHANGE,
|
|
46
|
+
events_1.FEATURE_POTENTIALLY_STALE_ON,
|
|
34
47
|
],
|
|
35
48
|
};
|
|
36
49
|
exports.default = teamsDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams-definition.js","sourceRoot":"","sources":["../../../src/lib/addons/teams-definition.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"teams-definition.js","sourceRoot":"","sources":["../../../src/lib/addons/teams-definition.ts"],"names":[],"mappings":";;AAAA,4CAgByB;AAGzB,MAAM,eAAe,GAAqB;IACtC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,oDAAoD;IACjE,gBAAgB,EAAE,8CAA8C;IAChE,UAAU,EAAE;QACR;YACI,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,6BAA6B;YAC1C,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;SAClB;QACD;YACI,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,oBAAoB;YACjC,WAAW,EAAE;;;cAGX;YACF,WAAW,EAAE,oLAAoL;YACjM,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,WAAW;SACpB;KACJ;IACD,MAAM,EAAE;QACJ,wBAAe;QACf,wBAAe;QACf,yBAAgB;QAChB,wBAAe;QACf,yBAAgB;QAChB,0BAAiB;QACjB,oCAA2B;QAC3B,qCAA4B;QAC5B,gCAAuB;QACvB,gCAAuB;QACvB,6BAAoB;QACpB,iCAAwB;QACxB,iCAAwB;QACxB,+BAAsB;QACtB,qCAA4B;KAC/B;CACJ,CAAC;AAEF,kBAAe,eAAe,CAAC"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import Addon from './addon';
|
|
2
2
|
import { IAddonConfig } from '../types/model';
|
|
3
3
|
import { IEvent } from '../types/events';
|
|
4
|
+
interface ITeamsParameters {
|
|
5
|
+
url: string;
|
|
6
|
+
customHeaders?: string;
|
|
7
|
+
}
|
|
4
8
|
export default class TeamsAddon extends Addon {
|
|
5
9
|
private msgFormatter;
|
|
6
10
|
constructor(args: IAddonConfig);
|
|
7
|
-
handleEvent(event: IEvent, parameters:
|
|
11
|
+
handleEvent(event: IEvent, parameters: ITeamsParameters): Promise<void>;
|
|
8
12
|
}
|
|
13
|
+
export {};
|
package/dist/lib/addons/teams.js
CHANGED
|
@@ -13,7 +13,7 @@ class TeamsAddon extends addon_1.default {
|
|
|
13
13
|
}
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
15
15
|
async handleEvent(event, parameters) {
|
|
16
|
-
const { url } = parameters;
|
|
16
|
+
const { url, customHeaders } = parameters;
|
|
17
17
|
const { createdBy } = event;
|
|
18
18
|
const text = this.msgFormatter.format(event);
|
|
19
19
|
const featureLink = this.msgFormatter.featureLink(event);
|
|
@@ -49,9 +49,18 @@ class TeamsAddon extends addon_1.default {
|
|
|
49
49
|
},
|
|
50
50
|
],
|
|
51
51
|
};
|
|
52
|
+
let extraHeaders = {};
|
|
53
|
+
if (typeof customHeaders === 'string' && customHeaders.length > 1) {
|
|
54
|
+
try {
|
|
55
|
+
extraHeaders = JSON.parse(customHeaders);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
this.logger.warn(`Could not parse the json in the customHeaders parameter. [${customHeaders}]`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
52
61
|
const requestOpts = {
|
|
53
62
|
method: 'POST',
|
|
54
|
-
headers: { 'Content-Type': 'application/json' },
|
|
63
|
+
headers: { 'Content-Type': 'application/json', ...extraHeaders },
|
|
55
64
|
body: JSON.stringify(body),
|
|
56
65
|
};
|
|
57
66
|
const res = await this.fetchRetry(url, requestOpts);
|