diff --git a/.eslintrc.json b/.eslintrc.json
index 805e5e7efe6..d2928e50fdc 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -28,7 +28,7 @@
],
"unicorn/no-instanceof-array": "error",
"unicorn/no-static-only-class": "error",
- "unicorn/consistent-destructuring": "off",
+ "unicorn/consistent-destructuring": "error",
"unicorn/better-regex": "error",
"unicorn/no-for-loop": "error",
"unicorn/prefer-array-some": "error",
@@ -40,29 +40,31 @@
"unicorn/no-useless-spread": "error",
"unicorn/no-useless-length-check": "error",
"unicorn/prefer-export-from": "error",
- "import/no-dynamic-require": "warn",
- "no-param-reassign": "warn",
+ "import/no-dynamic-require": "error",
+ "no-param-reassign": "error",
"sonarjs/prefer-immediate-return": "off",
"sonarjs/no-nested-template-literals": "off",
- "sonarjs/max-switch-cases": "off",
- "sonarjs/no-small-switch": "warn",
+ "sonarjs/max-switch-cases": "error",
+ "sonarjs/no-small-switch": "error",
"sonarjs/cognitive-complexity": ["error", 60],
"@typescript-eslint/no-var-requires": "off",
- "global-require": "off",
- "@typescript-eslint/naming-convention": "off",
- "@typescript-eslint/ban-types": "off",
+ "global-require": "error",
+ "@typescript-eslint/naming-convention": "error",
+ "@typescript-eslint/ban-types": "error",
+ "@typescript-eslint/no-explicit-any": "off",
"class-methods-use-this": "off",
- "@typescript-eslint/return-await": "off",
+ "@typescript-eslint/return-await": "error",
"import/prefer-default-export": "off",
- "sonarjs/no-ignored-return": "off",
- "no-new": "off",
- "@typescript-eslint/no-shadow": "off",
- "@typescript-eslint/no-loop-func": "off",
- "sonarjs/no-same-line-conditional": "off",
- "no-restricted-syntax": "off",
- "sonarjs/no-duplicate-string": "off",
- "sonarjs/no-identical-functions": "off",
+ "sonarjs/no-ignored-return": "error",
+ "no-new": "error",
+ "@typescript-eslint/no-shadow": "error",
+ "@typescript-eslint/no-loop-func": "error",
+ "sonarjs/no-same-line-conditional": "error",
+ "no-restricted-syntax": "error",
+ "sonarjs/no-duplicate-string": "error",
+ "sonarjs/no-identical-functions": "error",
"no-prototype-builtins": "off",
- "@typescript-eslint/dot-notation": "off"
+ "@typescript-eslint/dot-notation": "error",
+ "@typescript-eslint/no-unused-vars": "error"
}
}
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000000..5b716b7e9fc
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,57 @@
+## What are the changes introduced in this PR?
+
+Write a brief explainer on your code changes.
+
+## Please explain the objectives of your changes below
+
+Put down any required details on the broader aspect of your changes. If there are any dependent changes, **mandatorily** mention them here
+
+### Type of change
+
+If the pull request is a **bug-fix**, **enhancement** or a **refactor**, please fill in the details on the changes made.
+
+- Existing capabilities/behavior
+
+- New capabilities/behavior
+
+If the pull request is a **new feature**,
+
+### Any technical or performance related pointers to consider with the change?
+
+N/A
+
+### Any new dependencies introduced with this change?
+
+N/A
+
+### Any new generic utility introduced or modified. Please explain the changes.
+
+N/A
+
+### If the PR has changes in more than 10 files, please mention why the changes were not split into multiple PRs.
+
+N/A
+
+### If multiple linear tasks are associated with the PR changes, please elaborate on the reason:
+
+N/A
+
+
+
+### Developer checklist
+
+- [ ] **No breaking changes are being introduced.**
+
+- [ ] Are all related docs linked with the PR?
+
+- [ ] Are all changes manually tested?
+
+- [ ] Does this change require any documentation changes?
+
+- [ ] Are relevant unit and component test-cases added?
+
+### Reviewer checklist
+
+- [ ] Is the type of change in the PR title appropriate as per the changes?
+
+- [ ] Verified that there are no credentials or confidential data exposed with the changes.
diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml
index 4bf431ddada..3d19dbdf926 100644
--- a/.github/workflows/build-push-docker-image.yml
+++ b/.github/workflows/build-push-docker-image.yml
@@ -21,6 +21,8 @@ on:
push_target:
required: true
type: string
+ build_type:
+ type: string
secrets:
DOCKERHUB_PROD_TOKEN:
required: true
@@ -34,9 +36,9 @@ env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
jobs:
- build-transformer-image:
- name: Build Transformer Docker Image
- runs-on: ubuntu-latest
+ build-transformer-image-arm64:
+ name: Build Transformer Docker Image ARM64
+ runs-on: [self-hosted, Linux, ARM64]
steps:
- name: Checkout
uses: actions/checkout@v3.5.3
@@ -61,12 +63,12 @@ jobs:
target: ${{ inputs.load_target }}
load: true
tags: ${{ inputs.build_tag }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
+ # cache-from: type=gha
+ # cache-to: type=gha,mode=max
- name: Run Tests
run: |
- docker run ${{ inputs.build_tag }} npm run test:js:ci
+ docker run ${{ inputs.build_tag }} npm run test:js:ci
docker run ${{ inputs.build_tag }} npm run test:ts:ci
- name: Build and Push Multi-platform Images
@@ -76,12 +78,92 @@ jobs:
file: ${{ inputs.dockerfile }}
target: ${{ inputs.push_target }}
push: true
- tags: ${{ inputs.push_tags }}
+ tags: ${{ inputs.push_tags }}-arm64
platforms: |
- linux/amd64
linux/arm64
build-args: |
- version=${{ inputs.img_tag }}
+ version=${{ inputs.img_tag }}-arm64
GIT_COMMIT_SHA=${{ github.sha }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
+ # cache-from: type=gha
+ # cache-to: type=gha,mode=max
+
+ build-transformer-image-amd64:
+ name: Build Transformer Docker Image AMD64
+ runs-on: [self-hosted, Linux, X64]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3.5.3
+ with:
+ fetch-depth: 1
+
+ - name: Setup Docker Buildx
+ uses: docker/setup-buildx-action@v2.9.1
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v2.1.0
+ with:
+ username: ${{ env.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_PROD_TOKEN }}
+
+ - name: Build Docker Image
+ uses: docker/build-push-action@v4.1.1
+ with:
+ context: .
+ file: ${{ inputs.dockerfile }}
+ target: ${{ inputs.load_target }}
+ load: true
+ tags: ${{ inputs.build_tag }}
+ # cache-from: type=gha
+ # cache-to: type=gha,mode=max
+
+ - name: Run Tests
+ run: |
+ docker run ${{ inputs.build_tag }} npm run test:js:ci
+ docker run ${{ inputs.build_tag }} npm run test:ts:ci
+
+ - name: Build and Push Multi-platform Images
+ uses: docker/build-push-action@v4.1.1
+ with:
+ context: .
+ file: ${{ inputs.dockerfile }}
+ target: ${{ inputs.push_target }}
+ push: true
+ tags: ${{ inputs.push_tags }}-amd64
+ platforms: |
+ linux/amd64
+ build-args: |
+ version=${{ inputs.img_tag }}-amd64
+ GIT_COMMIT_SHA=${{ github.sha }}
+ # cache-from: type=gha
+ # cache-to: type=gha,mode=max
+
+ create-manifest:
+ name: Create multi-arch manifest
+ runs-on: ubuntu-latest
+ needs: [build-transformer-image-amd64, build-transformer-image-arm64]
+
+ steps:
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2.9.1
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v2.1.0
+ with:
+ username: ${{ env.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_PROD_TOKEN }}
+
+ - name: Create multi-arch manifest
+ run: |
+ docker buildx imagetools create -t ${{ inputs.push_tags }} ${{ inputs.push_tags }}-amd64 ${{ inputs.push_tags }}-arm64
+
+ - name: Create latest multi-arch manifest
+ # To be triggered only for release/hotfix PR merges coming from `prepare-for-prod-dt-deploy.yaml`
+ if: ${{ inputs.build_type == 'dt' }}
+ run: |
+ docker buildx imagetools create -t rudderstack/rudder-transformer:latest ${{ inputs.push_tags }}-amd64 ${{ inputs.push_tags }}-arm64
+
+ - name: Create latest ut multi-arch manifest
+ # To be triggered only for release/hotfix PR merges coming from `prepare-for-prod-ut-deploy.yaml`
+ if: ${{ inputs.build_type == 'ut' }}
+ run: |
+ docker buildx imagetools create -t rudderstack/rudder-transformer:ut-latest ${{ inputs.push_tags }}-amd64 ${{ inputs.push_tags }}-arm64
diff --git a/.github/workflows/create-hotfix-branch.yml b/.github/workflows/create-hotfix-branch.yml
index db6f4118e46..03c79e0df17 100644
--- a/.github/workflows/create-hotfix-branch.yml
+++ b/.github/workflows/create-hotfix-branch.yml
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
# Only allow these users to create new hotfix branch from 'main'
- if: github.ref == 'refs/heads/main' && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507')
+ if: github.ref == 'refs/heads/main' && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823' || github.actor == 'chandumlg' || github.actor == 'mihir-4116' || github.actor == 'ujjwal-ab') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507' || github.triggering_actor == 'anantjain45823' || github.triggering_actor == 'chandumlg' || github.triggering_actor == 'mihir-4116' || github.triggering_actor == 'ujjwal-ab')
steps:
- name: Create Branch
uses: peterjgrainger/action-create-branch@v2.4.0
diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml
index 5df37bd6cb3..57dd33f0b40 100644
--- a/.github/workflows/draft-new-release.yml
+++ b/.github/workflows/draft-new-release.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
# Only allow release stakeholders to initiate releases
- if: (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/heads/hotfix/')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'shrouti1507') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507')
+ if: (github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/heads/hotfix/')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs' || github.actor == 'sandeepdsvs' || github.actor == 'koladilip' || github.actor == 'shrouti1507' || github.actor == 'anantjain45823' || github.actor == 'chandumlg' || github.actor == 'mihir-4116' || github.actor == 'yashasvibajpai' || github.actor == 'sanpj2292' || github.actor == 'ujjwal-ab') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'koladilip' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'sandeepdsvs' || github.triggering_actor == 'shrouti1507' || github.triggering_actor == 'anantjain45823' || github.triggering_actor == 'chandumlg' || github.triggering_actor == 'mihir-4116' || github.triggering_actor == 'yashasvibajpai' || github.triggering_actor == 'sanpj2292' || github.triggering_actor == 'ujjwal-ab')
steps:
- name: Checkout
uses: actions/checkout@v3.5.3
diff --git a/.github/workflows/housekeeping.yml b/.github/workflows/housekeeping.yml
index 6c94b1c4214..7b5847035e8 100644
--- a/.github/workflows/housekeeping.yml
+++ b/.github/workflows/housekeeping.yml
@@ -4,6 +4,7 @@ on:
schedule:
# Run everyday at 1 AM
- cron: '0 1 * * *'
+ workflow_dispatch:
jobs:
prs:
@@ -41,5 +42,5 @@ jobs:
date: '3 months ago'
dry_run: false
delete_tags: false
- extra_protected_branch_regex: ^(main|release/.*|develop|hotfix/.*|hotfix-release/.*)$
+ extra_protected_branch_regex: ^(main|develop)$
exclude_open_pr_branches: true
diff --git a/.github/workflows/prepare-for-prod-deploy.yml b/.github/workflows/prepare-for-prod-dt-deploy.yml
similarity index 96%
rename from .github/workflows/prepare-for-prod-deploy.yml
rename to .github/workflows/prepare-for-prod-dt-deploy.yml
index 9102daedf36..7b858672192 100644
--- a/.github/workflows/prepare-for-prod-deploy.yml
+++ b/.github/workflows/prepare-for-prod-dt-deploy.yml
@@ -1,4 +1,4 @@
-name: Prepare for Production Environment Deployment
+name: Prepare for DT Production Environment Deployment
on:
push:
@@ -52,6 +52,7 @@ jobs:
dockerfile: Dockerfile
load_target: development
push_target: production
+ build_type: dt
secrets:
DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -127,7 +128,7 @@ jobs:
git commit -m "chore: upgrade shared transformers to $TAG_NAME"
git push -u origin shared-transformer-$TAG_NAME
- hub pull-request -m "chore: upgrade shared transformers to $TAG_NAME"
+ gh pr create --fill
- name: Update Helm Chart and Raise Pull Request For Hosted Transformer
env:
@@ -144,4 +145,4 @@ jobs:
git commit -m "chore: upgrade hosted transformer to $TAG_NAME"
git push -u origin hosted-transformer-$TAG_NAME
- hub pull-request -m "chore: upgrade hosted transformer to $TAG_NAME"
+ gh pr create --fill
diff --git a/.github/workflows/prepare-for-prod-rollback.yml b/.github/workflows/prepare-for-prod-rollback.yml
index 3a2a60abc43..9ac144a21e0 100644
--- a/.github/workflows/prepare-for-prod-rollback.yml
+++ b/.github/workflows/prepare-for-prod-rollback.yml
@@ -10,7 +10,7 @@ jobs:
# Only allow to be deployed from tags and main branch
# Only allow specific actors to trigger
- if: (startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/main')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'saikumarrs')
+ if: (startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/main')) && (github.actor == 'ItsSudip' || github.actor == 'krishna2020' || github.actor == 'saikumarrs' || github.actor == 'chandumlg') && (github.triggering_actor == 'ItsSudip' || github.triggering_actor == 'krishna2020' || github.triggering_actor == 'saikumarrs' || github.triggering_actor == 'chandumlg')
steps:
- name: Get Target Version
@@ -56,4 +56,4 @@ jobs:
git commit -m "chore: rollback shared transformers to ${{ steps.target-version.outputs.tag_name }}"
git push -u origin shared-transformer-rollback-${{ steps.target-version.outputs.tag_name }}
- hub pull-request -m "chore: rollback shared transformers to ${{ steps.target-version.outputs.tag_name }}"
+ gh pr create --fill
diff --git a/.github/workflows/prepare-for-prod-ut-deploy.yml b/.github/workflows/prepare-for-prod-ut-deploy.yml
index c5037f51872..09f5cd0935d 100644
--- a/.github/workflows/prepare-for-prod-ut-deploy.yml
+++ b/.github/workflows/prepare-for-prod-ut-deploy.yml
@@ -1,4 +1,4 @@
-name: Prepare for Production Environment Deployment
+name: Prepare for UT Production Environment Deployment
on:
push:
@@ -55,6 +55,7 @@ jobs:
dockerfile: Dockerfile-ut-func
load_target: development
push_target: production
+ build_type: ut
secrets:
DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
@@ -112,7 +113,7 @@ jobs:
git commit -m "chore: upgrade shared user-transformers to $UT_TAG_NAME"
git push -u origin shared-user-transformer-$UT_TAG_NAME
- hub pull-request -m "chore: upgrade shared user-transformers to $UT_TAG_NAME"
+ gh pr create --fill
- name: Update Helm Chart and Raise Pull Request For Hosted Transformer
env:
@@ -129,4 +130,4 @@ jobs:
git commit -m "chore: upgrade hosted user-transformer to $UT_TAG_NAME"
git push -u origin hosted-user-transformer-$UT_TAG_NAME
- hub pull-request -m "chore: upgrade hosted user-transformer to $UT_TAG_NAME"
+ gh pr create --fill
diff --git a/.github/workflows/prepare-for-staging-deploy.yml b/.github/workflows/prepare-for-staging-deploy.yml
index 494c6adf87d..6acaa8a24a0 100644
--- a/.github/workflows/prepare-for-staging-deploy.yml
+++ b/.github/workflows/prepare-for-staging-deploy.yml
@@ -72,6 +72,7 @@ jobs:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }}
+
create-pull-request:
name: Update Helm Charts For Staging and Create Pull Request
runs-on: ubuntu-latest
@@ -123,5 +124,5 @@ jobs:
git commit -m "chore: upgrade staging env transformers to \"$TAG_NAME\""
git push -u origin $BRANCH_NAME
- hub pull-request -m "chore: upgrade staging env transformers to \"$TAG_NAME\""
+ gh pr create --fill
fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0aa1a58d3d9..bc9a32f4cd2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,385 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+### [1.52.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.52.0...v1.52.1) (2023-12-14)
+
+
+### Bug Fixes
+
+* update response handling for v1 proxy ([7d275ca](https://github.com/rudderlabs/rudder-transformer/commit/7d275ca1d58c38859fce95d7d0677e11342c662a))
+
+## [1.52.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.51.1...v1.52.0) (2023-12-12)
+
+
+### Features
+
+* onboard msl changes for new record event ([#2644](https://github.com/rudderlabs/rudder-transformer/issues/2644)) ([36d3f25](https://github.com/rudderlabs/rudder-transformer/commit/36d3f258ed5ea4ba1899c8b2cae8203bf73d90ed)), closes [#2813](https://github.com/rudderlabs/rudder-transformer/issues/2813)
+* onboard reddit cloud mode destination ([#2829](https://github.com/rudderlabs/rudder-transformer/issues/2829)) ([babb89a](https://github.com/rudderlabs/rudder-transformer/commit/babb89a5bf6d1b84d1319b967953c7c1b6de7c2c))
+* tiktok_ads: add support for custom events ([#2891](https://github.com/rudderlabs/rudder-transformer/issues/2891)) ([091354c](https://github.com/rudderlabs/rudder-transformer/commit/091354c4427b33c9f8ac2678db3a4ab38b008e7d))
+
+
+### Bug Fixes
+
+* active_campaign error handler ([#2895](https://github.com/rudderlabs/rudder-transformer/issues/2895)) ([5a6d296](https://github.com/rudderlabs/rudder-transformer/commit/5a6d296b0ce83f3b6b4e215839fb65d4e0f2de41))
+* add check to remove empty properties object from payload ([#2896](https://github.com/rudderlabs/rudder-transformer/issues/2896)) ([1a86a07](https://github.com/rudderlabs/rudder-transformer/commit/1a86a0723e3f5fb6fdf9cf1dc716a47c6da16745))
+* adobe_analytics event field check ([#2890](https://github.com/rudderlabs/rudder-transformer/issues/2890)) ([bf39215](https://github.com/rudderlabs/rudder-transformer/commit/bf39215dd1bbed482665c837a2bfabfcb751c753))
+* covert toString before toLowercase ([#2830](https://github.com/rudderlabs/rudder-transformer/issues/2830)) ([bed431e](https://github.com/rudderlabs/rudder-transformer/commit/bed431e1de94ab28df1ee592d083a1481b960b6d))
+* **dm:** add workspaceId in common metadata to be returned to the callers ([#2868](https://github.com/rudderlabs/rudder-transformer/issues/2868)) ([b3437a3](https://github.com/rudderlabs/rudder-transformer/commit/b3437a34358d5fd5b1eb63f30a5a695f39aa84ff))
+* **integrations:** onboard sprig destination ([#2857](https://github.com/rudderlabs/rudder-transformer/issues/2857)) ([ede22e3](https://github.com/rudderlabs/rudder-transformer/commit/ede22e3f8fb60a9e36e2a3f5a5e86260255c49ef))
+* mailjet source transformation by adding email exists check ([#2889](https://github.com/rudderlabs/rudder-transformer/issues/2889)) ([4a7eaa0](https://github.com/rudderlabs/rudder-transformer/commit/4a7eaa09000bcb82eb7f217d500223939bd9b07b))
+* missing null check in braze populateCustomAttributesWithOperation ([#2897](https://github.com/rudderlabs/rudder-transformer/issues/2897)) ([50e921d](https://github.com/rudderlabs/rudder-transformer/commit/50e921d1451bf7016e60b2e238b8f842d72b5b71))
+* removed retry logic from v1 cm360, added adapter for v1 to v0 conversion ([#2860](https://github.com/rudderlabs/rudder-transformer/issues/2860)) ([776d2c4](https://github.com/rudderlabs/rudder-transformer/commit/776d2c4abe23cd279195064684b9ccc807d83afc))
+* **dm:** use clones as false for tracking plan node cache ([#2899](https://github.com/rudderlabs/rudder-transformer/issues/2899)) ([8f47db8](https://github.com/rudderlabs/rudder-transformer/commit/8f47db8bcf581d1807cfa2aa823ef400a30a09e3))
+
+### [1.51.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.51.0...v1.51.1) (2023-12-06)
+
+
+### Bug Fixes
+
+* marketo backward compatibility ([#2880](https://github.com/rudderlabs/rudder-transformer/issues/2880)) ([af6aebb](https://github.com/rudderlabs/rudder-transformer/commit/af6aebba9a9891fadc91fe2dc4ae4db4b1e269c9))
+* marketo new field introduction backward compatibility ([cd6c3b0](https://github.com/rudderlabs/rudder-transformer/commit/cd6c3b0672a0b17078627f28f6613a2ef1898ee7))
+* remove ErrorResponse type from postTransfomration delivery ([b13f0a6](https://github.com/rudderlabs/rudder-transformer/commit/b13f0a6340177a56417692ad7dcf3829d4990826))
+
+## [1.51.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.50.1...v1.51.0) (2023-12-06)
+
+
+### Features
+
+* cm360 router batching ([#2836](https://github.com/rudderlabs/rudder-transformer/issues/2836)) ([4b260e4](https://github.com/rudderlabs/rudder-transformer/commit/4b260e4ec6d25875903830004b3e4975b3402b2d))
+* cm360 transformerproxy V1 flag ([#2848](https://github.com/rudderlabs/rudder-transformer/issues/2848)) ([27f0797](https://github.com/rudderlabs/rudder-transformer/commit/27f0797c6dcd626a713c11a48c6e85a69e0a4963))
+* **INT-305:** onboard gladly destination ([#2786](https://github.com/rudderlabs/rudder-transformer/issues/2786)) ([ff80b88](https://github.com/rudderlabs/rudder-transformer/commit/ff80b885fe0507c137b3c9eacffcef331010da0c))
+* marketo: migrate config fields and fix test cases ([#2789](https://github.com/rudderlabs/rudder-transformer/issues/2789)) ([7910dba](https://github.com/rudderlabs/rudder-transformer/commit/7910dba2318f92cec3be1b7c7aa6b00428ecae94))
+* mixpanel set once feature onboard ([#2820](https://github.com/rudderlabs/rudder-transformer/issues/2820)) ([9eda50e](https://github.com/rudderlabs/rudder-transformer/commit/9eda50e850c5a1ccb46f1b54c3d176edb915eb27))
+* onboard webhook to component tests ([#2837](https://github.com/rudderlabs/rudder-transformer/issues/2837)) ([284d141](https://github.com/rudderlabs/rudder-transformer/commit/284d1411514c26dda2403a4a18967e5f40e255ea))
+* update facebook destinations API version to v18.0 ([#2828](https://github.com/rudderlabs/rudder-transformer/issues/2828)) ([3127a1c](https://github.com/rudderlabs/rudder-transformer/commit/3127a1ca8dc1b887f9158a1d839c5504f40c4678))
+
+
+### Bug Fixes
+
+* add support for custom properties for braze purchase events ([#2856](https://github.com/rudderlabs/rudder-transformer/issues/2856)) ([be6ef26](https://github.com/rudderlabs/rudder-transformer/commit/be6ef2605f04e9182534b9633eeec1091cf7a431))
+* bugsnag issue in moengage identify event ([#2845](https://github.com/rudderlabs/rudder-transformer/issues/2845)) ([0e7adc6](https://github.com/rudderlabs/rudder-transformer/commit/0e7adc66ff88d9510e48a5651460b4e02cc57c78))
+* encode &, < and > to html counterparts in adobe analytics ([#2854](https://github.com/rudderlabs/rudder-transformer/issues/2854)) ([571dbf5](https://github.com/rudderlabs/rudder-transformer/commit/571dbf5bd65e7d0e261562ff3da3b393f27f27b6))
+* error handling in active_campaign ([#2843](https://github.com/rudderlabs/rudder-transformer/issues/2843)) ([a015460](https://github.com/rudderlabs/rudder-transformer/commit/a015460f0a6d2d5320f633abc151febf22561b6b))
+* make supportTransformerProxyV1 false ([#2861](https://github.com/rudderlabs/rudder-transformer/issues/2861)) ([80cf69d](https://github.com/rudderlabs/rudder-transformer/commit/80cf69dc40bb4dc7c0a6d516814f36d962018745))
+* remove errorCategory for braze dedup error ([#2850](https://github.com/rudderlabs/rudder-transformer/issues/2850)) ([91d4cd1](https://github.com/rudderlabs/rudder-transformer/commit/91d4cd16f9839b0be5a663ca5010bdd72cff9bdc))
+* sfmc bug fix for track event validations ([#2852](https://github.com/rudderlabs/rudder-transformer/issues/2852)) ([cd9a046](https://github.com/rudderlabs/rudder-transformer/commit/cd9a046f66eab8363373cb9a0fa1afeef3137d78))
+* unhandled error code in facebook_custom_audience ([#2853](https://github.com/rudderlabs/rudder-transformer/issues/2853)) ([8c02b8c](https://github.com/rudderlabs/rudder-transformer/commit/8c02b8ccb2101147ac84b4555e7fd07235ebf9fc))
+* updated transformerProxyV1 name ([#2859](https://github.com/rudderlabs/rudder-transformer/issues/2859)) ([1a8d825](https://github.com/rudderlabs/rudder-transformer/commit/1a8d825ccbb87d34d8ae5ff2cb02f4be9700eee6))
+
+### [1.50.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.50.0...v1.50.1) (2023-12-05)
+
+
+### Bug Fixes
+
+* salesforce transformer proxy response handling issue for authorization flow ([#2873](https://github.com/rudderlabs/rudder-transformer/issues/2873)) ([4cec65e](https://github.com/rudderlabs/rudder-transformer/commit/4cec65e4103e99021f5108fcc7c557b952f1c5eb))
+
+## [1.50.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.49.1...v1.50.0) (2023-11-13)
+
+
+### Features
+
+* add clickId support for tiktok and pinterest destination ([#2784](https://github.com/rudderlabs/rudder-transformer/issues/2784)) ([0e14296](https://github.com/rudderlabs/rudder-transformer/commit/0e1429663d167a2c5cded0d9130374eb586a18c0))
+* add delivery_category as part of contents, remove flattening custom_data in FB conversions ([#2812](https://github.com/rudderlabs/rudder-transformer/issues/2812)) ([e82cef8](https://github.com/rudderlabs/rudder-transformer/commit/e82cef88e154d47519f0deeb60f55773f25fd3ad))
+* add delivery_category as part of contents, update flattening custom_data in FB Pixel ([#2816](https://github.com/rudderlabs/rudder-transformer/issues/2816)) ([ee1f473](https://github.com/rudderlabs/rudder-transformer/commit/ee1f4733e82291375d85a6de8b8626ffdc8907b1))
+* adding support for future oauth facility in salesforce ([#2746](https://github.com/rudderlabs/rudder-transformer/issues/2746)) ([916ea4c](https://github.com/rudderlabs/rudder-transformer/commit/916ea4c8d08f69b68b7795dd513a25a3cded55fa))
+* introduce v1/source/sourceType endpoint ([#2722](https://github.com/rudderlabs/rudder-transformer/issues/2722)) ([0996e81](https://github.com/rudderlabs/rudder-transformer/commit/0996e816d3671c3e25561f76e3219be99225f24b))
+* move cdkV1 to cdkv2 component tests ([#2804](https://github.com/rudderlabs/rudder-transformer/issues/2804)) ([195b48a](https://github.com/rudderlabs/rudder-transformer/commit/195b48ac0f438a200933e4bbb956fcc3941b7aed))
+* use custom screen name amplitude ([#2823](https://github.com/rudderlabs/rudder-transformer/issues/2823)) ([93a82bd](https://github.com/rudderlabs/rudder-transformer/commit/93a82bd4856b462768d0213ae3de8b9b78e9858c))
+
+
+### Bug Fixes
+
+* source_transform_error stat label correction ([#2825](https://github.com/rudderlabs/rudder-transformer/issues/2825)) ([f3bcd7c](https://github.com/rudderlabs/rudder-transformer/commit/f3bcd7c9338ef96267be84f845c63f5234d37e33))
+* shopify redis metric when there is no data returned for a key ([#2811](https://github.com/rudderlabs/rudder-transformer/issues/2811)) ([c02370e](https://github.com/rudderlabs/rudder-transformer/commit/c02370e38fabb581698baa00e1ddd3da93dc07fa))
+* snapchat_conversion category mapping ([#2826](https://github.com/rudderlabs/rudder-transformer/issues/2826)) ([7acd004](https://github.com/rudderlabs/rudder-transformer/commit/7acd004e4290dfb5ea20402929041462eddb4496))
+
+### [1.49.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.49.0...v1.49.1) (2023-11-10)
+
+
+### Bug Fixes
+
+* update create-hotfix-branch.yml ([#2815](https://github.com/rudderlabs/rudder-transformer/issues/2815)) ([dd884dd](https://github.com/rudderlabs/rudder-transformer/commit/dd884ddc78898bd7de155ec4f05ce8fe6e2c4b80))
+
+## [1.49.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.48.0...v1.49.0) (2023-11-06)
+
+
+### Features
+
+* add new destination tiktok_audience ([#2710](https://github.com/rudderlabs/rudder-transformer/issues/2710)) ([9bc0fd8](https://github.com/rudderlabs/rudder-transformer/commit/9bc0fd8efcee44871a190bd6cb9e89c5cf035ff8))
+* onboard one signal to router transform ([#2785](https://github.com/rudderlabs/rudder-transformer/issues/2785)) ([818858e](https://github.com/rudderlabs/rudder-transformer/commit/818858e046ce5f9735bbb97715c43a959ad3aa3c))
+* onboard revenuecat as a source ([#2774](https://github.com/rudderlabs/rudder-transformer/issues/2774)) ([55f9637](https://github.com/rudderlabs/rudder-transformer/commit/55f96374b4d73db7013c1d5e72bfc9c8257b224b))
+
+
+### Bug Fixes
+
+* add check to remove null and undefined properties before sending ([#2796](https://github.com/rudderlabs/rudder-transformer/issues/2796)) ([6e89cd3](https://github.com/rudderlabs/rudder-transformer/commit/6e89cd3f67ea887ba17c1cd5ffbca6675f54d96c))
+* allow support for full url from UI in freshsales and freshmarketer ([#2780](https://github.com/rudderlabs/rudder-transformer/issues/2780)) ([570532c](https://github.com/rudderlabs/rudder-transformer/commit/570532ce790c05a69621d9289758a1b1a7acda8c))
+* busgnag issues for klaviyo, freshsales, customeio ([#2795](https://github.com/rudderlabs/rudder-transformer/issues/2795)) ([11fb7c4](https://github.com/rudderlabs/rudder-transformer/commit/11fb7c47910681833e37d25a1573d2005e62742b))
+
+## [1.48.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.47.0...v1.48.0) (2023-11-02)
+
+
+### Features
+
+* add support to add custom network policies for specific workspaces in faas pods ([bc1a760](https://github.com/rudderlabs/rudder-transformer/commit/bc1a76066c0aeb43776ded0b266ec48f5e69aa16))
+
+## [1.47.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.5...v1.47.0) (2023-10-30)
+
+
+### Features
+
+* add custom utm parameters to mixpanel ([#2771](https://github.com/rudderlabs/rudder-transformer/issues/2771)) ([9c4fcd3](https://github.com/rudderlabs/rudder-transformer/commit/9c4fcd3595534a8b563df3467e23c94c580f08a6))
+* add support filtering component tests by feature and index ([#2748](https://github.com/rudderlabs/rudder-transformer/issues/2748)) ([146f1c6](https://github.com/rudderlabs/rudder-transformer/commit/146f1c63db4e895c7d5ce2848a1b60e7c5bb9fb6))
+* onboard destination ortto ([#2730](https://github.com/rudderlabs/rudder-transformer/issues/2730)) ([9be5740](https://github.com/rudderlabs/rudder-transformer/commit/9be5740d8670890b0318da3d37f258ddc5e35445))
+* onboard facebook custom audience to transformer proxy ([#2769](https://github.com/rudderlabs/rudder-transformer/issues/2769)) ([14c5e40](https://github.com/rudderlabs/rudder-transformer/commit/14c5e40284af7df9e4f5b262ad226dd3afef226e))
+* add custom event name support in pinterest v5 ([#2773](https://github.com/rudderlabs/rudder-transformer/pull/2773)) ([a586a92](https://github.com/rudderlabs/rudder-transformer/commit/a586a92bf410679d0f3aa7012d4d10f8e2f515d5))
+
+
+### Bug Fixes
+
+* bugsnag error for salesforce ([#2753](https://github.com/rudderlabs/rudder-transformer/issues/2753)) ([a2ccdad](https://github.com/rudderlabs/rudder-transformer/commit/a2ccdad52a1fb88f962745800cb45d605b5e0bf3))
+* oom kill while stringifying large response json ([#2754](https://github.com/rudderlabs/rudder-transformer/issues/2754)) ([c8baf5b](https://github.com/rudderlabs/rudder-transformer/commit/c8baf5b2b6325d9e30200339055dcbefd780936c))
+* salesforce: handle ECONNABORTED error ([#2732](https://github.com/rudderlabs/rudder-transformer/issues/2732)) ([6b23a9b](https://github.com/rudderlabs/rudder-transformer/commit/6b23a9b33acd28fdacaa2390c1970a1fa4415ffa))
+
+### [1.46.5](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.4...v1.46.5) (2023-10-23)
+
+
+### Bug Fixes
+
+* **hubspot:** property mismatch ([5530031](https://github.com/rudderlabs/rudder-transformer/commit/553003192a1492220e3930c6b6f2dd11ebac1bcb))
+
+### [1.46.4](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.3...v1.46.4) (2023-10-20)
+
+
+### Bug Fixes
+
+* **hs:** time stamp and contact not found issue ([391c7cd](https://github.com/rudderlabs/rudder-transformer/commit/391c7cdc5576152576bbd2c6d335a04ce6795833))
+
+### [1.46.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.2...v1.46.3) (2023-10-20)
+
+
+### Bug Fixes
+
+* deduplication key issue ([#2757](https://github.com/rudderlabs/rudder-transformer/issues/2757)) ([bc76305](https://github.com/rudderlabs/rudder-transformer/commit/bc76305e3fcc3c9ac69e639e90a37499566d0837))
+
+### [1.46.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.1...v1.46.2) (2023-10-19)
+
+
+### Bug Fixes
+
+* do not send 298 event for aborted ones in ut ([d414064](https://github.com/rudderlabs/rudder-transformer/commit/d414064aac1c8d769607346bc48b8db549e7a8dc))
+
+### [1.46.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.46.0...v1.46.1) (2023-10-19)
+
+### Bug Fixes
+
+* add gzip support compatibility ([#2745](https://github.com/rudderlabs/rudder-transformer/issues/2745)) ([d72410f](https://github.com/rudderlabs/rudder-transformer/commit/d72410f7962e702218be3c2414de62341ca29e39))
+
+## [1.46.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.45.3...v1.46.0) (2023-10-18)
+
+
+### Features
+
+* enhancement: snapchat_conversion add new fields ([#2721](https://github.com/rudderlabs/rudder-transformer/issues/2721)) ([45da19d](https://github.com/rudderlabs/rudder-transformer/commit/45da19db1e583d80f9fc5b508316f7a8bdd415b6))
+* facebook pixel audit refactor ([#2713](https://github.com/rudderlabs/rudder-transformer/issues/2713)) ([43e1a61](https://github.com/rudderlabs/rudder-transformer/commit/43e1a61e19ad8b9c0fb999fe900b91347acb7ef8))
+* mixpanel gzip support for import endpoint ([#2667](https://github.com/rudderlabs/rudder-transformer/issues/2667)) ([6b6bb66](https://github.com/rudderlabs/rudder-transformer/commit/6b6bb6633ed26d466bd80d04ae2c008d1435faca))
+* onboard facebook_conversions destination ([#2720](https://github.com/rudderlabs/rudder-transformer/issues/2720)) ([5269af4](https://github.com/rudderlabs/rudder-transformer/commit/5269af47cdbceefec16be3b44910ca27aea35c35))
+* onboard source ortto ([#2693](https://github.com/rudderlabs/rudder-transformer/issues/2693)) ([4682268](https://github.com/rudderlabs/rudder-transformer/commit/4682268d8396a40685a343a5c4f3978e7316d2d3))
+
+
+### Bug Fixes
+
+* fix getFbGenderVal function ([#2724](https://github.com/rudderlabs/rudder-transformer/issues/2724)) ([3aabe81](https://github.com/rudderlabs/rudder-transformer/commit/3aabe81252a09010d2b2e54e44c32e2c6302c057))
+
+### [1.45.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.45.2...v1.45.3) (2023-10-17)
+
+
+### Bug Fixes
+
+* ut metadata map ts type ([c8d3882](https://github.com/rudderlabs/rudder-transformer/commit/c8d3882baccc57d7b892c55ff9811c951afb5ec6))
+
+### [1.45.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.45.1...v1.45.2) (2023-10-17)
+
+
+### Bug Fixes
+
+* add event metadata to 298 status code responses ([f0493dc](https://github.com/rudderlabs/rudder-transformer/commit/f0493dccfd47bfe1897ebcec27141e2df31393c0))
+
+### [1.45.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.45.0...v1.45.1) (2023-10-17)
+
+
+### Bug Fixes
+
+* **clevertap:** invalid parameters ordering issue ([a70d4db](https://github.com/rudderlabs/rudder-transformer/commit/a70d4db57b302abc710907aadb8570944d54165a))
+* **clevertap:** parameters ordering issue ([#2727](https://github.com/rudderlabs/rudder-transformer/issues/2727)) ([bd6e096](https://github.com/rudderlabs/rudder-transformer/commit/bd6e096db3dc6b9bd2d607084b8a38ff315fab9c))
+
+## [1.45.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.44.2...v1.45.0) (2023-10-11)
+
+
+### Features
+
+* **integrations:** introduced new status codes to suppress or filter events ([#2611](https://github.com/rudderlabs/rudder-transformer/issues/2611)) ([6bdb01e](https://github.com/rudderlabs/rudder-transformer/commit/6bdb01e1152f52339dc6d1936cbe686e64faf070))
+* onboard braze stats ([#2703](https://github.com/rudderlabs/rudder-transformer/issues/2703)) ([f205325](https://github.com/rudderlabs/rudder-transformer/commit/f2053255bedac6017f909fe8b6de3775dd50bc93))
+* support page call in snapchat conversion ([#2688](https://github.com/rudderlabs/rudder-transformer/issues/2688)) ([d681d5e](https://github.com/rudderlabs/rudder-transformer/commit/d681d5e1a39c1914e3a237e1020553518c297416))
+
+
+### Bug Fixes
+
+* added matchId check and timestamp conversion ([#2709](https://github.com/rudderlabs/rudder-transformer/issues/2709)) ([f49244d](https://github.com/rudderlabs/rudder-transformer/commit/f49244dce6cf15812d894d22c43d2432b5a4756a))
+* bugsnag event sent as an object for track call ([#2681](https://github.com/rudderlabs/rudder-transformer/issues/2681)) ([b211840](https://github.com/rudderlabs/rudder-transformer/commit/b21184019691b472650901f6002ef81b579a1146))
+* correct handling of permission_denied error for GAEC & GARL ([#2699](https://github.com/rudderlabs/rudder-transformer/issues/2699)) ([eca3be1](https://github.com/rudderlabs/rudder-transformer/commit/eca3be1fdcb7ac0ebf9432e9686a75fad2d6dc78))
+* **garl:** partial failure handling ([#2666](https://github.com/rudderlabs/rudder-transformer/issues/2666)) ([d4cac26](https://github.com/rudderlabs/rudder-transformer/commit/d4cac268193e0db9540f95c7aab39157d70765c1))
+* **kafka:** add status code & batched value in response structure ([#2684](https://github.com/rudderlabs/rudder-transformer/issues/2684)) ([99f39f5](https://github.com/rudderlabs/rudder-transformer/commit/99f39f5cd62ceb82bd8f51d1de84442b1e59c004))
+* **klaviyo:** sending error field at root level for suppress events ([#2707](https://github.com/rudderlabs/rudder-transformer/issues/2707)) ([bc88f13](https://github.com/rudderlabs/rudder-transformer/commit/bc88f1303ec4f60a466492c72e8c3b57dd5070af))
+* snapchat conversion introduce missing fields ([#2704](https://github.com/rudderlabs/rudder-transformer/issues/2704)) ([d6488d5](https://github.com/rudderlabs/rudder-transformer/commit/d6488d5a189ea90d1142e4ecb34b2af0bb940fe9))
+
+### [1.44.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.44.1...v1.44.2) (2023-10-09)
+
+
+### Bug Fixes
+
+* create instance of transformedObj ([37495e3](https://github.com/rudderlabs/rudder-transformer/commit/37495e3e4a90dc9c5abbf74e7d58152a9af10daf))
+
+### [1.44.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.44.0...v1.44.1) (2023-10-06)
+
+
+### Bug Fixes
+
+* criteo_aud auth_token expire code incorporated ([#2687](https://github.com/rudderlabs/rudder-transformer/issues/2687)) ([cbe333a](https://github.com/rudderlabs/rudder-transformer/commit/cbe333a9e4eea7088bfe46a2aaf09d489a7bc7c7))
+
+## [1.44.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.43.1...v1.44.0) (2023-09-29)
+
+
+### Features
+
+* add geolocation support for python transformations ([#2678](https://github.com/rudderlabs/rudder-transformer/issues/2678)) ([b688c4a](https://github.com/rudderlabs/rudder-transformer/commit/b688c4a6889250bacfd2a81c9de8a1436281daa9))
+* add axios mocking to component test-suite ([#2638](https://github.com/rudderlabs/rudder-transformer/issues/2638)) ([100c808](https://github.com/rudderlabs/rudder-transformer/commit/100c80881eb99716198231deb9ec0e69dc3fa2a0))
+* add circular reference check in flattern json ([#2650](https://github.com/rudderlabs/rudder-transformer/issues/2650)) ([a21ea3a](https://github.com/rudderlabs/rudder-transformer/commit/a21ea3aaecfc3d10de3f4eaa34425dda388032ff))
+* **gaec:** partial failures handling ([#2631](https://github.com/rudderlabs/rudder-transformer/issues/2631)) ([0008277](https://github.com/rudderlabs/rudder-transformer/commit/0008277fe43d20ced4066f8f1f1b0f1d12345f01))
+* **iterable:** user deletion support ([#2621](https://github.com/rudderlabs/rudder-transformer/issues/2621)) ([c0ab19a](https://github.com/rudderlabs/rudder-transformer/commit/c0ab19a293a72ea0a7575b863356aea9a0e6762f))
+* tslint rules enable ([#2604](https://github.com/rudderlabs/rudder-transformer/issues/2604)) ([4d6c4b8](https://github.com/rudderlabs/rudder-transformer/commit/4d6c4b834de005484dc1099a52c69ab6212273e8))
+
+
+### Bug Fixes
+* add optional chaining for traits ([#2677](https://github.com/rudderlabs/rudder-transformer/issues/2677)) ([b80bfbc](https://github.com/rudderlabs/rudder-transformer/commit/b80bfbc8a6afdef57ad5f2560bb803c8e00bcbfc))
+* add auth status inactive category handling to GA in userDeletion flow ([#2669](https://github.com/rudderlabs/rudder-transformer/issues/2669)) ([b784800](https://github.com/rudderlabs/rudder-transformer/commit/b7848004e2679ec7278c8381560cb1a77da6c642))
+* add optional chaining for error message in network handler of Intercom ([#2648](https://github.com/rudderlabs/rudder-transformer/issues/2648)) ([10a13bc](https://github.com/rudderlabs/rudder-transformer/commit/10a13bcf7f987de45540b52d414883664e43f9cd))
+* bqstream event ordering fix ([#2624](https://github.com/rudderlabs/rudder-transformer/issues/2624)) ([e97e7ca](https://github.com/rudderlabs/rudder-transformer/commit/e97e7caed20ffb007f1c543e15c15c6e89e2dfb7))
+* **hubspot:** add validation for hubspotEvents ([#2643](https://github.com/rudderlabs/rudder-transformer/issues/2643)) ([b49d0ee](https://github.com/rudderlabs/rudder-transformer/commit/b49d0ee576f55e5f95e3d02b7111e995fc9b8ada))
+* **mixpanel:** batch event ordering ([#2608](https://github.com/rudderlabs/rudder-transformer/issues/2608)) ([36c7f06](https://github.com/rudderlabs/rudder-transformer/commit/36c7f06ccfa534b751ca9b3f5c41e9bb6d2e9f00))
+* refactor adjust using optional chaining ([#2671](https://github.com/rudderlabs/rudder-transformer/issues/2671)) ([f63b493](https://github.com/rudderlabs/rudder-transformer/commit/f63b4932d5ba467a82a36d3e8b80578f81f729cf))
+* **snyk:** fix dependencies version from snyk ([#2640](https://github.com/rudderlabs/rudder-transformer/issues/2640)) ([8422744](https://github.com/rudderlabs/rudder-transformer/commit/8422744b3af48f71358f7acbe2df7b3688ce04a8))
+* **snyk:** removed aws-sdk dependency ([08a3535](https://github.com/rudderlabs/rudder-transformer/commit/08a3535257e5d84566c95cebc701613478f0e039))
+* **snyk:** removed the new added dependencies ([364779c](https://github.com/rudderlabs/rudder-transformer/commit/364779ce959d7548e5cf1cc8c718b71331dcb378))
+* **snyk:** snyk updated versions merged to oen pr ([16a9b8e](https://github.com/rudderlabs/rudder-transformer/commit/16a9b8e6cc26a8df1331cb1af8774df7cc05c959))
+* use promise for prompts in personalize create tracking script ([#2635](https://github.com/rudderlabs/rudder-transformer/issues/2635)) ([5fbddd1](https://github.com/rudderlabs/rudder-transformer/commit/5fbddd1490b16dbda6bca19df4cac5bef6ff78c5))
+
+### [1.43.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.43.0...v1.43.1) (2023-09-26)
+
+
+### Bug Fixes
+
+* **dm:** updated the stats definition for the tracking plan service ([eb2724f](https://github.com/rudderlabs/rudder-transformer/commit/eb2724f135d2c3c2a1fb8a88051cfb0f2720b5ed))
+* **iterable:** event id mapping ([#2659](https://github.com/rudderlabs/rudder-transformer/issues/2659)) ([84083aa](https://github.com/rudderlabs/rudder-transformer/commit/84083aa671312e3934414b5534489fba87d9b29f))
+
+## [1.43.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.42.0...v1.43.0) (2023-09-25)
+
+
+### Features
+
+* update google_cloud_function implementation as per custom destination ([#2652](https://github.com/rudderlabs/rudder-transformer/issues/2652)) ([5c981e1](https://github.com/rudderlabs/rudder-transformer/commit/5c981e12c8e203c80229881a07704c6413c842a9))
+
+## [1.42.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.41.1...v1.42.0) (2023-09-18)
+
+
+### Features
+
+* added profiling endpoints to fetch profiles ([#2540](https://github.com/rudderlabs/rudder-transformer/issues/2540)) ([e537364](https://github.com/rudderlabs/rudder-transformer/commit/e537364841729f738e75bfbf859abad745f1f78f))
+* google ads v14 upgrade ([#2578](https://github.com/rudderlabs/rudder-transformer/issues/2578)) ([f44a951](https://github.com/rudderlabs/rudder-transformer/commit/f44a951fc2a23135e3d0950d7a29421ca939de1a))
+* introduce de-activation of authStatus for access_denied or inva… ([#2598](https://github.com/rudderlabs/rudder-transformer/issues/2598)) ([3b1fef6](https://github.com/rudderlabs/rudder-transformer/commit/3b1fef63c7aee376dd67c6b3235095f311d673fb))
+* **mixpanel:** add incremental properties support ([#2550](https://github.com/rudderlabs/rudder-transformer/issues/2550)) ([e98ea84](https://github.com/rudderlabs/rudder-transformer/commit/e98ea84265ee37bfc6d3e99104af7bb4a3d78007))
+* onboard fullstory cloud mode ([#2536](https://github.com/rudderlabs/rudder-transformer/issues/2536)) ([dfd6117](https://github.com/rudderlabs/rudder-transformer/commit/dfd6117fbba521941876bc9681858d4a6d32b0bf))
+* onboard intercom to transformer proxy ([#2548](https://github.com/rudderlabs/rudder-transformer/issues/2548)) ([ed27a11](https://github.com/rudderlabs/rudder-transformer/commit/ed27a11799ded0e9f7f77401ddc58061a5908b37))
+* onboard launchdarkly audience ([#2529](https://github.com/rudderlabs/rudder-transformer/issues/2529)) ([082e1d1](https://github.com/rudderlabs/rudder-transformer/commit/082e1d190f4df152cd7dc3141cc33b406720215f))
+
+
+### Bug Fixes
+
+* **INT-339:** marketo response handler to handle static list removed and skipped statuses ([#2606](https://github.com/rudderlabs/rudder-transformer/issues/2606)) ([e3fed49](https://github.com/rudderlabs/rudder-transformer/commit/e3fed49d2725a6c60409db00cfda2a997da78e71))
+* **INT-339:** marketo response handler to handle static list removed and skipped statuses ([#2620](https://github.com/rudderlabs/rudder-transformer/issues/2620)) ([87d8216](https://github.com/rudderlabs/rudder-transformer/commit/87d82165089b706da1213cb3859f0f6d73f917db))
+* **INT-523:** replaced flag with dropdown for datacenter selection ([#2575](https://github.com/rudderlabs/rudder-transformer/issues/2575)) ([735d5d1](https://github.com/rudderlabs/rudder-transformer/commit/735d5d1e4f1d84edaed488642eefe8d41bf6f20a))
+* **INT-568:** slack send event to event specific channel based on channel webhook ([#2563](https://github.com/rudderlabs/rudder-transformer/issues/2563)) ([0f3b39e](https://github.com/rudderlabs/rudder-transformer/commit/0f3b39e64f50cec54a5fcd59e0da298092ca0f22))
+* **INT-591:** added support of id parameter for update events ([#2595](https://github.com/rudderlabs/rudder-transformer/issues/2595)) ([a2a9c37](https://github.com/rudderlabs/rudder-transformer/commit/a2a9c374517826738ba9677511c6247316fc836e))
+* **iterable:** updated mappings ([#2602](https://github.com/rudderlabs/rudder-transformer/issues/2602)) ([23bb1f6](https://github.com/rudderlabs/rudder-transformer/commit/23bb1f64168f0e0a2ded4cbce8c99ef807fef9ad))
+* pyroscope endpoints ([#2613](https://github.com/rudderlabs/rudder-transformer/issues/2613)) ([7d268f0](https://github.com/rudderlabs/rudder-transformer/commit/7d268f046f92d86f48ced06c586b0d098a913113))
+* remove hashing on twclid for twitter ads ([#2605](https://github.com/rudderlabs/rudder-transformer/issues/2605)) ([6c984a4](https://github.com/rudderlabs/rudder-transformer/commit/6c984a4821124e1054be1c81a9bf110c36311f13))
+* seperate build steps for ruddestack and rudderlabs repo ([#2625](https://github.com/rudderlabs/rudder-transformer/issues/2625)) ([fcafacd](https://github.com/rudderlabs/rudder-transformer/commit/fcafacd10be7f1c9c001a6a805b4cb9daafd4413))
+* **transformation:** block ipv6 requests in user transformer ([#2618](https://github.com/rudderlabs/rudder-transformer/issues/2618)) ([fd81211](https://github.com/rudderlabs/rudder-transformer/commit/fd8121108594d6ca032c36c7b8d47d26c1b389e0))
+
+### [1.41.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.41.0...v1.41.1) (2023-09-14)
+
+
+### Bug Fixes
+
+* **redis:** add destination_id in the key ([55629d6](https://github.com/rudderlabs/rudder-transformer/commit/55629d6d871d275de601a11ec223e0c283641d7b))
+
+## [1.41.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.2...v1.41.0) (2023-09-11)
+
+
+### Features
+
+* add support for updating profile properties through track call ([#2581](https://github.com/rudderlabs/rudder-transformer/issues/2581)) ([f0f20d6](https://github.com/rudderlabs/rudder-transformer/commit/f0f20d654ec5ee8eb078ce7f5610a4666d73fd8c))
+* **INT-580:** messageId to event_id mapping support ([#2570](https://github.com/rudderlabs/rudder-transformer/issues/2570)) ([b38843b](https://github.com/rudderlabs/rudder-transformer/commit/b38843bce9bc02d73dceedc6f751f402251fd23a))
+* **tiktok_ads:** messageId to event_id mapping support ([72f87bf](https://github.com/rudderlabs/rudder-transformer/commit/72f87bfa381ed7a5b74fb5907f932b78d0257ab9))
+
+
+### Bug Fixes
+
+* **bugsnag:** alerts ([266514b](https://github.com/rudderlabs/rudder-transformer/commit/266514bd56c150d6c88c1db0733a1da0a4367c02))
+* **bugsnag:** alerts ([#2580](https://github.com/rudderlabs/rudder-transformer/issues/2580)) ([9e9eeac](https://github.com/rudderlabs/rudder-transformer/commit/9e9eeacdf79cf8175f87f302242542060f668db8))
+* json paths for non tracks events for warehouse ([#2571](https://github.com/rudderlabs/rudder-transformer/issues/2571)) ([e455368](https://github.com/rudderlabs/rudder-transformer/commit/e45536805cf9545b73f4d5bf1be5fad1565ab075))
+
+### [1.40.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.1...v1.40.2) (2023-09-06)
+
+
+### Bug Fixes
+
+* marketo bulk upload import issue ([#2559](https://github.com/rudderlabs/rudder-transformer/issues/2559)) ([752f351](https://github.com/rudderlabs/rudder-transformer/commit/752f351f02b7f7611c702d7dbcb4804972bb0970))
+
+### [1.40.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.40.0...v1.40.1) (2023-09-06)
+
+
+### Bug Fixes
+
+* **google_ads_offline_conversions:** partial failure status code issue ([abfce44](https://github.com/rudderlabs/rudder-transformer/commit/abfce44067dbcefe7f2db90a5bd8e2895fd49ea9))
+* **google_ads_offline_conversions:** partial failure status code issue ([#2552](https://github.com/rudderlabs/rudder-transformer/issues/2552)) ([ae90087](https://github.com/rudderlabs/rudder-transformer/commit/ae900872680fd258dbb7cf10d5bfe6f02def94a5))
+* type issue in lookup via externalid, row lock error as retryable ([#2553](https://github.com/rudderlabs/rudder-transformer/issues/2553)) ([319ff90](https://github.com/rudderlabs/rudder-transformer/commit/319ff903059f21f8b11df3e984547a82f35e7ceb))
+* update datafile lookup error message ([#2555](https://github.com/rudderlabs/rudder-transformer/issues/2555)) ([c4aff36](https://github.com/rudderlabs/rudder-transformer/commit/c4aff3626a1f75059bd6a09edff1e38b4e6fc4e4))
+
+## [1.40.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.39.1...v1.40.0) (2023-09-04)
+
+
+### Features
+
+* add eu instance support to kustomer destination ([#2513](https://github.com/rudderlabs/rudder-transformer/issues/2513)) ([34dbabf](https://github.com/rudderlabs/rudder-transformer/commit/34dbabfcec610b87a0a1512743528bef2e4b69ae))
+* blank audience support in google ads ([#2526](https://github.com/rudderlabs/rudder-transformer/issues/2526)) ([54d3704](https://github.com/rudderlabs/rudder-transformer/commit/54d3704a9dea612b98735f7191351e8195af205a))
+* eloqua new destination cdkv2 ([#2501](https://github.com/rudderlabs/rudder-transformer/issues/2501)) ([1db0573](https://github.com/rudderlabs/rudder-transformer/commit/1db0573eff0a0091248ffa2107fd8064a03ce2dd))
+* **ga4:** added support of campaign_details event ([#2542](https://github.com/rudderlabs/rudder-transformer/issues/2542)) ([95920b8](https://github.com/rudderlabs/rudder-transformer/commit/95920b8a851e1e78a7154dae222033c7f34b3c09))
+* **posthog:** support timestamp mapping from properties ([#2507](https://github.com/rudderlabs/rudder-transformer/issues/2507)) ([88392d7](https://github.com/rudderlabs/rudder-transformer/commit/88392d70b73525a15933e5a83a25df7d6c9417ee))
+* retl audience support google ads ([#2530](https://github.com/rudderlabs/rudder-transformer/issues/2530)) ([804aa79](https://github.com/rudderlabs/rudder-transformer/commit/804aa79113ed628d4c4dc92ad5dd4aa347aabe5a))
+* support for profiles event in redis ([#2497](https://github.com/rudderlabs/rudder-transformer/issues/2497)) ([f0c0a21](https://github.com/rudderlabs/rudder-transformer/commit/f0c0a211d167be2393c92db0a37dd517b1dbd1c4))
+
+
+### Bug Fixes
+
+* **braze:** enable merge behaviour to stitch user data ([#2508](https://github.com/rudderlabs/rudder-transformer/issues/2508)) ([8a2cf93](https://github.com/rudderlabs/rudder-transformer/commit/8a2cf93d9e83954edf1878390c254fb88a6c83c7))
+* **gaoc:** custom variables issue ([#2545](https://github.com/rudderlabs/rudder-transformer/issues/2545)) ([3afee53](https://github.com/rudderlabs/rudder-transformer/commit/3afee53759e19765c4a284910cfd86e774dc0a24))
+* **INT-512:** removed personal information from test cases ([#2517](https://github.com/rudderlabs/rudder-transformer/issues/2517)) ([9582e31](https://github.com/rudderlabs/rudder-transformer/commit/9582e31b9398f8d9bb01c431fd573fc54dbf7b3d))
+* **iterable:** squadcast alert ([#2535](https://github.com/rudderlabs/rudder-transformer/issues/2535)) ([5a2194b](https://github.com/rudderlabs/rudder-transformer/commit/5a2194baa2c07d5b0fbe7bd7f4cfdec9117661ba))
+* missing type for page and group calls ([#2512](https://github.com/rudderlabs/rudder-transformer/issues/2512)) ([bf08b9e](https://github.com/rudderlabs/rudder-transformer/commit/bf08b9e7177dbe7920e50e014484189a0c336b75))
+* remove secure environment for datafile call ([#2544](https://github.com/rudderlabs/rudder-transformer/issues/2544)) ([b069e26](https://github.com/rudderlabs/rudder-transformer/commit/b069e262e9864a60611ee1b1e8e6c91dad76b7f4))
+* fix: marketo bulk upload bugs and refactor ([#2414](https://github.com/rudderlabs/rudder-transformer/issues/2414)) ([9e3ace1](https://github.com/rudderlabs/rudder-transformer/pull/2546/commits/9e3ace17012f8fae3db35608367d98840037d1c0))
+
### [1.39.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.39.0...v1.39.1) (2023-08-28)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000000..6a52dfa68df
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,44 @@
+Elastic License 2.0 (ELv2)
+
+**Acceptance**
+By using the software, you agree to all of the terms and conditions below.
+
+**Copyright License**
+The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations and conditions below
+
+**Limitations**
+You may not provide the software to third parties as a hosted or managed service, where the service provides users with access to any substantial set of the features or functionality of the software.
+
+You may not move, change, disable, or circumvent the license key functionality in the software, and you may not remove or obscure any functionality in the software that is protected by the license key.
+
+You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor’s trademarks is subject to applicable law.
+
+**Patents**
+The licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
+
+**Notices**
+You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms.
+
+If you modify the software, you must include in any modified copies of the software prominent notices stating that you have modified the software.
+
+**No Other Rights**
+These terms do not imply any licenses other than those expressly granted in these terms.
+
+**Termination**
+If you use the software in violation of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently.
+
+**No Liability**
+As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.
+
+**Definitions**
+The *licensor* is the entity offering these terms, and the *software* is the software the licensor makes available under these terms, including any portion of it.
+
+*you* refers to the individual or entity agreeing to these terms.
+
+*your company* is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. *control* means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
+
+*your licenses* are all the licenses granted to you for the software under these terms.
+
+*use* means anything you do with the software requiring one of your licenses.
+
+*trademark* means trademarks, service marks, and similar rights.
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 2abc92cbcbe..00000000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 RudderStack
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
index 07c3ba32165..2b3908dcb55 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
# RudderStack Transformer
RudderStack Transformer is a service which transforms the RudderStack events to destination-specific singular events. This feature is released under
-under the [MIT license](https://github.com/rudderlabs/rudder-transformer/blob/main/LICENSE.md).
+under the [Elastic License 2.0](https://www.elastic.co/licensing/elastic-license).
## Transformer Setup
diff --git a/github-release.config.js b/github-release.config.js
deleted file mode 100644
index df269d8a02b..00000000000
--- a/github-release.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- gitRawCommitsOpts: {
- merges: null,
- },
-};
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 00000000000..412d8d27330
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,197 @@
+// For a detailed explanation regarding each configuration property, visit:
+// https://jestjs.io/docs/en/configuration.html
+
+module.exports = {
+ // All imported modules in your tests should be mocked automatically
+ // automock: false,
+
+ // Stop running tests after `n` failures
+ bail: 1,
+
+ // Respect "browser" field in package.json when resolving modules
+ // browser: false,
+
+ // The directory where Jest should store its cached dependency information
+ // cacheDirectory: "/private/var/folders/bj/xt4sffgd21z57fxhvqrd30_80000gn/T/jest_dx",
+
+ // Automatically clear mock calls and instances between every test
+ // clearMocks: false,
+
+ // Indicates whether the coverage information should be collected while executing the test
+ collectCoverage: false,
+
+ // An array of glob patterns indicating a set of files for which coverage information should be collected
+ // collectCoverageFrom: null,
+
+ // The directory where Jest should output its coverage files
+ coverageDirectory: 'reports/coverage',
+
+ // An array of regexp pattern strings used to skip coverage collection
+ coveragePathIgnorePatterns: ['/node_modules/', '__tests__', 'warehouse/v0'],
+
+ // A list of reporter names that Jest uses when writing coverage reports
+ coverageReporters: ['json', 'text', 'lcov', 'clover'],
+
+ // An object that configures minimum threshold enforcement for coverage results
+ coverageThreshold: {
+ global: {
+ branches: 60,
+ functions: 75,
+ lines: 75,
+ statements: 75,
+ },
+ },
+
+ // A path to a custom dependency extractor
+ // dependencyExtractor: null,
+
+ // Make calling deprecated APIs throw helpful error messages
+ errorOnDeprecated: true,
+
+ // Force coverage collection from ignored files using an array of glob patterns
+ // forceCoverageMatch: [],
+
+ // A path to a module which exports an async function that is triggered once before all test suites
+ // globalSetup: null,
+
+ // A path to a module which exports an async function that is triggered once after all test suites
+ // globalTeardown: null,
+
+ // A set of global variables that need to be available in all test environments
+ // globals: {
+ // 'ts-jest': {
+ // tsConfigFile: 'tsconfig.json',
+ // diagnostics: false
+ // },
+ // },
+ // preset: 'ts-jest/presets/js-with-ts-esm',
+
+ // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
+ // maxWorkers: "50%",
+
+ // An array of directory names to be searched recursively up from the requiring module's location
+ moduleDirectories: ['node_modules'],
+
+ // An array of file extensions your modules use
+ moduleFileExtensions: ['js', 'json', 'ts', 'node'],
+
+ // A map from regular expressions to module names that allow to stub out resources with a single module
+ // moduleNameMapper: {},
+
+ // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
+ modulePathIgnorePatterns: ['/test/__mocks__/axios.js'],
+
+ // Activates notifications for test results
+ notify: true,
+
+ // An enum that specifies notification mode. Requires { notify: true }
+ notifyMode: 'failure-change',
+
+ // A preset that is used as a base for Jest's configuration
+ // preset: null,
+
+ // Run tests from one or more projects
+ // projects: null,
+
+ // Use this configuration option to add custom reporters to Jest
+ reporters: [
+ 'default',
+ [
+ 'jest-sonar',
+ {
+ outputDirectory: 'reports/sonar',
+ outputName: 'results-report.xml',
+ reportedFilePath: 'relative',
+ relativeRootDir: './',
+ },
+ ],
+ ],
+
+ // Automatically reset mock state between every test
+ // resetMocks: false,
+
+ // Reset the module registry before running each individual test
+ // resetModules: false,
+
+ // A path to a custom resolver
+ // resolver: null,
+
+ // Automatically restore mock state between every test
+ // restoreMocks: false,
+
+ // The root directory that Jest should scan for tests and modules within
+ // rootDir: null,
+
+ // A list of paths to directories that Jest should use to search for files in
+ // roots: [
+ // ""
+ // ],
+
+ // Allows you to use a custom runner instead of Jest's default test runner
+ // runner: "jest-runner",
+
+ // The paths to modules that run some code to configure or set up the testing environment before each test
+ // setupFiles: [],
+
+ // A list of paths to modules that run some code to configure or set up the testing framework before each test
+ // setupFilesAfterEnv: [],
+
+ // A list of paths to snapshot serializer modules Jest should use for snapshot testing
+ // snapshotSerializers: [],
+
+ // The test environment that will be used for testing
+ testEnvironment: 'node',
+
+ // Options that will be passed to the testEnvironment
+ // testEnvironmentOptions: {},
+
+ // Adds a location field to test results
+ // testLocationInResults: false,
+
+ // The glob patterns Jest uses to detect test files
+ testMatch: ['**/*.test.[tj]s?(x)'],
+
+ // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
+ testPathIgnorePatterns: ['/node_modules/'],
+
+ // The regexp pattern or array of patterns that Jest uses to detect test files
+ // testRegex: [],
+ // This option allows the use of a custom results processor
+ // testResultsProcessor: null,
+
+ // This option allows use of a custom test runner
+ // testRunner: "jasmine2",
+
+ // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
+ // testURL: "http://localhost",
+
+ // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
+ // timers: "real",
+
+ // A map from regular expressions to paths to transformers
+ transform: {
+ '^.+\\.[tj]sx?$': [
+ 'ts-jest',
+ {
+ tsconfig: 'tsconfig.json',
+ diagnostics: true,
+ },
+ ],
+ },
+ // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
+ // transformIgnorePatterns: [
+ // "/node_modules/"
+ // ],
+
+ // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
+ // unmockedModulePathPatterns: undefined,
+
+ // Indicates whether each individual test should be reported during the run
+ // verbose: null,
+
+ // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
+ // watchPathIgnorePatterns: [],
+
+ // Whether to use watchman for file crawling
+ // watchman: true,
+};
diff --git a/jest.config.typescript.js b/jest.config.typescript.js
index 66f4236e7ec..fde50e3d5ec 100644
--- a/jest.config.typescript.js
+++ b/jest.config.typescript.js
@@ -2,186 +2,186 @@
// https://jestjs.io/docs/en/configuration.html
module.exports = {
- // All imported modules in your tests should be mocked automatically
- // automock: false,
+ // All imported modules in your tests should be mocked automatically
+ // automock: false,
- // Stop running tests after `n` failures
- bail: 1,
+ // Stop running tests after `n` failures
+ bail: 1,
- // Respect "browser" field in package.json when resolving modules
- // browser: false,
+ // Respect "browser" field in package.json when resolving modules
+ // browser: false,
- // The directory where Jest should store its cached dependency information
- // cacheDirectory: "/private/var/folders/bj/xt4sffgd21z57fxhvqrd30_80000gn/T/jest_dx",
+ // The directory where Jest should store its cached dependency information
+ // cacheDirectory: "/private/var/folders/bj/xt4sffgd21z57fxhvqrd30_80000gn/T/jest_dx",
- // Automatically clear mock calls and instances between every test
- // clearMocks: false,
+ // Automatically clear mock calls and instances between every test
+ // clearMocks: false,
- // Indicates whether the coverage information should be collected while executing the test
- collectCoverage: false,
+ // Indicates whether the coverage information should be collected while executing the test
+ collectCoverage: false,
- // An array of glob patterns indicating a set of files for which coverage information should be collected
- // collectCoverageFrom: null,
+ // An array of glob patterns indicating a set of files for which coverage information should be collected
+ // collectCoverageFrom: null,
- // The directory where Jest should output its coverage files
- coverageDirectory: 'reports/ts-coverage',
+ // The directory where Jest should output its coverage files
+ coverageDirectory: 'reports/ts-coverage',
- // An array of regexp pattern strings used to skip coverage collection
- coveragePathIgnorePatterns: ['/node_modules/', '__tests__'],
+ // An array of regexp pattern strings used to skip coverage collection
+ coveragePathIgnorePatterns: ['/node_modules/', '__tests__'],
- // A list of reporter names that Jest uses when writing coverage reports
- coverageReporters: ['json', 'text', 'lcov', 'clover'],
+ // A list of reporter names that Jest uses when writing coverage reports
+ coverageReporters: ['json', 'text', 'lcov', 'clover'],
- // An object that configures minimum threshold enforcement for coverage results
- coverageThreshold: {
- global: {
- branches: 30,
- functions: 40,
- lines: 50,
- statements: 50,
- },
+ // An object that configures minimum threshold enforcement for coverage results
+ coverageThreshold: {
+ global: {
+ branches: 30,
+ functions: 40,
+ lines: 50,
+ statements: 50,
},
+ },
- // A path to a custom dependency extractor
- // dependencyExtractor: null,
+ // A path to a custom dependency extractor
+ // dependencyExtractor: null,
- // Make calling deprecated APIs throw helpful error messages
- errorOnDeprecated: true,
+ // Make calling deprecated APIs throw helpful error messages
+ errorOnDeprecated: true,
- // Force coverage collection from ignored files using an array of glob patterns
- // forceCoverageMatch: [],
+ // Force coverage collection from ignored files using an array of glob patterns
+ // forceCoverageMatch: [],
- // A path to a module which exports an async function that is triggered once before all test suites
- // globalSetup: null,
+ // A path to a module which exports an async function that is triggered once before all test suites
+ // globalSetup: null,
- // A path to a module which exports an async function that is triggered once after all test suites
- // globalTeardown: null,
+ // A path to a module which exports an async function that is triggered once after all test suites
+ // globalTeardown: null,
- // A set of global variables that need to be available in all test environments
- // globals: {
- // 'ts-jest': {
- // tsConfigFile: 'tsconfig.json',
- // diagnostics: true
- // },
- // },
+ // A set of global variables that need to be available in all test environments
+ // globals: {
+ // 'ts-jest': {
+ // tsConfigFile: 'tsconfig.json',
+ // diagnostics: true
+ // },
+ // },
- // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
- // maxWorkers: "50%",
+ // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
+ // maxWorkers: "50%",
- // An array of directory names to be searched recursively up from the requiring module's location
- moduleDirectories: ['node_modules'],
+ // An array of directory names to be searched recursively up from the requiring module's location
+ moduleDirectories: ['node_modules'],
- // An array of file extensions your modules use
- moduleFileExtensions: ['js', 'json', 'ts', 'node'],
+ // An array of file extensions your modules use
+ moduleFileExtensions: ['js', 'json', 'ts', 'node'],
- // A map from regular expressions to module names that allow to stub out resources with a single module
- // moduleNameMapper: {},
+ // A map from regular expressions to module names that allow to stub out resources with a single module
+ // moduleNameMapper: {},
- // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
- // modulePathIgnorePatterns: [],
+ // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
+ modulePathIgnorePatterns: ['/test/__mocks__/axios.js'],
- // Activates notifications for test results
- notify: true,
+ // Activates notifications for test results
+ notify: true,
- // An enum that specifies notification mode. Requires { notify: true }
- notifyMode: 'failure-change',
+ // An enum that specifies notification mode. Requires { notify: true }
+ notifyMode: 'failure-change',
- // A preset that is used as a base for Jest's configuration
- preset: 'ts-jest',
+ // A preset that is used as a base for Jest's configuration
+ preset: 'ts-jest',
- // Run tests from one or more projects
- // projects: null,
+ // Run tests from one or more projects
+ // projects: null,
- // Use this configuration option to add custom reporters to Jest
- // reporters: undefined,
+ // Use this configuration option to add custom reporters to Jest
+ // reporters: undefined,
- // Automatically reset mock state between every test
- // resetMocks: false,
+ // Automatically reset mock state between every test
+ // resetMocks: false,
- // Reset the module registry before running each individual test
- // resetModules: false,
+ // Reset the module registry before running each individual test
+ // resetModules: false,
- // A path to a custom resolver
- // resolver: null,
+ // A path to a custom resolver
+ // resolver: null,
- // Automatically restore mock state between every test
- // restoreMocks: false,
+ // Automatically restore mock state between every test
+ // restoreMocks: false,
- // The root directory that Jest should scan for tests and modules within
- // rootDir: null,
+ // The root directory that Jest should scan for tests and modules within
+ // rootDir: null,
- // A list of paths to directories that Jest should use to search for files in
- // roots: [
- // ""
- // ],
+ // A list of paths to directories that Jest should use to search for files in
+ // roots: [
+ // ""
+ // ],
- // Allows you to use a custom runner instead of Jest's default test runner
- // runner: "jest-runner",
+ // Allows you to use a custom runner instead of Jest's default test runner
+ // runner: "jest-runner",
- // The paths to modules that run some code to configure or set up the testing environment before each test
- // setupFiles: [],
+ // The paths to modules that run some code to configure or set up the testing environment before each test
+ // setupFiles: [],
- // A list of paths to modules that run some code to configure or set up the testing framework before each test
- // setupFilesAfterEnv: [],
+ // A list of paths to modules that run some code to configure or set up the testing framework before each test
+ // setupFilesAfterEnv: [],
- // A list of paths to snapshot serializer modules Jest should use for snapshot testing
- // snapshotSerializers: [],
+ // A list of paths to snapshot serializer modules Jest should use for snapshot testing
+ // snapshotSerializers: [],
- // The test environment that will be used for testing
- testEnvironment: 'node',
+ // The test environment that will be used for testing
+ testEnvironment: 'node',
- // Options that will be passed to the testEnvironment
- // testEnvironmentOptions: {},
+ // Options that will be passed to the testEnvironment
+ // testEnvironmentOptions: {},
- // Adds a location field to test results
- // testLocationInResults: false,
+ // Adds a location field to test results
+ // testLocationInResults: false,
- // The glob patterns Jest uses to detect test files
- testMatch: ['**/*.(test).ts?(x)'],
+ // The glob patterns Jest uses to detect test files
+ testMatch: ['**/*.(test).ts?(x)'],
- // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
- testPathIgnorePatterns: ['/node_modules/'],
+ // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
+ testPathIgnorePatterns: ['/node_modules/'],
- // The regexp pattern or array of patterns that Jest uses to detect test files
- // testRegex: [],
+ // The regexp pattern or array of patterns that Jest uses to detect test files
+ // testRegex: [],
- // This option allows the use of a custom results processor
- // testResultsProcessor: null,
+ // This option allows the use of a custom results processor
+ // testResultsProcessor: null,
- // This option allows use of a custom test runner
- // testRunner: "jasmine2",
+ // This option allows use of a custom test runner
+ // testRunner: "jasmine2",
- // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
- // testURL: "http://localhost",
+ // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
+ // testURL: "http://localhost",
- // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
- // timers: "real",
+ // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
+ // timers: "real",
- // A map from regular expressions to paths to transformers
- transform: {
- '^.+\\.tsx?$': [
- 'ts-jest',
- {
- tsconfig: 'tsconfig.json',
- diagnostics: true,
- },
- ],
- },
+ // A map from regular expressions to paths to transformers
+ transform: {
+ '^.+\\.tsx?$': [
+ 'ts-jest',
+ {
+ tsconfig: 'tsconfig.json',
+ diagnostics: true,
+ },
+ ],
+ },
- // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
- // transformIgnorePatterns: [
- // "/node_modules/"
- // ],
+ // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
+ // transformIgnorePatterns: [
+ // "/node_modules/"
+ // ],
- // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
- // unmockedModulePathPatterns: undefined,
+ // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
+ // unmockedModulePathPatterns: undefined,
- // Indicates whether each individual test should be reported during the run
- // verbose: null,
+ // Indicates whether each individual test should be reported during the run
+ // verbose: null,
- // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
- // watchPathIgnorePatterns: [],
+ // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
+ // watchPathIgnorePatterns: [],
- // Whether to use watchman for file crawling
- // watchman: true,
+ // Whether to use watchman for file crawling
+ // watchman: true,
};
diff --git a/jest.default.config.js b/jest.default.config.js
index 895b8aa0751..fed1dcef31c 100644
--- a/jest.default.config.js
+++ b/jest.default.config.js
@@ -36,9 +36,9 @@ module.exports = {
coverageThreshold: {
global: {
branches: 60,
- functions: 80,
- lines: 80,
- statements: 80,
+ functions: 75,
+ lines: 75,
+ statements: 75,
},
},
diff --git a/package-lock.json b/package-lock.json
index 7c88b949da1..ae48fad558f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,30 +1,33 @@
{
"name": "rudder-transformer",
- "version": "1.39.1",
+ "version": "1.52.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "rudder-transformer",
- "version": "1.39.1",
+ "version": "1.52.1",
"license": "ISC",
"dependencies": {
"@amplitude/ua-parser-js": "^0.7.24",
- "@aws-sdk/client-personalize": "^3.363.0",
+ "@aws-sdk/client-personalize": "^3.391.0",
"@aws-sdk/client-s3": "^3.370.0",
- "@aws-sdk/credential-providers": "^3.363.0",
- "@aws-sdk/lib-storage": "^3.370.0",
+ "@aws-sdk/credential-providers": "^3.391.0",
+ "@aws-sdk/lib-storage": "^3.391.0",
"@bugsnag/js": "^7.20.2",
"@datadog/pprof": "^3.1.0",
"@koa/router": "^12.0.0",
"@ndhoule/extend": "^2.0.0",
+ "@pyroscope/nodejs": "^0.2.6",
+ "@rudderstack/integrations-lib": "^0.1.8",
+ "@rudderstack/workflow-engine": "^0.6.9",
"ajv": "^8.12.0",
"ajv-draft-04": "^1.0.0",
"ajv-formats": "^2.1.1",
- "axios": "^1.4.0",
+ "axios": "^1.6.0",
"btoa": "^1.2.1",
"component-each": "^0.2.6",
- "crypto-js": "^4.1.1",
+ "crypto-js": "^4.2.0",
"dotenv": "^16.0.3",
"flat": "^5.0.2",
"form-data": "^4.0.0",
@@ -50,14 +53,13 @@
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"node-cache": "^5.1.2",
- "node-fetch": "^2.6.9",
+ "node-fetch": "^2.6.12",
"oauth-1.0a": "^2.2.6",
"object-hash": "^3.0.0",
"parse-static-imports": "^1.1.0",
"prom-client": "^14.2.0",
"qs": "^6.11.1",
"rudder-transformer-cdk": "^1.4.11",
- "rudder-workflow-engine": "^0.4.7",
"set-value": "^4.1.0",
"sha256": "^0.2.0",
"stacktrace-parser": "^0.1.10",
@@ -71,6 +73,7 @@
"devDependencies": {
"@commitlint/config-conventional": "^17.6.3",
"@digitalroute/cz-conventional-changelog-for-jira": "^8.0.1",
+ "@types/fast-json-stable-stringify": "^2.1.0",
"@types/jest": "^29.5.1",
"@types/koa": "^2.13.6",
"@types/koa-bodyparser": "^4.3.10",
@@ -78,6 +81,7 @@
"@types/node": "^20.2.5",
"@typescript-eslint/eslint-plugin": "^5.61.0",
"@typescript-eslint/parser": "^5.59.2",
+ "axios-mock-adapter": "^1.22.0",
"benchmark-suite": "^0.1.8",
"commander": "^10.0.1",
"commitizen": "^4.3.0",
@@ -112,26 +116,23 @@
},
"node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@amplitude/ua-parser-js": {
"version": "0.7.24",
- "resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz",
- "integrity": "sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA==",
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.1.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -142,9 +143,8 @@
},
"node_modules/@apidevtools/json-schema-ref-parser": {
"version": "9.0.6",
- "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz",
- "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jsdevtools/ono": "^7.1.3",
"call-me-maybe": "^1.0.1",
@@ -153,18 +153,16 @@
},
"node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -175,24 +173,21 @@
},
"node_modules/@apidevtools/openapi-schemas": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz",
- "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/@apidevtools/swagger-methods": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz",
- "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@apidevtools/swagger-parser": {
"version": "10.1.0",
- "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz",
- "integrity": "sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@apidevtools/json-schema-ref-parser": "9.0.6",
"@apidevtools/openapi-schemas": "^2.1.0",
@@ -208,8 +203,7 @@
},
"node_modules/@aws-crypto/crc32": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
- "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
@@ -218,13 +212,11 @@
},
"node_modules/@aws-crypto/crc32/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/crc32c": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz",
- "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
@@ -233,26 +225,22 @@
},
"node_modules/@aws-crypto/crc32c/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/ie11-detection": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
- "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^1.11.1"
}
},
"node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/sha1-browser": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz",
- "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/ie11-detection": "^3.0.0",
"@aws-crypto/supports-web-crypto": "^3.0.0",
@@ -291,13 +279,11 @@
},
"node_modules/@aws-crypto/sha1-browser/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/sha256-browser": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
- "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/ie11-detection": "^3.0.0",
"@aws-crypto/sha256-js": "^3.0.0",
@@ -311,13 +297,11 @@
},
"node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/sha256-js": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
- "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/util": "^3.0.0",
"@aws-sdk/types": "^3.222.0",
@@ -326,26 +310,22 @@
},
"node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/supports-web-crypto": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
- "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^1.11.1"
}
},
"node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-crypto/util": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
- "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "^3.222.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
@@ -354,66 +334,63 @@
},
"node_modules/@aws-crypto/util/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ "license": "0BSD"
},
"node_modules/@aws-sdk/chunked-blob-reader": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz",
- "integrity": "sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
}
},
"node_modules/@aws-sdk/chunked-blob-reader-native": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.310.0.tgz",
- "integrity": "sha512-RuhyUY9hCd6KWA2DMF/U6rilYLLRYrDY6e0lq3Of1yzSRFxi4bk9ZMCF0mxf/9ppsB5eudUjrOypYgm6Axt3zw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/util-base64": "3.310.0",
"tslib": "^2.5.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.363.0.tgz",
- "integrity": "sha512-tsJzgBSCpna85IVsuS7FBIK9wkSl7fs8TJ/QzapIgu8rKss0ySHVO6TeMVAdw2BvaQl7CxU9c3PosjhLWHu6KQ==",
+ "version": "3.414.0",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.363.0",
- "@aws-sdk/credential-provider-node": "3.363.0",
- "@aws-sdk/middleware-host-header": "3.363.0",
- "@aws-sdk/middleware-logger": "3.363.0",
- "@aws-sdk/middleware-recursion-detection": "3.363.0",
- "@aws-sdk/middleware-signing": "3.363.0",
- "@aws-sdk/middleware-user-agent": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@aws-sdk/util-user-agent-browser": "3.363.0",
- "@aws-sdk/util-user-agent-node": "3.363.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.1",
- "@smithy/middleware-retry": "^1.0.2",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.0.1",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.0.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.2",
- "@smithy/util-utf8": "^1.0.1",
+ "@aws-sdk/client-sts": "3.414.0",
+ "@aws-sdk/credential-provider-node": "3.414.0",
+ "@aws-sdk/middleware-host-header": "3.413.0",
+ "@aws-sdk/middleware-logger": "3.413.0",
+ "@aws-sdk/middleware-recursion-detection": "3.413.0",
+ "@aws-sdk/middleware-signing": "3.413.0",
+ "@aws-sdk/middleware-user-agent": "3.413.0",
+ "@aws-sdk/region-config-resolver": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@aws-sdk/util-user-agent-browser": "3.413.0",
+ "@aws-sdk/util-user-agent-node": "3.413.0",
+ "@smithy/config-resolver": "^2.0.8",
+ "@smithy/fetch-http-handler": "^2.1.3",
+ "@smithy/hash-node": "^2.0.7",
+ "@smithy/invalid-dependency": "^2.0.7",
+ "@smithy/middleware-content-length": "^2.0.9",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/middleware-retry": "^2.0.10",
+ "@smithy/middleware-serde": "^2.0.7",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/node-http-handler": "^2.1.3",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/smithy-client": "^2.1.4",
+ "@smithy/types": "^2.3.1",
+ "@smithy/url-parser": "^2.0.7",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.1.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.8",
+ "@smithy/util-defaults-mode-node": "^2.0.10",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -421,333 +398,3384 @@
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-personalize": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.363.0.tgz",
- "integrity": "sha512-SZ9QO3LLuIiAvT28F2Qo7ImbmAvedticrDMoFpvVQB2TJ/NR0wzu33udMqN4ZCy8bUY9eG1mhdo35YAhzVgjBQ==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.363.0",
- "@aws-sdk/credential-provider-node": "3.363.0",
- "@aws-sdk/middleware-host-header": "3.363.0",
- "@aws-sdk/middleware-logger": "3.363.0",
- "@aws-sdk/middleware-recursion-detection": "3.363.0",
- "@aws-sdk/middleware-signing": "3.363.0",
- "@aws-sdk/middleware-user-agent": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@aws-sdk/util-user-agent-browser": "3.363.0",
- "@aws-sdk/util-user-agent-node": "3.363.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.1",
- "@smithy/middleware-retry": "^1.0.2",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.0.1",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.0.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.2",
- "@smithy/util-utf8": "^1.0.1",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/config-resolver": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.370.0.tgz",
- "integrity": "sha512-+b53hI+C+tIiE6OhIvaUXD5qC0zFrCWIu6EKT597W+4XzfFIZE0BGgolP8pC1lLDghPjCFSmAm9Efcb2a1sPvw==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha1-browser": "3.0.0",
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.370.0",
- "@aws-sdk/credential-provider-node": "3.370.0",
- "@aws-sdk/hash-blob-browser": "3.370.0",
- "@aws-sdk/hash-stream-node": "3.370.0",
- "@aws-sdk/md5-js": "3.370.0",
- "@aws-sdk/middleware-bucket-endpoint": "3.370.0",
- "@aws-sdk/middleware-expect-continue": "3.370.0",
- "@aws-sdk/middleware-flexible-checksums": "3.370.0",
- "@aws-sdk/middleware-host-header": "3.370.0",
- "@aws-sdk/middleware-location-constraint": "3.370.0",
- "@aws-sdk/middleware-logger": "3.370.0",
- "@aws-sdk/middleware-recursion-detection": "3.370.0",
- "@aws-sdk/middleware-sdk-s3": "3.370.0",
- "@aws-sdk/middleware-signing": "3.370.0",
- "@aws-sdk/middleware-ssec": "3.370.0",
- "@aws-sdk/middleware-user-agent": "3.370.0",
- "@aws-sdk/signature-v4-multi-region": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-endpoints": "3.370.0",
- "@aws-sdk/util-user-agent-browser": "3.370.0",
- "@aws-sdk/util-user-agent-node": "3.370.0",
- "@aws-sdk/xml-builder": "3.310.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/eventstream-serde-browser": "^1.0.1",
- "@smithy/eventstream-serde-config-resolver": "^1.0.1",
- "@smithy/eventstream-serde-node": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.2",
- "@smithy/middleware-retry": "^1.0.3",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.1.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.3",
- "@smithy/util-stream": "^1.0.1",
- "@smithy/util-utf8": "^1.0.1",
- "@smithy/util-waiter": "^1.0.1",
- "fast-xml-parser": "4.2.5",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.370.0.tgz",
- "integrity": "sha512-0Ty1iHuzNxMQtN7nahgkZr4Wcu1XvqGfrQniiGdKKif9jG/4elxsQPiydRuQpFqN6b+bg7wPP7crFP1uTxx2KQ==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.370.0",
- "@aws-sdk/middleware-logger": "3.370.0",
- "@aws-sdk/middleware-recursion-detection": "3.370.0",
- "@aws-sdk/middleware-user-agent": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-endpoints": "3.370.0",
- "@aws-sdk/util-user-agent-browser": "3.370.0",
- "@aws-sdk/util-user-agent-node": "3.370.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.2",
- "@smithy/middleware-retry": "^1.0.3",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.1.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.3",
- "@smithy/util-utf8": "^1.0.1",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
"tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.370.0.tgz",
- "integrity": "sha512-jAYOO74lmVXylQylqkPrjLzxvUnMKw476JCUTvCO6Q8nv3LzCWd76Ihgv/m9Q4M2Tbqi1iP2roVK5bstsXzEjA==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.370.0",
- "@aws-sdk/middleware-logger": "3.370.0",
- "@aws-sdk/middleware-recursion-detection": "3.370.0",
- "@aws-sdk/middleware-user-agent": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-endpoints": "3.370.0",
- "@aws-sdk/util-user-agent-browser": "3.370.0",
- "@aws-sdk/util-user-agent-node": "3.370.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.2",
- "@smithy/middleware-retry": "^1.0.3",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.1.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.3",
- "@smithy/util-utf8": "^1.0.1",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.370.0.tgz",
- "integrity": "sha512-utFxOPWIzbN+3kc415Je2o4J72hOLNhgR2Gt5EnRSggC3yOnkC4GzauxG8n7n5gZGBX45eyubHyPOXLOIyoqQA==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/credential-provider-node": "3.370.0",
- "@aws-sdk/middleware-host-header": "3.370.0",
- "@aws-sdk/middleware-logger": "3.370.0",
- "@aws-sdk/middleware-recursion-detection": "3.370.0",
- "@aws-sdk/middleware-sdk-sts": "3.370.0",
- "@aws-sdk/middleware-signing": "3.370.0",
- "@aws-sdk/middleware-user-agent": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-endpoints": "3.370.0",
- "@aws-sdk/util-user-agent-browser": "3.370.0",
- "@aws-sdk/util-user-agent-node": "3.370.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.2",
- "@smithy/middleware-retry": "^1.0.3",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.1.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.3",
- "@smithy/util-utf8": "^1.0.1",
- "fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.370.0.tgz",
- "integrity": "sha512-raR3yP/4GGbKFRPP5hUBNkEmTnzxI9mEc2vJAJrcv4G4J4i/UP6ELiLInQ5eO2/VcV/CeKGZA3t7d1tsJ+jhCg==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.370.0.tgz",
- "integrity": "sha512-eJyapFKa4NrC9RfTgxlXnXfS9InG/QMEUPPVL+VhG7YS6nKqetC1digOYgivnEeu+XSKE0DJ7uZuXujN2Y7VAQ==",
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.370.0",
- "@aws-sdk/credential-provider-process": "3.370.0",
- "@aws-sdk/credential-provider-sso": "3.370.0",
- "@aws-sdk/credential-provider-web-identity": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@smithy/credential-provider-imds": "^1.0.1",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": {
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-retry": "^2.0.2",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/service-error-classification": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-node": {
+ "version": "2.1.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.10",
+ "@smithy/credential-provider-imds": "^2.0.12",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-retry": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.414.0",
+ "@aws-sdk/credential-provider-node": "3.414.0",
+ "@aws-sdk/middleware-host-header": "3.413.0",
+ "@aws-sdk/middleware-logger": "3.413.0",
+ "@aws-sdk/middleware-recursion-detection": "3.413.0",
+ "@aws-sdk/middleware-signing": "3.413.0",
+ "@aws-sdk/middleware-user-agent": "3.413.0",
+ "@aws-sdk/region-config-resolver": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@aws-sdk/util-user-agent-browser": "3.413.0",
+ "@aws-sdk/util-user-agent-node": "3.413.0",
+ "@smithy/config-resolver": "^2.0.8",
+ "@smithy/fetch-http-handler": "^2.1.3",
+ "@smithy/hash-node": "^2.0.7",
+ "@smithy/invalid-dependency": "^2.0.7",
+ "@smithy/middleware-content-length": "^2.0.9",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/middleware-retry": "^2.0.10",
+ "@smithy/middleware-serde": "^2.0.7",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/node-http-handler": "^2.1.3",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/smithy-client": "^2.1.4",
+ "@smithy/types": "^2.3.1",
+ "@smithy/url-parser": "^2.0.7",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.1.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.8",
+ "@smithy/util-defaults-mode-node": "^2.0.10",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/hash-node": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-retry": "^2.0.2",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/service-error-classification": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-node": {
+ "version": "2.1.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.10",
+ "@smithy/credential-provider-imds": "^2.0.12",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-retry": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-personalize/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha1-browser": "3.0.0",
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.370.0",
+ "@aws-sdk/credential-provider-node": "3.370.0",
+ "@aws-sdk/hash-blob-browser": "3.370.0",
+ "@aws-sdk/hash-stream-node": "3.370.0",
+ "@aws-sdk/md5-js": "3.370.0",
+ "@aws-sdk/middleware-bucket-endpoint": "3.370.0",
+ "@aws-sdk/middleware-expect-continue": "3.370.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.370.0",
+ "@aws-sdk/middleware-host-header": "3.370.0",
+ "@aws-sdk/middleware-location-constraint": "3.370.0",
+ "@aws-sdk/middleware-logger": "3.370.0",
+ "@aws-sdk/middleware-recursion-detection": "3.370.0",
+ "@aws-sdk/middleware-sdk-s3": "3.370.0",
+ "@aws-sdk/middleware-signing": "3.370.0",
+ "@aws-sdk/middleware-ssec": "3.370.0",
+ "@aws-sdk/middleware-user-agent": "3.370.0",
+ "@aws-sdk/signature-v4-multi-region": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-endpoints": "3.370.0",
+ "@aws-sdk/util-user-agent-browser": "3.370.0",
+ "@aws-sdk/util-user-agent-node": "3.370.0",
+ "@aws-sdk/xml-builder": "3.310.0",
+ "@smithy/config-resolver": "^1.0.1",
+ "@smithy/eventstream-serde-browser": "^1.0.1",
+ "@smithy/eventstream-serde-config-resolver": "^1.0.1",
+ "@smithy/eventstream-serde-node": "^1.0.1",
+ "@smithy/fetch-http-handler": "^1.0.1",
+ "@smithy/hash-node": "^1.0.1",
+ "@smithy/invalid-dependency": "^1.0.1",
+ "@smithy/middleware-content-length": "^1.0.1",
+ "@smithy/middleware-endpoint": "^1.0.2",
+ "@smithy/middleware-retry": "^1.0.3",
+ "@smithy/middleware-serde": "^1.0.1",
+ "@smithy/middleware-stack": "^1.0.1",
+ "@smithy/node-config-provider": "^1.0.1",
+ "@smithy/node-http-handler": "^1.0.2",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/smithy-client": "^1.0.3",
+ "@smithy/types": "^1.1.0",
+ "@smithy/url-parser": "^1.0.1",
+ "@smithy/util-base64": "^1.0.1",
+ "@smithy/util-body-length-browser": "^1.0.1",
+ "@smithy/util-body-length-node": "^1.0.1",
+ "@smithy/util-defaults-mode-browser": "^1.0.1",
+ "@smithy/util-defaults-mode-node": "^1.0.1",
+ "@smithy/util-retry": "^1.0.3",
+ "@smithy/util-stream": "^1.0.1",
+ "@smithy/util-utf8": "^1.0.1",
+ "@smithy/util-waiter": "^1.0.1",
+ "fast-xml-parser": "4.2.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.370.0",
+ "@aws-sdk/middleware-logger": "3.370.0",
+ "@aws-sdk/middleware-recursion-detection": "3.370.0",
+ "@aws-sdk/middleware-user-agent": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-endpoints": "3.370.0",
+ "@aws-sdk/util-user-agent-browser": "3.370.0",
+ "@aws-sdk/util-user-agent-node": "3.370.0",
+ "@smithy/config-resolver": "^1.0.1",
+ "@smithy/fetch-http-handler": "^1.0.1",
+ "@smithy/hash-node": "^1.0.1",
+ "@smithy/invalid-dependency": "^1.0.1",
+ "@smithy/middleware-content-length": "^1.0.1",
+ "@smithy/middleware-endpoint": "^1.0.2",
+ "@smithy/middleware-retry": "^1.0.3",
+ "@smithy/middleware-serde": "^1.0.1",
+ "@smithy/middleware-stack": "^1.0.1",
+ "@smithy/node-config-provider": "^1.0.1",
+ "@smithy/node-http-handler": "^1.0.2",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/smithy-client": "^1.0.3",
+ "@smithy/types": "^1.1.0",
+ "@smithy/url-parser": "^1.0.1",
+ "@smithy/util-base64": "^1.0.1",
+ "@smithy/util-body-length-browser": "^1.0.1",
+ "@smithy/util-body-length-node": "^1.0.1",
+ "@smithy/util-defaults-mode-browser": "^1.0.1",
+ "@smithy/util-defaults-mode-node": "^1.0.1",
+ "@smithy/util-retry": "^1.0.3",
+ "@smithy/util-utf8": "^1.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso-oidc": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.370.0",
+ "@aws-sdk/middleware-logger": "3.370.0",
+ "@aws-sdk/middleware-recursion-detection": "3.370.0",
+ "@aws-sdk/middleware-user-agent": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-endpoints": "3.370.0",
+ "@aws-sdk/util-user-agent-browser": "3.370.0",
+ "@aws-sdk/util-user-agent-node": "3.370.0",
+ "@smithy/config-resolver": "^1.0.1",
+ "@smithy/fetch-http-handler": "^1.0.1",
+ "@smithy/hash-node": "^1.0.1",
+ "@smithy/invalid-dependency": "^1.0.1",
+ "@smithy/middleware-content-length": "^1.0.1",
+ "@smithy/middleware-endpoint": "^1.0.2",
+ "@smithy/middleware-retry": "^1.0.3",
+ "@smithy/middleware-serde": "^1.0.1",
+ "@smithy/middleware-stack": "^1.0.1",
+ "@smithy/node-config-provider": "^1.0.1",
+ "@smithy/node-http-handler": "^1.0.2",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/smithy-client": "^1.0.3",
+ "@smithy/types": "^1.1.0",
+ "@smithy/url-parser": "^1.0.1",
+ "@smithy/util-base64": "^1.0.1",
+ "@smithy/util-body-length-browser": "^1.0.1",
+ "@smithy/util-body-length-node": "^1.0.1",
+ "@smithy/util-defaults-mode-browser": "^1.0.1",
+ "@smithy/util-defaults-mode-node": "^1.0.1",
+ "@smithy/util-retry": "^1.0.3",
+ "@smithy/util-utf8": "^1.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sts": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/credential-provider-node": "3.370.0",
+ "@aws-sdk/middleware-host-header": "3.370.0",
+ "@aws-sdk/middleware-logger": "3.370.0",
+ "@aws-sdk/middleware-recursion-detection": "3.370.0",
+ "@aws-sdk/middleware-sdk-sts": "3.370.0",
+ "@aws-sdk/middleware-signing": "3.370.0",
+ "@aws-sdk/middleware-user-agent": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-endpoints": "3.370.0",
+ "@aws-sdk/util-user-agent-browser": "3.370.0",
+ "@aws-sdk/util-user-agent-node": "3.370.0",
+ "@smithy/config-resolver": "^1.0.1",
+ "@smithy/fetch-http-handler": "^1.0.1",
+ "@smithy/hash-node": "^1.0.1",
+ "@smithy/invalid-dependency": "^1.0.1",
+ "@smithy/middleware-content-length": "^1.0.1",
+ "@smithy/middleware-endpoint": "^1.0.2",
+ "@smithy/middleware-retry": "^1.0.3",
+ "@smithy/middleware-serde": "^1.0.1",
+ "@smithy/middleware-stack": "^1.0.1",
+ "@smithy/node-config-provider": "^1.0.1",
+ "@smithy/node-http-handler": "^1.0.2",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/smithy-client": "^1.0.3",
+ "@smithy/types": "^1.1.0",
+ "@smithy/url-parser": "^1.0.1",
+ "@smithy/util-base64": "^1.0.1",
+ "@smithy/util-body-length-browser": "^1.0.1",
+ "@smithy/util-body-length-node": "^1.0.1",
+ "@smithy/util-defaults-mode-browser": "^1.0.1",
+ "@smithy/util-defaults-mode-node": "^1.0.1",
+ "@smithy/util-retry": "^1.0.3",
+ "@smithy/util-utf8": "^1.0.1",
+ "fast-xml-parser": "4.2.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.370.0",
+ "@aws-sdk/credential-provider-process": "3.370.0",
+ "@aws-sdk/credential-provider-sso": "3.370.0",
+ "@aws-sdk/credential-provider-web-identity": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/credential-provider-imds": "^1.0.1",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.370.0",
+ "@aws-sdk/credential-provider-ini": "3.370.0",
+ "@aws-sdk/credential-provider-process": "3.370.0",
+ "@aws-sdk/credential-provider-sso": "3.370.0",
+ "@aws-sdk/credential-provider-web-identity": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/credential-provider-imds": "^1.0.1",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.370.0",
+ "@aws-sdk/token-providers": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-sts": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-signing": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-signing": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/signature-v4": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "@smithy/util-middleware": "^1.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-endpoints": "3.370.0",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso-oidc": "3.370.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/property-provider": "^1.0.1",
+ "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/types": "^1.1.0",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/node-config-provider": "^1.0.1",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.413.0",
+ "@aws-sdk/middleware-logger": "3.413.0",
+ "@aws-sdk/middleware-recursion-detection": "3.413.0",
+ "@aws-sdk/middleware-user-agent": "3.413.0",
+ "@aws-sdk/region-config-resolver": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@aws-sdk/util-user-agent-browser": "3.413.0",
+ "@aws-sdk/util-user-agent-node": "3.413.0",
+ "@smithy/config-resolver": "^2.0.8",
+ "@smithy/fetch-http-handler": "^2.1.3",
+ "@smithy/hash-node": "^2.0.7",
+ "@smithy/invalid-dependency": "^2.0.7",
+ "@smithy/middleware-content-length": "^2.0.9",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/middleware-retry": "^2.0.10",
+ "@smithy/middleware-serde": "^2.0.7",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/node-http-handler": "^2.1.3",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/smithy-client": "^2.1.4",
+ "@smithy/types": "^2.3.1",
+ "@smithy/url-parser": "^2.0.7",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.1.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.8",
+ "@smithy/util-defaults-mode-node": "^2.0.10",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/config-resolver": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-retry": "^2.0.2",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-node": {
+ "version": "2.1.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.10",
+ "@smithy/credential-provider-imds": "^2.0.12",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/credential-provider-node": "3.414.0",
+ "@aws-sdk/middleware-host-header": "3.413.0",
+ "@aws-sdk/middleware-logger": "3.413.0",
+ "@aws-sdk/middleware-recursion-detection": "3.413.0",
+ "@aws-sdk/middleware-sdk-sts": "3.413.0",
+ "@aws-sdk/middleware-signing": "3.413.0",
+ "@aws-sdk/middleware-user-agent": "3.413.0",
+ "@aws-sdk/region-config-resolver": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@aws-sdk/util-user-agent-browser": "3.413.0",
+ "@aws-sdk/util-user-agent-node": "3.413.0",
+ "@smithy/config-resolver": "^2.0.8",
+ "@smithy/fetch-http-handler": "^2.1.3",
+ "@smithy/hash-node": "^2.0.7",
+ "@smithy/invalid-dependency": "^2.0.7",
+ "@smithy/middleware-content-length": "^2.0.9",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/middleware-retry": "^2.0.10",
+ "@smithy/middleware-serde": "^2.0.7",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/node-http-handler": "^2.1.3",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/smithy-client": "^2.1.4",
+ "@smithy/types": "^2.3.1",
+ "@smithy/url-parser": "^2.0.7",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.1.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.8",
+ "@smithy/util-defaults-mode-node": "^2.0.10",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "fast-xml-parser": "4.2.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/config-resolver": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/hash-node": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-retry": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-retry": "^2.0.2",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/service-error-classification": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-node": {
+ "version": "2.1.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.10",
+ "@smithy/credential-provider-imds": "^2.0.12",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-retry": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.414.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.413.0",
+ "@aws-sdk/credential-provider-process": "3.413.0",
+ "@aws-sdk/credential-provider-sso": "3.414.0",
+ "@aws-sdk/credential-provider-web-identity": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.6",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.413.0",
+ "@aws-sdk/credential-provider-ini": "3.414.0",
+ "@aws-sdk/credential-provider-process": "3.413.0",
+ "@aws-sdk/credential-provider-sso": "3.414.0",
+ "@aws-sdk/credential-provider-web-identity": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.6",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.6",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.414.0",
+ "@aws-sdk/token-providers": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.6",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers": {
+ "version": "3.414.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.414.0",
+ "@aws-sdk/client-sso": "3.414.0",
+ "@aws-sdk/client-sts": "3.414.0",
+ "@aws-sdk/credential-provider-cognito-identity": "3.414.0",
+ "@aws-sdk/credential-provider-env": "3.413.0",
+ "@aws-sdk/credential-provider-ini": "3.414.0",
+ "@aws-sdk/credential-provider-node": "3.414.0",
+ "@aws-sdk/credential-provider-process": "3.413.0",
+ "@aws-sdk/credential-provider-sso": "3.414.0",
+ "@aws-sdk/credential-provider-web-identity": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/hash-blob-browser": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/chunked-blob-reader": "3.310.0",
+ "@aws-sdk/chunked-blob-reader-native": "3.310.0",
+ "@aws-sdk/types": "3.370.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/hash-stream-node": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-utf8": "3.310.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/is-array-buffer": {
+ "version": "3.310.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage": {
+ "version": "3.417.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/smithy-client": "^2.1.4",
+ "buffer": "5.6.0",
+ "events": "3.3.0",
+ "stream-browserify": "3.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/client-s3": "^3.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/lib-storage/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/md5-js": {
"version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.370.0.tgz",
- "integrity": "sha512-gkFiotBFKE4Fcn8CzQnMeab9TAR06FEAD02T4ZRYW1xGrBJOowmje9dKqdwQFHSPgnWAP+8HoTA8iwbhTLvjNA==",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.370.0",
- "@aws-sdk/credential-provider-ini": "3.370.0",
- "@aws-sdk/credential-provider-process": "3.370.0",
- "@aws-sdk/credential-provider-sso": "3.370.0",
- "@aws-sdk/credential-provider-web-identity": "3.370.0",
"@aws-sdk/types": "3.370.0",
- "@smithy/credential-provider-imds": "^1.0.1",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@aws-sdk/util-utf8": "3.310.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-bucket-endpoint": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-arn-parser": "3.310.0",
+ "@smithy/protocol-http": "^1.1.0",
"@smithy/types": "^1.1.0",
+ "@smithy/util-config-provider": "^1.0.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": {
+ "node_modules/@aws-sdk/middleware-expect-continue": {
"version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.370.0.tgz",
- "integrity": "sha512-0BKFFZmUO779Xdw3u7wWnoWhYA4zygxJbgGVSyjkOGBvdkbPSTTcdwT1KFkaQy2kOXYeZPl+usVVRXs+ph4ejg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-flexible-checksums": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/crc32": "3.0.0",
+ "@aws-crypto/crc32c": "3.0.0",
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/is-array-buffer": "^1.0.1",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/types": "^1.1.0",
+ "@smithy/util-utf8": "^1.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-location-constraint": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/types": "^1.1.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-sdk-s3": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@aws-sdk/util-arn-parser": "3.310.0",
+ "@smithy/protocol-http": "^1.1.0",
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
@@ -755,286 +3783,240 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.370.0.tgz",
- "integrity": "sha512-PFroYm5hcPSfC/jkZnCI34QFL3I7WVKveVk6/F3fud/cnP8hp6YjA9NiTNbqdFSzsyoiN/+e5fZgNKih8vVPTA==",
+ "node_modules/@aws-sdk/middleware-sdk-sts": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-signing": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-signing": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/signature-v4": "^2.0.0",
+ "@smithy/types": "^2.3.1",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.370.0",
- "@aws-sdk/token-providers": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.370.0.tgz",
- "integrity": "sha512-CFaBMLRudwhjv1sDzybNV93IaT85IwS+L8Wq6VRMa0mro1q9rrWsIZO811eF+k0NEPfgU1dLH+8Vc2qhw4SARQ==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/eventstream-codec": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/crc32": "3.0.0",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.370.0.tgz",
- "integrity": "sha512-CPXOm/TnOFC7KyXcJglICC7OiA7Kj6mT3ChvEijr56TFOueNHvJdV4aNIFEQy0vGHOWtY12qOWLNto/wYR1BAQ==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.370.0.tgz",
- "integrity": "sha512-cQMq9SaZ/ORmTJPCT6VzMML7OxFdQzNkhMAgKpTDl+tdPWynlHF29E5xGoSzROnThHlQPCjogU0NZ8AxI0SWPA==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.370.0.tgz",
- "integrity": "sha512-L7ZF/w0lAAY/GK1khT8VdoU0XB7nWHk51rl/ecAg64J70dHnMOAg8n+5FZ9fBu/xH1FwUlHOkwlodJOgzLJjtg==",
- "dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-codec": "^2.0.9",
+ "@smithy/is-array-buffer": "^2.0.0",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-sts": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.370.0.tgz",
- "integrity": "sha512-ykbsoVy0AJtVbuhAlTAMcaz/tCE3pT8nAp0L7CQQxSoanRCvOux7au0KwMIQVhxgnYid4dWVF6d00SkqU5MXRA==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-signing": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-signing": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.370.0.tgz",
- "integrity": "sha512-Dwr/RTCWOXdm394wCwICGT2VNOTMRe4IGPsBRJAsM24pm+EEqQzSS3Xu/U/zF4exuxqpMta4wec4QpSarPNTxA==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/signature-v4": "^1.0.1",
- "@smithy/types": "^1.1.0",
- "@smithy/util-middleware": "^1.0.1",
+ "@smithy/is-array-buffer": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.370.0.tgz",
- "integrity": "sha512-2+3SB6MtMAq1+gVXhw0Y3ONXuljorh6ijnxgTpv+uQnBW5jHCUiAS8WDYiDEm7i9euJPbvJfM8WUrSMDMU6Cog==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-endpoints": "3.370.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.370.0.tgz",
- "integrity": "sha512-EyR2ZYr+lJeRiZU2/eLR+mlYU9RXLQvNyGFSAekJKgN13Rpq/h0syzXVFLP/RSod/oZenh/fhVZ2HwlZxuGBtQ==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso-oidc": "3.370.0",
- "@aws-sdk/types": "3.370.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.370.0.tgz",
- "integrity": "sha512-5ltVAnM79nRlywwzZN5i8Jp4tk245OCGkKwwXbnDU+gq7zT3CIOsct1wNZvmpfZEPGt/bv7/NyRcjP+7XNsX/g==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.370.0.tgz",
- "integrity": "sha512-028LxYZMQ0DANKhW+AKFQslkScZUeYlPmSphrCIXgdIItRZh6ZJHGzE7J/jDsEntZOrZJsjI4z0zZ5W2idj04w==",
+ "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/types": "^1.1.0",
- "bowser": "^2.11.0",
+ "@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": {
+ "node_modules/@aws-sdk/middleware-ssec": {
"version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.370.0.tgz",
- "integrity": "sha512-33vxZUp8vxTT/DGYIR3PivQm07sSRGWI+4fCv63Rt7Q++fO24E0kQtmVAlikRY810I10poD6rwILVtITtFSzkg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "3.370.0",
- "@smithy/node-config-provider": "^1.0.1",
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
- },
- "peerDependencies": {
- "aws-crt": ">=1.0.0"
- },
- "peerDependenciesMeta": {
- "aws-crt": {
- "optional": true
- }
}
},
- "node_modules/@aws-sdk/client-sso": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.363.0.tgz",
- "integrity": "sha512-PZ+HfKSgS4hlMnJzG+Ev8/mgHd/b/ETlJWPSWjC/f2NwVoBQkBnqHjdyEx7QjF6nksJozcVh5Q+kkYLKc/QwBQ==",
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.363.0",
- "@aws-sdk/middleware-logger": "3.363.0",
- "@aws-sdk/middleware-recursion-detection": "3.363.0",
- "@aws-sdk/middleware-user-agent": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@aws-sdk/util-user-agent-browser": "3.363.0",
- "@aws-sdk/util-user-agent-node": "3.363.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.1",
- "@smithy/middleware-retry": "^1.0.2",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.0.1",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.0.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.2",
- "@smithy/util-utf8": "^1.0.1",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.363.0.tgz",
- "integrity": "sha512-V3Ebiq/zNtDS/O92HUWGBa7MY59RYSsqWd+E0XrXv6VYTA00RlMTbNcseivNgp2UghOgB9a20Nkz6EqAeIN+RQ==",
+ "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.363.0",
- "@aws-sdk/middleware-logger": "3.363.0",
- "@aws-sdk/middleware-recursion-detection": "3.363.0",
- "@aws-sdk/middleware-user-agent": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@aws-sdk/util-user-agent-browser": "3.363.0",
- "@aws-sdk/util-user-agent-node": "3.363.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.1",
- "@smithy/middleware-retry": "^1.0.2",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.2",
- "@smithy/protocol-http": "^1.0.1",
- "@smithy/smithy-client": "^1.0.3",
- "@smithy/types": "^1.0.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.2",
- "@smithy/util-utf8": "^1.0.1",
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1042,108 +4024,68 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-sts": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.363.0.tgz",
- "integrity": "sha512-0jj14WvBPJQ8xr72cL0mhlmQ90tF0O0wqXwSbtog6PsC8+KDE6Yf+WsxsumyI8E5O8u3eYijBL+KdqG07F/y/w==",
+ "node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/credential-provider-node": "3.363.0",
- "@aws-sdk/middleware-host-header": "3.363.0",
- "@aws-sdk/middleware-logger": "3.363.0",
- "@aws-sdk/middleware-recursion-detection": "3.363.0",
- "@aws-sdk/middleware-sdk-sts": "3.363.0",
- "@aws-sdk/middleware-signing": "3.363.0",
- "@aws-sdk/middleware-user-agent": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@aws-sdk/util-user-agent-browser": "3.363.0",
- "@aws-sdk/util-user-agent-node": "3.363.0",
- "@smithy/config-resolver": "^1.0.1",
- "@smithy/fetch-http-handler": "^1.0.1",
- "@smithy/hash-node": "^1.0.1",
- "@smithy/invalid-dependency": "^1.0.1",
- "@smithy/middleware-content-length": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.1",
- "@smithy/middleware-retry": "^1.0.1",
- "@smithy/middleware-serde": "^1.0.1",
- "@smithy/middleware-stack": "^1.0.1",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/node-http-handler": "^1.0.1",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/smithy-client": "^1.0.2",
- "@smithy/types": "^1.1.0",
- "@smithy/url-parser": "^1.0.1",
- "@smithy/util-base64": "^1.0.1",
- "@smithy/util-body-length-browser": "^1.0.1",
- "@smithy/util-body-length-node": "^1.0.1",
- "@smithy/util-defaults-mode-browser": "^1.0.1",
- "@smithy/util-defaults-mode-node": "^1.0.1",
- "@smithy/util-retry": "^1.0.1",
- "@smithy/util-utf8": "^1.0.1",
- "fast-xml-parser": "4.2.5",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/types": "^2.3.1",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.363.0.tgz",
- "integrity": "sha512-5x42JvqEsBUrm6/qdf0WWe4mlmJjPItxamQhRjuOzeQD/BxsA2W5VS/7n0Ws0e27DNhlnUErcIJd+bBy6j1fqA==",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-cognito-identity": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.363.0.tgz",
- "integrity": "sha512-VAQ3zITT2Q0acht0HezouYnMFKZ2vIOa20X4zQA3WI0HfaP4D6ga6KaenbDcb/4VFiqfqiRHfdyXHP0ThcDRMA==",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1151,417 +4093,407 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.363.0.tgz",
- "integrity": "sha512-ZYN+INoqyX5FVC3rqUxB6O8nOWkr0gHRRBm1suoOlmuFJ/WSlW/uUGthRBY5x1AQQnBF8cpdlxZzGHd41lFVNw==",
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.363.0",
- "@aws-sdk/credential-provider-process": "3.363.0",
- "@aws-sdk/credential-provider-sso": "3.363.0",
- "@aws-sdk/credential-provider-web-identity": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/credential-provider-imds": "^1.0.1",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/signature-v4-multi-region": {
+ "version": "3.370.0",
+ "license": "Apache-2.0",
"dependencies": {
+ "@aws-sdk/types": "3.370.0",
+ "@smithy/protocol-http": "^1.1.0",
+ "@smithy/signature-v4": "^1.0.1",
+ "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/signature-v4-crt": "^3.118.0"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/signature-v4-crt": {
+ "optional": true
+ }
}
},
- "node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.363.0.tgz",
- "integrity": "sha512-C1qXFIN2yMxD6pGgug0vR1UhScOki6VqdzuBHzXZAGu7MOjvgHNdscEcb3CpWnITHaPL2ztkiw75T1sZ7oIgQg==",
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.363.0",
- "@aws-sdk/credential-provider-ini": "3.363.0",
- "@aws-sdk/credential-provider-process": "3.363.0",
- "@aws-sdk/credential-provider-sso": "3.363.0",
- "@aws-sdk/credential-provider-web-identity": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/credential-provider-imds": "^1.0.1",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.413.0",
+ "@aws-sdk/middleware-logger": "3.413.0",
+ "@aws-sdk/middleware-recursion-detection": "3.413.0",
+ "@aws-sdk/middleware-user-agent": "3.413.0",
+ "@aws-sdk/types": "3.413.0",
+ "@aws-sdk/util-endpoints": "3.413.0",
+ "@aws-sdk/util-user-agent-browser": "3.413.0",
+ "@aws-sdk/util-user-agent-node": "3.413.0",
+ "@smithy/config-resolver": "^2.0.8",
+ "@smithy/fetch-http-handler": "^2.1.3",
+ "@smithy/hash-node": "^2.0.7",
+ "@smithy/invalid-dependency": "^2.0.7",
+ "@smithy/middleware-content-length": "^2.0.9",
+ "@smithy/middleware-endpoint": "^2.0.7",
+ "@smithy/middleware-retry": "^2.0.10",
+ "@smithy/middleware-serde": "^2.0.7",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/node-http-handler": "^2.1.3",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/protocol-http": "^3.0.3",
+ "@smithy/shared-ini-file-loader": "^2.0.6",
+ "@smithy/smithy-client": "^2.1.4",
+ "@smithy/types": "^2.3.1",
+ "@smithy/url-parser": "^2.0.7",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.1.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.8",
+ "@smithy/util-defaults-mode-node": "^2.0.10",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": {
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.363.0.tgz",
- "integrity": "sha512-fOKAINU7Rtj2T8pP13GdCt+u0Ml3gYynp8ki+1jMZIQ+Ju/MdDOqZpKMFKicMn3Z1ttUOgqr+grUdus6z8ceBQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/config-resolver": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.363.0.tgz",
- "integrity": "sha512-5RUZ5oM0lwZSo3EehT0dXggOjgtxFogpT3cZvoLGtIwrPBvm8jOQPXQUlaqCj10ThF1sYltEyukz/ovtDwYGew==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.363.0",
- "@aws-sdk/token-providers": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/fetch-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
"tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.363.0.tgz",
- "integrity": "sha512-Z6w7fjgy79pAax580wdixbStQw10xfyZ+hOYLcPudoYFKjoNx0NQBejg5SwBzCF/HQL23Ksm9kDfbXDX9fkPhA==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/hash-node": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.363.0.tgz",
- "integrity": "sha512-hVa1DdYasnLud2EKjDAlDHiV/+H/Zq52chHU00c/R8XwPu1s0kZX3NMmlt0D2HhYqC1mUwtdmE58Jra2POviQQ==",
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.363.0",
- "@aws-sdk/client-sso": "3.363.0",
- "@aws-sdk/client-sts": "3.363.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.363.0",
- "@aws-sdk/credential-provider-env": "3.363.0",
- "@aws-sdk/credential-provider-ini": "3.363.0",
- "@aws-sdk/credential-provider-node": "3.363.0",
- "@aws-sdk/credential-provider-process": "3.363.0",
- "@aws-sdk/credential-provider-sso": "3.363.0",
- "@aws-sdk/credential-provider-web-identity": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/credential-provider-imds": "^1.0.1",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/hash-blob-browser": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.370.0.tgz",
- "integrity": "sha512-DyStaznfloyF9jN3KvG6puOAjt25alXoBNeHBF2FyLlEEbrOqUmso39JB5LVAw2/KB4UmCNsbAXFb6WktX/yHQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/chunked-blob-reader": "3.310.0",
- "@aws-sdk/chunked-blob-reader-native": "3.310.0",
- "@aws-sdk/types": "3.370.0",
+ "@smithy/middleware-serde": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "@smithy/url-parser": "^2.0.9",
+ "@smithy/util-middleware": "^2.0.2",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/hash-stream-node": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.370.0.tgz",
- "integrity": "sha512-ExsbBiIMiL9AN1VpWlD8+xaO5s0cXUZJC2UONiQbgMb1jz7Wq9fa1GmKUDyaGXOuQTT7DDhAmalb9fIpauZKuA==",
- "dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-utf8": "3.310.0",
- "tslib": "^2.5.0"
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-middleware": "^2.0.2",
+ "@smithy/util-retry": "^2.0.2",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/is-array-buffer": {
- "version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
- "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-serde": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/lib-storage": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.370.0.tgz",
- "integrity": "sha512-vUdvd8jvusl81A0OdCz3y2E7Nhqwa57cxJviK6P262zqL2Ge5WlfR9djjv78sqdclvm7iXTxj7o1djMu1aScNg==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-stack": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^1.0.1",
- "@smithy/middleware-endpoint": "^1.0.2",
- "@smithy/smithy-client": "^1.0.3",
- "buffer": "5.6.0",
- "events": "3.3.0",
- "stream-browserify": "3.0.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-s3": "^3.0.0"
}
},
- "node_modules/@aws-sdk/md5-js": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.370.0.tgz",
- "integrity": "sha512-wch3+hiRdFGsu5E+w3WU9qmumQErKshtgetd6wMgFYm2MPSksFU58rM/aiwiWRA6knpcaShKaPKMmGnuX3HwhQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-utf8": "3.310.0",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-bucket-endpoint": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.370.0.tgz",
- "integrity": "sha512-B36+fOeJVO0D9cjR92Ob6Ki2FTzyTQ/uKk8w+xtur6W6zYVOPU4IQNpNZvN3Ykt4jitR2uUnVSlBb3sXHHhdFA==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": {
+ "version": "2.1.5",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-arn-parser": "3.310.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
- "@smithy/util-config-provider": "^1.0.1",
+ "@smithy/abort-controller": "^2.0.9",
+ "@smithy/protocol-http": "^3.0.5",
+ "@smithy/querystring-builder": "^2.0.9",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-expect-continue": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.370.0.tgz",
- "integrity": "sha512-OlFIpXa53obLryHyrqedE2Cp8lp2k+1Vjd++hlZFDFJncRlWZMxoXSyl6shQPqhIiGnNW4vt7tG5xE4jg4NAvw==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-flexible-checksums": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.370.0.tgz",
- "integrity": "sha512-62fyW4hZxppvkQKSXdkzjHQ95dXyVCuL18Sfnlciy9pr9f/t5w6LhZIxsNIW+Ge9mbgc661SVRKTwxlZj6FuLQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/protocol-http": {
+ "version": "3.0.5",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/crc32": "3.0.0",
- "@aws-crypto/crc32c": "3.0.0",
- "@aws-sdk/types": "3.370.0",
- "@smithy/is-array-buffer": "^1.0.1",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
- "@smithy/util-utf8": "^1.0.1",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.363.0.tgz",
- "integrity": "sha512-FobpclDCf5Y1ueyJDmb9MqguAdPssNMlnqWQpujhYVABq69KHu73fSCWSauFPUrw7YOpV8kG1uagDF0POSxHzA==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-builder": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-uri-escape": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-location-constraint": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.370.0.tgz",
- "integrity": "sha512-NlDZEbBOF1IN7svUTcjbLodkUctt9zsfDI8+DqNlklRs5lsPb91WYvahOfjFO/EvACixa+a5d3cCumMCaIq4Cw==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/service-error-classification": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/types": "^1.1.0",
- "tslib": "^2.5.0"
+ "@smithy/types": "^2.3.3"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-logger": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.363.0.tgz",
- "integrity": "sha512-SSGgthScYnFGTOw8EzbkvquqweFmvn7uJihkpFekbtBNGC/jGOGO+8ziHjTQ8t/iI/YKubEwv+LMi0f77HKSEg==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client": {
+ "version": "2.1.6",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/middleware-stack": "^2.0.2",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-stream": "^2.0.12",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.363.0.tgz",
- "integrity": "sha512-MWD/57QgI/N7fG8rtzDTUdSqNpYohQfgj9XCFAoVeI/bU4usrkOrew43L4smJG4XrDxlNT8lSJlDtd64tuiUZA==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/url-parser": {
+ "version": "2.0.9",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/querystring-parser": "^2.0.9",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-sdk-s3": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.370.0.tgz",
- "integrity": "sha512-DPYXtveWBDS5MzSHWTThg2KkLaOzZkCgPejjEuw3yl4ljsHawDs/ZIVCtmWXlBIS2lLCaBMpCV+t9psuJ/6/zQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-node": {
+ "version": "2.1.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@aws-sdk/util-arn-parser": "3.310.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-sdk-sts": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.363.0.tgz",
- "integrity": "sha512-1yy2Ac50FO8BrODaw5bPWvVrRhaVLqXTFH6iHB+dJLPUkwtY5zLM3Mp+9Ilm7kME+r7oIB1wuO6ZB1Lf4ZszIw==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/middleware-signing": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/is-array-buffer": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1569,127 +4501,117 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-signing": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.363.0.tgz",
- "integrity": "sha512-/7qia715pt9JKYIPDGu22WmdZxD8cfF/5xB+1kmILg7ZtjO0pPuTaCNJ7xiIuFd7Dn7JXp5lop08anX/GOhNRQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/signature-v4": "^1.0.1",
- "@smithy/types": "^1.1.0",
- "@smithy/util-middleware": "^1.0.1",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
+ "bowser": "^2.11.0",
"tslib": "^2.5.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">= 10.0.0"
}
},
- "node_modules/@aws-sdk/middleware-signing/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
- "dependencies": {
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.10",
+ "@smithy/credential-provider-imds": "^2.0.12",
+ "@smithy/node-config-provider": "^2.0.12",
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/smithy-client": "^2.1.6",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">= 10.0.0"
}
},
- "node_modules/@aws-sdk/middleware-ssec": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.370.0.tgz",
- "integrity": "sha512-NIosfLS7mxCNdGYnuy76W9qP3f3YWVTusUA+uv+s6rnwG+Z2UheXCf1wpnJKzxORA8pioSP7ylZ8w2A0reCgYQ==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.363.0.tgz",
- "integrity": "sha512-ri8YaQvXP6odteVTMfxPqFR26Q0h9ejtqhUDv47P34FaKXedEM4nC6ix6o+5FEYj6l8syGyktftZ5O70NoEhug==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-middleware": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@aws-sdk/util-endpoints": "3.357.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/types": "^1.1.0",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-retry": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/service-error-classification": "^2.0.2",
+ "@smithy/types": "^2.3.3",
"tslib": "^2.5.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">= 14.0.0"
}
},
- "node_modules/@aws-sdk/signature-v4-multi-region": {
- "version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.370.0.tgz",
- "integrity": "sha512-Q3NQopPDnHbJXMhtYl0Mfy5U2o76K6tzhdnYRcrYImY0ze/zOkCQI7KPC4588PuyvAXCdQ02cmCPPjYD55UeNg==",
- "dependencies": {
- "@aws-sdk/types": "3.370.0",
- "@smithy/protocol-http": "^1.1.0",
- "@smithy/signature-v4": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.5",
+ "@smithy/types": "^2.3.3",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/signature-v4-crt": "^3.118.0"
- },
- "peerDependenciesMeta": {
- "@aws-sdk/signature-v4-crt": {
- "optional": true
- }
}
},
- "node_modules/@aws-sdk/token-providers": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.363.0.tgz",
- "integrity": "sha512-6+0aJ1zugNgsMmhTtW2LBWxOVSaXCUk2q3xyTchSXkNzallYaRiZMRkieW+pKNntnu0g5H1T0zyfCO0tbXwxEA==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso-oidc": "3.363.0",
- "@aws-sdk/types": "3.357.0",
- "@smithy/property-provider": "^1.0.1",
- "@smithy/shared-ini-file-loader": "^1.0.1",
- "@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
+ "node_modules/@aws-sdk/token-providers/node_modules/uuid": {
+ "version": "8.3.2",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@aws-sdk/types": {
"version": "3.370.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.370.0.tgz",
- "integrity": "sha512-8PGMKklSkRKjunFhzM2y5Jm0H2TBu7YRNISdYzXLUHKSP9zlMEYagseKVdmox0zKHf1LXVNuSlUV2b6SRrieCQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -1700,8 +4622,7 @@
},
"node_modules/@aws-sdk/util-arn-parser": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz",
- "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1711,8 +4632,7 @@
},
"node_modules/@aws-sdk/util-base64": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz",
- "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/util-buffer-from": "3.310.0",
"tslib": "^2.5.0"
@@ -1723,8 +4643,7 @@
},
"node_modules/@aws-sdk/util-buffer-from": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
- "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/is-array-buffer": "3.310.0",
"tslib": "^2.5.0"
@@ -1734,11 +4653,10 @@
}
},
"node_modules/@aws-sdk/util-endpoints": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.357.0.tgz",
- "integrity": "sha512-XHKyS5JClT9su9hDif715jpZiWHQF9gKZXER8tW0gOizU3R9cyWc9EsJ2BRhFNhi7nt/JF/CLUEc5qDx3ETbUw==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
+ "@aws-sdk/types": "3.413.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -1746,9 +4664,19 @@
}
},
"node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1758,8 +4686,7 @@
},
"node_modules/@aws-sdk/util-locate-window": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
- "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1768,20 +4695,29 @@
}
},
"node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.363.0.tgz",
- "integrity": "sha512-fk9ymBUIYbxiGm99Cn+kAAXmvMCWTf/cHAcB79oCXV4ELXdPa9lN5xQhZRFNxLUeXG4OAMEuCAUUuZEj8Fnc1Q==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/types": "^1.1.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/types": "^2.3.1",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
}
},
"node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1790,13 +4726,12 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.363.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.363.0.tgz",
- "integrity": "sha512-Fli/dvgGA9hdnQUrYb1//wNSFlK2jAfdJcfNXA6SeBYzSeH5pVGYF4kXF0FCdnMA3Fef+Zn1zAP/hw9v8VJHWQ==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.357.0",
- "@smithy/node-config-provider": "^1.0.1",
- "@smithy/types": "^1.1.0",
+ "@aws-sdk/types": "3.413.0",
+ "@smithy/node-config-provider": "^2.0.10",
+ "@smithy/types": "^2.3.1",
"tslib": "^2.5.0"
},
"engines": {
@@ -1812,9 +4747,54 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": {
- "version": "3.357.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.357.0.tgz",
- "integrity": "sha512-/riCRaXg3p71BeWnShrai0y0QTdXcouPSM0Cn1olZbzTf7s71aLEewrc96qFrL70XhY4XvnxMpqQh+r43XIL3g==",
+ "version": "3.413.0",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/node-config-provider": {
+ "version": "2.0.12",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.10",
+ "@smithy/shared-ini-file-loader": "^2.0.11",
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/property-provider": {
+ "version": "2.0.10",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.11",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^2.3.3",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": {
+ "version": "2.3.3",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1824,8 +4804,7 @@
},
"node_modules/@aws-sdk/util-utf8": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz",
- "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/util-buffer-from": "3.310.0",
"tslib": "^2.5.0"
@@ -1836,16 +4815,14 @@
},
"node_modules/@aws-sdk/util-utf8-browser": {
"version": "3.259.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
- "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.3.1"
}
},
"node_modules/@aws-sdk/xml-builder": {
"version": "3.310.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz",
- "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -1854,30 +4831,85 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
- "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dependencies": {
- "@babel/highlight": "^7.22.5"
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/compat-data": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz",
- "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz",
- "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.22.5",
@@ -1904,12 +4936,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz",
- "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.22.5",
+ "@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -1920,9 +4952,8 @@
},
"node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1934,9 +4965,8 @@
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz",
- "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.6",
"@babel/helper-validator-option": "^7.22.5",
@@ -1952,22 +4982,22 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz",
- "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
- "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1975,9 +5005,8 @@
},
"node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -1987,9 +5016,8 @@
},
"node_modules/@babel/helper-module-imports": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
- "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -1999,9 +5027,8 @@
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz",
- "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.5",
"@babel/helper-module-imports": "^7.22.5",
@@ -2018,18 +5045,16 @@
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -2039,9 +5064,8 @@
},
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -2051,35 +5075,32 @@
},
"node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
- "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz",
- "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz",
- "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/template": "^7.22.5",
"@babel/traverse": "^7.22.6",
@@ -2090,12 +5111,12 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
- "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.5",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -2159,9 +5180,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz",
- "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -2172,9 +5193,8 @@
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2184,9 +5204,8 @@
},
"node_modules/@babel/plugin-syntax-bigint": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2196,9 +5215,8 @@
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
@@ -2208,9 +5226,8 @@
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -2220,9 +5237,8 @@
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2232,9 +5248,8 @@
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
- "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -2247,9 +5262,8 @@
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -2259,9 +5273,8 @@
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2271,9 +5284,8 @@
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -2283,9 +5295,8 @@
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2295,9 +5306,8 @@
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2307,9 +5317,8 @@
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -2319,9 +5328,8 @@
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
@@ -2334,9 +5342,8 @@
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
- "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -2348,33 +5355,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
- "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.5",
- "@babel/parser": "^7.22.5",
- "@babel/types": "^7.22.5"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz",
- "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.5",
- "@babel/generator": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.22.6",
- "@babel/types": "^7.22.5",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -2384,21 +5391,20 @@
},
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/types": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
- "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -2407,22 +5413,19 @@
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@bugsnag/browser": {
"version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.20.2.tgz",
- "integrity": "sha512-4J4s53ZpYr3hHA+QjxUjOI6U+A8+XuUVH45UshE87Jp2Y4mV8ML2DovejqJS8J8yjdbnh2z1Wtg/v3WUNt4ayQ==",
+ "license": "MIT",
"dependencies": {
"@bugsnag/core": "^7.19.0"
}
},
"node_modules/@bugsnag/core": {
"version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz",
- "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==",
+ "license": "MIT",
"dependencies": {
"@bugsnag/cuid": "^3.0.0",
"@bugsnag/safe-json-stringify": "^6.0.0",
@@ -2433,13 +5436,11 @@
},
"node_modules/@bugsnag/cuid": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz",
- "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ=="
+ "license": "MIT"
},
"node_modules/@bugsnag/js": {
"version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.20.2.tgz",
- "integrity": "sha512-Q08k0h0h6NFwFGkFmib39Uln2WpvJdqT1EGF1JlyYiGW03Y+VopVb9r37pZrRrN9IY08mxaIEO8la5xeaWAs6A==",
+ "license": "MIT",
"dependencies": {
"@bugsnag/browser": "^7.20.2",
"@bugsnag/node": "^7.19.0"
@@ -2447,8 +5448,7 @@
},
"node_modules/@bugsnag/node": {
"version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.19.0.tgz",
- "integrity": "sha512-c4snyxx5d/fsMogmgehFBGc//daH6+4XCplia4zrEQYltjaQ+l8ud0dPx623DgJl/2j1+2zlRc7y7IHSd7Gm5w==",
+ "license": "MIT",
"dependencies": {
"@bugsnag/core": "^7.19.0",
"byline": "^5.0.0",
@@ -2460,22 +5460,19 @@
},
"node_modules/@bugsnag/safe-json-stringify": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz",
- "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA=="
+ "license": "MIT"
},
"node_modules/@colors/colors": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
- "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/@commitlint/cli": {
"version": "17.6.6",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz",
- "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/format": "^17.4.4",
"@commitlint/lint": "^17.6.6",
@@ -2497,9 +5494,8 @@
},
"node_modules/@commitlint/config-conventional": {
"version": "17.6.5",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.5.tgz",
- "integrity": "sha512-Xl9H9KLl86NZm5CYNTNF9dcz1xelE/EbvhWIWcYxG/rn3UWYWdWmmnX2q6ZduNdLFSGbOxzUpIx61j5zxbeXxg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-changelog-conventionalcommits": "^5.0.0"
},
@@ -2509,9 +5505,8 @@
},
"node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz",
- "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0",
"lodash": "^4.17.15",
@@ -2523,9 +5518,8 @@
},
"node_modules/@commitlint/config-validator": {
"version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz",
- "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/types": "^17.4.4",
"ajv": "^8.11.0"
@@ -2536,9 +5530,8 @@
},
"node_modules/@commitlint/ensure": {
"version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz",
- "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/types": "^17.4.4",
"lodash.camelcase": "^4.3.0",
@@ -2553,18 +5546,16 @@
},
"node_modules/@commitlint/execute-rule": {
"version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
- "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/format": {
"version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
- "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/types": "^17.4.4",
"chalk": "^4.1.0"
@@ -2575,9 +5566,8 @@
},
"node_modules/@commitlint/is-ignored": {
"version": "17.6.6",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz",
- "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/types": "^17.4.4",
"semver": "7.5.2"
@@ -2588,9 +5578,8 @@
},
"node_modules/@commitlint/is-ignored/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
@@ -2600,9 +5589,8 @@
},
"node_modules/@commitlint/is-ignored/node_modules/semver": {
"version": "7.5.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -2615,15 +5603,13 @@
},
"node_modules/@commitlint/is-ignored/node_modules/yallist": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/@commitlint/lint": {
"version": "17.6.6",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz",
- "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/is-ignored": "^17.6.6",
"@commitlint/parse": "^17.6.5",
@@ -2636,9 +5622,8 @@
},
"node_modules/@commitlint/load": {
"version": "17.5.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz",
- "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/config-validator": "^17.4.4",
"@commitlint/execute-rule": "^17.4.0",
@@ -2661,18 +5646,16 @@
},
"node_modules/@commitlint/message": {
"version": "17.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
- "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/parse": {
"version": "17.6.5",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz",
- "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/types": "^17.4.4",
"conventional-changelog-angular": "^5.0.11",
@@ -2684,9 +5667,8 @@
},
"node_modules/@commitlint/read": {
"version": "17.5.1",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
- "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/top-level": "^17.4.0",
"@commitlint/types": "^17.4.4",
@@ -2700,9 +5682,8 @@
},
"node_modules/@commitlint/read/node_modules/fs-extra": {
"version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -2714,9 +5695,8 @@
},
"node_modules/@commitlint/resolve-extends": {
"version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz",
- "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/config-validator": "^17.4.4",
"@commitlint/types": "^17.4.4",
@@ -2731,9 +5711,8 @@
},
"node_modules/@commitlint/rules": {
"version": "17.6.5",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz",
- "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/ensure": "^17.4.4",
"@commitlint/message": "^17.4.2",
@@ -2747,18 +5726,16 @@
},
"node_modules/@commitlint/to-lines": {
"version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
- "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/top-level": {
"version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
- "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^5.0.0"
},
@@ -2768,9 +5745,8 @@
},
"node_modules/@commitlint/types": {
"version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
- "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.0"
},
@@ -2780,9 +5756,8 @@
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
- "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
@@ -2792,9 +5767,8 @@
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
@@ -2802,8 +5776,7 @@
},
"node_modules/@dabh/diagnostics": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
- "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
+ "license": "MIT",
"dependencies": {
"colorspace": "1.1.x",
"enabled": "2.0.x",
@@ -2812,9 +5785,8 @@
},
"node_modules/@datadog/pprof": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.1.0.tgz",
- "integrity": "sha512-Bg8O8yrHeL2KKHXhLoAAT33ZfzLnZ6rWfOjy8PkcNhUJy3UwNVLbUoApf+99EyLjqpzpk/kZXrIAMBzMMB8ilg==",
"hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
"delay": "^5.0.0",
"node-gyp-build": "<4.0",
@@ -2828,17 +5800,15 @@
},
"node_modules/@datadog/pprof/node_modules/source-map": {
"version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
},
"node_modules/@dependents/detective-less": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.1.tgz",
- "integrity": "sha512-NjjCPJbx/za2287T6gnC5zD2IFSplro1evaTV9yvx3jnPpHi7s8PwJvh9vvJRFnMx5nbakodwNOnFvk8+9YQTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gonzales-pe": "^4.3.0",
"node-source-walk": "^5.0.0"
@@ -2849,9 +5819,8 @@
},
"node_modules/@dependents/detective-less/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -2861,9 +5830,8 @@
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira": {
"version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz",
- "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"boxen": "^5.1.2",
"chalk": "^2.4.1",
@@ -2884,9 +5852,8 @@
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/ansi-styles": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -2896,9 +5863,8 @@
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/chalk": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -2910,33 +5876,29 @@
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@digitalroute/cz-conventional-changelog-for-jira/node_modules/supports-color": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -2946,9 +5908,8 @@
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz",
- "integrity": "sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.3.0"
},
@@ -2961,18 +5922,16 @@
},
"node_modules/@eslint-community/regexpp": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
- "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -2993,9 +5952,8 @@
},
"node_modules/@eslint/eslintrc/node_modules/ajv": {
"version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -3009,45 +5967,38 @@
},
"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@eslint/js": {
"version": "8.41.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz",
- "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@ewoudenberg/difflib": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz",
- "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==",
"dependencies": {
"heap": ">= 0.2.0"
}
},
"node_modules/@hapi/hoek": {
"version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
+ "license": "BSD-3-Clause"
},
"node_modules/@hapi/topo": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
+ "license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.8",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
- "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
@@ -3059,9 +6010,8 @@
},
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
- "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=12.22"
},
@@ -3072,29 +6022,25 @@
},
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@hutson/parse-repository-url": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz",
- "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@ioredis/commands": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz",
- "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg=="
+ "license": "MIT"
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -3109,9 +6055,8 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -3121,9 +6066,8 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -3133,9 +6077,8 @@
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -3150,9 +6093,8 @@
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -3165,9 +6107,8 @@
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -3182,9 +6123,8 @@
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
@@ -3198,18 +6138,16 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -3220,9 +6158,8 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -3233,9 +6170,8 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -3245,9 +6181,8 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -3260,9 +6195,8 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -3272,18 +6206,16 @@
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/console": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz",
- "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"@types/node": "*",
@@ -3298,9 +6230,8 @@
},
"node_modules/@jest/core": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz",
- "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/console": "^29.6.0",
"@jest/reporters": "^29.6.0",
@@ -3345,9 +6276,8 @@
},
"node_modules/@jest/environment": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz",
- "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/fake-timers": "^29.6.0",
"@jest/types": "^29.6.0",
@@ -3360,9 +6290,8 @@
},
"node_modules/@jest/expect": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz",
- "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expect": "^29.6.0",
"jest-snapshot": "^29.6.0"
@@ -3373,9 +6302,8 @@
},
"node_modules/@jest/expect-utils": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz",
- "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"jest-get-type": "^29.4.3"
},
@@ -3385,9 +6313,8 @@
},
"node_modules/@jest/fake-timers": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz",
- "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"@sinonjs/fake-timers": "^10.0.2",
@@ -3402,9 +6329,8 @@
},
"node_modules/@jest/globals": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz",
- "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/environment": "^29.6.0",
"@jest/expect": "^29.6.0",
@@ -3417,9 +6343,8 @@
},
"node_modules/@jest/reporters": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz",
- "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.6.0",
@@ -3460,9 +6385,8 @@
},
"node_modules/@jest/reporters/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -3480,9 +6404,8 @@
},
"node_modules/@jest/schemas": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz",
- "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@sinclair/typebox": "^0.27.8"
},
@@ -3492,9 +6415,8 @@
},
"node_modules/@jest/source-map": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz",
- "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
@@ -3506,9 +6428,8 @@
},
"node_modules/@jest/test-result": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz",
- "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/console": "^29.6.0",
"@jest/types": "^29.6.0",
@@ -3521,9 +6442,8 @@
},
"node_modules/@jest/test-sequencer": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz",
- "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/test-result": "^29.6.0",
"graceful-fs": "^4.2.9",
@@ -3536,9 +6456,8 @@
},
"node_modules/@jest/transform": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz",
- "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.0",
@@ -3562,15 +6481,13 @@
},
"node_modules/@jest/transform/node_modules/convert-source-map": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@jest/transform/node_modules/write-file-atomic": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -3581,9 +6498,8 @@
},
"node_modules/@jest/types": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz",
- "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.0",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -3598,9 +6514,8 @@
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.0.0",
"@jridgewell/sourcemap-codec": "^1.4.10"
@@ -3611,33 +6526,29 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.18",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
- "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
@@ -3645,14 +6556,12 @@
},
"node_modules/@jsdevtools/ono": {
"version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@koa/router": {
"version": "12.0.0",
- "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.0.tgz",
- "integrity": "sha512-cnnxeKHXlt7XARJptflGURdJaO+ITpNkOHmQu7NHmCoRinPbyvFzce/EG/E8Zy81yQ1W9MoSdtklc3nyaDReUw==",
+ "license": "MIT",
"dependencies": {
"http-errors": "^2.0.0",
"koa-compose": "^4.1.0",
@@ -3665,8 +6574,7 @@
},
"node_modules/@koa/router/node_modules/http-errors": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -3680,31 +6588,45 @@
},
"node_modules/@koa/router/node_modules/statuses": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.11",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
"node_modules/@ndhoule/extend": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz",
- "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ=="
+ "license": "MIT"
},
"node_modules/@nicolo-ribaudo/semver-v6": {
"version": "6.3.3",
- "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz",
- "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -3715,18 +6637,16 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -3737,69 +6657,276 @@
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
+ "license": "MIT",
"optional": true,
"engines": {
"node": ">=14"
}
},
+ "node_modules/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@pyroscope/nodejs": {
+ "version": "0.2.6",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "axios": "^0.26.1",
+ "debug": "^4.3.3",
+ "form-data": "^4.0.0",
+ "pprof": "^3.2.0",
+ "regenerator-runtime": "^0.13.11",
+ "source-map": "^0.7.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || >=14.13.1"
+ }
+ },
+ "node_modules/@pyroscope/nodejs/node_modules/axios": {
+ "version": "0.26.1",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.14.8"
+ }
+ },
+ "node_modules/@pyroscope/nodejs/node_modules/source-map": {
+ "version": "0.7.4",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rudderstack/integrations-lib": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@rudderstack/integrations-lib/-/integrations-lib-0.1.9.tgz",
+ "integrity": "sha512-ROi/LfI7PXqKDrjSig+1Rf2TQ8MgxJGJ7sAD1B0PmRKELQpxK6PLt8QF+vKXl8wYILQu2gwTkZ5o+uwmNKxGzg==",
+ "dependencies": {
+ "@rudderstack/workflow-engine": "^0.5.7",
+ "axios": "^1.4.0",
+ "axios-mock-adapter": "^1.22.0",
+ "crypto": "^1.0.1",
+ "get-value": "^3.0.1",
+ "handlebars": "^4.7.8",
+ "lodash": "^4.17.21",
+ "moment": "^2.29.4",
+ "moment-timezone": "^0.5.43",
+ "set-value": "^4.1.0",
+ "sha256": "^0.2.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@aws-crypto/sha256-js": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz",
+ "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==",
+ "dependencies": {
+ "@aws-crypto/util": "^4.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@aws-crypto/util": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz",
+ "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==",
+ "dependencies": {
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-utf8-browser": "^3.0.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@aws-crypto/util/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@rudderstack/json-template-engine": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.5.5.tgz",
+ "integrity": "sha512-p3HdTqgZiJjjZmjaHN2paa1e87ifGE5UjkA4zdvge4bBzJbKKMQNWqRg6I96SwoA+hsxNkW/f9R83SPLU9t7LA=="
+ },
+ "node_modules/@rudderstack/integrations-lib/node_modules/@rudderstack/workflow-engine": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.5.8.tgz",
+ "integrity": "sha512-H1aCowYqTnOoqJtL9cGDhdhoGNl+KzqmVbSjFmE7n75onZaIMs87+HQyW08jYxS9l1Uo4TL8SAvzFICqFqkBbw==",
+ "dependencies": {
+ "@aws-crypto/sha256-js": "^4.0.0",
+ "@rudderstack/json-template-engine": "^0.5.5",
+ "js-yaml": "^4.1.0",
+ "jsonata": "^2.0.3",
+ "lodash": "^4.17.21",
+ "object-sizeof": "^2.6.3"
+ }
+ },
+ "node_modules/@rudderstack/json-template-engine": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.8.1.tgz",
+ "integrity": "sha512-MR2ArfOXEDh9FEj/N3LVLjIxf134wq+YxUdZN4gTLEONIPdna97QeNk4hnhtlob0QQIrWr13mfPaU9FpvU2Q6Q=="
+ },
+ "node_modules/@rudderstack/workflow-engine": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.6.9.tgz",
+ "integrity": "sha512-b0ZHURJfCj2REIL/w7AJgJ+K5BGwIVX3sRDZQqN3F4YWcZX3ZYUXo7gtUeb99FLnZzm7KuThIWR02Fxwos+L4Q==",
+ "dependencies": {
+ "@aws-crypto/sha256-js": "^5.0.0",
+ "@rudderstack/json-template-engine": "^0.8.1",
+ "jsonata": "^2.0.3",
+ "lodash": "^4.17.21",
+ "object-sizeof": "^2.6.3",
+ "yaml": "^2.3.2"
+ }
+ },
+ "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/sha256-js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
+ "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
+ "dependencies": {
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/util": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
+ "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
+ "dependencies": {
+ "@aws-sdk/types": "^3.222.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@rudderstack/workflow-engine/node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz",
+ "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==",
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rudderstack/workflow-engine/node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz",
+ "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rudderstack/workflow-engine/node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
+ "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@sideway/address": {
"version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
- "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+ "license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
},
"node_modules/@sideway/formula": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="
+ "license": "BSD-3-Clause"
},
"node_modules/@sideway/pinpoint": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
+ "license": "BSD-3-Clause"
},
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@sindresorhus/is": {
"version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
- "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@sinonjs/commons": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
"version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@smithy/abort-controller": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-1.0.1.tgz",
- "integrity": "sha512-An6irzp9NCji2JtJHhrEFlDbxLwHd6c6Y9fq3ZeomyUR8BIXlGXVTxsemUSZVVgOq3166iYbYs/CrPAmgRSFLw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -3810,8 +6937,7 @@
},
"node_modules/@smithy/config-resolver": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-1.0.1.tgz",
- "integrity": "sha512-quj0xUiEVG/UHfY82EtthR/+S5/17p3IxXArC3NFSNqryMobWbG9oWgJy2s2cgUSVZLzxevjKKvxrilK7JEDaA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"@smithy/util-config-provider": "^1.0.1",
@@ -3824,8 +6950,7 @@
},
"node_modules/@smithy/credential-provider-imds": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-1.0.1.tgz",
- "integrity": "sha512-hkRJoxVCh4CEt1zYOBElE+G/MV6lyx3g68hSJpesM4pwMT/bzEVo5E5XzXY+6dVq8yszeatWKbFuqCCBQte8tg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/node-config-provider": "^1.0.1",
"@smithy/property-provider": "^1.0.1",
@@ -3839,8 +6964,7 @@
},
"node_modules/@smithy/eventstream-codec": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.0.1.tgz",
- "integrity": "sha512-cpcTXQEOEs2wEvIyxW/iTHJ2m0RVqoEOTjjWEXD6SY8Gcs3FCFP6E8MXadC098tdH5ctMIUXc8POXyMpxzGnjw==",
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/crc32": "3.0.0",
"@smithy/types": "^1.1.0",
@@ -3850,8 +6974,7 @@
},
"node_modules/@smithy/eventstream-serde-browser": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-1.0.1.tgz",
- "integrity": "sha512-oc8vxe+AU2RzvXH/Ehh0TzM/Nsw3I3ywu7V3qaCzqdkBIntAwK9JGZqcSDsqTK0WxZKBRgFIEwopcuZ2slVnFQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/eventstream-serde-universal": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -3863,8 +6986,7 @@
},
"node_modules/@smithy/eventstream-serde-config-resolver": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-1.0.1.tgz",
- "integrity": "sha512-TJwaXima0djnNY819utO1j93qZHaheFH1bhHxBkMrImtEOuXY48Tjma/L2m8swkIq8dy8jFC9hrYOkD0eYHkFA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -3875,8 +6997,7 @@
},
"node_modules/@smithy/eventstream-serde-node": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-1.0.1.tgz",
- "integrity": "sha512-JEj8w7IRs4l+kcwKxbv3pNuu8n7ORC4pMFrIOrM4rERzrRnI7vMNTRzvAPGYA53rqm/Y9tBA9dw4C+H6hLXcsA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/eventstream-serde-universal": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -3888,8 +7009,7 @@
},
"node_modules/@smithy/eventstream-serde-universal": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-1.0.1.tgz",
- "integrity": "sha512-c6m9DH7m6D2S93dof4wSxysaGSQdauO20TNcSePzrgHd4rkTnz5pqZ1a7Pt22q2SKf09SvTugq5cV2Sy4r8zHw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/eventstream-codec": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -3901,8 +7021,7 @@
},
"node_modules/@smithy/fetch-http-handler": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-1.0.1.tgz",
- "integrity": "sha512-/e2A8eOMk4FVZBQ0o6uF/ttLtFZcmsK5MIwDu1UE3crM4pCAIP19Ul8U9rdLlHhIu81X4AcJmSw55RDSpVRL/w==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/protocol-http": "^1.1.0",
"@smithy/querystring-builder": "^1.0.1",
@@ -3913,8 +7032,7 @@
},
"node_modules/@smithy/hash-node": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-1.0.1.tgz",
- "integrity": "sha512-eCz08BySBcOjVObjbRAS/XMKUGY4ujnuS+GoWeEpzpCSKDnO8/YQ0rStRt4C0llRmhApizYc1tK9DiJwfvXcBg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"@smithy/util-buffer-from": "^1.0.1",
@@ -3927,8 +7045,7 @@
},
"node_modules/@smithy/invalid-dependency": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-1.0.1.tgz",
- "integrity": "sha512-kib63GFlAzRn/wf8M0cRWrZA1cyOy5IvpTkLavCY782DPFMP0EaEeD6VrlNIOvD6ncf7uCJ68HqckhwK1qLT3g==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -3936,8 +7053,7 @@
},
"node_modules/@smithy/is-array-buffer": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.0.1.tgz",
- "integrity": "sha512-fHSTW70gANnzPYWNDcWkPXpp+QMbHhKozbQm/+Denkhp4gwSiPuAovWZRpJa9sXO+Q4dOnNzYN2max1vTCEroA==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -3947,8 +7063,7 @@
},
"node_modules/@smithy/middleware-content-length": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-1.0.1.tgz",
- "integrity": "sha512-vWWigayk5i2cFp9xPX5vdzHyK+P0t/xZ3Ovp4Ss+c8JQ1Hlq2kpJZVWtTKsmdfND5rVo5lu0kD5wgAMUCcmuhw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/protocol-http": "^1.1.0",
"@smithy/types": "^1.1.0",
@@ -3960,8 +7075,7 @@
},
"node_modules/@smithy/middleware-endpoint": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-1.0.2.tgz",
- "integrity": "sha512-F3CyXgjtDI4quGFkDmVNytt6KMwlzzeMxtopk6Edue4uKdKcMC1vUmoRS5xTbFzKDDp4XwpnEV7FshPaL3eCPw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/middleware-serde": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -3975,8 +7089,7 @@
},
"node_modules/@smithy/middleware-retry": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-1.0.3.tgz",
- "integrity": "sha512-ZRsjG8adtxQ456FULPqPFmWtrW44Fq8IgdQvQB+rC2RSho3OUzS+TiEIwb5Zs6rf2IoewITKtfdtsUZcxXO0ng==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/protocol-http": "^1.1.0",
"@smithy/service-error-classification": "^1.0.2",
@@ -3992,16 +7105,14 @@
},
"node_modules/@smithy/middleware-retry/node_modules/uuid": {
"version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/@smithy/middleware-serde": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-1.0.1.tgz",
- "integrity": "sha512-bn5lWk8UUeXFCQfkrNErz5SbeNd+2hgYegHMLsOLPt4URDIsyREar6wMsdsR+8UCdgR5s8udG3Zalgc7puizIQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -4012,8 +7123,7 @@
},
"node_modules/@smithy/middleware-stack": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-1.0.1.tgz",
- "integrity": "sha512-T6+gsAO1JYamOJqmORCrByDeQ/NB+ggjHb33UDOgdX4xIjXz/FB/3UqHgQu6PL1cSFrK+i4oteDIwqARDs/Szw==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4023,8 +7133,7 @@
},
"node_modules/@smithy/node-config-provider": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-1.0.1.tgz",
- "integrity": "sha512-FRxifH/J2SgOaVLihIqBFuGhiHR/NfzbZYp5nYO7BGgT/gc/f9nAuuRJcEy/hwO3aI6ThyG5apH4tGec6A2sCw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/property-provider": "^1.0.1",
"@smithy/shared-ini-file-loader": "^1.0.1",
@@ -4037,8 +7146,7 @@
},
"node_modules/@smithy/node-http-handler": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-1.0.2.tgz",
- "integrity": "sha512-PzPrGRSt3kNuruLCeR4ffJp57ZLVnIukMXVL3Ppr65ZoxiE+HBsOVAa/Z/T+4HzjCM6RaXnnmB8YKfsDjlb0iA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/abort-controller": "^1.0.1",
"@smithy/protocol-http": "^1.1.0",
@@ -4052,8 +7160,7 @@
},
"node_modules/@smithy/property-provider": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-1.0.1.tgz",
- "integrity": "sha512-3EG/61Ls1MrgEaafpltXBJHSqFPqmTzEX7QKO7lOEHuYGmGYzZ08t1SsTgd1vM74z0IihoZyGPynZ7WmXKvTeg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -4064,8 +7171,7 @@
},
"node_modules/@smithy/protocol-http": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.1.0.tgz",
- "integrity": "sha512-H5y/kZOqfJSqRkwtcAoVbqONmhdXwSgYNJ1Glk5Ry8qlhVVy5qUzD9EklaCH8/XLnoCsLO/F/Giee8MIvaBRkg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -4076,8 +7182,7 @@
},
"node_modules/@smithy/querystring-builder": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-1.0.1.tgz",
- "integrity": "sha512-J5Tzkw1PMtu01h6wl+tlN5vsyROmS6/z5lEfNlLo/L4ELHeVkQ4Q0PEIjDddPLfjVLCm8biQTESE5GCMixSRNQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"@smithy/util-uri-escape": "^1.0.1",
@@ -4089,8 +7194,7 @@
},
"node_modules/@smithy/querystring-parser": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-1.0.1.tgz",
- "integrity": "sha512-zauxdMc3cwxoLitI5DZqH7xN6Fk0mwRxrUMAETbav2j6Se2U0UGak/55rZcDg2yGzOURaLYi5iOm1gHr98P+Bw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -4101,16 +7205,14 @@
},
"node_modules/@smithy/service-error-classification": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.0.2.tgz",
- "integrity": "sha512-Q5CCuzYL5FGo6Rr/O+lZxXHm2hrRgbmMn8MgyjqZUWZg20COg20DuNtIbho2iht6CoB7jOpmpBqhWizLlzUZgg==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-1.0.1.tgz",
- "integrity": "sha512-EztziuIPoNronENGqh+MWVKJErA4rJpaPzJCPukzBeEoG2USka0/q4B5Mr/1zszOnrb49fPNh4u3u5LfiH7QzA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/types": "^1.1.0",
"tslib": "^2.5.0"
@@ -4121,8 +7223,7 @@
},
"node_modules/@smithy/signature-v4": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.0.1.tgz",
- "integrity": "sha512-2D69je14ou1vBTnAQeysSK4QVMm0j3WHS3MDg/DnHnFFcXRCzVl/xAARO7POD8+fpi4tMFPs8Z4hzo1Zw40L0Q==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/eventstream-codec": "^1.0.1",
"@smithy/is-array-buffer": "^1.0.1",
@@ -4139,8 +7240,7 @@
},
"node_modules/@smithy/smithy-client": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-1.0.3.tgz",
- "integrity": "sha512-Wh1mNP/1yUZK0uYkgCQ6NMxpBT3Fmc45TMdUfOlH1xD2zGYL7U4yDHFOhEZdi/suyjaelFobXB2p9pPIw6LjRQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/middleware-stack": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -4153,8 +7253,7 @@
},
"node_modules/@smithy/types": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.1.0.tgz",
- "integrity": "sha512-KzmvisMmuwD2jZXuC9e65JrgsZM97y5NpDU7g347oB+Q+xQLU6hQZ5zFNNbEfwwOJHoOvEVTna+dk1h/lW7alw==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4164,8 +7263,7 @@
},
"node_modules/@smithy/url-parser": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-1.0.1.tgz",
- "integrity": "sha512-33vWEtE6HzmwjEcEb4I58XMLRAchwPS93YhfDyXAXr1jwDCzfXmMayQwwpyW847rpWj0XJimxqia8q0z+k/ybw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/querystring-parser": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -4174,8 +7272,7 @@
},
"node_modules/@smithy/util-base64": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-1.0.1.tgz",
- "integrity": "sha512-rJcpRi/yUi6TyCEkjdTH86/ExBuKlfctEXhG9/4gMJ3/cnPcHJJnr0mQ9evSEO+3DbpT/Nxq90bcTBdTIAmCig==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/util-buffer-from": "^1.0.1",
"tslib": "^2.5.0"
@@ -4186,16 +7283,14 @@
},
"node_modules/@smithy/util-body-length-browser": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-1.0.1.tgz",
- "integrity": "sha512-Pdp744fmF7E1NWoSb7256Anhm8eYoCubvosdMwXzOnHuPRVbDa15pKUz2027K3+jrfGpXo1r+MnDerajME1Osw==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/util-body-length-node": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-1.0.1.tgz",
- "integrity": "sha512-4PIHjDFwG07SNensAiVq/CJmubEVuwclWSYOTNtzBNTvxOeGLznvygkGYgPzS3erByT8C4S9JvnLYgtrsVV3nQ==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4205,8 +7300,7 @@
},
"node_modules/@smithy/util-buffer-from": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.0.1.tgz",
- "integrity": "sha512-363N7Wq0ceUgE5lLe6kaR6GlJs2/m4r9V6bRMfIszb6P1FZbbRRM2FQYUWWPFSsRymm9mJL18b3fjiVsIvhDGg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/is-array-buffer": "^1.0.1",
"tslib": "^2.5.0"
@@ -4217,8 +7311,7 @@
},
"node_modules/@smithy/util-config-provider": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-1.0.1.tgz",
- "integrity": "sha512-4Qy38Oy5/q43MpTwCLV1P+7NeaOp4W2etQDxMjgEeRlOyGGNlgttn0syi4g2rVSukFVqQ6FbeRs5xbnFmS6kaQ==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4228,8 +7321,7 @@
},
"node_modules/@smithy/util-defaults-mode-browser": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-1.0.1.tgz",
- "integrity": "sha512-/9ObwNch4Z/NJYfkO4AvqBWku60Ju+c2Ck32toPOLmWe/V6eI9FLn8C1abri+GxDRCkLIqvkaWU1lgZ3nWZIIw==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/property-provider": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -4242,8 +7334,7 @@
},
"node_modules/@smithy/util-defaults-mode-node": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-1.0.1.tgz",
- "integrity": "sha512-XQM3KvqRLgv7bwAzVkXTITkOmcOINoG9icJiGT8FA0zV35lY5UvyIsg5kHw01xigQS8ufa/33AwG3ZoXip+V5g==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/config-resolver": "^1.0.1",
"@smithy/credential-provider-imds": "^1.0.1",
@@ -4258,8 +7349,7 @@
},
"node_modules/@smithy/util-hex-encoding": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.0.1.tgz",
- "integrity": "sha512-FPTtMz/t02/rbfq5Pdll/TWUYP+GVFLCQNr+DgifrLzVRU0g8rdRjyFpDh8nPTdkDDusTTo9P1bepAYj68s0eA==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4269,8 +7359,7 @@
},
"node_modules/@smithy/util-middleware": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.0.1.tgz",
- "integrity": "sha512-u9akN3Zmbr0vZH4F+2iehG7cFg+3fvDfnvS/hhsXH4UHuhqiQ+ADefibnLzPoz1pooY7rvwaQ/TVHyJmZHdLdQ==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4280,8 +7369,7 @@
},
"node_modules/@smithy/util-retry": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.0.3.tgz",
- "integrity": "sha512-gYQnZDD8I2XJFspVwUISyukjPWVikTzKR0IdG8hCWYPTpeULFl1o6yzXlT5SL63TBkuEYl0R1/93cdNtMiNnoA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/service-error-classification": "^1.0.2",
"tslib": "^2.5.0"
@@ -4292,8 +7380,7 @@
},
"node_modules/@smithy/util-stream": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-1.0.1.tgz",
- "integrity": "sha512-4aBCIz35aZAnt2Rbq341KrnUzGhWv2/Zu8HouJqYLvSWCzlrvsNCGlXP4e70Kjzcw8hSuuCNtdUICwQ5qUWLxg==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/fetch-http-handler": "^1.0.1",
"@smithy/node-http-handler": "^1.0.2",
@@ -4310,8 +7397,7 @@
},
"node_modules/@smithy/util-uri-escape": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.0.1.tgz",
- "integrity": "sha512-IJUrRnXKEIc+PKnU1XzTsIENVR+60jUDPBP3iWX/EvuuT3Xfob47x1FGUe2c3yMXNuU6ax8VDk27hL5LKNoehQ==",
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -4321,8 +7407,7 @@
},
"node_modules/@smithy/util-utf8": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.0.1.tgz",
- "integrity": "sha512-iX6XHpjh4DFEUIBSKp2tjy3pYnLQMsJ62zYi1BVAC0kobE6p8AVpiZnxsU3ZkgQatAsUaEspFHUZ7CL7oSqaPQ==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/util-buffer-from": "^1.0.1",
"tslib": "^2.5.0"
@@ -4333,8 +7418,7 @@
},
"node_modules/@smithy/util-waiter": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-1.0.1.tgz",
- "integrity": "sha512-dsn8O0s3pFIgxFzySLe1dv0w4tEQizEP6UqbgZ4r/Kar4n8pSdrPi6DJg8BzXwkwEIZpMtV4/nhSeGZ7HksDXA==",
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/abort-controller": "^1.0.1",
"@smithy/types": "^1.1.0",
@@ -4346,41 +7430,35 @@
},
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
- "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
- "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/accepts": {
"version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/babel__core": {
"version": "7.1.20",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz",
- "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0",
@@ -4391,18 +7469,16 @@
},
"node_modules/@types/babel__generator": {
"version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
"version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -4410,17 +7486,15 @@
},
"node_modules/@types/babel__traverse": {
"version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/types": "^7.3.0"
}
},
"node_modules/@types/body-parser": {
"version": "1.19.2",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
- "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
+ "license": "MIT",
"dependencies": {
"@types/connect": "*",
"@types/node": "*"
@@ -4428,21 +7502,18 @@
},
"node_modules/@types/connect": {
"version": "3.4.35",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
- "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/content-disposition": {
"version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz",
- "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA=="
+ "license": "MIT"
},
"node_modules/@types/cookies": {
"version": "0.7.7",
- "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz",
- "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==",
+ "license": "MIT",
"dependencies": {
"@types/connect": "*",
"@types/express": "*",
@@ -4452,8 +7523,7 @@
},
"node_modules/@types/express": {
"version": "4.17.17",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
- "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
+ "license": "MIT",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
@@ -4463,8 +7533,7 @@
},
"node_modules/@types/express-serve-static-core": {
"version": "4.17.35",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz",
- "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==",
+ "license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
@@ -4472,54 +7541,57 @@
"@types/send": "*"
}
},
+ "node_modules/@types/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-IyNhGHu71jH1jCXTHmafuoAAdsbBON3kDh7u/UUhLmjYgN5TYB54e1R8ckTCiIevl2UuZaCsi9XRxineY5yUjw==",
+ "deprecated": "This is a stub types definition. fast-json-stable-stringify provides its own type definitions, so you do not need this installed.",
+ "dev": true,
+ "dependencies": {
+ "fast-json-stable-stringify": "*"
+ }
+ },
"node_modules/@types/graceful-fs": {
"version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/http-assert": {
"version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz",
- "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA=="
+ "license": "MIT"
},
"node_modules/@types/http-errors": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz",
- "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ=="
+ "license": "MIT"
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
- "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
"node_modules/@types/jest": {
"version": "29.5.1",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz",
- "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expect": "^29.0.0",
"pretty-format": "^29.0.0"
@@ -4527,25 +7599,21 @@
},
"node_modules/@types/json-schema": {
"version": "7.0.12",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
- "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/json5": {
"version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/keygrip": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz",
- "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw=="
+ "license": "MIT"
},
"node_modules/@types/koa": {
"version": "2.13.6",
- "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.6.tgz",
- "integrity": "sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==",
+ "license": "MIT",
"dependencies": {
"@types/accepts": "*",
"@types/content-disposition": "*",
@@ -4559,74 +7627,62 @@
},
"node_modules/@types/koa-bodyparser": {
"version": "4.3.10",
- "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.10.tgz",
- "integrity": "sha512-6ae05pjhmrmGhUR8GYD5qr5p9LTEMEGfGXCsK8VaSL+totwigm8+H/7MHW7K4854CMeuwRAubT8qcc/EagaeIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/koa": "*"
}
},
"node_modules/@types/koa-compose": {
"version": "3.2.5",
- "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
- "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==",
+ "license": "MIT",
"dependencies": {
"@types/koa": "*"
}
},
"node_modules/@types/lodash": {
"version": "4.14.197",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
- "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/mime": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
+ "license": "MIT"
},
"node_modules/@types/minimist": {
"version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
- "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/node": {
"version": "20.2.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz",
- "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ=="
+ "license": "MIT"
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
+ "license": "MIT"
},
"node_modules/@types/prettier": {
"version": "2.7.3",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
- "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/qs": {
"version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ "license": "MIT"
},
"node_modules/@types/range-parser": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
- "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw=="
+ "license": "MIT"
},
"node_modules/@types/semver": {
"version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
- "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/send": {
"version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz",
- "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==",
+ "license": "MIT",
"dependencies": {
"@types/mime": "^1",
"@types/node": "*"
@@ -4634,8 +7690,7 @@
},
"node_modules/@types/serve-static": {
"version": "1.15.1",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz",
- "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
+ "license": "MIT",
"dependencies": {
"@types/mime": "*",
"@types/node": "*"
@@ -4643,30 +7698,26 @@
},
"node_modules/@types/stack-utils": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/yargs": {
"version": "17.0.23",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz",
- "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
"version": "21.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz",
- "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.4.0",
"@typescript-eslint/scope-manager": "5.61.0",
@@ -4698,9 +7749,8 @@
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz",
- "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.61.0",
"@typescript-eslint/visitor-keys": "5.61.0"
@@ -4715,9 +7765,8 @@
},
"node_modules/@typescript-eslint/parser": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz",
- "integrity": "sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/scope-manager": "5.59.2",
"@typescript-eslint/types": "5.59.2",
@@ -4742,9 +7791,8 @@
},
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz",
- "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -4755,9 +7803,8 @@
},
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz",
- "integrity": "sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/types": "5.59.2",
"@typescript-eslint/visitor-keys": "5.59.2",
@@ -4782,9 +7829,8 @@
},
"node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz",
- "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.59.2",
"eslint-visitor-keys": "^3.3.0"
@@ -4799,9 +7845,8 @@
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz",
- "integrity": "sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.59.2",
"@typescript-eslint/visitor-keys": "5.59.2"
@@ -4816,9 +7861,8 @@
},
"node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz",
- "integrity": "sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -4829,9 +7873,8 @@
},
"node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": {
"version": "5.59.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz",
- "integrity": "sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.59.2",
"eslint-visitor-keys": "^3.3.0"
@@ -4846,9 +7889,8 @@
},
"node_modules/@typescript-eslint/type-utils": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz",
- "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "5.61.0",
"@typescript-eslint/utils": "5.61.0",
@@ -4873,9 +7915,8 @@
},
"node_modules/@typescript-eslint/types": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz",
- "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -4886,9 +7927,8 @@
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz",
- "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/types": "5.61.0",
"@typescript-eslint/visitor-keys": "5.61.0",
@@ -4913,9 +7953,8 @@
},
"node_modules/@typescript-eslint/utils": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz",
- "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@types/json-schema": "^7.0.9",
@@ -4939,9 +7978,8 @@
},
"node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz",
- "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.61.0",
"@typescript-eslint/visitor-keys": "5.61.0"
@@ -4956,9 +7994,8 @@
},
"node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -4969,18 +8006,16 @@
},
"node_modules/@typescript-eslint/utils/node_modules/estraverse": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "5.61.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz",
- "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "5.61.0",
"eslint-visitor-keys": "^3.3.0"
@@ -4993,10 +8028,13 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "license": "ISC"
+ },
"node_modules/accepts": {
"version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "license": "MIT",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
@@ -5007,9 +8045,8 @@
},
"node_modules/acorn": {
"version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -5019,23 +8056,20 @@
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/add-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
- "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/agent-base": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
"dependencies": {
"debug": "4"
},
@@ -5045,9 +8079,8 @@
},
"node_modules/aggregate-error": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
@@ -5058,8 +8091,7 @@
},
"node_modules/ajv": {
"version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -5073,8 +8105,7 @@
},
"node_modules/ajv-draft-04": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
- "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "license": "MIT",
"peerDependencies": {
"ajv": "^8.5.0"
},
@@ -5086,8 +8117,7 @@
},
"node_modules/ajv-formats": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "license": "MIT",
"dependencies": {
"ajv": "^8.0.0"
},
@@ -5102,18 +8132,16 @@
},
"node_modules/ansi-align": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^4.1.0"
}
},
"node_modules/ansi-escapes": {
"version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
@@ -5126,9 +8154,8 @@
},
"node_modules/ansi-escapes/node_modules/type-fest": {
"version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -5138,18 +8165,15 @@
},
"node_modules/ansi-regex": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -5162,15 +8186,13 @@
},
"node_modules/any-promise": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -5181,41 +8203,62 @@
},
"node_modules/app-module-path": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz",
- "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==",
- "dev": true
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "license": "ISC"
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
},
"node_modules/arg": {
"version": "4.1.3",
- "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "license": "Python-2.0"
},
"node_modules/array-find-index": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/array-ify": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/array-includes": {
"version": "3.1.6",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
- "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -5232,18 +8275,16 @@
},
"node_modules/array-union": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/array.prototype.flat": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -5259,9 +8300,8 @@
},
"node_modules/array.prototype.flatmap": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -5277,88 +8317,112 @@
},
"node_modules/arrify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/asap": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ast-module-types": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz",
- "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0"
}
},
"node_modules/astral-regex": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/async": {
"version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
+ "license": "MIT"
},
"node_modules/asynckit": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ "license": "MIT"
},
"node_modules/at-least-node": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/available-typed-arrays": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
"dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/await-handler": {
+ "version": "1.1.2",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
+ "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios-mock-adapter": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz",
+ "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "is-buffer": "^2.0.5"
+ },
+ "peerDependencies": {
+ "axios": ">= 0.17.0"
+ }
+ },
+ "node_modules/axios-mock-adapter/node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/await-handler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/await-handler/-/await-handler-1.1.2.tgz",
- "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ=="
- },
- "node_modules/axios": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
- "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
+ "node": ">=4"
}
},
"node_modules/babel-jest": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz",
- "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/transform": "^29.6.0",
"@types/babel__core": "^7.1.14",
@@ -5377,9 +8441,8 @@
},
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -5393,9 +8456,8 @@
},
"node_modules/babel-plugin-jest-hoist": {
"version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -5408,9 +8470,8 @@
},
"node_modules/babel-preset-current-node-syntax": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
@@ -5431,9 +8492,8 @@
},
"node_modules/babel-preset-jest": {
"version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"babel-plugin-jest-hoist": "^29.5.0",
"babel-preset-current-node-syntax": "^1.0.0"
@@ -5447,13 +8507,10 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ "license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -5467,13 +8524,13 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/benchmark-suite": {
"version": "0.1.8",
- "resolved": "https://registry.npmjs.org/benchmark-suite/-/benchmark-suite-0.1.8.tgz",
- "integrity": "sha512-UDfWBQfeq/lXcsjuGAanOrX6AhP6HQSsutGS7CfStcbE1loLge7aQr5DT6n8r/4bUoiK+5RYwnogNu5UuTBMNg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eventemitter3": "^4.0.7",
"expose-gc": "^1.0.0",
@@ -5485,16 +8542,21 @@
"node": ">=8"
}
},
+ "node_modules/bindings": {
+ "version": "1.5.0",
+ "license": "MIT",
+ "dependencies": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
"node_modules/bintrees": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz",
- "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
+ "license": "MIT"
},
"node_modules/bl": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
@@ -5503,9 +8565,8 @@
},
"node_modules/bl/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -5517,20 +8578,17 @@
},
"node_modules/boolean": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
- "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/bowser": {
"version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
+ "license": "MIT"
},
"node_modules/boxen": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-align": "^3.0.0",
"camelcase": "^6.2.0",
@@ -5550,9 +8608,8 @@
},
"node_modules/boxen/node_modules/camelcase": {
"version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -5562,9 +8619,8 @@
},
"node_modules/boxen/node_modules/type-fest": {
"version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -5574,8 +8630,7 @@
},
"node_modules/brace-expansion": {
"version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5583,9 +8638,8 @@
},
"node_modules/braces": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -5595,8 +8649,6 @@
},
"node_modules/browserslist": {
"version": "4.21.9",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz",
- "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==",
"dev": true,
"funding": [
{
@@ -5612,6 +8664,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001503",
"electron-to-chromium": "^1.4.431",
@@ -5627,9 +8680,8 @@
},
"node_modules/bs-logger": {
"version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-json-stable-stringify": "2.x"
},
@@ -5639,17 +8691,15 @@
},
"node_modules/bser": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"node-int64": "^0.4.0"
}
},
"node_modules/btoa": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
- "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+ "license": "(MIT OR Apache-2.0)",
"bin": {
"btoa": "bin/btoa.js"
},
@@ -5659,8 +8709,7 @@
},
"node_modules/buffer": {
"version": "5.6.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
- "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
+ "license": "MIT",
"dependencies": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
@@ -5668,15 +8717,13 @@
},
"node_modules/buffer-from": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/builtin-modules": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -5686,24 +8733,21 @@
},
"node_modules/byline": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
- "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/bytes": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/cache-content-type": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
- "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
+ "license": "MIT",
"dependencies": {
"mime-types": "^2.1.18",
"ylru": "^1.2.0"
@@ -5714,9 +8758,8 @@
},
"node_modules/cacheable-request": {
"version": "2.1.4",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
- "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clone-response": "1.0.2",
"get-stream": "3.0.0",
@@ -5729,35 +8772,31 @@
},
"node_modules/cacheable-request/node_modules/get-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/cacheable-request/node_modules/lowercase-keys": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
- "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/cachedir": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
- "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/call-bind": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@@ -5768,33 +8807,29 @@
},
"node_modules/call-me-maybe": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/callsites": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase-keys": {
"version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^5.3.1",
"map-obj": "^4.0.0",
@@ -5809,8 +8844,6 @@
},
"node_modules/caniuse-lite": {
"version": "1.0.30001512",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz",
- "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==",
"dev": true,
"funding": [
{
@@ -5825,13 +8858,13 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/chalk": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -5845,40 +8878,41 @@
},
"node_modules/char-regex": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/chardet": {
"version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/charenc": {
"version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"node_modules/check-more-types": {
"version": "2.24.0",
- "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
- "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
},
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/ci-info": {
"version": "3.7.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz",
- "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==",
"dev": true,
"funding": [
{
@@ -5886,21 +8920,20 @@
"url": "https://github.com/sponsors/sibiraj-s"
}
],
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/cjs-module-lexer": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
- "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/clean-regexp": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
- "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
@@ -5910,18 +8943,16 @@
},
"node_modules/clean-stack": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/cli-boxes": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -5931,9 +8962,8 @@
},
"node_modules/cli-cursor": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
},
@@ -5943,9 +8973,8 @@
},
"node_modules/cli-spinners": {
"version": "2.7.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
- "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -5955,9 +8984,8 @@
},
"node_modules/cli-truncate": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
- "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"slice-ansi": "^5.0.0",
"string-width": "^5.0.0"
@@ -5971,9 +8999,8 @@
},
"node_modules/cli-truncate/node_modules/ansi-regex": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -5983,9 +9010,8 @@
},
"node_modules/cli-truncate/node_modules/string-width": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -6000,9 +9026,8 @@
},
"node_modules/cli-truncate/node_modules/strip-ansi": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -6015,18 +9040,16 @@
},
"node_modules/cli-width": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">= 10"
}
},
"node_modules/cliui": {
"version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -6038,33 +9061,29 @@
},
"node_modules/clone": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/clone-response": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-response": "^1.0.0"
}
},
"node_modules/cluster-key-slot": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
- "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/co": {
"version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "license": "MIT",
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
@@ -6072,8 +9091,7 @@
},
"node_modules/co-body": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
- "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
+ "license": "MIT",
"dependencies": {
"inflation": "^2.0.0",
"qs": "^6.5.2",
@@ -6083,14 +9101,12 @@
},
"node_modules/collect-v8-coverage": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/color": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
- "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.3",
"color-string": "^1.6.0"
@@ -6098,9 +9114,8 @@
},
"node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -6110,49 +9125,49 @@
},
"node_modules/color-name": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "license": "MIT"
},
"node_modules/color-string": {
"version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
- "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "license": "ISC",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
"node_modules/color/node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/color/node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ "license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.19",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/colors": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+ "license": "MIT",
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/colorspace": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
- "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
+ "license": "MIT",
"dependencies": {
"color": "^3.1.3",
"text-hex": "1.0.x"
@@ -6160,8 +9175,7 @@
},
"node_modules/combined-stream": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -6171,18 +9185,16 @@
},
"node_modules/commander": {
"version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/commitizen": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz",
- "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cachedir": "2.3.0",
"cz-conventional-changelog": "3.3.0",
@@ -6210,9 +9222,8 @@
},
"node_modules/commitizen/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -6230,9 +9241,8 @@
},
"node_modules/commitizen/node_modules/inquirer": {
"version": "8.2.5",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz",
- "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.1",
@@ -6256,18 +9266,16 @@
},
"node_modules/commitizen/node_modules/minimist": {
"version": "1.2.7",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
- "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/commitlint": {
"version": "17.6.6",
- "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-17.6.6.tgz",
- "integrity": "sha512-Q5M+w1nqGQSEkEW43EtPNrU+uKL2pENrJl6QigFupZ0v4AfvI8k5Q6uFgWmxlEOrSkgCYaN436Q9c9pydqyJqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@commitlint/cli": "^17.6.6",
"@commitlint/types": "^17.4.4"
@@ -6281,15 +9289,13 @@
},
"node_modules/commondir": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/compare-func": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
- "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-ify": "^1.0.0",
"dot-prop": "^5.1.0"
@@ -6297,9 +9303,8 @@
},
"node_modules/compare-func/node_modules/dot-prop": {
"version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
- "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-obj": "^1.0.0"
},
@@ -6309,17 +9314,14 @@
},
"node_modules/compare-func/node_modules/is-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/component-each": {
"version": "0.2.6",
- "resolved": "https://registry.npmjs.org/component-each/-/component-each-0.2.6.tgz",
- "integrity": "sha512-IOXG+HZmbgaBS8Rqy+tAMrwsPdEY1BWcPcp0xI2ZOzKQhHvSVGrL7iCnoDU37TEKOCfaf4ywsR6GwAr0JivPjg==",
"dependencies": {
"component-type": "1.0.0",
"to-function": "2.0.6"
@@ -6327,35 +9329,31 @@
},
"node_modules/component-emitter": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/component-props": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz",
- "integrity": "sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q=="
+ "version": "1.1.1"
},
"node_modules/component-type": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.0.0.tgz",
- "integrity": "sha512-qzUg4SGDH6KFYlcklmeZwucbtosh/XGwuIffqXAhC1dZyjO7Xu1UuaxwKRY29EncuBj/DH+h6Zot3AdZS6xdFw=="
+ "version": "1.0.0"
},
"node_modules/concat-map": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ "license": "MIT"
},
"node_modules/confusing-browser-globals": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
- "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "license": "ISC"
},
"node_modules/content-disposition": {
"version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
},
@@ -6365,17 +9363,15 @@
},
"node_modules/content-type": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/conventional-changelog": {
"version": "3.1.25",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz",
- "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-changelog-angular": "^5.0.12",
"conventional-changelog-atom": "^2.0.8",
@@ -6395,9 +9391,8 @@
},
"node_modules/conventional-changelog-angular": {
"version": "5.0.13",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz",
- "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0",
"q": "^1.5.1"
@@ -6408,9 +9403,8 @@
},
"node_modules/conventional-changelog-atom": {
"version": "2.0.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz",
- "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6420,9 +9414,8 @@
},
"node_modules/conventional-changelog-codemirror": {
"version": "2.0.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz",
- "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6432,15 +9425,13 @@
},
"node_modules/conventional-changelog-config-spec": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz",
- "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/conventional-changelog-conventionalcommits": {
"version": "4.6.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
- "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0",
"lodash": "^4.17.15",
@@ -6452,9 +9443,8 @@
},
"node_modules/conventional-changelog-core": {
"version": "4.2.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz",
- "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"add-stream": "^1.0.0",
"conventional-changelog-writer": "^5.0.0",
@@ -6477,9 +9467,8 @@
},
"node_modules/conventional-changelog-core/node_modules/find-up": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^2.0.0"
},
@@ -6489,15 +9478,13 @@
},
"node_modules/conventional-changelog-core/node_modules/hosted-git-info": {
"version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/conventional-changelog-core/node_modules/locate-path": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
@@ -6508,9 +9495,8 @@
},
"node_modules/conventional-changelog-core/node_modules/p-limit": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^1.0.0"
},
@@ -6520,9 +9506,8 @@
},
"node_modules/conventional-changelog-core/node_modules/p-locate": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^1.1.0"
},
@@ -6532,27 +9517,24 @@
},
"node_modules/conventional-changelog-core/node_modules/p-try": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-changelog-core/node_modules/path-exists": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-changelog-core/node_modules/path-type": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pify": "^3.0.0"
},
@@ -6562,18 +9544,16 @@
},
"node_modules/conventional-changelog-core/node_modules/pify": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-changelog-core/node_modules/read-pkg": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
@@ -6585,9 +9565,8 @@
},
"node_modules/conventional-changelog-core/node_modules/read-pkg-up": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
@@ -6598,9 +9577,8 @@
},
"node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": {
"version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -6610,18 +9588,16 @@
},
"node_modules/conventional-changelog-core/node_modules/semver": {
"version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/conventional-changelog-ember": {
"version": "2.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz",
- "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6631,9 +9607,8 @@
},
"node_modules/conventional-changelog-eslint": {
"version": "3.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz",
- "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6643,9 +9618,8 @@
},
"node_modules/conventional-changelog-express": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz",
- "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6655,9 +9629,8 @@
},
"node_modules/conventional-changelog-jquery": {
"version": "3.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz",
- "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.5.1"
},
@@ -6667,18 +9640,16 @@
},
"node_modules/conventional-changelog-jscs": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
- "integrity": "sha512-V8sey4tE0nJUlWGi2PZKDMfawYLf/+F165xhhDjcIoTEJDxssVV5PMVzTQzjS6U/dEX85fWkur+bs6imOqkIng==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.4.1"
}
},
"node_modules/conventional-changelog-jshint": {
"version": "2.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz",
- "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^2.0.0",
"q": "^1.5.1"
@@ -6689,18 +9660,16 @@
},
"node_modules/conventional-changelog-preset-loader": {
"version": "2.3.4",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
- "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/conventional-changelog-writer": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz",
- "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-commits-filter": "^2.0.7",
"dateformat": "^3.0.0",
@@ -6721,24 +9690,21 @@
},
"node_modules/conventional-changelog-writer/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/conventional-commit-types": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz",
- "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/conventional-commits-filter": {
"version": "2.0.7",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz",
- "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash.ismatch": "^4.4.0",
"modify-values": "^1.0.0"
@@ -6749,9 +9715,8 @@
},
"node_modules/conventional-commits-parser": {
"version": "3.2.4",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
- "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-text-path": "^1.0.1",
"JSONStream": "^1.0.4",
@@ -6769,9 +9734,8 @@
},
"node_modules/conventional-github-releaser": {
"version": "3.1.5",
- "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-3.1.5.tgz",
- "integrity": "sha512-VhPKbdN92b2ygnQLkuwHIfUaPAVrVfJVuQdxbmmVPkN927LDP98HthLWFVShh4pxqLK0nE66v78RERGJVeCzbg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-changelog": "^2.0.0",
"dateformat": "^3.0.0",
@@ -6795,9 +9759,8 @@
},
"node_modules/conventional-github-releaser/node_modules/compare-func": {
"version": "1.3.4",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz",
- "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-ify": "^1.0.0",
"dot-prop": "^3.0.0"
@@ -6805,9 +9768,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz",
- "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-changelog-angular": "^1.6.6",
"conventional-changelog-atom": "^2.0.0",
@@ -6827,9 +9789,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-angular": {
"version": "1.6.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
- "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"compare-func": "^1.3.1",
"q": "^1.5.1"
@@ -6837,9 +9798,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-core": {
"version": "3.2.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz",
- "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"conventional-changelog-writer": "^4.0.6",
"conventional-commits-parser": "^3.0.3",
@@ -6861,9 +9821,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/read-pkg-up": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
@@ -6874,9 +9833,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-core/node_modules/through2": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.4",
"readable-stream": "2 || 3"
@@ -6884,18 +9842,16 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-jquery": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
- "integrity": "sha512-wbz5vVcvu/SPZTDFB21fF/xo5zFq6NQR42jhtUfOrrP1N/ZjNshhGb3expCGqHYdnUHzPevHeUafsVrdxVD5Og==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"q": "^1.4.1"
}
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz",
- "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"compare-func": "^2.0.0",
"conventional-commits-filter": "^2.0.7",
@@ -6917,9 +9873,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/compare-func": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
- "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-ify": "^1.0.0",
"dot-prop": "^5.1.0"
@@ -6927,9 +9882,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/hosted-git-info": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -6939,9 +9893,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/meow": {
"version": "8.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
- "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/minimist": "^1.2.0",
"camelcase-keys": "^6.2.2",
@@ -6964,9 +9917,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^4.0.1",
"is-core-module": "^2.5.0",
@@ -6979,9 +9931,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": {
"version": "7.5.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
- "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -6994,9 +9945,8 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/readable-stream": {
"version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -7008,27 +9958,24 @@
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/through2": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "3"
}
},
"node_modules/conventional-github-releaser/node_modules/conventional-changelog-writer/node_modules/type-fest": {
"version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -7038,9 +9985,8 @@
},
"node_modules/conventional-github-releaser/node_modules/dargs": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
- "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -7050,18 +9996,16 @@
},
"node_modules/conventional-github-releaser/node_modules/debug": {
"version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.1"
}
},
"node_modules/conventional-github-releaser/node_modules/dot-prop": {
"version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
- "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-obj": "^1.0.0"
},
@@ -7071,9 +10015,8 @@
},
"node_modules/conventional-github-releaser/node_modules/find-up": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^2.0.0"
},
@@ -7083,9 +10026,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
- "integrity": "sha512-xPCyvcEOxCJDxhBfXDNH+zA7mIRGb2aY1gIUJWsZkpJbp1BLHl+/Sycg26Dv+ZbZAJkO61tzbBtqHUi30NGBvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"hosted-git-info": "^2.1.4",
"meow": "^3.3.0",
@@ -7099,18 +10041,16 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/camelcase-keys": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^2.0.0",
"map-obj": "^1.0.0"
@@ -7121,9 +10061,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/find-up": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
@@ -7134,9 +10073,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/load-json-file": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
@@ -7150,9 +10088,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/meow": {
"version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase-keys": "^2.0.0",
"decamelize": "^1.1.2",
@@ -7171,9 +10108,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-exists": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie-promise": "^2.0.0"
},
@@ -7183,9 +10119,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/path-type": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
@@ -7197,18 +10132,16 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/pify": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
@@ -7220,9 +10153,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/read-pkg-up": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
@@ -7233,9 +10165,8 @@
},
"node_modules/conventional-github-releaser/node_modules/get-pkg-repo/node_modules/redent": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"indent-string": "^2.1.0",
"strip-indent": "^1.0.1"
@@ -7246,9 +10177,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz",
- "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"dargs": "^4.0.1",
"lodash.template": "^4.0.2",
@@ -7265,18 +10195,16 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/camelcase-keys": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^4.1.0",
"map-obj": "^2.0.0",
@@ -7288,27 +10216,24 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/indent-string": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/map-obj": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/meow": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase-keys": "^4.0.0",
"decamelize-keys": "^1.0.0",
@@ -7326,9 +10251,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/minimist-options": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arrify": "^1.0.1",
"is-plain-obj": "^1.1.0"
@@ -7339,9 +10263,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/read-pkg-up": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
@@ -7352,9 +10275,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/redent": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"indent-string": "^3.0.0",
"strip-indent": "^2.0.0"
@@ -7365,18 +10287,16 @@
},
"node_modules/conventional-github-releaser/node_modules/git-raw-commits/node_modules/strip-indent": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz",
- "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"meow": "^4.0.0",
"semver": "^6.0.0"
@@ -7390,18 +10310,16 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/camelcase-keys": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^4.1.0",
"map-obj": "^2.0.0",
@@ -7413,27 +10331,24 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/indent-string": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/map-obj": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/meow": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase-keys": "^4.0.0",
"decamelize-keys": "^1.0.0",
@@ -7451,9 +10366,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/minimist-options": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arrify": "^1.0.1",
"is-plain-obj": "^1.1.0"
@@ -7464,9 +10378,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/read-pkg-up": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
@@ -7477,9 +10390,8 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/redent": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"indent-string": "^3.0.0",
"strip-indent": "^2.0.0"
@@ -7490,33 +10402,29 @@
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/conventional-github-releaser/node_modules/git-semver-tags/node_modules/strip-indent": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/hosted-git-info": {
"version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/conventional-github-releaser/node_modules/indent-string": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"repeating": "^2.0.0"
},
@@ -7526,18 +10434,16 @@
},
"node_modules/conventional-github-releaser/node_modules/is-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/conventional-github-releaser/node_modules/locate-path": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
@@ -7548,9 +10454,8 @@
},
"node_modules/conventional-github-releaser/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
@@ -7560,18 +10465,16 @@
},
"node_modules/conventional-github-releaser/node_modules/map-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/conventional-github-releaser/node_modules/meow": {
"version": "7.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz",
- "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/minimist": "^1.2.0",
"camelcase-keys": "^6.2.2",
@@ -7594,9 +10497,8 @@
},
"node_modules/conventional-github-releaser/node_modules/meow/node_modules/yargs-parser": {
"version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -7607,9 +10509,8 @@
},
"node_modules/conventional-github-releaser/node_modules/normalize-package-data": {
"version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -7619,9 +10520,8 @@
},
"node_modules/conventional-github-releaser/node_modules/p-limit": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^1.0.0"
},
@@ -7631,9 +10531,8 @@
},
"node_modules/conventional-github-releaser/node_modules/p-locate": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^1.1.0"
},
@@ -7643,18 +10542,16 @@
},
"node_modules/conventional-github-releaser/node_modules/p-try": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/parse-json": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"error-ex": "^1.2.0"
},
@@ -7664,18 +10561,16 @@
},
"node_modules/conventional-github-releaser/node_modules/path-exists": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/path-type": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pify": "^3.0.0"
},
@@ -7685,27 +10580,24 @@
},
"node_modules/conventional-github-releaser/node_modules/pify": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/quick-lru": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/conventional-github-releaser/node_modules/read-pkg": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
@@ -7717,27 +10609,24 @@
},
"node_modules/conventional-github-releaser/node_modules/semver": {
"version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/conventional-github-releaser/node_modules/split2": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"through2": "^2.0.2"
}
},
"node_modules/conventional-github-releaser/node_modules/strip-bom": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-utf8": "^0.2.0"
},
@@ -7747,9 +10636,8 @@
},
"node_modules/conventional-github-releaser/node_modules/strip-indent": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-stdin": "^4.0.1"
},
@@ -7762,9 +10650,8 @@
},
"node_modules/conventional-github-releaser/node_modules/through2": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -7772,9 +10659,8 @@
},
"node_modules/conventional-github-releaser/node_modules/type-fest": {
"version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -7784,15 +10670,13 @@
},
"node_modules/conventional-github-releaser/node_modules/yallist": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/conventional-recommended-bump": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz",
- "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"concat-stream": "^2.0.0",
"conventional-changelog-preset-loader": "^2.3.4",
@@ -7812,12 +10696,11 @@
},
"node_modules/conventional-recommended-bump/node_modules/concat-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
- "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
"dev": true,
"engines": [
"node >= 6.0"
],
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -7827,9 +10710,8 @@
},
"node_modules/conventional-recommended-bump/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -7840,31 +10722,24 @@
}
},
"node_modules/convert-hex": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz",
- "integrity": "sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A=="
+ "version": "0.1.0"
},
"node_modules/convert-source-map": {
"version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/convert-string": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz",
- "integrity": "sha512-1KX9ESmtl8xpT2LN2tFnKSbV4NiarbVi8DVb39ZriijvtTklyrT+4dT1wsGMHKD3CJUjXgvJzstm9qL9ICojGA=="
+ "version": "0.1.0"
},
"node_modules/cookiejar": {
"version": "2.1.4",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
- "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cookies": {
"version": "0.8.0",
- "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz",
- "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==",
+ "license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"keygrip": "~1.1.0"
@@ -7875,20 +10750,17 @@
},
"node_modules/copy-to": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
- "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w=="
+ "license": "MIT"
},
"node_modules/core-util-is": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cosmiconfig": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz",
- "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -7901,9 +10773,8 @@
},
"node_modules/cosmiconfig-typescript-loader": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
- "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12",
"npm": ">=6"
@@ -7917,15 +10788,13 @@
},
"node_modules/create-require": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cross-spawn": {
"version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -7937,22 +10806,26 @@
},
"node_modules/crypt": {
"version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+ "license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
+ "node_modules/crypto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
+ "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
+ "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
+ },
"node_modules/crypto-js": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
- "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/currently-unhandled": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-find-index": "^1.0.1"
},
@@ -7962,9 +10835,8 @@
},
"node_modules/cz-conventional-changelog": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz",
- "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^2.4.1",
"commitizen": "^4.0.3",
@@ -7982,9 +10854,8 @@
},
"node_modules/cz-conventional-changelog/node_modules/ansi-styles": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -7994,9 +10865,8 @@
},
"node_modules/cz-conventional-changelog/node_modules/chalk": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -8008,33 +10878,29 @@
},
"node_modules/cz-conventional-changelog/node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/cz-conventional-changelog/node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cz-conventional-changelog/node_modules/has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/cz-conventional-changelog/node_modules/supports-color": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -8044,26 +10910,23 @@
},
"node_modules/dargs": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/dateformat": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/debug": {
"version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
@@ -8078,18 +10941,16 @@
},
"node_modules/decamelize": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/decamelize-keys": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
- "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"decamelize": "^1.1.0",
"map-obj": "^1.0.0"
@@ -8103,27 +10964,24 @@
},
"node_modules/decamelize-keys/node_modules/map-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/decode-uri-component": {
"version": "0.2.2",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
},
"node_modules/decompress-response": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-response": "^1.0.0"
},
@@ -8133,38 +10991,33 @@
},
"node_modules/dedent": {
"version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/deep-extend": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/deep-is": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/deepmerge": {
"version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/defaults": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
- "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+ "license": "MIT",
"dependencies": {
"clone": "^1.0.2"
},
@@ -8174,17 +11027,15 @@
},
"node_modules/defaults/node_modules/clone": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/define-properties": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
@@ -8198,8 +11049,7 @@
},
"node_modules/delay": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz",
- "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -8209,38 +11059,33 @@
},
"node_modules/delayed-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/delegates": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ "license": "MIT"
},
"node_modules/denque": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
- "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+ "license": "Apache-2.0",
"engines": {
"node": ">=0.10"
}
},
"node_modules/depd": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/dependency-tree": {
"version": "9.0.0",
- "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz",
- "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "^2.20.3",
"debug": "^4.3.1",
@@ -8257,33 +11102,29 @@
},
"node_modules/dependency-tree/node_modules/ast-module-types": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz",
- "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/dependency-tree/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/dependency-tree/node_modules/detective-stylus": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-3.0.0.tgz",
- "integrity": "sha512-1xYTzbrduExqMYmte7Qk99IRA3Aa6oV7PYzd+3yDcQXkmENvyGF/arripri6lxRDdNYEb4fZFuHtNRAXbz3iAA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/dependency-tree/node_modules/module-definition": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.1.0.tgz",
- "integrity": "sha512-rHXi/DpMcD2qcKbPCTklDbX9lBKJrUSl971TW5l6nMpqKCIlzJqmQ8cfEF5M923h2OOLHPDVlh5pJxNyV+AJlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^4.0.0",
"node-source-walk": "^5.0.1"
@@ -8297,9 +11138,8 @@
},
"node_modules/dependency-tree/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8309,9 +11149,8 @@
},
"node_modules/dependency-tree/node_modules/precinct": {
"version": "9.2.1",
- "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.2.1.tgz",
- "integrity": "sha512-uzKHaTyiVejWW7VJtHInb9KBUq9yl9ojxXGujhjhDmPon2wgZPBKQIKR+6csGqSlUeGXAA4MEFnU6DesxZib+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@dependents/detective-less": "^3.0.1",
"commander": "^9.5.0",
@@ -8335,18 +11174,16 @@
},
"node_modules/dependency-tree/node_modules/precinct/node_modules/commander": {
"version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || >=14"
}
},
"node_modules/dependency-tree/node_modules/typescript": {
"version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8357,8 +11194,7 @@
},
"node_modules/destroy": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
@@ -8366,36 +11202,39 @@
},
"node_modules/detect-file": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/detect-indent": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
- "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
"dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.2",
+ "license": "Apache-2.0",
"engines": {
"node": ">=8"
}
},
"node_modules/detect-newline": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/detective-amd": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.1.0.tgz",
- "integrity": "sha512-XlQrGjGEnMFjKbep0/S/T7XICxf25LFMP6Ug+Iw/Ww/MHUBzfy8QETCzamO1JlAMYPmkChDh21/NS/csG0FwGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^4.0.0",
"escodegen": "^2.0.0",
@@ -8411,18 +11250,16 @@
},
"node_modules/detective-amd/node_modules/ast-module-types": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz",
- "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/detective-amd/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8432,9 +11269,8 @@
},
"node_modules/detective-cjs": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz",
- "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^4.0.0",
"node-source-walk": "^5.0.1"
@@ -8445,18 +11281,16 @@
},
"node_modules/detective-cjs/node_modules/ast-module-types": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz",
- "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/detective-cjs/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8466,9 +11300,8 @@
},
"node_modules/detective-es6": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz",
- "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"node-source-walk": "^5.0.0"
},
@@ -8478,9 +11311,8 @@
},
"node_modules/detective-es6/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8490,9 +11322,8 @@
},
"node_modules/detective-less": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz",
- "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^4.0.0",
"gonzales-pe": "^4.2.3",
@@ -8504,9 +11335,8 @@
},
"node_modules/detective-postcss": {
"version": "6.1.1",
- "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.1.tgz",
- "integrity": "sha512-mX62A6chiafyFW9AwGF6B/uVU+F3hGMZwXDqCHe+NjmU/M5jlDBazdXb1sMoDE+InTDsoPaX3bUUOH33Yxn5Sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-url": "^1.2.4",
"postcss": "^8.4.21",
@@ -8518,9 +11348,8 @@
},
"node_modules/detective-sass": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.1.1.tgz",
- "integrity": "sha512-KSUoOdrLXxSZFnHpGyXufWUP6VkfSdSNC/uezbJkKIwy2i3px5NQPY5hWOR0k9OFlrBakucymD3Ap4d87zobUQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gonzales-pe": "^4.3.0",
"node-source-walk": "^5.0.0"
@@ -8531,9 +11360,8 @@
},
"node_modules/detective-sass/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8543,9 +11371,8 @@
},
"node_modules/detective-scss": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.0.1.tgz",
- "integrity": "sha512-Bv/t1dEKHCPJ9+byha7wKg4zda8IFk7KZpEX+ZJs2k1HsWIE3+FBeVFLtD3y9GYGfi8l7Sim3pULPz4+yLwW9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gonzales-pe": "^4.3.0",
"node-source-walk": "^5.0.0"
@@ -8556,9 +11383,8 @@
},
"node_modules/detective-scss/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8568,18 +11394,16 @@
},
"node_modules/detective-stylus": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz",
- "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0"
}
},
"node_modules/detective-typescript": {
"version": "9.1.1",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.1.1.tgz",
- "integrity": "sha512-Uc1yVutTF0RRm1YJ3g//i1Cn2vx1kwHj15cnzQP6ff5koNzQ0idc1zAC73ryaWEulA0ElRXFTq6wOqe8vUQ3MA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "^5.55.0",
"ast-module-types": "^4.0.0",
@@ -8592,18 +11416,16 @@
},
"node_modules/detective-typescript/node_modules/ast-module-types": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz",
- "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/detective-typescript/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -8613,9 +11435,8 @@
},
"node_modules/detective-typescript/node_modules/typescript": {
"version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8626,9 +11447,8 @@
},
"node_modules/dezalgo": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
- "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"asap": "^2.0.0",
"wrappy": "1"
@@ -8636,27 +11456,24 @@
},
"node_modules/diff": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/diff-sequences": {
"version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/dir-glob": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -8666,9 +11483,8 @@
},
"node_modules/doctrine": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
},
@@ -8678,17 +11494,15 @@
},
"node_modules/dotenv": {
"version": "16.0.3",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
- "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
}
},
"node_modules/dotgitignore": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz",
- "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"find-up": "^3.0.0",
"minimatch": "^3.0.4"
@@ -8699,9 +11513,8 @@
},
"node_modules/dotgitignore/node_modules/find-up": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^3.0.0"
},
@@ -8711,9 +11524,8 @@
},
"node_modules/dotgitignore/node_modules/locate-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
@@ -8724,9 +11536,8 @@
},
"node_modules/dotgitignore/node_modules/p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -8739,9 +11550,8 @@
},
"node_modules/dotgitignore/node_modules/p-locate": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.0.0"
},
@@ -8751,17 +11561,14 @@
},
"node_modules/dotgitignore/node_modules/path-exists": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/dreamopt": {
"version": "0.8.0",
- "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz",
- "integrity": "sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==",
"dependencies": {
"wordwrap": ">=0.0.2"
},
@@ -8771,32 +11578,27 @@
},
"node_modules/duplexer3": {
"version": "0.1.5",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
- "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
- "dev": true
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ee-first": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ "license": "MIT"
},
"node_modules/electron-to-chromium": {
"version": "1.4.450",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz",
- "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/emittery": {
"version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -8806,44 +11608,38 @@
},
"node_modules/emoji-regex": {
"version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/empty-dir": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-1.0.0.tgz",
- "integrity": "sha512-97qcDM6mUA1jAeX6cktw7akc5awIGA+VIkA5MygKOKA+c2Vseo/xwKN0JNJTUhZUtPwZboKVD2p1xu+sV/F4xA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/enabled": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
+ "license": "MIT"
},
"node_modules/encodeurl": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/end-of-stream": {
"version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/enhanced-resolve": {
"version": "5.12.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
- "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -8854,9 +11650,8 @@
},
"node_modules/entities": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz",
- "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
@@ -8866,25 +11661,22 @@
},
"node_modules/error-ex": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/error-stack-parser": {
"version": "2.1.4",
- "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
- "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
+ "license": "MIT",
"dependencies": {
"stackframe": "^1.3.4"
}
},
"node_modules/es-abstract": {
"version": "1.21.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz",
- "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"es-set-tostringtag": "^2.0.0",
@@ -8928,9 +11720,8 @@
},
"node_modules/es-set-tostringtag": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3",
"has": "^1.0.3",
@@ -8942,18 +11733,16 @@
},
"node_modules/es-shim-unscopables": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has": "^1.0.3"
}
},
"node_modules/es-to-primitive": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -8968,36 +11757,31 @@
},
"node_modules/es6-promise": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
- "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="
+ "license": "MIT"
},
"node_modules/escalade": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ "license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/escodegen": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
@@ -9017,9 +11801,8 @@
},
"node_modules/escodegen/node_modules/levn": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
@@ -9030,9 +11813,8 @@
},
"node_modules/escodegen/node_modules/optionator": {
"version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
@@ -9047,8 +11829,6 @@
},
"node_modules/escodegen/node_modules/prelude-ls": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -9056,9 +11836,8 @@
},
"node_modules/escodegen/node_modules/type-check": {
"version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2"
},
@@ -9068,9 +11847,8 @@
},
"node_modules/eslint": {
"version": "8.41.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz",
- "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0",
@@ -9124,9 +11902,8 @@
},
"node_modules/eslint-config-airbnb-base": {
"version": "15.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
- "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"confusing-browser-globals": "^1.0.10",
"object.assign": "^4.1.2",
@@ -9143,18 +11920,16 @@
},
"node_modules/eslint-config-airbnb-base/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/eslint-config-airbnb-typescript": {
"version": "17.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz",
- "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eslint-config-airbnb-base": "^15.0.0"
},
@@ -9167,9 +11942,8 @@
},
"node_modules/eslint-config-prettier": {
"version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
"dev": true,
+ "license": "MIT",
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -9179,9 +11953,8 @@
},
"node_modules/eslint-import-resolver-node": {
"version": "0.3.7",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
- "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^3.2.7",
"is-core-module": "^2.11.0",
@@ -9190,18 +11963,16 @@
},
"node_modules/eslint-import-resolver-node/node_modules/debug": {
"version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.1"
}
},
"node_modules/eslint-module-utils": {
"version": "2.7.4",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
- "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^3.2.7"
},
@@ -9216,18 +11987,16 @@
},
"node_modules/eslint-module-utils/node_modules/debug": {
"version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.1"
}
},
"node_modules/eslint-plugin-import": {
"version": "2.27.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
- "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-includes": "^3.1.6",
"array.prototype.flat": "^1.3.1",
@@ -9254,18 +12023,16 @@
},
"node_modules/eslint-plugin-import/node_modules/debug": {
"version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.1"
}
},
"node_modules/eslint-plugin-import/node_modules/doctrine": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
},
@@ -9275,18 +12042,16 @@
},
"node_modules/eslint-plugin-import/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/eslint-plugin-json": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz",
- "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash": "^4.17.21",
"vscode-json-languageservice": "^4.1.6"
@@ -9297,9 +12062,8 @@
},
"node_modules/eslint-plugin-sonarjs": {
"version": "0.19.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz",
- "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==",
"dev": true,
+ "license": "LGPL-3.0",
"engines": {
"node": ">=14"
},
@@ -9309,9 +12073,8 @@
},
"node_modules/eslint-plugin-unicorn": {
"version": "46.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.1.tgz",
- "integrity": "sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.19.1",
"@eslint-community/eslint-utils": "^4.1.2",
@@ -9342,9 +12105,8 @@
},
"node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -9354,9 +12116,8 @@
},
"node_modules/eslint-scope": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -9370,9 +12131,8 @@
},
"node_modules/eslint-visitor-keys": {
"version": "3.4.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
- "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -9382,9 +12142,8 @@
},
"node_modules/eslint/node_modules/ajv": {
"version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -9398,9 +12157,8 @@
},
"node_modules/eslint/node_modules/escape-string-regexp": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -9410,15 +12168,13 @@
},
"node_modules/eslint/node_modules/json-schema-traverse": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/espree": {
"version": "9.5.2",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
- "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
@@ -9433,9 +12189,8 @@
},
"node_modules/esprima": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
+ "license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -9446,9 +12201,8 @@
},
"node_modules/esquery": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -9458,9 +12212,8 @@
},
"node_modules/esrecurse": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -9470,41 +12223,36 @@
},
"node_modules/estraverse": {
"version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/esutils": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/eventemitter3": {
"version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/events": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/execa": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
@@ -9525,8 +12273,6 @@
},
"node_modules/exit": {
"version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
@@ -9534,9 +12280,8 @@
},
"node_modules/expand-tilde": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -9546,9 +12291,8 @@
},
"node_modules/expect": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz",
- "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/expect-utils": "^29.6.0",
"@types/node": "*",
@@ -9563,18 +12307,16 @@
},
"node_modules/expose-gc": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/expose-gc/-/expose-gc-1.0.0.tgz",
- "integrity": "sha512-ecOHrdm+zyOCGIwX18/1RHkUWgxDqGGRiGhaNC+42jReTtudbm2ID/DMa/wpaHwqy5YQHPZvsDqRM2F2iZ0uVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/external-editor": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
- "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
@@ -9586,14 +12328,12 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -9607,9 +12347,8 @@
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -9619,15 +12358,13 @@
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-json-stringify": {
"version": "2.7.13",
- "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz",
- "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.11.0",
"deepmerge": "^4.2.2",
@@ -9640,9 +12377,8 @@
},
"node_modules/fast-json-stringify/node_modules/ajv": {
"version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -9656,21 +12392,18 @@
},
"node_modules/fast-json-stringify/node_modules/json-schema-traverse": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-printf": {
"version": "1.6.9",
- "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz",
- "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"boolean": "^3.1.4"
},
@@ -9680,14 +12413,11 @@
},
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-xml-parser": {
"version": "4.2.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
- "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
"funding": [
{
"type": "paypal",
@@ -9698,6 +12428,7 @@
"url": "https://github.com/sponsors/NaturalIntelligence"
}
],
+ "license": "MIT",
"dependencies": {
"strnum": "^1.0.5"
},
@@ -9707,32 +12438,28 @@
},
"node_modules/fastq": {
"version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
"node_modules/fb-watchman": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"bser": "2.1.1"
}
},
"node_modules/fecha": {
"version": "4.2.3",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
- "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
+ "license": "MIT"
},
"node_modules/figures": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
@@ -9745,9 +12472,8 @@
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flat-cache": "^3.0.4"
},
@@ -9755,11 +12481,14 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/file-uri-to-path": {
+ "version": "1.0.0",
+ "license": "MIT"
+ },
"node_modules/filing-cabinet": {
"version": "3.3.1",
- "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz",
- "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"app-module-path": "^2.2.0",
"commander": "^2.20.3",
@@ -9784,15 +12513,13 @@
},
"node_modules/filing-cabinet/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/filing-cabinet/node_modules/typescript": {
"version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -9803,9 +12530,8 @@
},
"node_modules/fill-range": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -9815,9 +12541,8 @@
},
"node_modules/find-node-modules": {
"version": "2.1.3",
- "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz",
- "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"findup-sync": "^4.0.0",
"merge": "^2.1.1"
@@ -9825,15 +12550,13 @@
},
"node_modules/find-root": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/find-up": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -9845,11 +12568,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/findit2": {
+ "version": "2.2.3",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.22"
+ }
+ },
"node_modules/findup-sync": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
- "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
@@ -9862,17 +12591,15 @@
},
"node_modules/flat": {
"version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"node_modules/flat-cache": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
@@ -9883,32 +12610,27 @@
},
"node_modules/flatted": {
"version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/flatten": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
- "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==",
- "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fn.name": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
+ "license": "MIT"
},
"node_modules/follow-redirects": {
"version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
+ "license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -9920,18 +12642,16 @@
},
"node_modules/for-each": {
"version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-callable": "^1.1.3"
}
},
"node_modules/foreground-child": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -9945,9 +12665,8 @@
},
"node_modules/foreground-child/node_modules/signal-exit": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -9957,8 +12676,7 @@
},
"node_modules/form-data": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -9970,9 +12688,8 @@
},
"node_modules/formidable": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
- "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
@@ -9985,17 +12702,15 @@
},
"node_modules/fresh": {
"version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/from2": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"readable-stream": "^2.0.0"
@@ -10003,9 +12718,8 @@
},
"node_modules/fs-extra": {
"version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
@@ -10016,17 +12730,38 @@
"node": ">=10"
}
},
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ "license": "ISC"
},
"node_modules/fsevents": {
"version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
- "hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -10037,14 +12772,12 @@
},
"node_modules/function-bind": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "license": "MIT"
},
"node_modules/function.prototype.name": {
"version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
@@ -10060,27 +12793,42 @@
},
"node_modules/functions-have-names": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-amd-module-type": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.1.0.tgz",
- "integrity": "sha512-0e/eK6vTGCnSfQ6eYs3wtH05KotJYIP7ZIZEueP/KlA+0dIAEs8bYFvOd/U56w1vfjhJqBagUxVMyy9Tr/cViQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^4.0.0",
"node-source-walk": "^5.0.1"
@@ -10091,18 +12839,16 @@
},
"node_modules/get-amd-module-type/node_modules/ast-module-types": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz",
- "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.0"
}
},
"node_modules/get-amd-module-type/node_modules/node-source-walk": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.1.tgz",
- "integrity": "sha512-fe5rFjPqkWQb4CLfsOf10fZAJvImfLpcVx+Nqbozaj6PBoAEjyEK1HZGCGvQNyre2HdL1HnZG6mxBf2UHSzr/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -10112,17 +12858,15 @@
},
"node_modules/get-caller-file": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
- "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -10134,24 +12878,21 @@
},
"node_modules/get-own-enumerable-property-symbols": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/get-package-type": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/get-pkg-repo": {
"version": "4.2.1",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz",
- "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@hutson/parse-repository-url": "^3.0.0",
"hosted-git-info": "^4.0.0",
@@ -10167,9 +12908,8 @@
},
"node_modules/get-pkg-repo/node_modules/cliui": {
"version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -10178,9 +12918,8 @@
},
"node_modules/get-pkg-repo/node_modules/through2": {
"version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -10188,9 +12927,8 @@
},
"node_modules/get-pkg-repo/node_modules/yargs": {
"version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -10206,18 +12944,16 @@
},
"node_modules/get-stdin": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/get-stream": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -10227,9 +12963,8 @@
},
"node_modules/get-symbol-description": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
@@ -10243,8 +12978,7 @@
},
"node_modules/get-value": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz",
- "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==",
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -10254,9 +12988,8 @@
},
"node_modules/gh-got": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-7.1.0.tgz",
- "integrity": "sha512-KeWkkhresa7sbpzQLYzITMgez5rMigUsijhmSAHcLDORIMUbdlkdoZyaN1wQvIjmUZnyb/wkAPaXb4MQKX0mdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"got": "^8.0.0",
"is-plain-obj": "^1.1.0"
@@ -10267,9 +13000,8 @@
},
"node_modules/git-raw-commits": {
"version": "2.0.11",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
- "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"dargs": "^7.0.0",
"lodash": "^4.17.15",
@@ -10286,9 +13018,8 @@
},
"node_modules/git-remote-origin-url": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
- "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gitconfiglocal": "^1.0.0",
"pify": "^2.3.0"
@@ -10299,18 +13030,16 @@
},
"node_modules/git-remote-origin-url/node_modules/pify": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/git-semver-tags": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
- "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"meow": "^8.0.0",
"semver": "^6.0.0"
@@ -10324,27 +13053,24 @@
},
"node_modules/git-semver-tags/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/gitconfiglocal": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
- "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==",
"dev": true,
+ "license": "BSD",
"dependencies": {
"ini": "^1.3.2"
}
},
"node_modules/glob": {
"version": "10.3.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz",
- "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.0.3",
@@ -10364,9 +13090,8 @@
},
"node_modules/glob-parent": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -10376,18 +13101,16 @@
},
"node_modules/glob/node_modules/brace-expansion": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/glob/node_modules/minimatch": {
"version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -10400,9 +13123,8 @@
},
"node_modules/global-dirs": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ini": "^1.3.4"
},
@@ -10412,9 +13134,8 @@
},
"node_modules/global-modules": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
@@ -10426,9 +13147,8 @@
},
"node_modules/global-prefix": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
@@ -10442,9 +13162,8 @@
},
"node_modules/global-prefix/node_modules/which": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -10454,9 +13173,8 @@
},
"node_modules/globals": {
"version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -10469,9 +13187,8 @@
},
"node_modules/globals/node_modules/type-fest": {
"version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -10481,9 +13198,8 @@
},
"node_modules/globalthis": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-properties": "^1.1.3"
},
@@ -10496,9 +13212,8 @@
},
"node_modules/globby": {
"version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -10516,9 +13231,8 @@
},
"node_modules/gonzales-pe": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
- "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"minimist": "^1.2.5"
},
@@ -10531,9 +13245,8 @@
},
"node_modules/gopd": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -10543,9 +13256,8 @@
},
"node_modules/got": {
"version": "8.3.2",
- "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
- "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
@@ -10571,47 +13283,42 @@
},
"node_modules/got/node_modules/get-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/got/node_modules/pify": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/graceful-fs": {
"version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/graphemer": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/growly": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"dependencies": {
"minimist": "^1.2.5",
- "neo-async": "^2.6.0",
+ "neo-async": "^2.6.2",
"source-map": "^0.6.1",
"wordwrap": "^1.0.0"
},
@@ -10627,17 +13334,15 @@
},
"node_modules/hard-rejection": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/has": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.1"
},
@@ -10647,27 +13352,24 @@
},
"node_modules/has-bigints": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.1"
},
@@ -10677,9 +13379,8 @@
},
"node_modules/has-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -10689,17 +13390,15 @@
},
"node_modules/has-symbol-support-x": {
"version": "1.4.2",
- "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -10709,9 +13408,8 @@
},
"node_modules/has-to-string-tag-x": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
- "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-symbol-support-x": "^1.4.1"
},
@@ -10721,8 +13419,7 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -10733,10 +13430,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "license": "ISC"
+ },
"node_modules/has-value": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz",
- "integrity": "sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==",
+ "license": "MIT",
"dependencies": {
"get-value": "^3.0.0",
"has-values": "^2.0.1"
@@ -10747,8 +13447,7 @@
},
"node_modules/has-values": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-2.0.1.tgz",
- "integrity": "sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==",
+ "license": "MIT",
"dependencies": {
"kind-of": "^6.0.2"
},
@@ -10758,23 +13457,20 @@
},
"node_modules/heap": {
"version": "0.2.7",
- "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz",
- "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg=="
+ "license": "MIT"
},
"node_modules/hexoid": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/homedir-polyfill": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parse-passwd": "^1.0.0"
},
@@ -10784,9 +13480,8 @@
},
"node_modules/hosted-git-info": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -10796,9 +13491,8 @@
},
"node_modules/hosted-git-info/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
@@ -10808,20 +13502,17 @@
},
"node_modules/hosted-git-info/node_modules/yallist": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/html-escaper": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/http-assert": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
- "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
+ "license": "MIT",
"dependencies": {
"deep-equal": "~1.0.1",
"http-errors": "~1.8.0"
@@ -10832,19 +13523,16 @@
},
"node_modules/http-assert/node_modules/deep-equal": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
+ "license": "MIT"
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
+ "dev": true,
+ "license": "BSD-2-Clause"
},
"node_modules/http-errors": {
"version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "license": "MIT",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.4",
@@ -10858,16 +13546,14 @@
},
"node_modules/http-errors/node_modules/depd": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/http-graceful-shutdown": {
"version": "3.1.13",
- "resolved": "https://registry.npmjs.org/http-graceful-shutdown/-/http-graceful-shutdown-3.1.13.tgz",
- "integrity": "sha512-Ci5LRufQ8AtrQ1U26AevS8QoMXDOhnAHCJI3eZu1com7mZGHxREmw3dNj85ftpQokQCvak8nI2pnFS8zyM1M+Q==",
+ "license": "MIT",
"dependencies": {
"debug": "^4.3.4"
},
@@ -10877,9 +13563,8 @@
},
"node_modules/http-terminator": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz",
- "integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"delay": "^5.0.0",
"p-wait-for": "^3.2.0",
@@ -10892,9 +13577,8 @@
},
"node_modules/http-terminator/node_modules/type-fest": {
"version": "2.19.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
- "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=12.20"
},
@@ -10904,8 +13588,7 @@
},
"node_modules/https-proxy-agent": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
"dependencies": {
"agent-base": "6",
"debug": "4"
@@ -10916,27 +13599,24 @@
},
"node_modules/human-format": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/human-format/-/human-format-1.0.0.tgz",
- "integrity": "sha512-ZfSxF/LHVDb5Un52AguYkZArbiuMbJQwpOpZ0MBuj3pYDmLt7pkCEws9L8xKbgnaKrfMgGd6qc+PHBbKO97AaA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=4"
}
},
"node_modules/human-signals": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=10.17.0"
}
},
"node_modules/husky": {
"version": "8.0.3",
- "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
- "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
"dev": true,
+ "license": "MIT",
"bin": {
"husky": "lib/bin.js"
},
@@ -10949,8 +13629,7 @@
},
"node_modules/iconv-lite": {
"version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -10960,8 +13639,6 @@
},
"node_modules/ieee754": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"funding": [
{
"type": "github",
@@ -10975,22 +13652,21 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "BSD-3-Clause"
},
"node_modules/ignore": {
"version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -11004,18 +13680,16 @@
},
"node_modules/import-fresh/node_modules/resolve-from": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/import-local": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -11032,40 +13706,35 @@
},
"node_modules/imurmurhash": {
"version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/indent-string": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/indexes-of": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/inflation": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
- "integrity": "sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/inflight": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -11073,20 +13742,17 @@
},
"node_modules/inherits": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "license": "ISC"
},
"node_modules/ini": {
"version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/inquirer": {
"version": "8.2.4",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz",
- "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.1",
@@ -11110,9 +13776,8 @@
},
"node_modules/internal-slot": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
- "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.3",
"has": "^1.0.3",
@@ -11124,9 +13789,8 @@
},
"node_modules/into-stream": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
- "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"from2": "^2.1.1",
"p-is-promise": "^1.1.0"
@@ -11137,8 +13801,7 @@
},
"node_modules/ioredis": {
"version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz",
- "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==",
+ "license": "MIT",
"dependencies": {
"@ioredis/commands": "^1.1.1",
"cluster-key-slot": "^1.1.0",
@@ -11160,25 +13823,22 @@
},
"node_modules/ip-regex": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz",
- "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==",
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/is-array-buffer": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
- "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
@@ -11190,14 +13850,12 @@
},
"node_modules/is-arrayish": {
"version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ "license": "MIT"
},
"node_modules/is-bigint": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-bigints": "^1.0.1"
},
@@ -11207,9 +13865,8 @@
},
"node_modules/is-boolean-object": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -11223,14 +13880,12 @@
},
"node_modules/is-buffer": {
"version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ "license": "MIT"
},
"node_modules/is-builtin-module": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"builtin-modules": "^3.3.0"
},
@@ -11243,9 +13898,8 @@
},
"node_modules/is-callable": {
"version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -11255,8 +13909,7 @@
},
"node_modules/is-core-module": {
"version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "license": "MIT",
"dependencies": {
"has": "^1.0.3"
},
@@ -11266,9 +13919,8 @@
},
"node_modules/is-date-object": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -11281,9 +13933,8 @@
},
"node_modules/is-docker": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
+ "license": "MIT",
"bin": {
"is-docker": "cli.js"
},
@@ -11296,18 +13947,16 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-finite": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
},
@@ -11317,9 +13966,8 @@
},
"node_modules/is-fullwidth-code-point": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
- "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -11329,17 +13977,15 @@
},
"node_modules/is-generator-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/is-generator-function": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
- "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -11352,9 +13998,8 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -11364,17 +14009,15 @@
},
"node_modules/is-interactive": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-ip": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
- "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==",
+ "license": "MIT",
"dependencies": {
"ip-regex": "^4.0.0"
},
@@ -11384,9 +14027,8 @@
},
"node_modules/is-negative-zero": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -11396,18 +14038,16 @@
},
"node_modules/is-number": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-number-object": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -11420,35 +14060,31 @@
},
"node_modules/is-object": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
- "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-path-inside": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-plain-obj": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-plain-object": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -11458,17 +14094,15 @@
},
"node_modules/is-primitive": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz",
- "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-regex": {
"version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -11482,33 +14116,29 @@
},
"node_modules/is-regexp": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-relative-path": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz",
- "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-retry-allowed": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -11518,8 +14148,7 @@
},
"node_modules/is-stream": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -11529,9 +14158,8 @@
},
"node_modules/is-string": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -11544,9 +14172,8 @@
},
"node_modules/is-symbol": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -11559,9 +14186,8 @@
},
"node_modules/is-text-path": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"text-extensions": "^1.0.0"
},
@@ -11571,9 +14197,8 @@
},
"node_modules/is-typed-array": {
"version": "1.1.10",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
- "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -11590,9 +14215,8 @@
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -11602,15 +14226,13 @@
},
"node_modules/is-url": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-url-superb": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz",
- "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -11620,15 +14242,13 @@
},
"node_modules/is-utf8": {
"version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-weakref": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -11638,18 +14258,16 @@
},
"node_modules/is-windows": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-wsl": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
},
@@ -11659,52 +14277,45 @@
},
"node_modules/isarray": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/iserror": {
"version": "0.0.2",
- "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz",
- "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw=="
+ "license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/isolated-vm": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.5.0.tgz",
- "integrity": "sha512-Kse0m5t+B9wZQVeTDqzPoX1SIFNTNfyaUxhnCuFgpXL1+5GYJ9GUAN3mpD+ainixGmUXgeYaVBX+QPDjEBBu0w==",
"hasInstallScript": true,
+ "license": "ISC",
"engines": {
"node": ">=10.4.0"
}
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument": {
"version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -11718,18 +14329,16 @@
},
"node_modules/istanbul-lib-instrument/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/istanbul-lib-report": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
@@ -11741,9 +14350,8 @@
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -11755,9 +14363,8 @@
},
"node_modules/istanbul-reports": {
"version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -11768,9 +14375,8 @@
},
"node_modules/isurl": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
- "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-to-string-tag-x": "^1.2.0",
"is-object": "^1.0.1"
@@ -11781,9 +14387,8 @@
},
"node_modules/jackspeak": {
"version": "2.2.2",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz",
- "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==",
"dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -11799,9 +14404,8 @@
},
"node_modules/jest": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz",
- "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/core": "^29.6.0",
"@jest/types": "^29.6.0",
@@ -11825,9 +14429,8 @@
},
"node_modules/jest-changed-files": {
"version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"execa": "^5.0.0",
"p-limit": "^3.1.0"
@@ -11838,9 +14441,8 @@
},
"node_modules/jest-circus": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz",
- "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/environment": "^29.6.0",
"@jest/expect": "^29.6.0",
@@ -11869,9 +14471,8 @@
},
"node_modules/jest-cli": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz",
- "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/core": "^29.6.0",
"@jest/test-result": "^29.6.0",
@@ -11903,9 +14504,8 @@
},
"node_modules/jest-config": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz",
- "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.6.0",
@@ -11948,9 +14548,8 @@
},
"node_modules/jest-config/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -11968,9 +14567,8 @@
},
"node_modules/jest-diff": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz",
- "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.4.3",
@@ -11983,9 +14581,8 @@
},
"node_modules/jest-docblock": {
"version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-newline": "^3.0.0"
},
@@ -11995,9 +14592,8 @@
},
"node_modules/jest-each": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz",
- "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"chalk": "^4.0.0",
@@ -12011,9 +14607,8 @@
},
"node_modules/jest-environment-node": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz",
- "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/environment": "^29.6.0",
"@jest/fake-timers": "^29.6.0",
@@ -12028,18 +14623,16 @@
},
"node_modules/jest-get-type": {
"version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz",
- "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"@types/graceful-fs": "^4.1.3",
@@ -12062,9 +14655,8 @@
},
"node_modules/jest-leak-detector": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz",
- "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"jest-get-type": "^29.4.3",
"pretty-format": "^29.6.0"
@@ -12075,9 +14667,8 @@
},
"node_modules/jest-matcher-utils": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz",
- "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^29.6.0",
@@ -12090,9 +14681,8 @@
},
"node_modules/jest-message-util": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz",
- "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.0",
@@ -12110,9 +14700,8 @@
},
"node_modules/jest-mock": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz",
- "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"@types/node": "*",
@@ -12124,9 +14713,8 @@
},
"node_modules/jest-pnp-resolver": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -12141,18 +14729,16 @@
},
"node_modules/jest-regex-util": {
"version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz",
- "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
@@ -12170,9 +14756,8 @@
},
"node_modules/jest-resolve-dependencies": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz",
- "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"jest-regex-util": "^29.4.3",
"jest-snapshot": "^29.6.0"
@@ -12183,9 +14768,8 @@
},
"node_modules/jest-runner": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz",
- "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/console": "^29.6.0",
"@jest/environment": "^29.6.0",
@@ -12215,9 +14799,8 @@
},
"node_modules/jest-runtime": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz",
- "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/environment": "^29.6.0",
"@jest/fake-timers": "^29.6.0",
@@ -12248,9 +14831,8 @@
},
"node_modules/jest-runtime/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -12268,9 +14850,8 @@
},
"node_modules/jest-snapshot": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz",
- "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -12300,9 +14881,8 @@
},
"node_modules/jest-sonar": {
"version": "0.2.16",
- "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz",
- "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"entities": "4.3.0",
"strip-ansi": "6.0.1"
@@ -12310,9 +14890,8 @@
},
"node_modules/jest-util": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz",
- "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"@types/node": "*",
@@ -12327,9 +14906,8 @@
},
"node_modules/jest-validate": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz",
- "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.0",
"camelcase": "^6.2.0",
@@ -12344,9 +14922,8 @@
},
"node_modules/jest-validate/node_modules/camelcase": {
"version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -12356,9 +14933,8 @@
},
"node_modules/jest-watcher": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz",
- "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/test-result": "^29.6.0",
"@jest/types": "^29.6.0",
@@ -12375,18 +14951,16 @@
},
"node_modules/jest-when": {
"version": "3.5.2",
- "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.5.2.tgz",
- "integrity": "sha512-4rDvnhaWh08RcPsoEVXgxRnUIE9wVIbZtGqZ5x2Wm9Ziz9aQs89PipQFmOK0ycbEhVAgiV3MUeTXp3Ar4s2FcQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"jest": ">= 25"
}
},
"node_modules/jest-worker": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz",
- "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*",
"jest-util": "^29.6.0",
@@ -12399,9 +14973,8 @@
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -12414,8 +14987,7 @@
},
"node_modules/joi": {
"version": "17.9.2",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz",
- "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==",
+ "license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "^9.0.0",
"@hapi/topo": "^5.0.0",
@@ -12426,8 +14998,7 @@
},
"node_modules/js-sha1": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz",
- "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w=="
+ "license": "MIT"
},
"node_modules/js-tokens": {
"version": "4.0.0",
@@ -12436,8 +15007,7 @@
},
"node_modules/js-yaml": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -12447,9 +15017,8 @@
},
"node_modules/jsesc": {
"version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -12459,14 +15028,12 @@
},
"node_modules/json-buffer": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-diff": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-1.0.3.tgz",
- "integrity": "sha512-W0yk/xzjz7bag9v9eS4qthvPG4O07uxNeXwirhvcOqmX4w8HLtB/Pw76o5Z7Pblwvf4vpCi4+iHOlHDnmav/rA==",
+ "license": "MIT",
"dependencies": {
"@ewoudenberg/difflib": "0.1.0",
"colors": "^1.4.0",
@@ -12481,45 +15048,38 @@
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ "license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ "license": "MIT"
},
"node_modules/json-size": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-size/-/json-size-1.0.0.tgz",
- "integrity": "sha512-sh8Ff4sNVI3FU1LjFXiNpcG9Er9bsn8WbeR79mGj4Ljd+/NBmxqYCV1sPzndUTGsWXa3LVUx3aLlZxpq1DzCBA==",
+ "license": "MIT",
"dependencies": {
"utf8-length": "0.0.1"
}
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/json5": {
"version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
+ "license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
@@ -12529,23 +15089,20 @@
},
"node_modules/jsonata": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.3.tgz",
- "integrity": "sha512-Up2H81MUtjqI/dWwWX7p4+bUMfMrQJVMN/jW6clFMTiYP528fBOBNtRu944QhKTs3+IsVWbgMeUTny5fw2VMUA==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/jsonc-parser": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
- "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/jsonfile": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
@@ -12555,18 +15112,16 @@
},
"node_modules/jsonparse": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
"dev": true,
"engines": [
"node >= 0.2.0"
- ]
+ ],
+ "license": "MIT"
},
"node_modules/JSONStream": {
"version": "1.3.5",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
- "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
"dev": true,
+ "license": "(MIT OR Apache-2.0)",
"dependencies": {
"jsonparse": "^1.2.0",
"through": ">=2.2.7 <3"
@@ -12580,16 +15135,14 @@
},
"node_modules/jsontoxml": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz",
- "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.2.0"
}
},
"node_modules/keygrip": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
- "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
+ "license": "MIT",
"dependencies": {
"tsscmp": "1.0.6"
},
@@ -12599,34 +15152,30 @@
},
"node_modules/keyv": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
- "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.0"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/kleur": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/koa": {
"version": "2.14.1",
- "resolved": "https://registry.npmjs.org/koa/-/koa-2.14.1.tgz",
- "integrity": "sha512-USJFyZgi2l0wDgqkfD27gL4YGno7TfUkcmOe6UOLFOVuN+J7FwnNu4Dydl4CUQzraM1lBAiGed0M9OVJoT0Kqw==",
+ "license": "MIT",
"dependencies": {
"accepts": "^1.3.5",
"cache-content-type": "^1.0.0",
@@ -12658,8 +15207,7 @@
},
"node_modules/koa-bodyparser": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.0.tgz",
- "integrity": "sha512-AXPY7wwKZUmbgb8VkTEUFoRNOlx6aWRJwEnQD+zfNf33/7KSAkN4Oo9BqlIk80D+5TvuqlhpQT5dPVcyxl5Zsw==",
+ "license": "MIT",
"dependencies": {
"co-body": "^6.0.0",
"copy-to": "^2.0.1"
@@ -12670,13 +15218,11 @@
},
"node_modules/koa-compose": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
- "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw=="
+ "license": "MIT"
},
"node_modules/koa-convert": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
- "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
+ "license": "MIT",
"dependencies": {
"co": "^4.6.0",
"koa-compose": "^4.1.0"
@@ -12687,8 +15233,7 @@
},
"node_modules/koa2-swagger-ui": {
"version": "5.8.0",
- "resolved": "https://registry.npmjs.org/koa2-swagger-ui/-/koa2-swagger-ui-5.8.0.tgz",
- "integrity": "sha512-uVHh2hajX5Q/6+BkRrK0Rrf84Duc6dB73WIU1mb3cLfellMR1klAIYEX1p1bOsNjB97uqCwyn/cz3Sfi1/IxcQ==",
+ "license": "MIT",
"dependencies": {
"@types/koa": "^2.13.6",
"handlebars": "^4.7.7",
@@ -12698,32 +15243,28 @@
},
"node_modules/kuler": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
+ "license": "MIT"
},
"node_modules/lazy-ass": {
"version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
- "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "> 0.8"
}
},
"node_modules/leven": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/levn": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -12734,23 +15275,20 @@
},
"node_modules/lilconfig": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ "license": "MIT"
},
"node_modules/lint-staged": {
"version": "13.2.2",
- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.2.tgz",
- "integrity": "sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "5.2.0",
"cli-truncate": "^3.1.0",
@@ -12778,9 +15316,8 @@
},
"node_modules/lint-staged/node_modules/chalk": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
- "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
@@ -12790,9 +15327,8 @@
},
"node_modules/lint-staged/node_modules/execa": {
"version": "7.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz",
- "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.1",
@@ -12813,18 +15349,16 @@
},
"node_modules/lint-staged/node_modules/human-signals": {
"version": "4.3.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz",
- "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=14.18.0"
}
},
"node_modules/lint-staged/node_modules/is-stream": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -12834,9 +15368,8 @@
},
"node_modules/lint-staged/node_modules/mimic-fn": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -12846,9 +15379,8 @@
},
"node_modules/lint-staged/node_modules/npm-run-path": {
"version": "5.1.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
- "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^4.0.0"
},
@@ -12861,18 +15393,16 @@
},
"node_modules/lint-staged/node_modules/object-inspect": {
"version": "1.12.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/lint-staged/node_modules/onetime": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^4.0.0"
},
@@ -12885,9 +15415,8 @@
},
"node_modules/lint-staged/node_modules/path-key": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -12897,9 +15426,8 @@
},
"node_modules/lint-staged/node_modules/strip-final-newline": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -12909,9 +15437,8 @@
},
"node_modules/listr2": {
"version": "5.0.8",
- "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz",
- "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cli-truncate": "^2.1.0",
"colorette": "^2.0.19",
@@ -12936,9 +15463,8 @@
},
"node_modules/listr2/node_modules/cli-truncate": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"slice-ansi": "^3.0.0",
"string-width": "^4.2.0"
@@ -12952,18 +15478,16 @@
},
"node_modules/listr2/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/listr2/node_modules/slice-ansi": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -12975,9 +15499,8 @@
},
"node_modules/load-json-file": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
@@ -12990,9 +15513,8 @@
},
"node_modules/load-json-file/node_modules/parse-json": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
@@ -13003,27 +15525,24 @@
},
"node_modules/load-json-file/node_modules/pify": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/load-json-file/node_modules/strip-bom": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/locate-path": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -13036,96 +15555,80 @@
},
"node_modules/lodash": {
"version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "license": "MIT"
},
"node_modules/lodash._reinterpolate": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.camelcase": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.defaults": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="
+ "license": "MIT"
},
"node_modules/lodash.isarguments": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="
+ "license": "MIT"
},
"node_modules/lodash.isfunction": {
"version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
- "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.ismatch": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
- "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.kebabcase": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
- "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.map": {
"version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.memoize": {
"version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.mergewith": {
"version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
- "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.snakecase": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
- "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.startcase": {
"version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
- "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.template": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
- "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash._reinterpolate": "^3.0.0",
"lodash.templatesettings": "^4.0.0"
@@ -13133,29 +15636,25 @@
},
"node_modules/lodash.templatesettings": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
- "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash._reinterpolate": "^3.0.0"
}
},
"node_modules/lodash.uniq": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
+ "license": "MIT"
},
"node_modules/lodash.upperfirst": {
"version": "4.3.1",
- "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
- "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/log-symbols": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
@@ -13169,9 +15668,8 @@
},
"node_modules/log-update": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-escapes": "^4.3.0",
"cli-cursor": "^3.1.0",
@@ -13187,18 +15685,16 @@
},
"node_modules/log-update/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -13213,9 +15709,8 @@
},
"node_modules/log-update/node_modules/wrap-ansi": {
"version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -13227,8 +15722,7 @@
},
"node_modules/logform": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz",
- "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==",
+ "license": "MIT",
"dependencies": {
"@colors/colors": "1.5.0",
"fecha": "^4.2.0",
@@ -13237,20 +15731,22 @@
"triple-beam": "^1.3.0"
}
},
+ "node_modules/long": {
+ "version": "5.2.3",
+ "license": "Apache-2.0"
+ },
"node_modules/longest": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz",
- "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/loud-rejection": {
"version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"currently-unhandled": "^0.4.1",
"signal-exit": "^3.0.0"
@@ -13261,27 +15757,24 @@
},
"node_modules/lowercase-keys": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/madge": {
"version": "6.1.0",
- "resolved": "https://registry.npmjs.org/madge/-/madge-6.1.0.tgz",
- "integrity": "sha512-irWhT5RpFOc6lkzGHKLihonCVgM0YtfNUh4IrFeW3EqHpnt/JHUG3z26j8PeJEktCGB4tmGOOOJi1Rl/ACWucQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.1",
"commander": "^7.2.0",
@@ -13327,18 +15820,15 @@
},
"node_modules/madge/node_modules/commander": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
@@ -13351,33 +15841,28 @@
},
"node_modules/make-dir/node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/make-error": {
"version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/makeerror": {
"version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"tmpl": "1.0.5"
}
},
"node_modules/map-obj": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -13387,13 +15872,11 @@
},
"node_modules/match-json": {
"version": "1.3.5",
- "resolved": "https://registry.npmjs.org/match-json/-/match-json-1.3.5.tgz",
- "integrity": "sha512-V5Jw1rIdjt37vfQRqvKtXW4dKbSTpvgwyEPKOBikY90xQ5Wr5yOmfpjcTm12d0Kqq+TfMqlXJkETf4yOF9JhUw=="
+ "license": "MIT"
},
"node_modules/md5": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
- "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+ "license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
@@ -13402,17 +15885,15 @@
},
"node_modules/media-typer": {
"version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/meow": {
"version": "8.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
- "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/minimist": "^1.2.0",
"camelcase-keys": "^6.2.2",
@@ -13435,9 +15916,8 @@
},
"node_modules/meow/node_modules/type-fest": {
"version": "0.18.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
- "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -13447,38 +15927,33 @@
},
"node_modules/merge": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz",
- "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/merge-stream": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/methods": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/micromatch": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -13489,9 +15964,8 @@
},
"node_modules/mime": {
"version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
"dev": true,
+ "license": "MIT",
"bin": {
"mime": "cli.js"
},
@@ -13501,16 +15975,14 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -13520,35 +15992,31 @@
},
"node_modules/mimic-fn": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/mimic-response": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/min-indent": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -13558,37 +16026,68 @@
},
"node_modules/minimist": {
"version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ "license": "MIT"
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.0.2",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
},
- "node_modules/minimist-options": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "dev": true,
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "license": "ISC",
"dependencies": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=8"
}
},
- "node_modules/minipass": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz",
- "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==",
- "dev": true,
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=10"
}
},
"node_modules/mocked-env": {
"version": "1.3.5",
- "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz",
- "integrity": "sha512-GyYY6ynVOdEoRlaGpaq8UYwdWkvrsU2xRme9B+WPSuJcNjh17+3QIxSYU6zwee0SbehhV6f06VZ4ahjG+9zdrA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"check-more-types": "2.24.0",
"debug": "4.3.2",
@@ -13601,9 +16100,8 @@
},
"node_modules/mocked-env/node_modules/debug": {
"version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
@@ -13618,8 +16116,7 @@
},
"node_modules/modclean": {
"version": "3.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/modclean/-/modclean-3.0.0-beta.1.tgz",
- "integrity": "sha512-NyJpuqXMUI190sZePU+dBcwlGaqhfFC+UL5WyNSxmNLOHATg9cVSgRpbY+mUbwUj7t5trb4vYscgXArKevYsdA==",
+ "license": "MIT",
"dependencies": {
"await-handler": "^1.1.0",
"chalk": "^2.4.1",
@@ -13647,16 +16144,14 @@
},
"node_modules/modclean/node_modules/ansi-regex": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/modclean/node_modules/ansi-styles": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -13666,8 +16161,7 @@
},
"node_modules/modclean/node_modules/chalk": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -13679,8 +16173,7 @@
},
"node_modules/modclean/node_modules/cli-cursor": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
+ "license": "MIT",
"dependencies": {
"restore-cursor": "^2.0.0"
},
@@ -13690,34 +16183,29 @@
},
"node_modules/modclean/node_modules/cli-spinners": {
"version": "1.3.1",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
- "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/modclean/node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/modclean/node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ "license": "MIT"
},
"node_modules/modclean/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ "license": "MIT"
},
"node_modules/modclean/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -13735,16 +16223,14 @@
},
"node_modules/modclean/node_modules/has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/modclean/node_modules/log-symbols": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "license": "MIT",
"dependencies": {
"chalk": "^2.0.1"
},
@@ -13754,16 +16240,14 @@
},
"node_modules/modclean/node_modules/mimic-fn": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/modclean/node_modules/onetime": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^1.0.0"
},
@@ -13773,8 +16257,7 @@
},
"node_modules/modclean/node_modules/ora": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
- "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
+ "license": "MIT",
"dependencies": {
"chalk": "^2.3.1",
"cli-cursor": "^2.1.0",
@@ -13789,8 +16272,7 @@
},
"node_modules/modclean/node_modules/restore-cursor": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
+ "license": "MIT",
"dependencies": {
"onetime": "^2.0.0",
"signal-exit": "^3.0.2"
@@ -13801,8 +16283,7 @@
},
"node_modules/modclean/node_modules/rimraf": {
"version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
@@ -13812,8 +16293,7 @@
},
"node_modules/modclean/node_modules/strip-ansi": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^3.0.0"
},
@@ -13823,8 +16303,7 @@
},
"node_modules/modclean/node_modules/supports-color": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -13834,18 +16313,16 @@
},
"node_modules/modify-values": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/module-definition": {
"version": "3.4.0",
- "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz",
- "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^3.0.0",
"node-source-walk": "^4.0.0"
@@ -13859,9 +16336,8 @@
},
"node_modules/module-lookup-amd": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz",
- "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "^2.8.1",
"debug": "^4.1.0",
@@ -13878,15 +16354,13 @@
},
"node_modules/module-lookup-amd/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/module-lookup-amd/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -13904,16 +16378,14 @@
},
"node_modules/moment": {
"version": "2.29.4",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
- "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/moment-timezone": {
"version": "0.5.43",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz",
- "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==",
+ "license": "MIT",
"dependencies": {
"moment": "^2.29.4"
},
@@ -13923,20 +16395,28 @@
},
"node_modules/ms": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "license": "MIT"
},
"node_modules/mute-stream": {
"version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/nan": {
+ "version": "2.17.0",
+ "license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -13946,33 +16426,28 @@
},
"node_modules/natural-compare": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/natural-compare-lite": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/negotiator": {
"version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/neo-async": {
"version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ "license": "MIT"
},
"node_modules/node-cache": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
- "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
+ "license": "MIT",
"dependencies": {
"clone": "2.x"
},
@@ -13981,9 +16456,8 @@
}
},
"node_modules/node-fetch": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
- "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
+ "version": "2.7.0",
+ "license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
@@ -14001,18 +16475,15 @@
},
"node_modules/node-fetch/node_modules/tr46": {
"version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ "license": "MIT"
},
"node_modules/node-fetch/node_modules/webidl-conversions": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ "license": "BSD-2-Clause"
},
"node_modules/node-fetch/node_modules/whatwg-url": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
@@ -14020,8 +16491,7 @@
},
"node_modules/node-gyp-build": {
"version": "3.9.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz",
- "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==",
+ "license": "MIT",
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
@@ -14030,15 +16500,13 @@
},
"node_modules/node-int64": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-notifier": {
"version": "10.0.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz",
- "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"growly": "^1.3.0",
"is-wsl": "^2.2.0",
@@ -14050,24 +16518,21 @@
},
"node_modules/node-notifier/node_modules/uuid": {
"version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
+ "license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/node-releases": {
"version": "2.0.12",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
- "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-source-walk": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz",
- "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.0.0"
},
@@ -14075,11 +16540,23 @@
"node": ">=6.0"
}
},
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/normalize-package-data": {
"version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^4.0.1",
"is-core-module": "^2.5.0",
@@ -14092,18 +16569,16 @@
},
"node_modules/normalize-path": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
- "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prepend-http": "^2.0.0",
"query-string": "^5.0.1",
@@ -14115,9 +16590,8 @@
},
"node_modules/npm-run-path": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
},
@@ -14125,59 +16599,90 @@
"node": ">=8"
}
},
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
"node_modules/number-is-nan": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/oauth-1.0a": {
"version": "2.2.6",
- "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz",
- "integrity": "sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ=="
+ "license": "MIT"
},
"node_modules/object-assign": {
"version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-hash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/object-inspect": {
"version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
+ "node_modules/object-sizeof": {
+ "version": "2.6.3",
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3"
+ }
+ },
+ "node_modules/object-sizeof/node_modules/buffer": {
+ "version": "6.0.3",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
"node_modules/object.assign": {
"version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -14193,9 +16698,8 @@
},
"node_modules/object.entries": {
"version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
- "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -14207,9 +16711,8 @@
},
"node_modules/object.values": {
"version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
- "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -14224,8 +16727,7 @@
},
"node_modules/on-finished": {
"version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
@@ -14235,25 +16737,22 @@
},
"node_modules/once": {
"version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/one-time": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
+ "license": "MIT",
"dependencies": {
"fn.name": "1.x.x"
}
},
"node_modules/onetime": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -14265,22 +16764,18 @@
}
},
"node_modules/only": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
- "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ=="
+ "version": "0.0.2"
},
"node_modules/openapi-types": {
"version": "12.1.3",
- "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
- "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
"dev": true,
+ "license": "MIT",
"peer": true
},
"node_modules/optionator": {
"version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
@@ -14295,9 +16790,8 @@
},
"node_modules/ora": {
"version": "5.4.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
- "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bl": "^4.1.0",
"chalk": "^4.1.0",
@@ -14318,44 +16812,39 @@
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/p-cancelable": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
- "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/p-finally": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/p-is-promise": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
- "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -14368,9 +16857,8 @@
},
"node_modules/p-locate": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -14383,9 +16871,8 @@
},
"node_modules/p-map": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
@@ -14398,9 +16885,8 @@
},
"node_modules/p-timeout": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
- "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-finally": "^1.0.0"
},
@@ -14410,17 +16896,15 @@
},
"node_modules/p-try": {
"version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/p-wait-for": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz",
- "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-timeout": "^3.0.0"
},
@@ -14433,9 +16917,8 @@
},
"node_modules/p-wait-for/node_modules/p-timeout": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
- "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-finally": "^1.0.0"
},
@@ -14445,9 +16928,8 @@
},
"node_modules/parent-module": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -14457,14 +16939,12 @@
},
"node_modules/parse-github-repo-url": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
- "integrity": "sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/parse-json": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -14480,70 +16960,61 @@
},
"node_modules/parse-ms": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/parse-passwd": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/parse-static-imports": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz",
- "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA=="
+ "license": "MIT"
},
"node_modules/parseurl": {
"version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-key": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ "license": "MIT"
},
"node_modules/path-scurry": {
"version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
"dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -14557,38 +17028,33 @@
},
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz",
- "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "14 || >=16.14"
}
},
"node_modules/path-to-regexp": {
"version": "6.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
- "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw=="
+ "license": "MIT"
},
"node_modules/path-type": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -14598,9 +17064,8 @@
},
"node_modules/pidtree": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
- "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
"dev": true,
+ "license": "MIT",
"bin": {
"pidtree": "bin/pidtree.js"
},
@@ -14608,20 +17073,28 @@
"node": ">=0.10"
}
},
+ "node_modules/pify": {
+ "version": "5.0.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pinkie": {
"version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/pinkie-promise": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie": "^2.0.0"
},
@@ -14631,18 +17104,16 @@
},
"node_modules/pirates": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/pkg-dir": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
@@ -14652,9 +17123,8 @@
},
"node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -14665,9 +17135,8 @@
},
"node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -14677,9 +17146,8 @@
},
"node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -14692,9 +17160,8 @@
},
"node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -14704,17 +17171,16 @@
},
"node_modules/pluralize": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
- "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/postcss": {
- "version": "8.4.21",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
- "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"dev": true,
"funding": [
{
@@ -14724,10 +17190,14 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
- "nanoid": "^3.3.4",
+ "nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -14737,9 +17207,8 @@
},
"node_modules/postcss-values-parser": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz",
- "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==",
"dev": true,
+ "license": "MPL-2.0",
"dependencies": {
"color-name": "^1.1.4",
"is-url-superb": "^4.0.0",
@@ -14752,16 +17221,41 @@
"postcss": "^8.2.9"
}
},
+ "node_modules/pprof": {
+ "version": "3.2.1",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.0",
+ "bindings": "^1.2.1",
+ "delay": "^5.0.0",
+ "findit2": "^2.2.3",
+ "nan": "^2.14.0",
+ "p-limit": "^3.0.0",
+ "pify": "^5.0.0",
+ "protobufjs": "~7.2.4",
+ "source-map": "^0.7.3",
+ "split": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.4.1"
+ }
+ },
"node_modules/pprof-format": {
"version": "2.0.7",
- "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz",
- "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA=="
+ "license": "MIT"
+ },
+ "node_modules/pprof/node_modules/source-map": {
+ "version": "0.7.4",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 8"
+ }
},
"node_modules/precinct": {
"version": "8.3.1",
- "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz",
- "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "^2.20.3",
"debug": "^4.3.3",
@@ -14786,9 +17280,8 @@
},
"node_modules/precinct/node_modules/@typescript-eslint/types": {
"version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
- "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
},
@@ -14799,9 +17292,8 @@
},
"node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": {
"version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
- "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@typescript-eslint/types": "4.33.0",
"@typescript-eslint/visitor-keys": "4.33.0",
@@ -14826,9 +17318,8 @@
},
"node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": {
"version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
- "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "4.33.0",
"eslint-visitor-keys": "^2.0.0"
@@ -14843,15 +17334,13 @@
},
"node_modules/precinct/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/precinct/node_modules/detective-amd": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz",
- "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^3.0.0",
"escodegen": "^2.0.0",
@@ -14867,9 +17356,8 @@
},
"node_modules/precinct/node_modules/detective-cjs": {
"version": "3.1.3",
- "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz",
- "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^3.0.0",
"node-source-walk": "^4.0.0"
@@ -14880,9 +17368,8 @@
},
"node_modules/precinct/node_modules/detective-es6": {
"version": "2.2.2",
- "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz",
- "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"node-source-walk": "^4.0.0"
},
@@ -14892,9 +17379,8 @@
},
"node_modules/precinct/node_modules/detective-postcss": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz",
- "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"debug": "^4.1.1",
"is-url": "^1.2.4",
@@ -14907,9 +17393,8 @@
},
"node_modules/precinct/node_modules/detective-sass": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz",
- "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gonzales-pe": "^4.3.0",
"node-source-walk": "^4.0.0"
@@ -14920,9 +17405,8 @@
},
"node_modules/precinct/node_modules/detective-scss": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz",
- "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"gonzales-pe": "^4.3.0",
"node-source-walk": "^4.0.0"
@@ -14933,15 +17417,13 @@
},
"node_modules/precinct/node_modules/detective-stylus": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz",
- "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/precinct/node_modules/detective-typescript": {
"version": "7.0.2",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz",
- "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "^4.33.0",
"ast-module-types": "^2.7.1",
@@ -14954,24 +17436,21 @@
},
"node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": {
"version": "2.7.1",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz",
- "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/precinct/node_modules/eslint-visitor-keys": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=10"
}
},
"node_modules/precinct/node_modules/get-amd-module-type": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz",
- "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ast-module-types": "^3.0.0",
"node-source-walk": "^4.2.2"
@@ -14982,9 +17461,8 @@
},
"node_modules/precinct/node_modules/postcss-values-parser": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
- "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatten": "^1.0.2",
"indexes-of": "^1.0.1",
@@ -14996,9 +17474,8 @@
},
"node_modules/precinct/node_modules/typescript": {
"version": "3.9.10",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
- "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -15009,27 +17486,24 @@
},
"node_modules/prelude-ls": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/prepend-http": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/prettier": {
"version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
+ "license": "MIT",
"bin": {
"prettier": "bin-prettier.js"
},
@@ -15042,9 +17516,8 @@
},
"node_modules/pretty-bytes": {
"version": "5.6.0",
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
- "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
},
@@ -15054,9 +17527,8 @@
},
"node_modules/pretty-format": {
"version": "29.6.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz",
- "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.0",
"ansi-styles": "^5.0.0",
@@ -15068,9 +17540,8 @@
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -15080,15 +17551,13 @@
},
"node_modules/pretty-format/node_modules/react-is": {
"version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/pretty-ms": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
- "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parse-ms": "^2.1.0"
},
@@ -15101,22 +17570,19 @@
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/progress": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/prom-client": {
"version": "14.2.0",
- "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz",
- "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==",
+ "license": "Apache-2.0",
"dependencies": {
"tdigest": "^0.1.1"
},
@@ -15126,9 +17592,8 @@
},
"node_modules/prompts": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
@@ -15137,15 +17602,35 @@
"node": ">= 6"
}
},
+ "node_modules/protobufjs": {
+ "version": "7.2.5",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/node": ">=13.7.0",
+ "long": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "license": "MIT"
},
"node_modules/pump": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -15153,16 +17638,13 @@
},
"node_modules/punycode": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/pure-rand": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
- "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
"dev": true,
"funding": [
{
@@ -15173,13 +17655,13 @@
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/q": {
"version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.6.0",
"teleport": ">=0.2.0"
@@ -15187,8 +17669,7 @@
},
"node_modules/qs": {
"version": "6.11.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
- "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
+ "license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.4"
},
@@ -15201,9 +17682,8 @@
},
"node_modules/query-string": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
- "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"decode-uri-component": "^0.2.0",
"object-assign": "^4.1.0",
@@ -15215,8 +17695,6 @@
},
"node_modules/queue-microtask": {
"version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [
{
@@ -15231,33 +17709,30 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/quick-lru": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/quote-unquote": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz",
- "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ramda": {
"version": "0.27.1",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz",
- "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/raw-body": {
"version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
@@ -15270,8 +17745,7 @@
},
"node_modules/raw-body/node_modules/http-errors": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
@@ -15285,17 +17759,15 @@
},
"node_modules/raw-body/node_modules/statuses": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/rc": {
"version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
"dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
@@ -15308,17 +17780,15 @@
},
"node_modules/rc/node_modules/strip-json-comments": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/read-pkg": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "license": "MIT",
"dependencies": {
"@types/normalize-package-data": "^2.4.0",
"normalize-package-data": "^2.5.0",
@@ -15331,8 +17801,7 @@
},
"node_modules/read-pkg-up": {
"version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "license": "MIT",
"dependencies": {
"find-up": "^4.1.0",
"read-pkg": "^5.2.0",
@@ -15347,8 +17816,7 @@
},
"node_modules/read-pkg-up/node_modules/find-up": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -15359,8 +17827,7 @@
},
"node_modules/read-pkg-up/node_modules/locate-path": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -15370,8 +17837,7 @@
},
"node_modules/read-pkg-up/node_modules/p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -15384,8 +17850,7 @@
},
"node_modules/read-pkg-up/node_modules/p-locate": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -15395,13 +17860,11 @@
},
"node_modules/read-pkg/node_modules/hosted-git-info": {
"version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ "license": "ISC"
},
"node_modules/read-pkg/node_modules/normalize-package-data": {
"version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -15411,25 +17874,22 @@
},
"node_modules/read-pkg/node_modules/semver": {
"version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/read-pkg/node_modules/type-fest": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -15442,15 +17902,13 @@
},
"node_modules/readable-stream/node_modules/safe-buffer": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/redent": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"indent-string": "^4.0.0",
"strip-indent": "^3.0.0"
@@ -15461,16 +17919,14 @@
},
"node_modules/redis-errors": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
- "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/redis-parser": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
- "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
+ "license": "MIT",
"dependencies": {
"redis-errors": "^1.0.0"
},
@@ -15478,20 +17934,22 @@
"node": ">=4"
}
},
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "license": "MIT"
+ },
"node_modules/regexp-tree": {
"version": "0.1.24",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
- "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
"dev": true,
+ "license": "MIT",
"bin": {
"regexp-tree": "bin/regexp-tree"
}
},
"node_modules/regexp.prototype.flags": {
"version": "1.4.3",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
- "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
@@ -15506,9 +17964,8 @@
},
"node_modules/regjsparser": {
"version": "0.9.1",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
- "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"jsesc": "~0.5.0"
},
@@ -15518,8 +17975,6 @@
},
"node_modules/regjsparser/node_modules/jsesc": {
"version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
@@ -15527,9 +17982,8 @@
},
"node_modules/repeating": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-finite": "^1.0.0"
},
@@ -15539,32 +17993,28 @@
},
"node_modules/require-directory": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-from-string": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-main-filename": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/requirejs": {
"version": "2.3.6",
- "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
- "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
"dev": true,
+ "license": "MIT",
"bin": {
"r_js": "bin/r.js",
"r.js": "bin/r.js"
@@ -15575,9 +18025,8 @@
},
"node_modules/requirejs-config-file": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz",
- "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"esprima": "^4.0.0",
"stringify-object": "^3.2.1"
@@ -15588,8 +18037,7 @@
},
"node_modules/resolve": {
"version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "license": "MIT",
"dependencies": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
@@ -15604,9 +18052,8 @@
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -15616,18 +18063,16 @@
},
"node_modules/resolve-dependency-path": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz",
- "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/resolve-dir": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
@@ -15638,18 +18083,16 @@
},
"node_modules/resolve-from": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-global": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz",
- "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-dirs": "^0.1.1"
},
@@ -15659,27 +18102,24 @@
},
"node_modules/resolve.exports": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
- "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/responselike": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lowercase-keys": "^1.0.0"
}
},
"node_modules/restore-cursor": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
@@ -15690,9 +18130,8 @@
},
"node_modules/reusify": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -15700,24 +18139,20 @@
},
"node_modules/rfdc": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/right-pad": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz",
- "integrity": "sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
@@ -15730,9 +18165,7 @@
},
"node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -15750,9 +18183,8 @@
},
"node_modules/roarr": {
"version": "7.15.0",
- "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.15.0.tgz",
- "integrity": "sha512-CV9WefQfUXTX6wr8CrEMhfNef3sjIt9wNhE/5PNu4tNWsaoDNDXqq+OGn/RW9A1UPb0qc7FQlswXRaJJJsqn8A==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"boolean": "^3.1.4",
"fast-json-stringify": "^2.7.10",
@@ -15765,15 +18197,9 @@
"node": ">=12.0"
}
},
- "node_modules/rudder-json-template-engine": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/rudder-json-template-engine/-/rudder-json-template-engine-0.5.1.tgz",
- "integrity": "sha512-D8zCcTXbhbFd2EhDmmgZKxw5uky6+DfikV/EW8I8HWdutMiyzdxgVMyH1dPo3feLgj3/0g2WNO9t4iPaegw4PQ=="
- },
"node_modules/rudder-transformer-cdk": {
"version": "1.4.11",
- "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz",
- "integrity": "sha512-u2t/L47tNe9wyzSpQptLkiECT0/P5Xx8BLmZisfuXQx3lXco57oaDX/Ii1ZhEiHM2zht+NiyrGkvhBKMt1IAyA==",
+ "license": "ISC",
"dependencies": {
"get-value": "^3.0.1",
"handlebars": "^4.7.7",
@@ -15787,56 +18213,16 @@
"winston": "^3.8.1"
}
},
- "node_modules/rudder-workflow-engine": {
- "version": "0.4.7",
- "resolved": "https://registry.npmjs.org/rudder-workflow-engine/-/rudder-workflow-engine-0.4.7.tgz",
- "integrity": "sha512-USJ/h4XGxtUmAhaTJgtz1MrICpiju6GTubaFyPS+5hgpjdIsZx/iOOishjrNcOrwHvxcfblccA8wv5JTC8eSpg==",
- "dependencies": {
- "@aws-crypto/sha256-js": "^4.0.0",
- "js-yaml": "^4.1.0",
- "jsonata": "^2.0.3",
- "lodash": "^4.17.21",
- "rudder-json-template-engine": "^0.5.1"
- }
- },
- "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/sha256-js": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz",
- "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==",
- "dependencies": {
- "@aws-crypto/util": "^4.0.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^1.11.1"
- }
- },
- "node_modules/rudder-workflow-engine/node_modules/@aws-crypto/util": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz",
- "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==",
- "dependencies": {
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-utf8-browser": "^3.0.0",
- "tslib": "^1.11.1"
- }
- },
- "node_modules/rudder-workflow-engine/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
"node_modules/run-async": {
"version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [
{
@@ -15852,23 +18238,21 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
"node_modules/rxjs": {
"version": "7.8.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
- "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.1.0"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
@@ -15882,22 +18266,21 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/safe-regex": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
- "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"regexp-tree": "~0.1.1"
}
},
"node_modules/safe-regex-test": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
@@ -15909,22 +18292,19 @@
},
"node_modules/safe-stable-stringify": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz",
- "integrity": "sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==",
+ "license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "license": "MIT"
},
"node_modules/sass-lookup": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz",
- "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "^2.16.0"
},
@@ -15937,15 +18317,12 @@
},
"node_modules/sass-lookup/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/semver": {
"version": "7.5.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz",
- "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -15958,15 +18335,13 @@
},
"node_modules/semver-compare": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
- "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/semver-regex": {
"version": "3.1.4",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz",
- "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -15976,9 +18351,7 @@
},
"node_modules/semver/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
@@ -15988,25 +18361,20 @@
},
"node_modules/semver/node_modules/yallist": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "license": "ISC"
},
"node_modules/set-blocking": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
+ "license": "ISC"
},
"node_modules/set-value": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz",
- "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==",
"funding": [
"https://github.com/sponsors/jonschlinkert",
"https://paypal.me/jonathanschlinkert",
"https://jonschlinkert.dev/sponsor"
],
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4",
"is-primitive": "^3.0.1"
@@ -16017,13 +18385,10 @@
},
"node_modules/setprototypeof": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ "license": "ISC"
},
"node_modules/sha256": {
"version": "0.2.0",
- "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz",
- "integrity": "sha512-kTWMJUaez5iiT9CcMv8jSq6kMhw3ST0uRdcIWl3D77s6AsLXNXRp3heeqqfu5+Dyfu4hwpQnMzhqHh8iNQxw0w==",
"dependencies": {
"convert-hex": "~0.1.0",
"convert-string": "~0.1.0"
@@ -16031,9 +18396,8 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -16043,23 +18407,20 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/shellwords": {
"version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/side-channel": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
@@ -16071,42 +18432,36 @@
},
"node_modules/signal-exit": {
"version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ "license": "ISC"
},
"node_modules/simple-swizzle": {
"version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.3.1"
}
},
"node_modules/simple-swizzle/node_modules/is-arrayish": {
"version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ "license": "MIT"
},
"node_modules/sisteransi": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/slash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/slice-ansi": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
- "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^6.0.0",
"is-fullwidth-code-point": "^4.0.0"
@@ -16120,9 +18475,8 @@
},
"node_modules/slice-ansi/node_modules/ansi-styles": {
"version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -16132,9 +18486,8 @@
},
"node_modules/sort-keys": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
- "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-obj": "^1.0.0"
},
@@ -16144,26 +18497,23 @@
},
"node_modules/source-map": {
"version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -16171,8 +18521,7 @@
},
"node_modules/spdx-correct": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
@@ -16180,13 +18529,11 @@
},
"node_modules/spdx-exceptions": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ "license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -16194,14 +18541,11 @@
},
"node_modules/spdx-license-ids": {
"version": "3.0.12",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
- "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA=="
+ "license": "CC0-1.0"
},
"node_modules/split": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"through": "2"
},
@@ -16211,18 +18555,16 @@
},
"node_modules/split2": {
"version": "3.2.2",
- "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
- "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"readable-stream": "^3.0.0"
}
},
"node_modules/split2/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -16234,31 +18576,27 @@
},
"node_modules/sprintf-js": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/stack-generator": {
"version": "2.0.10",
- "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
- "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==",
+ "license": "MIT",
"dependencies": {
"stackframe": "^1.3.4"
}
},
"node_modules/stack-trace": {
"version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/stack-utils": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
@@ -16268,22 +18606,19 @@
},
"node_modules/stack-utils/node_modules/escape-string-regexp": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/stackframe": {
"version": "1.3.4",
- "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
- "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
+ "license": "MIT"
},
"node_modules/stacktrace-parser": {
"version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
+ "license": "MIT",
"dependencies": {
"type-fest": "^0.7.1"
},
@@ -16293,22 +18628,19 @@
},
"node_modules/stacktrace-parser/node_modules/type-fest": {
"version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"node_modules/standard-as-callback": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
- "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A=="
+ "license": "MIT"
},
"node_modules/standard-version": {
"version": "9.5.0",
- "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz",
- "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"chalk": "^2.4.2",
"conventional-changelog": "3.1.25",
@@ -16334,9 +18666,8 @@
},
"node_modules/standard-version/node_modules/ansi-styles": {
"version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -16346,9 +18677,8 @@
},
"node_modules/standard-version/node_modules/chalk": {
"version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -16360,9 +18690,8 @@
},
"node_modules/standard-version/node_modules/cliui": {
"version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -16371,33 +18700,29 @@
},
"node_modules/standard-version/node_modules/color-convert": {
"version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/standard-version/node_modules/color-name": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/standard-version/node_modules/has-flag": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/standard-version/node_modules/supports-color": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -16407,9 +18732,8 @@
},
"node_modules/standard-version/node_modules/yargs": {
"version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -16425,31 +18749,26 @@
},
"node_modules/stats-accumulator": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/stats-accumulator/-/stats-accumulator-1.1.3.tgz",
- "integrity": "sha512-ys8OR2RWx4Y9xC/fkFUKI3t2ElHpR4Xdp8rIWVCTl4DWmfS80gvxl0LwNKYUio/ibBUpsoMaUYbWldonVfPBFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/statsd-client": {
"version": "0.4.7",
- "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz",
- "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."
+ "license": "MIT"
},
"node_modules/statuses": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/stream-browserify": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+ "license": "MIT",
"dependencies": {
"inherits": "~2.0.4",
"readable-stream": "^3.5.0"
@@ -16457,8 +18776,7 @@
},
"node_modules/stream-browserify/node_modules/readable-stream": {
"version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -16470,49 +18788,43 @@
},
"node_modules/stream-to-array": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
- "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"any-promise": "^1.1.0"
}
},
"node_modules/strict-uri-encode": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/string_decoder/node_modules/safe-buffer": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "license": "MIT"
},
"node_modules/string-argv": {
"version": "0.3.1",
- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
- "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.6.19"
}
},
"node_modules/string-length": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
@@ -16523,16 +18835,12 @@
},
"node_modules/string-similarity": {
"version": "4.0.4",
- "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
- "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/string-width": {
"version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -16545,9 +18853,8 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -16559,39 +18866,32 @@
},
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/string-width/node_modules/emoji-regex": {
"version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "license": "MIT"
},
"node_modules/string-width/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/string.prototype.trimend": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -16603,9 +18903,8 @@
},
"node_modules/string.prototype.trimstart": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -16617,9 +18916,8 @@
},
"node_modules/stringify-object": {
"version": "3.3.0",
- "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
- "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"get-own-enumerable-property-symbols": "^3.0.0",
"is-obj": "^1.0.1",
@@ -16631,25 +18929,20 @@
},
"node_modules/stringify-object/node_modules/is-obj": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/stringify-package": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz",
- "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==",
- "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/strip-ansi": {
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -16660,9 +18953,8 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -16672,27 +18964,24 @@
},
"node_modules/strip-bom": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/strip-indent": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"min-indent": "^1.0.0"
},
@@ -16702,9 +18991,8 @@
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -16714,14 +19002,12 @@
},
"node_modules/strnum": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
- "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+ "license": "MIT"
},
"node_modules/stylus-lookup": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz",
- "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "^2.8.1",
"debug": "^4.1.0"
@@ -16735,23 +19021,20 @@
},
"node_modules/stylus-lookup/node_modules/commander": {
"version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/subdirs": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/subdirs/-/subdirs-1.0.1.tgz",
- "integrity": "sha512-KSbUKpwQIRcb5Th+l4EzxEZYpCwV/g0pQ348EV7CIM5YEEgzz2L1KJD8FCeTckTiE/TKn2u09DCxpdAL6/iFbg==",
+ "license": "MIT",
"dependencies": {
"es6-promise": "^3.0.2"
}
},
"node_modules/superagent": {
"version": "8.0.9",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
- "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.4",
@@ -16770,9 +19053,8 @@
},
"node_modules/supertest": {
"version": "6.3.3",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz",
- "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"methods": "^1.1.2",
"superagent": "^8.0.5"
@@ -16783,9 +19065,8 @@
},
"node_modules/supports-color": {
"version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -16795,8 +19076,7 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -16806,9 +19086,8 @@
},
"node_modules/swagger-cli": {
"version": "4.0.4",
- "resolved": "https://registry.npmjs.org/swagger-cli/-/swagger-cli-4.0.4.tgz",
- "integrity": "sha512-Cp8YYuLny3RJFQ4CvOBTaqmOOgYsem52dPx1xM5S4EUWFblIh2Q8atppMZvXKUr1e9xH5RwipYpmdUzdPcxWcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@apidevtools/swagger-cli": "4.0.4"
},
@@ -16821,9 +19100,8 @@
},
"node_modules/swagger-cli/node_modules/@apidevtools/swagger-cli": {
"version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.4.tgz",
- "integrity": "sha512-hdDT3B6GLVovCsRZYDi3+wMcB1HfetTU20l2DC8zD3iFRNMC6QNAZG5fo/6PYeHWBEv7ri4MvnlKodhNB0nt7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@apidevtools/swagger-parser": "^10.0.1",
"chalk": "^4.1.0",
@@ -16839,18 +19117,16 @@
},
"node_modules/swagger-cli/node_modules/argparse": {
"version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/swagger-cli/node_modules/cliui": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -16859,9 +19135,8 @@
},
"node_modules/swagger-cli/node_modules/find-up": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -16872,9 +19147,8 @@
},
"node_modules/swagger-cli/node_modules/js-yaml": {
"version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -16885,9 +19159,8 @@
},
"node_modules/swagger-cli/node_modules/locate-path": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -16897,9 +19170,8 @@
},
"node_modules/swagger-cli/node_modules/p-limit": {
"version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -16912,9 +19184,8 @@
},
"node_modules/swagger-cli/node_modules/p-locate": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -16924,9 +19195,8 @@
},
"node_modules/swagger-cli/node_modules/wrap-ansi": {
"version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -16938,15 +19208,13 @@
},
"node_modules/swagger-cli/node_modules/y18n": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/swagger-cli/node_modules/yargs": {
"version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
@@ -16966,9 +19234,8 @@
},
"node_modules/swagger-cli/node_modules/yargs-parser": {
"version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -16979,26 +19246,49 @@
},
"node_modules/tapable": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/tar": {
+ "version": "6.1.15",
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "4.0.0",
+ "license": "ISC"
+ },
"node_modules/tdigest": {
"version": "0.1.2",
- "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz",
- "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==",
+ "license": "MIT",
"dependencies": {
"bintrees": "1.0.2"
}
},
"node_modules/test-exclude": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -17010,9 +19300,8 @@
},
"node_modules/test-exclude/node_modules/glob": {
"version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -17030,44 +19319,37 @@
},
"node_modules/text-extensions": {
"version": "1.9.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
- "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
},
"node_modules/text-hex": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
+ "license": "MIT"
},
"node_modules/text-table": {
"version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/through": {
"version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
- "dev": true
+ "license": "MIT"
},
"node_modules/through2": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "3"
}
},
"node_modules/through2/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -17079,18 +19361,16 @@
},
"node_modules/timed-out": {
"version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/tmp": {
"version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"os-tmpdir": "~1.0.2"
},
@@ -17100,32 +19380,27 @@
},
"node_modules/tmpl": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/to-function": {
"version": "2.0.6",
- "resolved": "https://registry.npmjs.org/to-function/-/to-function-2.0.6.tgz",
- "integrity": "sha512-LWfUmW851x5T8+78Nl82CA2j6w0trhoFj4rpS6pFUMgfUMUySDAKPgTvQkUqlWuH3Lihlk5sPyDHSVwmKDSc5Q==",
"dependencies": {
"component-props": "*"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -17135,39 +19410,34 @@
},
"node_modules/toidentifier": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
"engines": {
"node": ">=0.6"
}
},
"node_modules/trim-newlines": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
- "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/triple-beam": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
+ "license": "MIT"
},
"node_modules/truncate-utf8-bytes": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
- "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
+ "license": "WTFPL",
"dependencies": {
"utf8-byte-length": "^1.0.1"
}
},
"node_modules/ts-graphviz": {
"version": "1.5.5",
- "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.5.5.tgz",
- "integrity": "sha512-abon0Tlcgvxcqr8x+p8QH1fTbR2R4cEXKGZfT4OJONZWah2YfqkmERb6hrr82omAc1IHwk5PlF8g4BS/ECYvwQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.16"
},
@@ -17178,9 +19448,8 @@
},
"node_modules/ts-jest": {
"version": "29.1.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz",
- "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
@@ -17221,18 +19490,16 @@
},
"node_modules/ts-jest/node_modules/yargs-parser": {
"version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/ts-node": {
"version": "10.9.1",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
- "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@@ -17273,18 +19540,16 @@
},
"node_modules/ts-node/node_modules/acorn-walk": {
"version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/tsconfig-paths": {
"version": "3.14.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
- "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/json5": "^0.0.29",
"json5": "^1.0.2",
@@ -17294,9 +19559,8 @@
},
"node_modules/tsconfig-paths/node_modules/json5": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"minimist": "^1.2.0"
},
@@ -17306,31 +19570,28 @@
},
"node_modules/tsconfig-paths/node_modules/strip-bom": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/tslib": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
- "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w=="
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/tsscmp": {
"version": "1.0.6",
- "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
- "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
+ "license": "MIT",
"engines": {
"node": ">=0.6.x"
}
},
"node_modules/tsutils": {
"version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"tslib": "^1.8.1"
},
@@ -17343,15 +19604,13 @@
},
"node_modules/tsutils/node_modules/tslib": {
"version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
+ "dev": true,
+ "license": "0BSD"
},
"node_modules/type-check": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -17361,25 +19620,22 @@
},
"node_modules/type-detect": {
"version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"node_modules/type-is": {
"version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -17390,9 +19646,8 @@
},
"node_modules/typed-array-length": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
@@ -17404,15 +19659,13 @@
},
"node_modules/typedarray": {
"version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/typescript": {
"version": "5.0.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
- "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -17423,8 +19676,6 @@
},
"node_modules/ua-parser-js": {
"version": "1.0.35",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz",
- "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==",
"funding": [
{
"type": "opencollective",
@@ -17435,14 +19686,14 @@
"url": "https://paypal.me/faisalman"
}
],
+ "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/uglify-js": {
"version": "3.17.4",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
- "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "license": "BSD-2-Clause",
"optional": true,
"bin": {
"uglifyjs": "bin/uglifyjs"
@@ -17453,9 +19704,8 @@
},
"node_modules/unbox-primitive": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
@@ -17468,31 +19718,27 @@
},
"node_modules/uniq": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/universalify": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/unset-value": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-2.0.1.tgz",
- "integrity": "sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg==",
+ "license": "MIT",
"dependencies": {
"has-value": "^2.0.2",
"isobject": "^4.0.0"
@@ -17503,16 +19749,13 @@
},
"node_modules/unset-value/node_modules/isobject": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/update-browserslist-db": {
"version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
"dev": true,
"funding": [
{
@@ -17528,6 +19771,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -17541,17 +19785,15 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/url-parse-lax": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prepend-http": "^2.0.0"
},
@@ -17561,47 +19803,40 @@
},
"node_modules/url-to-options": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/utf8-byte-length": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
- "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA=="
+ "license": "WTFPL"
},
"node_modules/utf8-length": {
"version": "0.0.1",
- "resolved": "https://registry.npmjs.org/utf8-length/-/utf8-length-0.0.1.tgz",
- "integrity": "sha512-j/XH2ftofBiobnyApxlN/J6j/ixwT89WEjDcjT66d2i0+GIn9RZfzt8lpEXXE4jUe4NsjBSUq70kS2euQ4nnMw=="
+ "license": "MIT"
},
"node_modules/util-deprecate": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ "license": "MIT"
},
"node_modules/uuid": {
"version": "9.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
- "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
+ "license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/v8-to-istanbul": {
"version": "9.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
- "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -17612,14 +19847,11 @@
}
},
"node_modules/valid-url": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
- "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
+ "version": "1.0.9"
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -17627,17 +19859,15 @@
},
"node_modules/vary": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/vscode-json-languageservice": {
"version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz",
- "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"jsonc-parser": "^3.0.0",
"vscode-languageserver-textdocument": "^1.0.3",
@@ -17648,59 +19878,51 @@
},
"node_modules/vscode-languageserver-textdocument": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz",
- "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.2",
- "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
- "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/vscode-nls": {
"version": "5.2.0",
- "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
- "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/vscode-uri": {
"version": "3.0.7",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz",
- "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/walkdir": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz",
- "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/walker": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"makeerror": "1.0.12"
}
},
"node_modules/wcwidth": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "license": "MIT",
"dependencies": {
"defaults": "^1.0.3"
}
},
"node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -17713,9 +19935,8 @@
},
"node_modules/which-boxed-primitive": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
@@ -17729,15 +19950,13 @@
},
"node_modules/which-module": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
- "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/which-typed-array": {
"version": "1.1.9",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
- "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -17753,11 +19972,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
"node_modules/widest-line": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"string-width": "^4.0.0"
},
@@ -17767,8 +19992,7 @@
},
"node_modules/winston": {
"version": "3.8.2",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz",
- "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==",
+ "license": "MIT",
"dependencies": {
"@colors/colors": "1.5.0",
"@dabh/diagnostics": "^2.0.2",
@@ -17788,8 +20012,7 @@
},
"node_modules/winston-transport": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
- "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
+ "license": "MIT",
"dependencies": {
"logform": "^2.3.2",
"readable-stream": "^3.6.0",
@@ -17801,8 +20024,7 @@
},
"node_modules/winston-transport/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -17814,8 +20036,7 @@
},
"node_modules/winston/node_modules/readable-stream": {
"version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -17827,23 +20048,20 @@
},
"node_modules/word-wrap": {
"version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/wordwrap": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ "license": "MIT"
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -17859,9 +20077,8 @@
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -17876,47 +20093,41 @@
},
"node_modules/wrappy": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ "license": "ISC"
},
"node_modules/xtend": {
"version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/y18n": {
"version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yallist": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/yaml": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz",
- "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==",
- "dev": true,
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"engines": {
"node": ">= 14"
}
},
"node_modules/yargs": {
"version": "17.7.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
- "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -17932,43 +20143,38 @@
},
"node_modules/yargs-parser": {
"version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yargs/node_modules/yargs-parser": {
"version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/ylru": {
"version": "1.3.2",
- "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz",
- "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==",
+ "license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/yn": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
- "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "license": "MIT",
"engines": {
"node": ">=10"
},
diff --git a/package.json b/package.json
index 557bc9b4cb5..6e5ce2f9a6a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "rudder-transformer",
- "version": "1.39.1",
+ "version": "1.52.1",
"description": "",
"homepage": "https://github.com/rudderlabs/rudder-transformer#readme",
"bugs": {
@@ -23,19 +23,23 @@
"lint:fix": "eslint . --fix",
"lint:fix:json": "eslint --ext .json --fix .",
"check:merge": "npm run verify || exit 1; codecov",
- "start": "node ./dist/src/index.js",
+ "start": "cd dist;node ./src/index.js;cd ..",
"build:start": "npm run build && npm run start",
"build:ci": "tsc -p tsconfig.json",
"build:swagger": "npm run build && npm run setup:swagger",
"build": "npm run build:ci && npm run copy",
+ "clean:build": "npm run clean && npm run build",
"build:clean": "npm run clean && npm run build",
"verify": "eslint . || exit 1; npm run test:js || exit 1",
"test:testRouter": "jest testRouter --detectOpenHandles --coverage --notify --watchAll=false",
"test:benchmark": "node benchmark/index.js",
+ "test": "jest -c jest.config.js --detectOpenHandles",
+ "test:ci": "npm run test -- --coverage --expand --maxWorkers=50%",
"test:js": "jest -c jest.default.config.js --detectOpenHandles",
"test:js:silent": "npm run test:js -- --silent",
"test:js:ci": "npm run test:js -- --coverage --expand --maxWorkers=50%",
"test:ts": "jest -c jest.config.typescript.js --detectOpenHandles",
+ "test:ts:component:generateNwMocks": "npm run test:ts -- component --generate=true",
"test:ts:silent": "npm run test:ts -- --silent",
"test:ts:ci": "npm run test:ts -- --coverage --expand --maxWorkers=50%",
"test:ut:integration": "jest \"user_transformation.integration.test.js\" --detectOpenHandles --notify",
@@ -45,27 +49,30 @@
"commit-msg": "commitlint --edit",
"prepare": "node ./scripts/skipPrepareScript.js || husky install",
"release": "npx standard-version",
- "release:github": "DEBUG=conventional-github-releaser npx conventional-github-releaser -p angular --config github-release.config.js",
+ "release:github": "DEBUG=conventional-github-releaser npx conventional-github-releaser -p angular -v",
"clean:node": "modclean",
"check:lint": "eslint . -f json -o reports/eslint.json || exit 0"
},
"dependencies": {
"@amplitude/ua-parser-js": "^0.7.24",
- "@aws-sdk/client-personalize": "^3.363.0",
+ "@aws-sdk/client-personalize": "^3.391.0",
"@aws-sdk/client-s3": "^3.370.0",
- "@aws-sdk/credential-providers": "^3.363.0",
- "@aws-sdk/lib-storage": "^3.370.0",
+ "@aws-sdk/credential-providers": "^3.391.0",
+ "@aws-sdk/lib-storage": "^3.391.0",
"@bugsnag/js": "^7.20.2",
"@datadog/pprof": "^3.1.0",
"@koa/router": "^12.0.0",
"@ndhoule/extend": "^2.0.0",
+ "@pyroscope/nodejs": "^0.2.6",
+ "@rudderstack/integrations-lib": "^0.1.8",
+ "@rudderstack/workflow-engine": "^0.6.9",
"ajv": "^8.12.0",
"ajv-draft-04": "^1.0.0",
"ajv-formats": "^2.1.1",
- "axios": "^1.4.0",
+ "axios": "^1.6.0",
"btoa": "^1.2.1",
"component-each": "^0.2.6",
- "crypto-js": "^4.1.1",
+ "crypto-js": "^4.2.0",
"dotenv": "^16.0.3",
"flat": "^5.0.2",
"form-data": "^4.0.0",
@@ -91,14 +98,13 @@
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"node-cache": "^5.1.2",
- "node-fetch": "^2.6.9",
+ "node-fetch": "^2.6.12",
"oauth-1.0a": "^2.2.6",
"object-hash": "^3.0.0",
"parse-static-imports": "^1.1.0",
"prom-client": "^14.2.0",
"qs": "^6.11.1",
"rudder-transformer-cdk": "^1.4.11",
- "rudder-workflow-engine": "^0.4.7",
"set-value": "^4.1.0",
"sha256": "^0.2.0",
"stacktrace-parser": "^0.1.10",
@@ -112,6 +118,7 @@
"devDependencies": {
"@commitlint/config-conventional": "^17.6.3",
"@digitalroute/cz-conventional-changelog-for-jira": "^8.0.1",
+ "@types/fast-json-stable-stringify": "^2.1.0",
"@types/jest": "^29.5.1",
"@types/koa": "^2.13.6",
"@types/koa-bodyparser": "^4.3.10",
@@ -119,6 +126,7 @@
"@types/node": "^20.2.5",
"@typescript-eslint/eslint-plugin": "^5.61.0",
"@typescript-eslint/parser": "^5.59.2",
+ "axios-mock-adapter": "^1.22.0",
"benchmark-suite": "^0.1.8",
"commander": "^10.0.1",
"commitizen": "^4.3.0",
diff --git a/sample.env b/sample.env
index 02ef06c9c61..71b11fbfcaa 100644
--- a/sample.env
+++ b/sample.env
@@ -9,3 +9,4 @@ REDIS_PORT = 6379
REDIS_PASSWORD = 123
REDIS_USERNAME = abc
USE_REDIS_DB = true
+REDIS_EXPIRY_TIME_IN_SEC = 3600
\ No newline at end of file
diff --git a/src/adapters/network.js b/src/adapters/network.js
index eb241152c3f..375d9dc9084 100644
--- a/src/adapters/network.js
+++ b/src/adapters/network.js
@@ -1,7 +1,7 @@
/* eslint-disable no-restricted-syntax */
/* eslint-disable no-undef */
-const _ = require('lodash');
+const lodash = require('lodash');
const http = require('http');
const https = require('https');
const axios = require('axios');
@@ -9,16 +9,19 @@ const log = require('../logger');
const stats = require('../util/stats');
const { removeUndefinedValues } = require('../v0/util');
const { processAxiosResponse } = require('./utils/networkUtils');
+// Only for tests
+const { setResponsesForMockAxiosAdapter } = require('../../test/testHelper');
const MAX_CONTENT_LENGTH = parseInt(process.env.MAX_CONTENT_LENGTH, 10) || 100000000;
const MAX_BODY_LENGTH = parseInt(process.env.MAX_BODY_LENGTH, 10) || 100000000;
+const REQUEST_TIMEOUT_IN_MS = parseInt(process.env.REQUEST_TIMEOUT_IN_MS, 10) || 1000 * 60;
// (httpsAgent, httpsAgent) ,these are deployment specific configs not request specific
const networkClientConfigs = {
// `method` is the request method to be used when making the request
method: 'get',
// `timeout` specifies the number of milliseconds before the request times out. If the request takes longer than `timeout`, the request will be aborted.
- timeout: 1000 * 60,
+ timeout: REQUEST_TIMEOUT_IN_MS,
// `withCredentials` indicates whether or not cross-site Access-Control requests should be made using credentials
withCredentials: false,
@@ -42,15 +45,36 @@ const networkClientConfigs = {
httpsAgent: new https.Agent({ keepAlive: true }),
};
-const fireLatencyStat = (startTime, statTags) => {
+const fireHTTPStats = (clientResponse, startTime, statTags) => {
const destType = statTags.destType ? statTags.destType : '';
const feature = statTags.feature ? statTags.feature : '';
+ const endpointPath = statTags.endpointPath ? statTags.endpointPath : '';
+ const statusCode = clientResponse.success ? clientResponse.response.status : '';
stats.timing('outgoing_request_latency', startTime, {
feature,
destType,
+ endpointPath,
+ });
+ stats.counter('outgoing_request_count', 1, {
+ feature,
+ destType,
+ endpointPath,
+ success: clientResponse.success,
+ statusCode,
});
};
+const enhanceRequestOptions = (options) => {
+ const requestOptions = {
+ ...networkClientConfigs,
+ ...options,
+ maxContentLength: MAX_CONTENT_LENGTH,
+ maxBodyLength: MAX_BODY_LENGTH,
+ };
+
+ return requestOptions;
+};
+
/**
* sends an http request with underlying client, expects request options
* @param {*} options
@@ -58,23 +82,21 @@ const fireLatencyStat = (startTime, statTags) => {
*/
const httpSend = async (options, statTags = {}) => {
let clientResponse;
- // here the options argument K-Vs will take priority over requestOptions
- const requestOptions = {
- ...networkClientConfigs,
- ...options,
- maxContentLength: MAX_CONTENT_LENGTH,
- maxBodyLength: MAX_BODY_LENGTH,
- };
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
+ const { url, data, method } = requestOptions;
try {
const response = await axios(requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+
+ setResponsesForMockAxiosAdapter({ url, data, method, options }, clientResponse);
return clientResponse;
};
@@ -88,16 +110,19 @@ const httpSend = async (options, statTags = {}) => {
*/
const httpGET = async (url, options, statTags = {}) => {
let clientResponse;
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
try {
- const response = await axios.get(url, options);
+ const response = await axios.get(url, requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+ setResponsesForMockAxiosAdapter({ url, options, method: 'GET' }, clientResponse);
return clientResponse;
};
@@ -111,16 +136,19 @@ const httpGET = async (url, options, statTags = {}) => {
*/
const httpDELETE = async (url, options, statTags = {}) => {
let clientResponse;
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
try {
- const response = await axios.delete(url, options);
+ const response = await axios.delete(url, requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+ setResponsesForMockAxiosAdapter({ url, options, method: 'DELETE' }, clientResponse);
return clientResponse;
};
@@ -135,16 +163,19 @@ const httpDELETE = async (url, options, statTags = {}) => {
*/
const httpPOST = async (url, data, options, statTags = {}) => {
let clientResponse;
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
try {
- const response = await axios.post(url, data, options);
+ const response = await axios.post(url, data, requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+ setResponsesForMockAxiosAdapter({ url, data, options, method: 'POST' }, clientResponse);
return clientResponse;
};
@@ -159,16 +190,19 @@ const httpPOST = async (url, data, options, statTags = {}) => {
*/
const httpPUT = async (url, data, options, statTags = {}) => {
let clientResponse;
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
try {
- const response = await axios.put(url, data, options);
+ const response = await axios.put(url, data, requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+ setResponsesForMockAxiosAdapter({ url, data, options, method: 'PUT' }, clientResponse);
return clientResponse;
};
@@ -183,16 +217,19 @@ const httpPUT = async (url, data, options, statTags = {}) => {
*/
const httpPATCH = async (url, data, options, statTags = {}) => {
let clientResponse;
+ // here the options argument K-Vs will take priority over the default options
+ const requestOptions = enhanceRequestOptions(options);
const startTime = new Date();
try {
- const response = await axios.patch(url, data, options);
+ const response = await axios.patch(url, data, requestOptions);
clientResponse = { success: true, response };
} catch (err) {
clientResponse = { success: false, response: err };
} finally {
- fireLatencyStat(startTime, statTags);
+ fireHTTPStats(clientResponse, startTime, statTags);
}
+ setResponsesForMockAxiosAdapter({ url, data, options, method: 'PATCH' }, clientResponse);
return clientResponse;
};
@@ -200,7 +237,7 @@ const getPayloadData = (body) => {
let payload;
let payloadFormat;
Object.entries(body).forEach(([key, value]) => {
- if (!_.isEmpty(value)) {
+ if (!lodash.isEmpty(value)) {
payload = value;
payloadFormat = key;
}
@@ -361,4 +398,5 @@ module.exports = {
getPayloadData,
getFormData,
handleHttpRequest,
+ enhanceRequestOptions,
};
diff --git a/src/adapters/networkHandlerFactory.js b/src/adapters/networkHandlerFactory.js
index 7cfa4b048e6..e8c3748d15a 100644
--- a/src/adapters/networkHandlerFactory.js
+++ b/src/adapters/networkHandlerFactory.js
@@ -8,6 +8,8 @@ const { getIntegrations } = require('../routes/utils');
const handlers = {
generic: GenericNetworkHandler,
+ v0: {},
+ v1: {},
};
// Dynamically import the network handlers for all
@@ -16,7 +18,17 @@ SUPPORTED_VERSIONS.forEach((version) => {
const destinations = getIntegrations(path.resolve(__dirname, `../${version}/destinations`));
destinations.forEach((dest) => {
try {
- handlers[dest] = require(`../${version}/destinations/${dest}/networkHandler`).networkHandler;
+ // handles = {
+ // v0: {
+ // dest: handler
+ // },
+ // v1: {
+ // dest: handler
+ // },
+ // generic: GenericNetworkHandler,
+ // }
+ handlers[version][dest] =
+ require(`../${version}/destinations/${dest}/networkHandler`).networkHandler;
} catch {
// Do nothing as exception indicates
// network handler is not defined for that destination
@@ -24,9 +36,15 @@ SUPPORTED_VERSIONS.forEach((version) => {
});
});
-const getNetworkHandler = (type) => {
- const NetworkHandler = handlers[type] || handlers.generic;
- return new NetworkHandler();
+const getNetworkHandler = (type, version) => {
+ let handlerVersion = version;
+ let NetworkHandler = handlers[version][type] || handlers.generic;
+ if (version === 'v1' && NetworkHandler === handlers.generic) {
+ NetworkHandler = handlers.v0[type] || handlers.generic;
+ handlerVersion = 'v0';
+ }
+ const networkHandler = new NetworkHandler();
+ return { networkHandler, handlerVersion };
};
module.exports = {
diff --git a/src/adapters/networkHandlerFactory.test.js b/src/adapters/networkHandlerFactory.test.js
new file mode 100644
index 00000000000..ff5f26a02d7
--- /dev/null
+++ b/src/adapters/networkHandlerFactory.test.js
@@ -0,0 +1,36 @@
+const { getNetworkHandler } = require('./networkHandlerFactory');
+const { networkHandler: GenericNetworkHandler } = require('./networkhandler/genericNetworkHandler');
+
+describe(`Network Handler Tests`, () => {
+ it('Should return v0 networkhandler', () => {
+ let { networkHandler, handlerVersion } = getNetworkHandler('campaign_manager', `v0`);
+ const cmProxy = require(`../v0/destinations/campaign_manager/networkHandler`).networkHandler;
+ expect(networkHandler).toEqual(new cmProxy());
+ });
+
+ it('Should return v0 networkhandler braze', () => {
+ let { networkHandler, handlerVersion } = getNetworkHandler('braze', `v0`);
+ const brazeProxy = require(`../v0/destinations/braze/networkHandler`).networkHandler;
+ expect(networkHandler).toEqual(new brazeProxy());
+ });
+
+ it('Should return v1 networkhandler', () => {
+ let { networkHandler, handlerVersion } = getNetworkHandler('campaign_manager', `v1`);
+ const cmProxy = require(`../v1/destinations/campaign_manager/networkHandler`).networkHandler;
+ expect(networkHandler).toEqual(new cmProxy());
+ });
+
+ it('Should return v0 handler if v1 version and handler is present for destination in v0', () => {
+ const { networkHandler, handlerVersion } = getNetworkHandler('braze', `v1`);
+ const brazeProxy = require(`../v0/destinations/braze/networkHandler`).networkHandler;
+ console.log(networkHandler);
+ expect(networkHandler).toEqual(new brazeProxy());
+ });
+
+ it('Should return generic handler', () => {
+ const { networkHandler, handlerVersion } = getNetworkHandler('abc', `v1`);
+ const brazeProxy = require(`../v0/destinations/braze/networkHandler`).networkHandler;
+ console.log(networkHandler);
+ expect(networkHandler).toEqual(new GenericNetworkHandler());
+ });
+});
diff --git a/src/adapters/networkhandler/authConstants.js b/src/adapters/networkhandler/authConstants.js
index c9a6a578358..f88361107ae 100644
--- a/src/adapters/networkhandler/authConstants.js
+++ b/src/adapters/networkhandler/authConstants.js
@@ -2,6 +2,6 @@
* This class is used for handling Auth related errors
*/
module.exports = {
- DISABLE_DEST: 'DISABLE_DESTINATION',
REFRESH_TOKEN: 'REFRESH_TOKEN',
+ AUTH_STATUS_INACTIVE: 'AUTH_STATUS_INACTIVE',
};
diff --git a/src/adapters/networkhandler/genericNetworkHandler.js b/src/adapters/networkhandler/genericNetworkHandler.js
index 23bdc1d7a2f..bcbcb212592 100644
--- a/src/adapters/networkhandler/genericNetworkHandler.js
+++ b/src/adapters/networkhandler/genericNetworkHandler.js
@@ -1,7 +1,7 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { isHttpStatusSuccess } = require('../../v0/util/index');
const { proxyRequest, prepareProxyRequest } = require('../network');
const { getDynamicErrorType, processAxiosResponse } = require('../utils/networkUtils');
-const { NetworkError } = require('../../v0/util/errorTypes');
const tags = require('../../v0/util/tags');
/**
diff --git a/src/adapters/utils/networkUtils.js b/src/adapters/utils/networkUtils.js
index 39b0e0504a5..0dcb9931e92 100644
--- a/src/adapters/utils/networkUtils.js
+++ b/src/adapters/utils/networkUtils.js
@@ -1,6 +1,7 @@
/* eslint-disable eqeqeq */
-const _ = require('lodash');
+const lodash = require('lodash');
const { isEmpty } = require('lodash');
+const { AbortedError } = require('@rudderstack/integrations-lib');
const {
isHttpStatusRetryable,
isDefinedAndNotNullAndNotEmpty,
@@ -9,7 +10,6 @@ const {
isHttpStatusSuccess,
getErrorStatusCode,
} = require('../../v0/util');
-const { AbortedError } = require('../../v0/util/errorTypes');
const tags = require('../../v0/util/tags');
const { HTTP_STATUS_CODES } = require('../../v0/util/constant');
@@ -71,6 +71,14 @@ const nodeSysErrorToStatus = (code) => {
status: 500,
message: '[ETIMEDOUT] :: Operation timed out',
},
+ EAI_AGAIN: {
+ status: 500,
+ message: '[EAI_AGAIN] :: Temporary failure in name resolution',
+ },
+ ECONNABORTED: {
+ status: 500,
+ message: '[ECONNABORTED] :: Connection aborted',
+ },
};
return sysErrorToStatusMap[code] || { status: 400, message: `[${code}]` };
};
@@ -100,7 +108,7 @@ const parseDestResponse = (destResponse, destination = '') => {
if (
!isDefinedAndNotNull(responseBody) ||
!isDefinedAndNotNull(status) ||
- !_.isNumber(status) ||
+ !lodash.isNumber(status) ||
status === 0
) {
throw new AbortedError(
diff --git a/src/cdk/v1/autopilot/transform.js b/src/cdk/v1/autopilot/transform.js
index 613b985c0d5..b27e50f096e 100644
--- a/src/cdk/v1/autopilot/transform.js
+++ b/src/cdk/v1/autopilot/transform.js
@@ -1,5 +1,5 @@
const { Utils } = require('rudder-transformer-cdk');
-const { InstrumentationError } = require('../../../v0/util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
function identifyPostMapper(event, mappedPayload) {
const { message } = event;
diff --git a/src/cdk/v1/dcm_floodlight/transform.js b/src/cdk/v1/dcm_floodlight/transform.js
index 4025c3cc01d..bb93333745a 100644
--- a/src/cdk/v1/dcm_floodlight/transform.js
+++ b/src/cdk/v1/dcm_floodlight/transform.js
@@ -1,10 +1,11 @@
/* eslint-disable no-param-reassign */
const get = require('get-value');
-const _ = require('lodash');
+const lodash = require('lodash');
const {
removeUndefinedAndNullValues,
isDefinedAndNotNull,
} = require('rudder-transformer-cdk/build/utils');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
getIntegrationsObj,
isEmpty,
@@ -14,7 +15,6 @@ const {
} = require('../../../v0/util');
const { GENERIC_TRUE_VALUES, GENERIC_FALSE_VALUES } = require('../../../constants');
const { BASE_URL, BLACKLISTED_CHARACTERS } = require('./config');
-const { ConfigurationError, InstrumentationError } = require('../../../v0/util/errorTypes');
// append properties to endpoint
// eg: ${BASE_URL}key1=value1;key2=value2;....
@@ -44,7 +44,7 @@ const transformCustomVariable = (customFloodlightVariable, message) => {
if (
// the value is not null
- !_.isNil(itemValue) &&
+ !lodash.isNil(itemValue) &&
// the value is string and doesn't have any blacklisted characters
!(
typeof itemValue === 'string' && BLACKLISTED_CHARACTERS.some((k) => itemValue.includes(k))
diff --git a/src/cdk/v1/handler.js b/src/cdk/v1/handler.js
index a7dfe85a9ff..0af0859f496 100644
--- a/src/cdk/v1/handler.js
+++ b/src/cdk/v1/handler.js
@@ -6,13 +6,13 @@ const path = require('path');
const basePath = path.resolve(__dirname);
ConfigFactory.init({ basePath, loggingMode: 'production' });
-const tags = require('../../v0/util/tags');
-const { generateErrorObject } = require('../../v0/util');
const {
+ InstrumentationError,
TransformationError,
ConfigurationError,
- InstrumentationError,
-} = require('../../v0/util/errorTypes');
+} = require('@rudderstack/integrations-lib');
+const tags = require('../../v0/util/tags');
+const { generateErrorObject } = require('../../v0/util');
const defTags = {
[tags.TAG_NAMES.IMPLEMENTATION]: tags.IMPLEMENTATIONS.CDK_V1,
diff --git a/src/cdk/v1/new_relic/transform.js b/src/cdk/v1/new_relic/transform.js
index 67858910ad6..43cebd548f6 100644
--- a/src/cdk/v1/new_relic/transform.js
+++ b/src/cdk/v1/new_relic/transform.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-param-reassign */
const { isBoolean } = require('lodash');
const { Utils } = require('rudder-transformer-cdk');
diff --git a/src/cdk/v2/bindings/default.js b/src/cdk/v2/bindings/default.js
index 4c9b0462140..a447370aca8 100644
--- a/src/cdk/v2/bindings/default.js
+++ b/src/cdk/v2/bindings/default.js
@@ -1,8 +1,9 @@
+const crypto = require('crypto');
const {
InstrumentationError,
ConfigurationError,
NetworkError,
-} = require('../../../v0/util/errorTypes');
+} = require('@rudderstack/integrations-lib');
const { isHttpStatusSuccess } = require('../../../v0/util');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../../v0/util/tags');
@@ -34,20 +35,25 @@ function assertConfig(val, message) {
}
}
-function assertHttpResp(response, message) {
- if (!isHttpStatusSuccess(response.status)) {
+function assertHttpResp(processedResponse, message) {
+ if (!isHttpStatusSuccess(processedResponse.status)) {
throw new NetworkError(
message,
- message.status,
+ processedResponse.status,
{
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(response.status),
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status),
},
- response,
+ processedResponse.response,
);
}
}
+function MD5(data) {
+ return crypto.createHash('md5').update(data).digest('hex');
+}
+
module.exports = {
+ MD5,
isValidEventType,
assert,
assertConfig,
diff --git a/src/cdk/v2/destinations/dcm_floodlight/utils.js b/src/cdk/v2/destinations/dcm_floodlight/utils.js
index e50f4f3b40a..07b158efa3e 100644
--- a/src/cdk/v2/destinations/dcm_floodlight/utils.js
+++ b/src/cdk/v2/destinations/dcm_floodlight/utils.js
@@ -1,7 +1,7 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { getValueFromPropertiesOrTraits, getHashFromArray } = require('../../../../v0/util');
const { GENERIC_TRUE_VALUES, GENERIC_FALSE_VALUES } = require('../../../../constants');
-const { InstrumentationError } = require('../../../../v0/util/errorTypes');
// valid flag should be provided [1|true] or [0|false]
const mapFlagValue = (key, value) => {
@@ -35,7 +35,7 @@ const transformCustomVariable = (customFloodlightVariable, message) => {
if (
// the value is not null
- !_.isNil(itemValue) &&
+ !lodash.isNil(itemValue) &&
// the value is string and doesn't have any blacklisted characters
!(
typeof itemValue === 'string' && BLACKLISTED_CHARACTERS.some((k) => itemValue.includes(k))
diff --git a/src/cdk/v2/destinations/eloqua/config.js b/src/cdk/v2/destinations/eloqua/config.js
new file mode 100644
index 00000000000..ac7b1edf3fd
--- /dev/null
+++ b/src/cdk/v2/destinations/eloqua/config.js
@@ -0,0 +1,5 @@
+const ELOQUA = 'eloqua';
+
+module.exports = {
+ ELOQUA,
+};
diff --git a/src/cdk/v2/destinations/eloqua/procWorkflow.yaml b/src/cdk/v2/destinations/eloqua/procWorkflow.yaml
new file mode 100644
index 00000000000..f694551c544
--- /dev/null
+++ b/src/cdk/v2/destinations/eloqua/procWorkflow.yaml
@@ -0,0 +1,46 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - path: ./config
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - path: ./utils
+
+steps:
+ - name: validateInput
+ template: |
+ let messageType = .message.type;
+ $.assert(messageType, "message Type is not present. Aborting message.");
+ $.assert(.message.type.toLowerCase() ==='identify' || .message.type.toLowerCase() ==='track', "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message.");
+ $.assert(.message.traits || .message.properties, "Message traits/properties not present. Aborting message.");
+
+ - name: prepareCommonResponse
+ description: |
+ Populate traits
+ template: |
+ const identifierKey = .message.context.externalId[0].identifierType
+ let data = .message.traits || .message.properties
+ data = $.stringifyValues(data)
+ data[identifierKey] = .message.userId
+ data
+ - name: prepareResponse
+ description: |
+ Populate traits
+ template: |
+ let eventType = (.message.context.externalId[0].type.split('-')[1].toString() === "contacts") ? 'identify' : 'track';
+ {
+ identifierFieldName: .message.context.externalId[0].identifierType,
+ data: $.outputs.prepareCommonResponse,
+ customObjectId: .message.context.externalId[0].type.split('-')[1].toString(),
+ type: eventType
+ }
+ - name: buildResponseForProcessTransformation
+ description: build response
+ template: |
+ const response = $.defaultRequestConfig();
+ response.body.JSON = $.outputs.prepareResponse
+ response
diff --git a/src/cdk/v2/destinations/eloqua/utils.js b/src/cdk/v2/destinations/eloqua/utils.js
new file mode 100644
index 00000000000..a8e2afb3f8f
--- /dev/null
+++ b/src/cdk/v2/destinations/eloqua/utils.js
@@ -0,0 +1,12 @@
+const stringifyValues = (data) => {
+ const output = data;
+ Object.keys(output).forEach((key) => {
+ if (typeof output[key] !== 'string') {
+ output[key] = JSON.stringify(output[key]);
+ }
+ });
+ return output;
+};
+module.exports = {
+ stringifyValues,
+};
diff --git a/src/cdk/v2/destinations/fullstory/procWorkflow.yaml b/src/cdk/v2/destinations/fullstory/procWorkflow.yaml
new file mode 100644
index 00000000000..50ac2a81630
--- /dev/null
+++ b/src/cdk/v2/destinations/fullstory/procWorkflow.yaml
@@ -0,0 +1,104 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+
+steps:
+ - name: validateInput
+ template: |
+ $.assert(.message.type, "message Type is not present. Aborting message.");
+ $.assert(.message.type in {{$.EventType.([.TRACK, .IDENTIFY])}},
+ "message type " + .message.type + " is not supported");
+ - name: prepareContext
+ template: |
+ $.context.messageType = .message.type.toLowerCase();
+ $.context.payload = {};
+ $.context.finalHeaders = {
+ "authorization": "Basic " + .destination.Config.apiKey,
+ "content-type": "application/json"
+ };
+ - name: identifyPayload
+ condition: $.context.messageType == "identify"
+ template: |
+ $.context.endpoint = "https://api.fullstory.com/v2/users";
+ $.context.payload.properties = .message.traits ?? .message.context.traits;
+ $.context.payload.uid = .message.userId;
+ $.context.payload.email = .message.context.traits.email;
+ $.context.payload.display_name = .message.context.traits.name;
+
+ - name: trackPayload
+ condition: $.context.messageType == "track"
+ template: |
+ $.context.endpoint = "https://api.fullstory.com/v2/events";
+ $.context.payload.name = .message.event;
+ $.context.payload.properties = .message.properties;
+ $.context.payload.timestamp = .message.originalTimestamp;
+ $.context.payload.context = {};
+
+ - name: validateEventName
+ condition: $.context.messageType == "track"
+ template: |
+ $.assert(.message.event, "event is required for track call")
+
+ - name: mapContextFieldsForTrack
+ condition: $.context.messageType == "track"
+ template: |
+ $.context.payload.context.browser = {
+ "url": .message.context.page.url,
+ "user_agent": .message.context.userAgent,
+ "initial_referrer": .message.context.page.initial_referrer,
+ };
+ $.context.payload.context.mobile = {
+ "app_name": .message.context.app.name,
+ "app_version": .message.context.app.version,
+ };
+ $.context.payload.context.device = {
+ "manufacturer": .message.context.device.manufacturer,
+ "model": .message.context.device.model,
+ };
+ $.context.payload.context.location = {
+ "ip_address": .message.context.ip,
+ "latitude": .message.properties.latitude,
+ "longitude": .message.properties.longitude,
+ "city": .message.properties.city,
+ "region": .message.properties.region,
+ "country": .message.properties.country,
+ };
+
+ - name: mapIdsForTrack
+ condition: $.context.messageType == "track"
+ template: |
+ $.context.payload.session = {
+ "id": .message.properties.sessionId,
+ "use_most_recent": .message.properties.useMostRecent,
+ };
+ $.context.payload.user = {
+ "id": .message.properties.userId ?? .message.userId,
+ }
+
+ - name: cleanPayload
+ template: |
+ $.context.payload = $.removeUndefinedAndNullValues($.context.payload);
+ - name: buildResponseForProcessTransformation
+ template: |
+ $.context.payload.({
+ "body": {
+ "JSON": .,
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": $.context.endpoint,
+ "headers": $.context.finalHeaders,
+ "params": {},
+ "files": {}
+ })
+
+
+
diff --git a/src/cdk/v2/destinations/gladly/procWorkflow.yaml b/src/cdk/v2/destinations/gladly/procWorkflow.yaml
new file mode 100644
index 00000000000..fe8697bc31a
--- /dev/null
+++ b/src/cdk/v2/destinations/gladly/procWorkflow.yaml
@@ -0,0 +1,88 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ./utils
+ exportAll: true
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+ - name: getDestinationExternalID
+ path: ../../../../v0/util
+ - name: httpGET
+ path: ../../../../adapters/network
+ - name: processAxiosResponse
+ path: ../../../../adapters/utils/networkUtils
+
+
+steps:
+ - name: checkIfProcessed
+ condition: .message.statusCode
+ template: |
+ $.batchMode ? .message.body.JSON : .message
+ onComplete: return
+
+ - name: messageType
+ template: |
+ .message.type.toLowerCase()
+
+ - name: validateInput
+ template: |
+ let messageType = $.outputs.messageType
+ $.assert(messageType, "message Type is not present. Aborting")
+ $.assert(messageType in {{$.EventType.([.IDENTIFY])}}, "message type " + messageType + " is not supported")
+ $.assertConfig(.destination.Config.apiToken, "API Token is not present. Aborting")
+ $.assertConfig(.destination.Config.domain, "Gladly domain is not present. Aborting")
+ $.assertConfig(.destination.Config.userName, "User Name is not present. Aborting")
+
+ - name: preparePayload
+ template: |
+ $.context.payload = {
+ name: .message.traits.name || .message.context.traits.name,
+ image: .message.traits.avatar || .message.context.traits.avatar,
+ address: .message.traits.address || .message.context.traits.address
+ }
+ $.context.payload.address && typeof $.context.payload.address === "object" ? $.context.payload.address = JSON.stringify($.context.payload.address)
+ $.context.payload.emails = $.formatField(.message, "email")
+ $.context.payload.phones = $.formatField(.message, "phone")
+ $.context.payload.customAttributes = $.getCustomAttributes(.message)
+ $.context.payload.externalCustomerId = $.getExternalCustomerId(.message)
+ $.context.payload.id = $.getCustomerId(.message)
+ $.context.payload = $.removeUndefinedAndNullValues($.context.payload)
+
+ - name: validatePayload
+ template: |
+ $.validatePayload($.context.payload)
+
+ - name: findCustomer
+ description: Find if customer is exist or not based on email, phone or externalCustomerId
+ condition: $.getQueryParams($.context.payload) !== undefined
+ template: |
+ const requestOptions = {
+ headers: $.getHeaders(.destination)
+ }
+ const endpoint = $.getEndpoint(.destination) + "?" + $.getQueryParams($.context.payload);
+ const rawResponse = await $.httpGET(endpoint,requestOptions)
+ const processedResponse = $.processAxiosResponse(rawResponse)
+ processedResponse
+
+ - name: createCustomer
+ description: Build response for create customer
+ condition: $.outputs.findCustomer.status === 400 || ($.outputs.findCustomer.status === 200 && $.outputs.findCustomer.response.length === 0) || $.getQueryParams($.context.payload) === undefined
+ template: |
+ const response = $.defaultRequestConfig()
+ response.body.JSON = $.removeUndefinedAndNullValues($.context.payload)
+ response.endpoint = $.getEndpoint(.destination)
+ response.method = "POST"
+ response.headers = $.getHeaders(.destination)
+ response
+ else:
+ name: updateCustomer
+ description: Build response for update customer
+ template: |
+ const response = $.defaultRequestConfig()
+ response.body.JSON = $.removeUndefinedAndNullValues($.context.payload.{~["id"]})
+ response.endpoint = $.getEndpoint(.destination) + "/" + $.outputs.findCustomer.response[0].id
+ response.method = "PATCH"
+ response.headers = $.getHeaders(.destination)
+ response
diff --git a/src/cdk/v2/destinations/gladly/rtWorkflow.yaml b/src/cdk/v2/destinations/gladly/rtWorkflow.yaml
new file mode 100644
index 00000000000..341e5552c83
--- /dev/null
+++ b/src/cdk/v2/destinations/gladly/rtWorkflow.yaml
@@ -0,0 +1,33 @@
+bindings:
+ - name: handleRtTfSingleEventError
+ path: ../../../../v0/util/index
+ - path: ./utils
+ exportAll: true
+
+steps:
+ - name: validateInput
+ template: |
+ $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array")
+
+ - name: transform
+ externalWorkflow:
+ path: ./procWorkflow.yaml
+ loopOverInput: true
+
+ - name: successfulEvents
+ template: |
+ $.outputs.transform#idx.output.({
+ "batchedRequest": .,
+ "batched": false,
+ "destination": ^[idx].destination,
+ "metadata": ^[idx].metadata[],
+ "statusCode": 200
+ })[]
+ - name: failedEvents
+ template: |
+ $.outputs.transform#idx.error.(
+ $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {})
+ )[]
+ - name: finalPayload
+ template: |
+ [...$.outputs.successfulEvents, ...$.outputs.failedEvents]
\ No newline at end of file
diff --git a/src/cdk/v2/destinations/gladly/utils.js b/src/cdk/v2/destinations/gladly/utils.js
new file mode 100644
index 00000000000..0489f410ec7
--- /dev/null
+++ b/src/cdk/v2/destinations/gladly/utils.js
@@ -0,0 +1,174 @@
+const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
+const { base64Convertor, getDestinationExternalID } = require('../../../../v0/util');
+const { MappedToDestinationKey } = require('../../../../constants');
+
+const reservedCustomAttributes = [
+ 'email',
+ 'phone',
+ 'address',
+ 'name',
+ 'avatar',
+ 'firstName',
+ 'lastName',
+ 'userId',
+];
+
+const externalIdKey = 'context.externalId.0.id';
+const identifierTypeKey = 'context.externalId.0.identifierType';
+
+const getHeaders = (destination) => {
+ const { apiToken, userName } = destination.Config;
+ const credentials = `${userName}:${apiToken}`;
+ const base64Credentials = base64Convertor(credentials);
+ return {
+ 'Content-Type': 'application/json',
+ Authorization: `Basic ${base64Credentials}`,
+ };
+};
+
+const getEndpoint = (destination) => {
+ const { domain } = destination.Config;
+ return `https://${domain}/api/v1/customer-profiles`;
+};
+
+const getFieldValue = (field) => {
+ if (field) {
+ if (Array.isArray(field)) {
+ return field.map((item) => ({ original: item }));
+ }
+ return [{ original: field }];
+ }
+ return undefined;
+};
+
+const formatFieldForRETl = (message, fieldName) => {
+ const identifierType = get(message, identifierTypeKey);
+ if (identifierType && identifierType === fieldName) {
+ const field = get(message, externalIdKey);
+ if (field) {
+ return [{ original: field }];
+ }
+ }
+ const key = fieldName === 'email' ? 'emails' : 'phones';
+ const field = get(message, `traits.${key}`);
+ return getFieldValue(field);
+};
+
+const formatFieldForEventStream = (message, fieldName) => {
+ const field = get(message, `context.traits.${fieldName}`);
+ return getFieldValue(field);
+};
+
+const formatField = (message, fieldName) => {
+ const mappedToDestination = get(message, MappedToDestinationKey);
+ if (mappedToDestination) {
+ return formatFieldForRETl(message, fieldName);
+ }
+ return formatFieldForEventStream(message, fieldName);
+};
+
+const getCustomAttributes = (message) => {
+ const mappedToDestination = get(message, MappedToDestinationKey);
+ // for rETL
+ if (mappedToDestination) {
+ if (message?.traits?.customAttributes && typeof message.traits.customAttributes === 'object') {
+ return Object.keys(message.traits.customAttributes).length > 0
+ ? message.traits.customAttributes
+ : undefined;
+ }
+ return undefined;
+ }
+
+ // for event stream
+ const customAttributes = message.context?.traits || {};
+ reservedCustomAttributes.forEach((customAttribute) => {
+ if (customAttributes[customAttribute]) {
+ delete customAttributes[customAttribute];
+ }
+ });
+ return Object.keys(customAttributes).length > 0 ? customAttributes : undefined;
+};
+
+const getExternalCustomerId = (message) => {
+ const mappedToDestination = get(message, MappedToDestinationKey);
+ // for rETL
+ if (mappedToDestination) {
+ const identifierType = get(message, identifierTypeKey);
+ if (identifierType === 'externalCustomerId') {
+ return get(message, externalIdKey);
+ }
+
+ if (message?.traits?.externalCustomerId) {
+ return message.traits.externalCustomerId;
+ }
+
+ return undefined;
+ }
+
+ // for event stream
+ return message.userId;
+};
+
+const getCustomerId = (message) => {
+ const mappedToDestination = get(message, MappedToDestinationKey);
+ // for rETL
+ if (mappedToDestination) {
+ const identifierType = get(message, identifierTypeKey);
+ if (identifierType === 'id') {
+ return get(message, externalIdKey);
+ }
+
+ if (message?.traits?.id) {
+ return message.traits.id;
+ }
+
+ return undefined;
+ }
+
+ // for event stream
+ const customerId = getDestinationExternalID(message, 'GladlyCustomerId');
+ if (customerId) {
+ return customerId;
+ }
+
+ return undefined;
+};
+
+const validatePayload = (payload) => {
+ if (!(payload?.phones || payload?.emails || payload?.id || payload?.externalCustomerId)) {
+ throw new InstrumentationError(
+ 'One of phone, email, userId or GladlyCustomerId is required for an identify call',
+ );
+ }
+};
+
+const getQueryParams = (payload) => {
+ if (payload.emails && payload.emails.length > 0) {
+ return `email=${encodeURIComponent(payload.emails[0].original)}`;
+ }
+
+ if (payload.phones && payload.phones.length > 0) {
+ return `phoneNumber=${encodeURIComponent(payload.phones[0].original)}`;
+ }
+
+ if (payload.externalCustomerId) {
+ return `externalCustomerId=${encodeURIComponent(payload.externalCustomerId)}`;
+ }
+
+ return undefined;
+};
+
+module.exports = {
+ getHeaders,
+ getEndpoint,
+ formatField,
+ getFieldValue,
+ getCustomerId,
+ getQueryParams,
+ validatePayload,
+ formatFieldForRETl,
+ getCustomAttributes,
+ getExternalCustomerId,
+ formatFieldForEventStream,
+};
diff --git a/src/cdk/v2/destinations/gladly/utils.test.js b/src/cdk/v2/destinations/gladly/utils.test.js
new file mode 100644
index 00000000000..116f150448f
--- /dev/null
+++ b/src/cdk/v2/destinations/gladly/utils.test.js
@@ -0,0 +1,503 @@
+const {
+ getHeaders,
+ getEndpoint,
+ formatField,
+ getCustomerId,
+ getFieldValue,
+ getQueryParams,
+ validatePayload,
+ formatFieldForRETl,
+ getCustomAttributes,
+ getExternalCustomerId,
+ formatFieldForEventStream,
+} = require('./utils');
+const { base64Convertor } = require('../../../../v0/util');
+
+describe('Unit test cases for getHeaders function', () => {
+ it('Should return headers', () => {
+ const destination = {
+ Config: {
+ apiToken: 'token',
+ userName: 'user',
+ },
+ };
+ const expectedHeaders = {
+ 'Content-Type': 'application/json',
+ Authorization: `Basic ${base64Convertor('user:token')}`,
+ };
+
+ const result = getHeaders(destination);
+
+ expect(result).toEqual(expectedHeaders);
+ });
+});
+
+describe('Unit test cases for getEndpoint function', () => {
+ it('Should return destination endpoint', () => {
+ const destination = {
+ Config: {
+ domain: 'rudderstack.us-uat.gladly.qa',
+ },
+ };
+ const expected = 'https://rudderstack.us-uat.gladly.qa/api/v1/customer-profiles';
+ const result = getEndpoint(destination);
+ expect(result).toBe(expected);
+ });
+});
+
+describe('Unit test cases for getFieldValue function', () => {
+ it('Should return an array with a single object containing the original value when the input field is a string', () => {
+ const field = 'rudderlabs1@gmail.com';
+ const result = getFieldValue(field);
+ expect(result).toEqual([{ original: field }]);
+ });
+
+ it('should return an array with each element containing the original value when the input field is an array', () => {
+ const field = ['rudderlabs1@gmail.com', 'rudderlabs2@gmail.com', 'rudderlabs3@gmail.com'];
+ const result = getFieldValue(field);
+ expect(result).toEqual([
+ {
+ original: 'rudderlabs1@gmail.com',
+ },
+ {
+ original: 'rudderlabs2@gmail.com',
+ },
+ {
+ original: 'rudderlabs3@gmail.com',
+ },
+ ]);
+ });
+
+ it('Should return undefined when the input field is null', () => {
+ const field = null;
+ const result = getFieldValue(field);
+ expect(result).toBeUndefined();
+ });
+
+ it('Should return undefined when the input field is undefined', () => {
+ const field = undefined;
+ const result = getFieldValue(field);
+ expect(result).toBeUndefined();
+ });
+});
+
+describe('Unit test cases for formatFieldForRETl function', () => {
+ it('should return the object containing the original value when identifierType matches fieldName', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'test@rudderlabs.com',
+ identifierType: 'email',
+ },
+ ],
+ },
+ traits: {
+ emails: ['test@rudderlabs.com', 'test@rudderlabshome.com'],
+ },
+ };
+ const fieldName = 'email';
+ const expected = [{ original: 'test@rudderlabs.com' }];
+
+ const result = formatFieldForRETl(message, fieldName);
+
+ expect(result).toEqual(expected);
+ });
+
+ it('Should retrieve the email value from traits when fieldName does not match with identifierType', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: '+91 9999999999',
+ identifierType: 'phone',
+ },
+ ],
+ },
+ traits: {
+ emails: ['test@rudderlabs.com', 'test@rudderlabshome.com'],
+ },
+ };
+ const fieldName = 'email';
+ const expected = [{ original: 'test@rudderlabs.com' }, { original: 'test@rudderlabshome.com' }];
+
+ const result = formatFieldForRETl(message, fieldName);
+
+ expect(result).toEqual(expected);
+ });
+});
+
+describe('Unit test cases for formatFieldForEventStream function', () => {
+ it('Should return field value when fieldName exist in payload', () => {
+ const message = {
+ context: {
+ traits: {
+ phone: '+91 9999999999',
+ },
+ },
+ };
+ const fieldName = 'phone';
+ const expected = [{ original: '+91 9999999999' }];
+
+ const result = formatFieldForEventStream(message, fieldName);
+ expect(result).toEqual(expected);
+ });
+
+ it('Should return undefined when fieldName does not exist in payload', () => {
+ const message = {
+ context: {
+ traits: {
+ phone: '+91 9999999999',
+ },
+ },
+ };
+ const fieldName = 'email';
+ const result = formatFieldForEventStream(message, fieldName);
+ expect(result).toBeUndefined();
+ });
+});
+
+describe('Unit test cases for formatField function', () => {
+ describe('rETL tests', () => {
+ it('Should return field value from externalId when identifier type matches with fieldName', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: '+91 9999999999',
+ identifierType: 'phone',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ traits: {
+ emails: ['test@rudderlabs.com', 'test@rudderlabshome.com'],
+ },
+ };
+ const result = formatField(message, 'phone');
+ expect(result).toEqual([{ original: '+91 9999999999' }]);
+ });
+
+ it('Should return field value from traits when identifier type does not match with fieldName', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'user@1',
+ identifierType: 'externalCustomerId',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ traits: {
+ phones: ['+91 9999999999'],
+ },
+ };
+ const result = formatField(message, 'phone');
+ expect(result).toEqual([{ original: '+91 9999999999' }]);
+ });
+ });
+
+ describe('Event stream tests', () => {
+ it('Should return field value from payload', () => {
+ const message = {
+ context: {
+ traits: {
+ phone: ['+91 9999999999'],
+ },
+ },
+ };
+ const result = formatField(message, 'phone');
+ expect(result).toEqual([{ original: '+91 9999999999' }]);
+ });
+ });
+});
+
+describe('Unit test cases for getCustomAttributes function', () => {
+ describe('rETL tests', () => {
+ it('Should return custom attributes from payload', () => {
+ const message = {
+ context: {
+ mappedToDestination: true,
+ },
+ traits: {
+ customAttributes: {
+ attribute1: 'value1',
+ attribute2: 'value2',
+ },
+ },
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toEqual({
+ attribute1: 'value1',
+ attribute2: 'value2',
+ });
+ });
+
+ it('Should return undefined when empty custom attributes object is present in payload', () => {
+ const message = {
+ context: {
+ mappedToDestination: true,
+ },
+ traits: {
+ customAttributes: {},
+ },
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toBeUndefined();
+ });
+
+ it('Should return undefined when no custom attributes are present in payload', () => {
+ const message = {
+ context: {
+ mappedToDestination: true,
+ },
+ traits: {},
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toBeUndefined();
+ });
+ });
+
+ describe('Event stream tests', () => {
+ it('Should filter traits and return remaining custom attributes from payload', () => {
+ const message = {
+ context: {
+ traits: {
+ name: 'John Doe',
+ email: 'john@gmail.com',
+ age: 65,
+ source: 'rudderstack',
+ },
+ },
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toEqual({
+ age: 65,
+ source: 'rudderstack',
+ });
+ });
+
+ it('Should return undefined when empty traits object is present in payload', () => {
+ const message = {
+ context: {
+ traits: {},
+ },
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toBeUndefined();
+ });
+
+ it('Should return undefined when no traits object is present in payload', () => {
+ const message = {
+ context: {},
+ };
+ const result = getCustomAttributes(message);
+ expect(result).toBeUndefined();
+ });
+ });
+});
+
+describe('Unit test cases for getExternalCustomerId function', () => {
+ describe('rETL tests', () => {
+ it('Should return the external ID when the identifier type is "externalCustomerId"', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'externalCustomer@1',
+ identifierType: 'externalCustomerId',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ };
+
+ const result = getExternalCustomerId(message);
+ expect(result).toBe('externalCustomer@1');
+ });
+
+ it('Should return the external ID from traits when identifier type is not "externalCustomerId"', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'test@rudderlabs.com',
+ identifierType: 'email',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ traits: {
+ externalCustomerId: 'externalCustomer@1',
+ },
+ };
+ const result = getExternalCustomerId(message);
+ expect(result).toBe('externalCustomer@1');
+ });
+
+ it('Should return undefined when external customer id is not present in payload', () => {
+ const message = {
+ context: {
+ mappedToDestination: true,
+ },
+ };
+
+ const result = getExternalCustomerId(message);
+ expect(result).toBeUndefined();
+ });
+ });
+
+ describe('Event stream tests', () => {
+ it('Should return the external ID as userId is present in payload', () => {
+ const message = {
+ userId: 'externalCustomer@1',
+ context: {},
+ };
+
+ const result = getExternalCustomerId(message);
+ expect(result).toBe('externalCustomer@1');
+ });
+
+ it('Should return undefined when userId is not present in payload', () => {
+ const message = {
+ context: {},
+ };
+
+ const result = getExternalCustomerId(message);
+ expect(result).toBeUndefined();
+ });
+ });
+});
+
+describe('Unit test cases for getCustomerId function', () => {
+ describe('rETL tests', () => {
+ it('Should return the customerId when the identifier type is "id"', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'user@1',
+ identifierType: 'id',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ };
+
+ const result = getCustomerId(message);
+ expect(result).toBe('user@1');
+ });
+
+ it('Should return the customerId from traits when identifier type is not "id"', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'test@rudderlabs.com',
+ identifierType: 'email',
+ },
+ ],
+ mappedToDestination: true,
+ },
+ traits: {
+ id: 'user@1',
+ },
+ };
+ const result = getCustomerId(message);
+ expect(result).toBe('user@1');
+ });
+
+ it('Should return undefined when customerId is not present in payload', () => {
+ const message = {
+ context: {
+ mappedToDestination: true,
+ },
+ };
+
+ const result = getCustomerId(message);
+ expect(result).toBeUndefined();
+ });
+ });
+
+ describe('Event stream tests', () => {
+ it('Should return the customerId as GladlyCustomerId is present in payload', () => {
+ const message = {
+ context: {
+ externalId: [
+ {
+ id: 'user@1',
+ type: 'GladlyCustomerId',
+ },
+ ],
+ },
+ };
+ const result = getCustomerId(message);
+ expect(result).toBe('user@1');
+ });
+
+ it('Should return undefined when GladlyCustomerId is not present in payload', () => {
+ const message = {
+ context: {},
+ };
+ const result = getCustomerId(message);
+ expect(result).toBeUndefined();
+ });
+ });
+});
+
+describe('Unit test cases for validatePayload function', () => {
+ it('Should throw an error when payload does not have all required fields', () => {
+ const payload = {};
+ try {
+ validatePayload(payload);
+ } catch (err) {
+ expect(err.message).toEqual(
+ 'One of phone, email, userId or GladlyCustomerId is required for an identify call',
+ );
+ }
+ });
+
+ it('Should throw an error when payload is undefined', () => {
+ const payload = undefined;
+ try {
+ validatePayload(payload);
+ } catch (err) {
+ expect(err.message).toEqual(
+ 'One of phone, email, userId or GladlyCustomerId is required for an identify call',
+ );
+ }
+ });
+});
+
+describe('Unit test cases for getQueryParams function', () => {
+ it('Should return email as query parameter if email is present in payload', () => {
+ const payload = {
+ emails: [{ original: 'test@example.com' }],
+ };
+ const result = getQueryParams(payload);
+ expect(result).toBe('email=test%40example.com');
+ });
+
+ it('Should return phone as query parameter if phone is present in payload', () => {
+ const payload = {
+ phones: [{ original: '+91 9999999999' }],
+ };
+ const result = getQueryParams(payload);
+ expect(result).toBe('phoneNumber=%2B91%209999999999');
+ });
+
+ it('Should return externalCustomerId as query parameter if externalCustomerId is present in payload', () => {
+ const payload = {
+ externalCustomerId: 'externalCustomer@1',
+ };
+ const result = getQueryParams(payload);
+ expect(result).toBe('externalCustomerId=externalCustomer%401');
+ });
+
+ it('should return undefined when no supported query params are present in payload', () => {
+ const payload = {};
+ const result = getQueryParams(payload);
+ expect(result).toBeUndefined();
+ });
+});
diff --git a/src/cdk/v2/destinations/launchdarkly_audience/config.js b/src/cdk/v2/destinations/launchdarkly_audience/config.js
new file mode 100644
index 00000000000..a1ec48a43c8
--- /dev/null
+++ b/src/cdk/v2/destinations/launchdarkly_audience/config.js
@@ -0,0 +1,15 @@
+const SUPPORTED_EVENT_TYPE = 'audiencelist';
+const ACTION_TYPES = ['add', 'remove'];
+const IDENTIFIER_KEY = 'identifier';
+// ref:- https://docs.launchdarkly.com/guides/integrations/build-synced-segments?q=othercapabilities#manifest-details
+// ref:- https://docs.launchdarkly.com/home/segments#targeting-users-in-segments
+const ENDPOINT = 'https://app.launchdarkly.com/api/v2/segment-targets/rudderstack';
+const MAX_IDENTIFIERS = 1000;
+
+module.exports = {
+ SUPPORTED_EVENT_TYPE,
+ ACTION_TYPES,
+ IDENTIFIER_KEY,
+ ENDPOINT,
+ MAX_IDENTIFIERS,
+};
diff --git a/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml b/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml
new file mode 100644
index 00000000000..48aad2bb79d
--- /dev/null
+++ b/src/cdk/v2/destinations/launchdarkly_audience/procWorkflow.yaml
@@ -0,0 +1,67 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - name: removeUndefinedNullEmptyExclBoolInt
+ path: ../../../../v0/util
+ - path: ./config
+ exportAll: true
+ - path: ./utils
+ exportAll: true
+
+steps:
+ - name: validateInput
+ template: |
+ let messageType = .message.type;
+ $.assertConfig(.destination.Config.audienceId, "Audience Id is not present. Aborting");
+ $.assertConfig(.destination.Config.audienceName, "Audience Name is not present. Aborting");
+ $.assertConfig(.destination.Config.accessToken, "Access Token is not present. Aborting");
+ $.assertConfig(.destination.Config.clientSideId, "Launch Darkly Client Side is not present. Aborting");
+ $.assert(.message.type, "Message Type is not present. Aborting message.");
+ $.assert(.message.type.toLowerCase() === $.SUPPORTED_EVENT_TYPE, "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message.");
+ $.assert(.message.properties, "Message properties is not present. Aborting message.");
+ $.assert(.message.properties.listData, "`listData` is not present inside properties. Aborting message.");
+ $.assert($.containsAll(Object.keys(.message.properties.listData), $.ACTION_TYPES), "Unsupported action type. Aborting message.")
+ $.assert(Object.keys(.message.properties.listData).length > 0, "`listData` is empty. Aborting message.")
+
+ - name: batchIdentifiersList
+ description: batch identifiers list
+ template: |
+ const batchedList = $.batchIdentifiersList(.message.properties.listData);
+ $.assert(batchedList.length > 0, "`listData` is empty. Aborting message.");
+ batchedList;
+
+ - name: prepareBasePayload
+ template: |
+ const payload = {
+ environmentId: .destination.Config.clientSideId,
+ cohortId: .destination.Config.audienceId,
+ cohortName: .destination.Config.audienceName,
+ contextKind: .destination.Config.audienceType
+ };
+ $.removeUndefinedNullEmptyExclBoolInt(payload);
+
+ - name: buildResponseForProcessTransformation
+ description: build multiplexed response depending upon batch size
+ template: |
+ $.outputs.batchIdentifiersList.().({
+ "body": {
+ "JSON": {...$.outputs.prepareBasePayload, listData: .},
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": {{$.ENDPOINT}},
+ "headers": {
+ "Authorization": ^.destination.Config.accessToken,
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "files": {}
+ })[]
diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.js
new file mode 100644
index 00000000000..6128fdfbfc3
--- /dev/null
+++ b/src/cdk/v2/destinations/launchdarkly_audience/utils.js
@@ -0,0 +1,87 @@
+const lodash = require('lodash');
+const { ACTION_TYPES, IDENTIFIER_KEY, MAX_IDENTIFIERS } = require('./config');
+
+/**
+ * Prepares a list of identifiers based on the provided data and identifier key.
+ * @param {*} listData The data containing lists of members to be added or removed from the audience.
+ * @returns
+ * {
+ "add": [
+ {
+ "id": "test@gmail.com"
+ }
+ ],
+ "remove": []
+ }
+ */
+const prepareIdentifiersList = (listData) => {
+ const list = {};
+ const processList = (actionData) =>
+ actionData
+ .filter((member) => member.hasOwnProperty(IDENTIFIER_KEY) && member[IDENTIFIER_KEY])
+ .map((member) => ({ id: member[IDENTIFIER_KEY] }));
+ ACTION_TYPES.forEach((action) => {
+ list[action] = listData?.[action] ? processList(listData[action]) : [];
+ });
+ return list;
+};
+
+/**
+ * Batch the identifiers list based on the maximum number of identifiers allowed per request.
+ * @param {*} listData The data containing lists of members to be added or removed from the audience.
+ * @returns
+ * For MAX_IDENTIFIERS = 2
+ * [
+ {
+ "add": [
+ {
+ "id": "test1@gmail.com"
+ }
+ ],
+ "remove": [
+ {
+ "id": "test2@gmail.com"
+ }
+ ]
+ },
+ {
+ "add": [
+ {
+ "id": "test3@gmail.com"
+ }
+ ],
+ "remove": []
+ }
+ ]
+ */
+const batchIdentifiersList = (listData) => {
+ const audienceList = prepareIdentifiersList(listData);
+ const combinedList = [
+ ...audienceList.add.map((item) => ({ ...item, type: 'add' })),
+ ...audienceList.remove.map((item) => ({ ...item, type: 'remove' })),
+ ];
+
+ const chunkedData = lodash.chunk(combinedList, MAX_IDENTIFIERS);
+
+ // Group the chunks by action type (add/remove)
+ const groupedData = chunkedData.map((chunk) => {
+ const groupedChunk = {
+ add: [],
+ remove: [],
+ };
+
+ chunk.forEach((item) => {
+ if (item.type === 'add') {
+ groupedChunk.add.push({ id: item.id });
+ } else if (item.type === 'remove') {
+ groupedChunk.remove.push({ id: item.id });
+ }
+ });
+
+ return groupedChunk;
+ });
+
+ return groupedData;
+};
+
+module.exports = { prepareIdentifiersList, batchIdentifiersList };
diff --git a/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js b/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js
new file mode 100644
index 00000000000..8c06c990766
--- /dev/null
+++ b/src/cdk/v2/destinations/launchdarkly_audience/utils.test.js
@@ -0,0 +1,136 @@
+const { prepareIdentifiersList, batchIdentifiersList } = require('./utils');
+
+jest.mock(`./config`, () => {
+ const originalConfig = jest.requireActual(`./config`);
+ return {
+ ...originalConfig,
+ MAX_IDENTIFIERS: 2,
+ };
+});
+
+describe('Unit test cases for prepareIdentifiersList', () => {
+ it('should return an object with empty "add" and "remove" properties when no data is provided', () => {
+ const result = prepareIdentifiersList({});
+ expect(result).toEqual({ add: [], remove: [] });
+ });
+
+ it('should handle null input and return an object with empty "add" and "remove" identifiers list', () => {
+ const result = prepareIdentifiersList(null);
+ expect(result).toEqual({ add: [], remove: [] });
+ });
+
+ it('should handle undefined input and return an object with empty "add" and "remove" identifiers list', () => {
+ const result = prepareIdentifiersList(undefined);
+ expect(result).toEqual({ add: [], remove: [] });
+ });
+
+ it('should handle input with missing "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => {
+ const result = prepareIdentifiersList({ add: [], remove: undefined });
+ expect(result).toEqual({ add: [], remove: [] });
+ });
+
+ it('should handle input with empty "add" or "remove" identifiers list and return an object with empty "add" and "remove" identifiers list', () => {
+ const result = prepareIdentifiersList({ add: [], remove: [] });
+ expect(result).toEqual({ add: [], remove: [] });
+ });
+
+ it('should handle input with non empty "add" or "remove" identifiers list and return an object non empty "add" and "remove" identifiers list', () => {
+ const result = prepareIdentifiersList({
+ add: [{ identifier: 'test1@email.com' }, { identifier: 'test2@email.com' }],
+ remove: [{ identifier: 'test3@email.com' }],
+ });
+ expect(result).toEqual({
+ add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }],
+ remove: [{ id: 'test3@email.com' }],
+ });
+ });
+});
+
+describe('Unit test cases for batchIdentifiersList', () => {
+ it('should correctly batch a list containing both "add" and "remove" actions', () => {
+ const listData = {
+ add: [
+ { identifier: 'test1@email.com' },
+ { identifier: 'test2@email.com' },
+ { identifier: 'test3@email.com' },
+ ],
+ remove: [{ identifier: 'test4@email.com' }, { identifier: 'test5@email.com' }],
+ };
+
+ const expectedOutput = [
+ {
+ add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }],
+ remove: [],
+ },
+ {
+ add: [{ id: 'test3@email.com' }],
+ remove: [{ id: 'test4@email.com' }],
+ },
+ {
+ add: [],
+ remove: [{ id: 'test5@email.com' }],
+ },
+ ];
+
+ expect(batchIdentifiersList(listData)).toEqual(expectedOutput);
+ });
+
+ it('should correctly batch a list containing only "add" actions', () => {
+ const listData = {
+ add: [
+ { identifier: 'test1@email.com' },
+ { identifier: 'test2@email.com' },
+ { identifier: 'test3@email.com' },
+ ],
+ remove: [],
+ };
+
+ const expectedOutput = [
+ {
+ add: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }],
+ remove: [],
+ },
+ {
+ add: [{ id: 'test3@email.com' }],
+ remove: [],
+ },
+ ];
+
+ expect(batchIdentifiersList(listData)).toEqual(expectedOutput);
+ });
+
+ it('should correctly batch a list containing only "remove" actions', () => {
+ const listData = {
+ add: [],
+ remove: [
+ { identifier: 'test1@email.com' },
+ { identifier: 'test2@email.com' },
+ { identifier: 'test3@email.com' },
+ ],
+ };
+
+ const expectedOutput = [
+ {
+ add: [],
+ remove: [{ id: 'test1@email.com' }, { id: 'test2@email.com' }],
+ },
+ {
+ add: [],
+ remove: [{ id: 'test3@email.com' }],
+ },
+ ];
+
+ expect(batchIdentifiersList(listData)).toEqual(expectedOutput);
+ });
+
+ it('should return an empty list for empty input list data', () => {
+ const listData = {
+ add: [{ identifier: '' }],
+ remove: [],
+ };
+
+ const expectedOutput = [];
+
+ expect(batchIdentifiersList(listData)).toEqual(expectedOutput);
+ });
+});
diff --git a/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml b/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml
index 14f506c3b41..4d90065f7ec 100644
--- a/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml
+++ b/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml
@@ -37,7 +37,6 @@ steps:
$.assertConfig(.destination.Config.experimentId, "Experiment ID is not present. Aborting");
$.assertConfig(!(.destination.Config.trackKnownUsers && !(.message.userId)), "UserId is required for event tracking when the 'Track Known Users' setting is enabled. Please include a 'userId' in your event payload");
$.assertConfig(!(!.destination.Config.trackKnownUsers && !(.message.anonymousId)), "AnonymousId is required when 'Track Known Users' setting is disabled");
- $.assertConfig(!(.destination.Config.secureEnvironment && !(.destination.Config.dataFileAccessToken)), "Data File Access Token is not present for secure environment. Aborting");
- name: messageType
template: |
@@ -60,15 +59,10 @@ steps:
description: Fetch the data file from the data file url
template: |
const dataFileUrl = .destination.Config.dataFileUrl;
- const options = .destination.Config.secureEnvironment ? {
- headers: {
- "Authorization": "Bearer " + .destination.Config.dataFileAccessToken
- }
- };
- const rawResponse = await $.handleHttpRequest("get", dataFileUrl, options);
+ const rawResponse = await $.handleHttpRequest("get", dataFileUrl);
const processedResponse = rawResponse.processedResponse;
- $.assertHttpResp(processedResponse, "Data File Lookup Failed");
- processedResponse.response
+ $.assertHttpResp(processedResponse, "Data File Lookup Failed due to " + JSON.stringify(processedResponse.response));
+ processedResponse.response;
- name: validateDateFileForTrackPageAndScreen
condition: $.outputs.messageType in [ {{$.EventType.TRACK}}, {{$.EventType.PAGE}}, {{$.EventType.SCREEN}}]
diff --git a/src/cdk/v2/destinations/ortto/config.js b/src/cdk/v2/destinations/ortto/config.js
new file mode 100644
index 00000000000..8187d9de764
--- /dev/null
+++ b/src/cdk/v2/destinations/ortto/config.js
@@ -0,0 +1,38 @@
+const IDENTIFY_ENDPOINT = {
+ au: 'https://api.au.ap3api.com/v1/person/merge',
+ eu: 'https://api.eu.ap3api.com/v1/person/merge',
+ other: 'https://api.ap3api.com/v1/person/merge',
+};
+// https://help.ortto.com/developer/latest/api-reference/person/merge.html#person-fields
+const TRACK_ENDPOINT = {
+ au: 'https://api.au.ap3api.com/v1/activities/create',
+ eu: 'https://api.eu.ap3api.com/v1/activities/create',
+ other: 'https://api.ap3api.com/v1/activities/create',
+};
+// https://help.ortto.com/a-271-create-a-custom-activity-event-create
+
+const maxBatchSize = 1;
+
+const fieldTypeMap = {
+ text: 'str',
+ email: 'str',
+ longText: 'txt',
+ number: 'int',
+ decimalNumber: 'int',
+ currency: 'int',
+ date: 'dtz',
+ timeAndDate: 'tme',
+ boolean: 'bol',
+ phone: 'phn',
+ singleSelect: 'str',
+ multiSelect: 'sst',
+ link: 'str',
+ object: 'obj',
+};
+
+module.exports = {
+ IDENTIFY_ENDPOINT,
+ TRACK_ENDPOINT,
+ fieldTypeMap,
+ maxBatchSize,
+};
diff --git a/src/cdk/v2/destinations/ortto/procWorkflow.yaml b/src/cdk/v2/destinations/ortto/procWorkflow.yaml
new file mode 100644
index 00000000000..4b98f6246f0
--- /dev/null
+++ b/src/cdk/v2/destinations/ortto/procWorkflow.yaml
@@ -0,0 +1,126 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - path: ./config
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - path: ./utils
+
+steps:
+ - name: validateInput
+ template: |
+ let messageType = .message.type;
+ $.assert(.message.type, "message Type is not present. Aborting message.");
+ $.assertConfig(.destination.Config.privateApiKey, "Private Api Key is not present");
+ $.assertConfig(.destination.Config.instanceRegion, "Instance Region is not present");
+ $.assert(messageType in {{$.EventType.([.IDENTIFY, .TRACK])}}, "message type " + messageType + " is not supported");
+ $.assert(.message.().({{{{$.getGenericPaths("email")}}}}) || .message.().({{{{$.getGenericPaths("userId")}}}}), "Either of email or userId is required. Aborting message.");
+
+ - name: messageType
+ template: |
+ .message.type.toLowerCase()
+
+ - name: validateInputForTrack
+ description: Additional validation for Track events
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ template: |
+ $.assert(.message.event, "event is not present. Aborting.")
+
+ - name: commonFields
+ description: |
+ Builds common fields in destination payload.
+ template: |
+ let commonFields = .message.().({
+ "fields": {
+ "str::first": {{{{$.getGenericPaths("firstName")}}}},
+ "str::last": {{{{$.getGenericPaths("lastName")}}}},
+ "str::email": {{{{$.getGenericPaths("email")}}}},
+ "geo::city": {"name":{{{{$.getGenericPaths("city")}}}}},
+ "geo::country": {"name":{{{{$.getGenericPaths("country")}}}}},
+ "geo::region": {"name":{{{{$.getGenericPaths("region")}}}}},
+ "str::postal": {{{{$.getGenericPaths("zipcode")}}}},
+ "dtz::b": $.getBirthdayObj({{{{$.getGenericPaths("birthday")}}}}),
+ "str::ei": {{{{$.getGenericPaths("userId")}}}},
+ "str::language": .context.traits.language || .context.locale,
+ "phn::phone": {"n": {{{{$.getGenericPaths("phone")}}}}},
+ "bol::gdpr": .context.traits.gdpr ?? true,
+ "bol::p": .context.traits.emailConsent || false,
+ "bol::sp": .context.traits.smsConsent || false,
+ },
+ "location": {"source_ip": .context.ip}
+ });
+ .destination.Config.orttoPersonAttributes@attribute.(
+ const trimmedOrttoAttribute = attribute.orttoAttribute.trim().toLowerCase().replace(new RegExp('\\s+', 'g'),'-');
+ commonFields.fields[$.fieldTypeMap[attribute.type]+":cm:"+trimmedOrttoAttribute] = $.originalInput.message.context.traits[attribute.rudderTraits]
+ )[]
+ commonFields.fields = $.removeUndefinedAndNullValues(commonFields.fields)
+ $.removeUndefinedAndNullValues(commonFields)
+
+ - name: prepareIdentifyPayload
+ condition: $.outputs.messageType === {{$.EventType.IDENTIFY}}
+ template: |
+ const peopleObj = {
+ "fields": $.outputs.commonFields.fields,
+ "tags": .message.context.traits.tags || .message.traits.tags,
+ "unset_tags": .message.context.traits.unset_tags || .message.traits.unset_tags
+ }
+ const identifyPayoad = {
+ "people":[peopleObj],
+ "merge_by": ["str::ei", "str::email"]
+ }
+ $.removeUndefinedAndNullValues(identifyPayoad)
+
+ - name: prepareTrackPayload
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ steps:
+ - name: getTrimmedEvent
+ template: |
+ let customEvent = "";
+ const event = .message.event;
+ .destination.Config.orttoEventsMapping@order.(
+ customEvent = event === .rsEventName ? .orttoEventName : null;
+ )
+ $.assert(customEvent, "Event names is not mapped");
+ "act:cm:"+customEvent.trim().toLowerCase().replace(new RegExp('\\s+', 'g'),'-');
+
+ - name: getAttributes
+ template: |
+ let attributes = {};
+ .destination.Config.orttoEventsMapping@event.eventProperties@prop.(
+ attributes[$.fieldTypeMap[prop.type]+":cm:"+prop.orttoProperty.trim().toLowerCase().replace(new RegExp('\\s+', 'g'),'-')] = $.originalInput.message.properties[prop.rudderProperty]
+ )
+ $.removeUndefinedAndNullValues(attributes)
+
+ - name: preparePayload
+ template: |
+ const activityObj = {
+ "fields": $.outputs.commonFields.fields,
+ "activity_id": $.outputs.prepareTrackPayload.getTrimmedEvent,
+ "attributes": $.outputs.prepareTrackPayload.getAttributes,
+ "location": {"source_ip": .message.context.ip}
+ };
+ {
+ "activities":[activityObj],
+ "merge_by": ["str::ei", "str::email"]
+ }
+
+ - name: payload
+ template: |
+ $.outputs.messageType === {{$.EventType.IDENTIFY}} ? $.outputs.prepareIdentifyPayload : $.outputs.prepareTrackPayload
+
+ - name: buildResponseForProcessTransformation
+ description: build response
+ template: |
+ const response = $.defaultRequestConfig();
+ const instanceRegion = $.originalInput.destination.Config.instanceRegion;
+ response.body.JSON = $.outputs.payload;
+ response.endpoint = response.body.JSON.people? $.IDENTIFY_ENDPOINT[instanceRegion] : $.TRACK_ENDPOINT[instanceRegion];
+ response.headers = {
+ "X-Api-Key": .destination.Config.privateApiKey,
+ "Content-Type": "application/json"
+ };
+ response;
diff --git a/src/cdk/v2/destinations/ortto/rtWorkflow.yaml b/src/cdk/v2/destinations/ortto/rtWorkflow.yaml
new file mode 100644
index 00000000000..d00e45c4355
--- /dev/null
+++ b/src/cdk/v2/destinations/ortto/rtWorkflow.yaml
@@ -0,0 +1,70 @@
+bindings:
+ - path: ./utils
+ - path: ./config
+
+steps:
+ - name: validateInput
+ template: |
+ $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array")
+
+ - name: transform
+ externalWorkflow:
+ path: ./procWorkflow.yaml
+ bindings:
+ - name: batchMode
+ value: true
+ loopOverInput: true
+ - name: successfulEvents
+ template: |
+ $.outputs.transform#idx.output.({
+ "message": .[],
+ "destination": ^ [idx].destination,
+ "metadata": ^ [idx].metadata
+ })[]
+ - name: failedEvents
+ template: |
+ $.outputs.transform#idx.error.({
+ "metadata": ^[idx].metadata[],
+ "destination": ^[idx].destination,
+ "batched": false,
+ "statusCode": .status,
+ "error": .message,
+ "statTags": .originalError.statTags
+ })[]
+
+ - name: batchSuccessfulEvents
+ description: Batches the successfulEvents using V3 API
+ condition: $.outputs.successfulEvents.length
+ template: |
+ let batches = $.batchEvents($.outputs.successfulEvents);
+ batches@batch.({
+ "batchedRequest": {
+ "body": {
+ "JSON": batch.message,
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": batch.message.people ? $.IDENTIFY_ENDPOINT[$.originalInput[0].destination.Config.instanceRegion] : $.TRACK_ENDPOINT[$.originalInput[0].destination.Config.instanceRegion],
+ "headers": {
+ "X-Api-Key": .destination.Config.privateApiKey,
+ "Content-Type": "application/json",
+ },
+ "params": {},
+ "files": {}
+ },
+ "metadata": batch.metadata,
+ "batched": true,
+ "statusCode": 200,
+ "destination": batch.destination
+ })[];
+ else:
+ name: returnEmptyOuput
+ template: '[]'
+
+ - name: finalPayload
+ template: |
+ [...$.outputs.batchSuccessfulEvents, ...$.outputs.failedEvents]
diff --git a/src/cdk/v2/destinations/ortto/utils.js b/src/cdk/v2/destinations/ortto/utils.js
new file mode 100644
index 00000000000..027e6ce2d90
--- /dev/null
+++ b/src/cdk/v2/destinations/ortto/utils.js
@@ -0,0 +1,85 @@
+const lodash = require('lodash');
+const { CommonUtils } = require('../../../../util/common');
+const { maxBatchSize } = require('./config');
+
+const getBirthdayObj = (birthday) => {
+ const dateRegex = /^\d{4}-\d{2}-\d{2}$/; // YYYY-MM-DD format
+
+ if (!dateRegex.test(birthday)) {
+ return null; // Invalid birthday format
+ }
+ const date = new Date(birthday);
+
+ const year = date.getFullYear();
+ const month = date.getMonth() + 1; // Month is 0-based, so add 1
+ const day = date.getDate();
+
+ return { year, month, day };
+};
+
+const groupEventsByEndpoint = (events) => {
+ const eventMap = {
+ person: [],
+ activities: [],
+ };
+ const batchErrorRespList = [];
+ events.forEach((result) => {
+ if (result.message) {
+ const { destination, metadata } = result;
+ const message = CommonUtils.toArray(result.message);
+ message.forEach((msg) => {
+ const endpoint = Object.keys(eventMap).find((key) => msg.endpoint?.includes(key));
+ if (endpoint) {
+ eventMap[endpoint].push({ message: msg.body.JSON, destination, metadata });
+ }
+ });
+ } else if (result.error) {
+ batchErrorRespList.push(result);
+ }
+ });
+ return {
+ personEvents: eventMap.person,
+ activitiesEvents: eventMap.activities,
+ batchErrorRespList,
+ };
+};
+const combinePersonAndActivitiesArraysofEvents = (events, identifier) => {
+ const batchedPersonEvents = [];
+ if (Array.isArray(events)) {
+ events.forEach((chunk) => {
+ const response = { destination: chunk[0].destination };
+
+ chunk.forEach((event, index) => {
+ if (index === 0) {
+ response.message = event.message;
+ response.destination = event.destination;
+ response.metadata = [event.metadata];
+ } else {
+ response.message[identifier].push(...event.message[identifier]);
+ response.metadata.push(event.metadata);
+ }
+ });
+ batchedPersonEvents.push(response);
+ });
+ }
+ return batchedPersonEvents;
+};
+
+const batchEvents = (successfulEvents) => {
+ const { personEvents, activitiesEvents } = groupEventsByEndpoint(successfulEvents);
+ const personEventsChunks = lodash.chunk(personEvents, maxBatchSize);
+ const activityEventsChunks = lodash.chunk(activitiesEvents, maxBatchSize);
+ const batchedPersonEvents = combinePersonAndActivitiesArraysofEvents(
+ personEventsChunks,
+ 'people',
+ );
+ const batchedActivityEvents = combinePersonAndActivitiesArraysofEvents(
+ activityEventsChunks,
+ 'activities',
+ );
+ return [...batchedPersonEvents, ...batchedActivityEvents];
+};
+module.exports = {
+ getBirthdayObj,
+ batchEvents,
+};
diff --git a/src/cdk/v2/destinations/pinterest_tag/procWorkflow.yaml b/src/cdk/v2/destinations/pinterest_tag/procWorkflow.yaml
index 6854573cfaf..7bcb804126b 100644
--- a/src/cdk/v2/destinations/pinterest_tag/procWorkflow.yaml
+++ b/src/cdk/v2/destinations/pinterest_tag/procWorkflow.yaml
@@ -100,7 +100,8 @@ steps:
"hashed_maids": .context.device.advertisingId,
"client_ip_address": .context.ip ?? .request_ip,
"client_user_agent": .context.userAgent,
- "external_id": {{{{$.getGenericPaths("userId")}}}}
+ "external_id": {{{{$.getGenericPaths("userId")}}}},
+ "click_id": .properties.clickId
});
!.destination.Config.sendExternalId ? userFields = userFields{~["external_id"]} : null;
userFields = $.removeUndefinedAndNullAndEmptyValues(userFields);
@@ -179,22 +180,19 @@ steps:
eventNames = $.convertToSnakeCase(eventNames);
eventNames.length === 0 ? eventNames = $.ecomEventMaps.(){eventInLowerCase in .src}.dest[] ?? [];
(eventNames.length === 0 && .destination.Config.sendAsCustomEvent) ? eventNames = ["custom"];
- (eventNames.length === 0 && $.outputs.apiVersion === {{$.API_VERSION.v3}}) ? eventNames = [event];
- $.assertConfig(eventNames.length > 0,
- event + " is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting")
- eventNames
+ eventNames.length === 0 ? eventNames = [event];
+ eventNames;
- name: payload
template: |
$.outputs.eventNames.().({...$.outputs.basePayload, event_name: .})[]
-
+
- name: checkSendTestEventConfig
description: |
If sendTestEvent is enabled, we send test event to the destination
ref: https://help.pinterest.com/en/business/article/track-conversions-with-the-conversions-api
template: |
- ^.destination.Config.sendAsTestEvent ? {"test": true} : {}
-
+ ^.destination.Config.sendAsTestEvent ? {"test": true} : {}
- name: buildResponseForBatchMode
description: In batchMode we return payload directly
diff --git a/src/cdk/v2/destinations/reddit/config.js b/src/cdk/v2/destinations/reddit/config.js
new file mode 100644
index 00000000000..5c2c778ea55
--- /dev/null
+++ b/src/cdk/v2/destinations/reddit/config.js
@@ -0,0 +1,31 @@
+const ENDPOINT = 'https://ads-api.reddit.com/api/v2.0/conversions/events/';
+const maxBatchSize = 1000;
+
+const ecomEventMaps = [
+ {
+ src: ['product viewed', 'product list viewed'],
+ dest: 'ViewContent',
+ },
+ {
+ src: ['product added'],
+ dest: 'AddToCart',
+ },
+ {
+ src: ['product added to wishlist'],
+ dest: 'AddToWishlist',
+ },
+ {
+ src: ['order completed'],
+ dest: 'Purchase',
+ },
+ {
+ src: ['products searched'],
+ dest: 'Search',
+ },
+];
+
+module.exports = {
+ ENDPOINT,
+ maxBatchSize,
+ ecomEventMaps,
+};
diff --git a/src/cdk/v2/destinations/reddit/procWorkflow.yaml b/src/cdk/v2/destinations/reddit/procWorkflow.yaml
new file mode 100644
index 00000000000..65b466bc7cc
--- /dev/null
+++ b/src/cdk/v2/destinations/reddit/procWorkflow.yaml
@@ -0,0 +1,135 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - path: ./config
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - name: isAppleFamily
+ path: ../../../../v0/util/index
+ - name: OAuthSecretError
+ path: '@rudderstack/integrations-lib'
+
+steps:
+ - name: validateInput
+ template: |
+ let messageType = .message.type;
+ $.assertConfig(.destination.Config.accountId, "Account is not present. Aborting message.");
+ $.assert(.message.type, "message Type is not present. Aborting message.");
+ $.assert(.message.type.toLowerCase() ==='track', "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message.");
+ $.assert(.message.event, "Event is not present. Aborting message.");
+ $.assert(.message.().({{{{$.getGenericPaths("timestamp")}}}}), "Timestamp is not present. Aborting message.");
+
+ - name: messageType
+ template: |
+ .message.type.toLowerCase()
+
+ - name: prepareTrackPayload
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ steps:
+ - name: prepareUserObject
+ template: |
+ const os = (.message.context.os.name)? .message.context.os.name.toLowerCase(): null;
+ const hashData = .destination.Config.hashData;
+ let user = .message.().({
+ "email": hashData ? $.SHA256({{{{$.getGenericPaths("email")}}}}) : ({{{{$.getGenericPaths("email")}}}}),
+ "external_id": hashData ? $.SHA256({{{{$.getGenericPaths("userId")}}}}) : ({{{{$.getGenericPaths("userId")}}}}),
+ "ip_address": hashData? $.SHA256(.context.ip || .request_ip) : (.context.ip || .request_ip),
+ "uuid": .properties.uuid,
+ "user_agent": .context.userAgent,
+ "idfa": $.isAppleFamily(os)? (hashData? $.SHA256(.context.device.advertisingId): .context.device.advertisingId): null,
+ "aaid": os === "android" && .context.device ? (hashData? $.SHA256(.context.device.advertisingId): .context.device.advertisingId): null,
+ "opt_out": .properties.optOut,
+ "screen_dimensions": {"width": .context.screen.width, "height": .context.screen.height},
+ });
+ $.removeUndefinedAndNullValues(user)
+
+ - name: eventType
+ template: |
+ let event = .message.event;
+ let eventInLowerCase = event.trim().toLowerCase();;
+ let eventNames = .destination.Config.eventsMapping? .destination.Config.eventsMapping.(){.from === event}.to[] ?? []: [];
+ eventNames.length === 0 ? eventNames = $.ecomEventMaps.(){eventInLowerCase in .src}.dest[] ?? [];
+ const event_type = (eventNames.length === 0 || eventNames[0]==="") ? ({"tracking_type": "Custom", "custom_event_name": event}): ({tracking_type: eventNames[0]});
+
+ - name: customFields
+ condition: $.outputs.eventType.tracking_type === "Purchase"
+ template: |
+ const customFields = .message.().({
+ "currency": .properties.currency,
+ "value": .properties.revenue !== undefined ? Number(.properties.revenue) : undefined,
+ "item_count": (Array.isArray(.properties.products) && .properties.products.length) || (.properties.itemCount && Number(.properties.itemCount)),
+ "value_decimal": .properties.revenue !== undefined ? Number(.properties.revenue)/100 : undefined,
+ "conversion_id": .properties.conversionId || .messageId,
+ });
+ $.removeUndefinedAndNullValues(customFields)
+ else:
+ name: nonRevenueTypeEvents
+ template: |
+ const customFields = .message.().({
+ "conversion_id": .properties.conversionId || .messageId,
+ });
+ $.removeUndefinedAndNullValues(customFields)
+
+ - name: productFields
+ condition: .message.properties.products
+ description: When event contains multiple products
+ template: |
+ let products = .message.properties.products;
+ {
+ "item_count": $.sum(products.quantity.(Number(.))[]) || 0,
+ "products": .message.properties@prop.products.({
+ "id": .product_id ?? prop.product_id,
+ "name": .name ?? prop.name,
+ "category": .category ?? prop.category,
+ })[]
+ }
+ else:
+ name: singleProductFields
+ template: |
+ const props = .message.properties;
+ const output = {
+ "item_count": Number(props.quantity) || 0,
+ "products": {
+ "id": props.product_id,
+ "name": props.name,
+ "category": props.category,
+ }[]
+ };
+ - name: combineAllEcomFields
+ template: |
+ {...$.outputs.prepareTrackPayload.productFields, ...$.outputs.prepareTrackPayload.customFields}
+
+ - name: prepareFinalPayload
+ template: |
+ {
+ events: [{
+ "click_id": .message.properties.clickId,
+ "event_at": .message.().({{{{$.getGenericPaths("timestamp")}}}}),
+ "event_type": $.outputs.prepareTrackPayload.eventType,
+ "user": $.outputs.prepareTrackPayload.prepareUserObject,
+ "event_metadata": $.outputs.prepareTrackPayload.combineAllEcomFields,
+ }]
+ }
+
+ - name: payload
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ template: |
+ const outputPayload = $.outputs.prepareTrackPayload
+
+ - name: buildResponseForProcessTransformation
+ description: build response
+ template: |
+ $.assertThrow((.metadata.secret && .metadata.secret.accessToken), new $.OAuthSecretError("Secret or accessToken is not present in the metadata"))
+ const accessToken = .metadata.secret.accessToken
+ const response = $.defaultRequestConfig();
+ response.body.JSON = $.outputs.payload;
+ response.headers = {
+ "Authorization": "Bearer "+ accessToken,
+ "Content-Type": "application/json"
+ }
+ response.endpoint = $.ENDPOINT+.destination.Config.accountId;
+ finalResponse = response;
diff --git a/src/cdk/v2/destinations/reddit/rtWorkflow.yaml b/src/cdk/v2/destinations/reddit/rtWorkflow.yaml
new file mode 100644
index 00000000000..937ff021f44
--- /dev/null
+++ b/src/cdk/v2/destinations/reddit/rtWorkflow.yaml
@@ -0,0 +1,67 @@
+bindings:
+ - path: ./utils
+ - path: ./config
+
+steps:
+ - name: validateInput
+ template: |
+ $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array")
+
+ - name: transform
+ externalWorkflow:
+ path: ./procWorkflow.yaml
+ bindings:
+ - name: batchMode
+ value: true
+ loopOverInput: true
+ - name: successfulEvents
+ template: |
+ $.outputs.transform#idx.output.({
+ "message": .[],
+ "destination": ^ [idx].destination,
+ "metadata": ^ [idx].metadata
+ })[]
+ - name: failedEvents
+ template: |
+ $.outputs.transform#idx.error.({
+ "metadata": ^[idx].metadata[],
+ "destination": ^[idx].destination,
+ "batched": false,
+ "statusCode": .status,
+ "error": .message,
+ "statTags": .originalError.statTags
+ })[]
+
+ - name: batchSuccessfulEvents
+ description: Batches the successfulEvents using endpoint
+ condition: $.outputs.successfulEvents.length
+ template: |
+ let batches = $.batchEvents($.outputs.successfulEvents);
+ batches@batch.({
+ "batchedRequest": {
+ "body": {
+ "JSON": batch.message.body.JSON,
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": batch.message.endpoint,
+ "headers": batch.message.headers,
+ "params": {},
+ "files": {}
+ },
+ "metadata": batch.metadata,
+ "batched": true,
+ "statusCode": 200,
+ "destination": batch.destination
+ })[];
+ else:
+ name: returnEmptyOuput
+ template: '[]'
+
+ - name: finalPayload
+ template: |
+ [...$.outputs.batchSuccessfulEvents, ...$.outputs.failedEvents]
diff --git a/src/cdk/v2/destinations/reddit/utils.js b/src/cdk/v2/destinations/reddit/utils.js
new file mode 100644
index 00000000000..c1086032353
--- /dev/null
+++ b/src/cdk/v2/destinations/reddit/utils.js
@@ -0,0 +1,33 @@
+const lodash = require('lodash');
+const { maxBatchSize } = require('./config');
+
+const batchEventChunks = (eventChunks) => {
+ const batchedEvents = [];
+ if (Array.isArray(eventChunks)) {
+ eventChunks.forEach((chunk) => {
+ const response = { destination: chunk[0].destination };
+ chunk.forEach((event, index) => {
+ if (index === 0) {
+ const [firstMessage] = event.message;
+ response.message = firstMessage;
+ response.destination = event.destination;
+ response.metadata = [event.metadata];
+ } else {
+ response.message.body.JSON.events.push(...event.message[0].body.JSON.events);
+ response.metadata.push(event.metadata);
+ }
+ });
+ batchedEvents.push(response);
+ });
+ }
+ return batchedEvents;
+};
+
+const batchEvents = (successfulEvents) => {
+ const eventChunks = lodash.chunk(successfulEvents, maxBatchSize);
+ const batchedEvents = batchEventChunks(eventChunks);
+ return batchedEvents;
+};
+module.exports = {
+ batchEvents,
+};
diff --git a/src/cdk/v2/destinations/sprig/procWorkflow.yaml b/src/cdk/v2/destinations/sprig/procWorkflow.yaml
new file mode 100644
index 00000000000..18b46913fd6
--- /dev/null
+++ b/src/cdk/v2/destinations/sprig/procWorkflow.yaml
@@ -0,0 +1,73 @@
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+
+steps:
+ - name: messageType
+ template: |
+ .message.type.toLowerCase();
+
+ - name: validateInput
+ template: |
+ let messageType = $.outputs.messageType;
+ $.assert(messageType, "message Type is not present. Aborting");
+ $.assert(messageType in {{$.EventType.([.IDENTIFY, .TRACK])}}, "message type " + messageType + " is not supported");
+ $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting");
+
+ - name: validateIdentifyPayload
+ condition: $.outputs.messageType === {{$.EventType.IDENTIFY}}
+ template: |
+ const userId = .message.({{{{$.getGenericPaths("userIdOnly")}}}});;
+ $.assert(userId, "userId is required");
+
+ - name: prepareIdentifyPayload
+ condition: $.outputs.messageType === {{$.EventType.IDENTIFY}}
+ template: |
+ $.context.payload = .message.({
+ userId: {{{{$.getGenericPaths("userIdOnly")}}}},
+ emailAddress: {{{{$.getGenericPaths("email")}}}},
+ attributes: .context.traits
+ });
+ $.context.payload = $.removeUndefinedAndNullValues($.context.payload);
+
+ - name: validateTrackPayload
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ template: |
+ const userId = .message.({{{{$.getGenericPaths("userIdOnly")}}}});;
+ $.assert(userId, "userId is required");
+ $.assert(.message.event, "event name is required");
+
+ - name: prepareTrackPayload
+ condition: $.outputs.messageType === {{$.EventType.TRACK}}
+ template: |
+ $.context.payload = .message.({
+ userId: {{{{$.getGenericPaths("userIdOnly")}}}},
+ emailAddress: {{{{$.getGenericPaths("email")}}}}
+ });
+ const events = [
+ {
+ event: .message.event,
+ timestamp: $.toMilliseconds(.message.().({{{{$.getGenericPaths("timestamp")}}}}))
+ }
+ ]
+ $.context.payload.events = events;
+ $.context.payload = $.removeUndefinedAndNullValues($.context.payload);
+
+ - name: buildResponse
+ template: |
+ const response = $.defaultRequestConfig();
+ response.body.JSON = $.context.payload;
+ response.endpoint = "https://api.sprig.com/v2/users";
+ response.headers = {
+ "accept": "application/json",
+ "content-type": "application/json",
+ "authorization": "API-Key " + .destination.Config.apiKey
+ };
+ response
+
+
diff --git a/src/cdk/v2/destinations/tiktok_audience/config.js b/src/cdk/v2/destinations/tiktok_audience/config.js
new file mode 100644
index 00000000000..853f3725055
--- /dev/null
+++ b/src/cdk/v2/destinations/tiktok_audience/config.js
@@ -0,0 +1,9 @@
+const ACTION_MAP = {
+ add: 'add',
+ remove: 'delete',
+};
+const SHA256_TRAITS = ['IDFA_SHA256', 'AAID_SHA256', 'EMAIL_SHA256', 'PHONE_SHA256'];
+module.exports = {
+ ACTION_MAP,
+ SHA256_TRAITS,
+};
diff --git a/src/cdk/v2/destinations/tiktok_audience/procWorkflow.yaml b/src/cdk/v2/destinations/tiktok_audience/procWorkflow.yaml
new file mode 100644
index 00000000000..cd84ecbc876
--- /dev/null
+++ b/src/cdk/v2/destinations/tiktok_audience/procWorkflow.yaml
@@ -0,0 +1,67 @@
+
+bindings:
+ - name: EventType
+ path: ../../../../constants
+ - path: ../../bindings/jsontemplate
+ exportAll: true
+ - path: ./config
+ - name: removeUndefinedAndNullValues
+ path: ../../../../v0/util
+ - name: defaultRequestConfig
+ path: ../../../../v0/util
+
+steps:
+ - name: validateInput
+ template: |
+ let messageType = .message.type;
+ $.assert(.message.type, "message Type is not present. Aborting message.");
+ $.assert(.message.type.toLowerCase() ==='audiencelist', "Event type " + .message.type.toLowerCase() + " is not supported. Aborting message.");
+ $.assert(.message.properties, "Message properties is not present. Aborting message.");
+ $.assert(.message.properties.listData, "listData is not present inside properties. Aborting message.");
+ $.assert($.containsAll(Object.keys(.message.properties.listData), ["add", "remove"]), "unsupported action type. Aborting message.")
+
+ - name: prepareIdentifiersList
+ description: |
+ Populate list of identifiers to be updated
+ template: |
+ const destinationFields = .message.context.destinationFields.split(", ")
+ const audienceId = .message.context.externalId[0].type.split("-")[1];
+ const isHashRequired = .destination.Config.isHashRequired;
+ const advertiserIds = .metadata.secret.advertiserIds;
+ const hashTraits = function(traits) {
+ traits@trait.(destinationFields@destinationField.(
+ trait[destinationField] ? {
+ id: isHashRequired ?
+ destinationField in $.SHA256_TRAITS ?
+ $.SHA256(trait[destinationField]) : $.MD5(trait[destinationField])
+ : trait[destinationField],
+ audience_ids:[audienceId]
+ } : {}
+ )[])
+ };
+ const listData = .message.properties.listData;
+ const actions = Object.keys(listData)
+ actions@action.({
+ "batch_data": hashTraits(listData[action]),
+ "id_schema": destinationFields,
+ "advertiser_ids": advertiserIds,
+ "action": $.ACTION_MAP[action],
+ })[]
+
+
+ - name: buildResponseForProcessTransformation
+ description: build response
+ template: |
+ const accessToken = .metadata.secret.accessToken
+ const anonymousId = .message.anonymousId;
+ $.outputs.prepareIdentifiersList@body.(
+ let response = $.defaultRequestConfig();
+ response.body.JSON = body;
+ response.userId = anonymousId;
+ response.endpoint = "https://business-api.tiktok.com/open_api/v1.3/segment/mapping/";
+ response.headers = {
+ "Access-Token": accessToken,
+ "Content-Type": "application/json"
+ };
+ response
+ )
diff --git a/src/cdk/v2/destinations/tiktok_audience/rtWorkflow.yaml b/src/cdk/v2/destinations/tiktok_audience/rtWorkflow.yaml
new file mode 100644
index 00000000000..a7fa8559380
--- /dev/null
+++ b/src/cdk/v2/destinations/tiktok_audience/rtWorkflow.yaml
@@ -0,0 +1,31 @@
+bindings:
+ - name: handleRtTfSingleEventError
+ path: ../../../../v0/util/index
+
+steps:
+ - name: validateInput
+ template: |
+ $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array")
+
+ - name: transform
+ externalWorkflow:
+ path: ./procWorkflow.yaml
+ loopOverInput: true
+
+ - name: successfulEvents
+ template: |
+ $.outputs.transform#idx{"output" in .}.({
+ "batchedRequest": .output,
+ "batched": true,
+ "destination": ^[idx].destination,
+ "metadata": ^[idx].metadata[],
+ "statusCode": 200
+ })[]
+ - name: failedEvents
+ template: |
+ $.outputs.transform#idx.error.(
+ $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {})
+ )[]
+ - name: finalPayload
+ template: |
+ [...$.outputs.failedEvents, ...$.outputs.successfulEvents]
diff --git a/src/cdk/v2/handler.ts b/src/cdk/v2/handler.ts
index b4da9bc6bf5..47d6d101797 100644
--- a/src/cdk/v2/handler.ts
+++ b/src/cdk/v2/handler.ts
@@ -4,7 +4,8 @@ import {
TemplateType,
ExecutionBindings,
StepOutput,
-} from 'rudder-workflow-engine';
+} from '@rudderstack/workflow-engine';
+import { FixMe } from '../../util/types';
import tags from '../../v0/util/tags';
@@ -25,7 +26,7 @@ export function getEmptyExecutionBindings() {
return {
outputs: {},
context,
- setContext: (key: string, value: any) => {
+ setContext: (key: string, value: FixMe) => {
context[key] = value;
},
};
@@ -34,7 +35,7 @@ export function getEmptyExecutionBindings() {
export async function getWorkflowEngine(
destName: string,
feature: string,
- bindings: Record = {},
+ bindings: Record = {},
) {
const destRootDir = getRootPathForDestination(destName);
const workflowPath = await getWorkflowPath(destRootDir, feature);
@@ -52,7 +53,7 @@ const workflowEnginePromiseMap = new Map();
export function getCachedWorkflowEngine(
destName: string,
feature: string,
- bindings: Record = {},
+ bindings: Record = {},
): WorkflowEngine {
// Create a new instance of the engine for the destination if needed
// TODO: Use cache to avoid long living engine objects
@@ -63,25 +64,26 @@ export function getCachedWorkflowEngine(
return workflowEnginePromiseMap[destName][feature];
}
-export async function executeWorkflow(workflowEngine: WorkflowEngine, parsedEvent: any) {
- try {
- const result = await workflowEngine.execute(parsedEvent);
- // TODO: Handle remaining output scenarios
- return result.output;
- } catch (error) {
- throw getErrorInfo(error, isCdkV2Destination(parsedEvent), defTags);
- }
+export async function executeWorkflow(
+ workflowEngine: WorkflowEngine,
+ parsedEvent: FixMe,
+ requestMetadata: NonNullable = {},
+) {
+ const result = await workflowEngine.execute(parsedEvent, { requestMetadata });
+ // TODO: Handle remaining output scenarios
+ return result.output;
}
export async function processCdkV2Workflow(
destType: string,
- parsedEvent: any,
+ parsedEvent: FixMe,
feature: string,
- bindings: Record = {},
+ requestMetadata: NonNullable = {},
+ bindings: Record = {},
) {
try {
const workflowEngine = await getCachedWorkflowEngine(destType, feature, bindings);
- return await executeWorkflow(workflowEngine, parsedEvent);
+ return await executeWorkflow(workflowEngine, parsedEvent, requestMetadata);
} catch (error) {
throw getErrorInfo(error, isCdkV2Destination(parsedEvent), defTags);
}
@@ -90,7 +92,7 @@ export async function processCdkV2Workflow(
export function executeStep(
workflowEngine: WorkflowEngine,
stepName: string,
- input: any,
+ input: FixMe,
bindings?: ExecutionBindings,
): Promise {
return workflowEngine
diff --git a/src/cdk/v2/utils.ts b/src/cdk/v2/utils.ts
index 096e5b76794..f9a5c66937b 100644
--- a/src/cdk/v2/utils.ts
+++ b/src/cdk/v2/utils.ts
@@ -1,10 +1,11 @@
import path from 'path';
import fs from 'fs/promises';
-import { WorkflowExecutionError, WorkflowCreationError, StatusError } from 'rudder-workflow-engine';
+import { WorkflowExecutionError, WorkflowCreationError } from '@rudderstack/workflow-engine';
+import { PlatformError } from '@rudderstack/integrations-lib';
import logger from '../../logger';
import { generateErrorObject } from '../../v0/util';
-import { PlatformError } from '../../v0/util/errorTypes';
import tags from '../../v0/util/tags';
+import { CatchErr } from '../../util/types';
const CDK_V2_ROOT_DIR = __dirname;
@@ -79,7 +80,7 @@ export function getWorkflowEngineErrorMessage(err) {
* @param {*} defTags default stat tags
* @returns Error type object
*/
-export function getErrorInfo(err: any, isProd: boolean, defTags) {
+export function getErrorInfo(err: CatchErr, isProd: boolean, defTags) {
// Handle various CDK error types
const message = isProd ? getWorkflowEngineErrorMessage(err) : err.message;
@@ -87,7 +88,7 @@ export function getErrorInfo(err: any, isProd: boolean, defTags) {
logger.error(`Error occurred during workflow step execution: ${message}`, err);
// Determine the error instance
- let errInstance: any = err;
+ let errInstance: CatchErr = err;
if (err.originalError) {
errInstance = err.originalError;
errInstance.message = message;
diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js
index bb4480b23a1..d1e199c9e2d 100644
--- a/src/constants/destinationCanonicalNames.js
+++ b/src/constants/destinationCanonicalNames.js
@@ -1,8 +1,17 @@
const DestHandlerMap = {
ga360: 'ga',
+ salesforce_oauth: 'salesforce',
};
const DestCanonicalNames = {
+ facebook_conversions: [
+ 'fb_conversions',
+ 'fb conversions',
+ 'FacebookConversions',
+ 'Facebook Conversions',
+ 'FB Conversions',
+ 'Facebook_Conversions',
+ ],
fb_pixel: [
'fb_pixel',
'fb pixel',
@@ -91,7 +100,7 @@ const DestCanonicalNames = {
],
awin: ['awin', 'Awin', 'AWIN'],
sendinblue: ['sendinblue', 'SENDINBLUE', 'Sendinblue', 'SendinBlue'],
- ga4: ['GA4', 'ga4', 'Ga4', 'Google Analytics 4', 'googleAnalytics4'],
+ ga4: ['GA4', 'ga4', 'Ga4', 'Google Analytics 4', 'googleAnalytics4', 'Google Analytics 4 (GA4)'],
pipedream: ['Pipedream', 'PipeDream', 'pipedream', 'PIPEDREAM'],
pagerduty: ['pagerduty', 'PAGERDUTY', 'PagerDuty', 'Pagerduty', 'pagerDuty'],
adobe_analytics: [
diff --git a/src/constants/index.js b/src/constants/index.js
index c1b26a94c42..a8976bc07e2 100644
--- a/src/constants/index.js
+++ b/src/constants/index.js
@@ -50,6 +50,10 @@ const MappedToDestinationKey = 'context.mappedToDestination';
const GENERIC_TRUE_VALUES = ['true', 'True', 'TRUE', 't', 'T', '1'];
const GENERIC_FALSE_VALUES = ['false', 'False', 'FALSE', 'f', 'F', '0'];
+const HTTP_CUSTOM_STATUS_CODES = {
+ FILTERED: 298,
+};
+
module.exports = {
EventType,
GENERIC_TRUE_VALUES,
@@ -58,4 +62,5 @@ module.exports = {
SpecedTraits,
TraitsMapping,
WhiteListedTraits,
+ HTTP_CUSTOM_STATUS_CODES,
};
diff --git a/src/controllers/bulkUpload.ts b/src/controllers/bulkUpload.ts
index 80fb9b9dd00..85c4fe6b4f2 100644
--- a/src/controllers/bulkUpload.ts
+++ b/src/controllers/bulkUpload.ts
@@ -1,5 +1,7 @@
+/* eslint-disable global-require, import/no-dynamic-require, @typescript-eslint/no-unused-vars */
import { client as errNotificationClient } from '../util/errorNotifier';
import logger from '../logger';
+import { CatchErr } from '../util/types';
// TODO: To be refactored and redisgned
const getDestFileUploadHandler = (version, dest) =>
@@ -7,6 +9,7 @@ const getDestFileUploadHandler = (version, dest) =>
const getPollStatusHandler = (version, dest) => require(`../${version}/destinations/${dest}/poll`);
const getJobStatusHandler = (version, dest) =>
require(`../${version}/destinations/${dest}/fetchJobStatus`);
+const ERROR_MESSAGE_PROCESSOR_STRING = 'Error occurred while processing payload.';
const getCommonMetadata = (ctx) =>
// TODO: Parse information such as
@@ -16,12 +19,23 @@ const getCommonMetadata = (ctx) =>
namespace: 'Unknown',
cluster: 'Unknown',
});
+
+const getReqMetadata = (ctx) => {
+ try {
+ const reqBody = ctx.request.body;
+ return { destType: reqBody?.destType, importId: reqBody?.importId };
+ } catch (error) {
+ // Do nothing
+ }
+ return {};
+};
+
export const fileUpload = async (ctx) => {
logger.debug(
'Native(Bulk-Upload): Request to transformer:: /fileUpload route',
JSON.stringify(ctx.request.body),
);
- const getReqMetadata = () => {
+ const getReqMetadataFileUpload = () => {
try {
const reqBody = ctx.request.body;
return { destType: reqBody?.destType };
@@ -42,16 +56,16 @@ export const fileUpload = async (ctx) => {
let response;
try {
response = await destFileUploadHandler.processFileData(ctx.request.body);
- } catch (error: any) {
+ } catch (error: CatchErr) {
response = {
- statusCode: error.response ? error.response.status : 400,
- error: error.message || 'Error occurred while processing payload.',
+ statusCode: error?.response?.status || error?.status || 400,
+ error: error.message || ERROR_MESSAGE_PROCESSOR_STRING,
metadata: error.response ? error.response.metadata : null,
};
errNotificationClient.notify(error, 'File Upload', {
...response,
...getCommonMetadata(ctx),
- ...getReqMetadata(),
+ ...getReqMetadata(ctx),
});
}
ctx.body = response;
@@ -67,15 +81,6 @@ export const pollStatus = async (ctx) => {
'Native(Bulk-Upload): Request to transformer:: /pollStatus route',
JSON.stringify(ctx.request.body),
);
- const getReqMetadata = () => {
- try {
- const reqBody = ctx.request.body;
- return { destType: reqBody?.destType, importId: reqBody?.importId };
- } catch (error) {
- // Do nothing
- }
- return {};
- };
const { destType } = ctx.request.body;
const destFileUploadHandler = getPollStatusHandler('v0', destType.toLowerCase());
@@ -87,15 +92,15 @@ export const pollStatus = async (ctx) => {
}
try {
response = await destFileUploadHandler.processPolling(ctx.request.body);
- } catch (error: any) {
+ } catch (error: CatchErr) {
response = {
statusCode: error.response?.status || 400,
- error: error.message || 'Error occurred while processing payload.',
+ error: error.message || ERROR_MESSAGE_PROCESSOR_STRING,
};
errNotificationClient.notify(error, 'Poll Status', {
...response,
...getCommonMetadata(ctx),
- ...getReqMetadata(),
+ ...getReqMetadata(ctx),
});
}
ctx.body = response;
@@ -111,15 +116,6 @@ export const getWarnJobStatus = async (ctx) => {
'Native(Bulk-Upload): Request to transformer:: /getWarningJobs route',
JSON.stringify(ctx.request.body),
);
- const getReqMetadata = () => {
- try {
- const reqBody = ctx.request.body;
- return { destType: reqBody?.destType, importId: reqBody?.importId };
- } catch (error) {
- // Do nothing
- }
- return {};
- };
const { destType } = ctx.request.body;
const destFileUploadHandler = getJobStatusHandler('v0', destType.toLowerCase());
@@ -132,15 +128,15 @@ export const getWarnJobStatus = async (ctx) => {
let response;
try {
response = await destFileUploadHandler.processJobStatus(ctx.request.body, 'warn');
- } catch (error: any) {
+ } catch (error: CatchErr) {
response = {
statusCode: error.response ? error.response.status : 400,
- error: error.message || 'Error occurred while processing payload.',
+ error: error.message || ERROR_MESSAGE_PROCESSOR_STRING,
};
errNotificationClient.notify(error, 'Job Status', {
...response,
...getCommonMetadata(ctx),
- ...getReqMetadata(),
+ ...getReqMetadata(ctx),
});
}
ctx.body = response;
@@ -156,15 +152,6 @@ export const getFailedJobStatus = async (ctx) => {
'Native(Bulk-Upload): Request to transformer:: /getFailedJobs route',
JSON.stringify(ctx.request.body),
);
- const getReqMetadata = () => {
- try {
- const reqBody = ctx.request.body;
- return { destType: reqBody?.destType, importId: reqBody?.importId };
- } catch (error) {
- // Do nothing
- }
- return {};
- };
const { destType } = ctx.request.body;
const destFileUploadHandler = getJobStatusHandler('v0', destType.toLowerCase());
@@ -177,15 +164,15 @@ export const getFailedJobStatus = async (ctx) => {
let response;
try {
response = await destFileUploadHandler.processJobStatus(ctx.request.body, 'fail');
- } catch (error: any) {
+ } catch (error: CatchErr) {
response = {
statusCode: error.response ? error.response.status : 400,
- error: error.message || 'Error occurred while processing payload.',
+ error: error.message || ERROR_MESSAGE_PROCESSOR_STRING,
};
errNotificationClient.notify(error, 'Job Status', {
...response,
...getCommonMetadata(ctx),
- ...getReqMetadata(),
+ ...getReqMetadata(ctx),
});
}
ctx.body = response;
diff --git a/src/controllers/delivery.ts b/src/controllers/delivery.ts
index d9a514d9616..0cc5e12d78d 100644
--- a/src/controllers/delivery.ts
+++ b/src/controllers/delivery.ts
@@ -1,31 +1,48 @@
+/* eslint-disable prefer-destructuring */
+/* eslint-disable sonarjs/no-duplicate-string */
import { Context } from 'koa';
-import MiscService from '../services/misc';
-import { DeliveryResponse, ProcessorTransformationOutput } from '../types/index';
-import ServiceSelector from '../helpers/serviceSelector';
-import DeliveryTestService from '../services/delivertTest/deliveryTest';
-import ControllerUtility from './util';
+import { MiscService } from '../services/misc';
+import {
+ DeliveriesResponse,
+ DeliveryResponse,
+ ProcessorTransformationOutput,
+ ProxyDeliveriesRequest,
+ ProxyDeliveryRequest,
+} from '../types/index';
+import { ServiceSelector } from '../helpers/serviceSelector';
+import { DeliveryTestService } from '../services/delivertTest/deliveryTest';
+import { ControllerUtility } from './util';
import logger from '../logger';
-import DestinationPostTransformationService from '../services/destination/postTransformation';
+import { DestinationPostTransformationService } from '../services/destination/postTransformation';
import tags from '../v0/util/tags';
+import { FixMe } from '../util/types';
-export default class DeliveryController {
+const NON_DETERMINABLE = 'Non-determinable';
+
+export class DeliveryController {
public static async deliverToDestination(ctx: Context) {
logger.debug('Native(Delivery):: Request to transformer::', JSON.stringify(ctx.request.body));
let deliveryResponse: DeliveryResponse;
const requestMetadata = MiscService.getRequestMetadata(ctx);
- const event = ctx.request.body as ProcessorTransformationOutput;
+ const deliveryRequest = ctx.request.body as ProxyDeliveryRequest;
const { destination }: { destination: string } = ctx.params;
const integrationService = ServiceSelector.getNativeDestinationService();
try {
- deliveryResponse = await integrationService.deliver(event, destination, requestMetadata);
+ deliveryResponse = (await integrationService.deliver(
+ deliveryRequest,
+ destination,
+ requestMetadata,
+ 'v0',
+ )) as DeliveryResponse;
} catch (error: any) {
+ const { metadata } = deliveryRequest;
const metaTO = integrationService.getTags(
destination,
- event.metadata?.destinationId || 'Non-determininable',
- event.metadata?.workspaceId || 'Non-determininable',
+ metadata?.destinationId || NON_DETERMINABLE,
+ metadata?.workspaceId || NON_DETERMINABLE,
tags.FEATURES.DATA_DELIVERY,
);
- metaTO.metadata = event.metadata;
+ metaTO.metadata = metadata;
deliveryResponse = DestinationPostTransformationService.handleDeliveryFailureEvents(
error,
metaTO,
@@ -33,6 +50,42 @@ export default class DeliveryController {
}
ctx.body = { output: deliveryResponse };
ControllerUtility.deliveryPostProcess(ctx, deliveryResponse.status);
+
+ logger.debug('Native(Delivery):: Response from transformer::', JSON.stringify(ctx.body));
+ return ctx;
+ }
+
+ public static async deliverToDestinationV1(ctx: Context) {
+ logger.debug('Native(Delivery):: Request to transformer::', JSON.stringify(ctx.request.body));
+ let deliveryResponse: DeliveriesResponse;
+ const requestMetadata = MiscService.getRequestMetadata(ctx);
+ const deliveryRequest = ctx.request.body as ProxyDeliveriesRequest;
+ const { destination }: { destination: string } = ctx.params;
+ const integrationService = ServiceSelector.getNativeDestinationService();
+ try {
+ deliveryResponse = (await integrationService.deliver(
+ deliveryRequest,
+ destination,
+ requestMetadata,
+ 'v1',
+ )) as DeliveriesResponse;
+ } catch (error: any) {
+ const { metadata } = deliveryRequest;
+ const metaTO = integrationService.getTags(
+ destination,
+ metadata[0].destinationId || NON_DETERMINABLE,
+ metadata[0].workspaceId || NON_DETERMINABLE,
+ tags.FEATURES.DATA_DELIVERY,
+ );
+ metaTO.metadatas = metadata;
+ deliveryResponse = DestinationPostTransformationService.handlevV1DeliveriesFailureEvents(
+ error,
+ metaTO,
+ );
+ }
+ ctx.body = { output: deliveryResponse };
+ ControllerUtility.deliveryPostProcess(ctx);
+
logger.debug('Native(Delivery):: Response from transformer::', JSON.stringify(ctx.body));
return ctx;
}
@@ -43,17 +96,19 @@ export default class DeliveryController {
JSON.stringify(ctx.request.body),
);
const { destination }: { destination: string } = ctx.params;
+ const { version }: { version: string } = ctx.params;
const {
deliveryPayload,
destinationRequestPayload,
}: {
deliveryPayload: ProcessorTransformationOutput;
destinationRequestPayload: ProcessorTransformationOutput;
- } = ctx.request.body as any;
+ } = ctx.request.body as FixMe;
const response = await DeliveryTestService.doTestDelivery(
destination,
destinationRequestPayload,
deliveryPayload,
+ version,
);
ctx.body = { output: response };
ControllerUtility.postProcess(ctx);
diff --git a/src/controllers/destination.ts b/src/controllers/destination.ts
index a5137ba1705..71075d1b4ce 100644
--- a/src/controllers/destination.ts
+++ b/src/controllers/destination.ts
@@ -1,22 +1,22 @@
import { Context } from 'koa';
-import MiscService from '../services/misc';
-import PreTransformationDestinationService from '../services/destination/preTransformation';
-import PostTransformationDestinationService from '../services/destination/postTransformation';
+import { MiscService } from '../services/misc';
+import { DestinationPreTransformationService } from '../services/destination/preTransformation';
+import { DestinationPostTransformationService } from '../services/destination/postTransformation';
import {
ProcessorTransformationRequest,
RouterTransformationRequest,
ProcessorTransformationResponse,
RouterTransformationResponse,
} from '../types/index';
-import ServiceSelector from '../helpers/serviceSelector';
-import ControllerUtility from './util';
+import { ServiceSelector } from '../helpers/serviceSelector';
+import { ControllerUtility } from './util';
import stats from '../util/stats';
import logger from '../logger';
import { getIntegrationVersion } from '../util/utils';
import tags from '../v0/util/tags';
import { DynamicConfigParser } from '../util/dynamicConfigParser';
-export default class DestinationController {
+export class DestinationController {
public static async destinationTransformAtProcessor(ctx: Context) {
const startTime = new Date();
logger.debug(
@@ -36,12 +36,14 @@ export default class DestinationController {
const integrationService = ServiceSelector.getDestinationService(events);
try {
integrationService.init();
- events = PreTransformationDestinationService.preProcess(
+ events = DestinationPreTransformationService.preProcess(
events,
ctx,
) as ProcessorTransformationRequest[];
const timestampCorrectEvents = ControllerUtility.handleTimestampInEvents(events);
- events = DynamicConfigParser.process(timestampCorrectEvents) as ProcessorTransformationRequest[];
+ events = DynamicConfigParser.process(
+ timestampCorrectEvents,
+ ) as ProcessorTransformationRequest[];
resplist = await integrationService.doProcessorTransformation(
events,
destination,
@@ -57,7 +59,7 @@ export default class DestinationController {
tags.FEATURES.PROCESSOR,
);
metaTO.metadata = ev.metadata;
- const errResp = PostTransformationDestinationService.handleProcessorTransformFailureEvents(
+ const errResp = DestinationPostTransformationService.handleProcessorTransformFailureEvents(
error,
metaTO,
);
@@ -108,7 +110,7 @@ export default class DestinationController {
const integrationService = ServiceSelector.getDestinationService(events);
let resplist: RouterTransformationResponse[];
try {
- events = PreTransformationDestinationService.preProcess(events, ctx);
+ events = DestinationPreTransformationService.preProcess(events, ctx);
const timestampCorrectEvents = ControllerUtility.handleTimestampInEvents(events);
events = DynamicConfigParser.process(timestampCorrectEvents);
resplist = await integrationService.doRouterTransformation(
@@ -125,7 +127,7 @@ export default class DestinationController {
tags.FEATURES.ROUTER,
);
metaTO.metadatas = events.map((ev) => ev.metadata);
- const errResp = PostTransformationDestinationService.handleRouterTransformFailureEvents(
+ const errResp = DestinationPostTransformationService.handleRouterTransformFailureEvents(
error,
metaTO,
);
@@ -163,7 +165,7 @@ export default class DestinationController {
let events = routerRequest.input;
const integrationService = ServiceSelector.getDestinationService(events);
try {
- events = PreTransformationDestinationService.preProcess(events, ctx);
+ events = DestinationPreTransformationService.preProcess(events, ctx);
const timestampCorrectEvents = ControllerUtility.handleTimestampInEvents(events);
const resplist = integrationService.doBatchTransformation(
timestampCorrectEvents,
@@ -180,7 +182,7 @@ export default class DestinationController {
tags.FEATURES.BATCH,
);
metaTO.metadatas = events.map((ev) => ev.metadata);
- const errResp = PostTransformationDestinationService.handleBatchTransformFailureEvents(
+ const errResp = DestinationPostTransformationService.handleBatchTransformFailureEvents(
error,
metaTO,
);
@@ -194,7 +196,7 @@ export default class DestinationController {
stats.timing('dest_transform_request_latency', startTime, {
destination,
feature: tags.FEATURES.BATCH,
- version:"v0",
+ version: 'v0',
});
return ctx;
}
diff --git a/src/controllers/eventTest.ts b/src/controllers/eventTest.ts
index 6faf047d70f..d5507f65d29 100644
--- a/src/controllers/eventTest.ts
+++ b/src/controllers/eventTest.ts
@@ -1,23 +1,25 @@
import { Context } from 'koa';
-import EventTesterService from '../services/eventTest/eventTester';
+import { EventTesterService } from '../services/eventTest/eventTester';
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import { CatchErr, FixMe } from '../util/types';
-export default class EventTestController {
+export class EventTestController {
private static API_VERSION = '1';
public static async testEvent(ctx: Context) {
const { version, destination }: { version: string; destination: string } = ctx.params as any;
- const { events }: { events: any } = ctx.request.body as any;
+ const { events }: { events: FixMe } = ctx.request.body as FixMe;
try {
const respList = await EventTesterService.testEvent(events, version, destination);
ctx.body = respList;
- } catch (err: any) {
+ } catch (err: CatchErr) {
// fail-safety error response
ctx.body = {
error: err.message || JSON.stringify(err),
};
ctx.status = 400;
}
- ctx.set('apiVersion', this.API_VERSION);
+ ctx.set('apiVersion', EventTestController.API_VERSION);
}
public static status(ctx: Context) {
diff --git a/src/controllers/misc.ts b/src/controllers/misc.ts
index eff0eee2449..e2efdab5db7 100644
--- a/src/controllers/misc.ts
+++ b/src/controllers/misc.ts
@@ -1,7 +1,7 @@
import { Context } from 'koa';
-import MiscService from '../services/misc';
+import { MiscService } from '../services/misc';
-export default class MiscController {
+export class MiscController {
public static healthStats(ctx: Context) {
ctx.body = MiscService.getHealthInfo();
ctx.status = 200;
@@ -25,4 +25,22 @@ export default class MiscController {
ctx.status = 200;
return ctx;
}
+
+ public static async getCPUProfile(ctx: Context) {
+ const { seconds } = ctx.query;
+ let secondsData = 10;
+ // if seconds is not null and is not array then parseInt
+ if (seconds && !Array.isArray(seconds)) {
+ secondsData = parseInt(seconds, 10);
+ }
+ ctx.body = await MiscService.getCPUProfile(secondsData);
+ ctx.status = 200;
+ return ctx;
+ }
+
+ public static async getHeapProfile(ctx: Context) {
+ ctx.body = await MiscService.getHeapProfile();
+ ctx.status = 200;
+ return ctx;
+ }
}
diff --git a/src/controllers/profile.ts b/src/controllers/profile.ts
index 5f2dce4fe66..a0a62bf4792 100644
--- a/src/controllers/profile.ts
+++ b/src/controllers/profile.ts
@@ -1,9 +1,8 @@
import { Context } from 'koa';
-import MiscService from '../services/misc';
-import ProfileService from '../services/profile';
-import ControllerUtility from './util';
+import { ProfileService } from '../services/profile';
+import { ControllerUtility } from './util';
-export default class ProfileController {
+export class ProfileController {
/**
* Example usage of API
*
@@ -30,7 +29,6 @@ export default class ProfileController {
}'
*/
public static async profile(ctx: Context) {
- const requestMetadata = MiscService.getRequestMetadata(ctx);
const format = ctx.request.query.format as string;
const { credBucketDetails } = ctx.request.body as any;
const response = await ProfileService.profile(credBucketDetails, format);
diff --git a/src/controllers/regulation.ts b/src/controllers/regulation.ts
index a36f1826b7f..a50541780d6 100644
--- a/src/controllers/regulation.ts
+++ b/src/controllers/regulation.ts
@@ -1,13 +1,14 @@
import { Context } from 'koa';
import logger from '../logger';
import { UserDeletionRequest, UserDeletionResponse } from '../types';
-import ServiceSelector from '../helpers/serviceSelector';
+import { ServiceSelector } from '../helpers/serviceSelector';
import tags from '../v0/util/tags';
import stats from '../util/stats';
-import PostTransformationDestinationService from '../services/destination/postTransformation';
+import { DestinationPostTransformationService } from '../services/destination/postTransformation';
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import { CatchErr } from '../util/types';
-// TODO: refactor this class to new format
-export default class RegulationController {
+export class RegulationController {
public static async deleteUsers(ctx: Context) {
logger.debug(
'Native(Process-Transform):: Requst to transformer::',
@@ -34,14 +35,15 @@ export default class RegulationController {
);
ctx.body = resplist;
ctx.status = resplist[0].statusCode;
- } catch (error: any) {
+ } catch (error: CatchErr) {
const metaTO = integrationService.getTags(
userDeletionRequests[0].destType,
'unknown',
'unknown',
tags.FEATURES.USER_DELETION,
);
- const errResp = PostTransformationDestinationService.handleUserDeletionFailureEvents(
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const errResp = DestinationPostTransformationService.handleUserDeletionFailureEvents(
error,
metaTO,
);
@@ -50,7 +52,7 @@ export default class RegulationController {
}
stats.timing('dest_transform_request_latency', startTime, {
feature: tags.FEATURES.USER_DELETION,
- version:"v0",
+ version: 'v0',
});
return ctx;
}
diff --git a/src/controllers/source.ts b/src/controllers/source.ts
index a413426cc74..ef5483a756f 100644
--- a/src/controllers/source.ts
+++ b/src/controllers/source.ts
@@ -1,31 +1,36 @@
import { Context } from 'koa';
-import MiscService from '../services/misc';
-import ServiceSelector from '../helpers/serviceSelector';
-import ControllerUtility from './util';
+import { MiscService } from '../services/misc';
+import { ServiceSelector } from '../helpers/serviceSelector';
+import { ControllerUtility } from './util';
import logger from '../logger';
-import PostTransformationServiceSource from '../services/source/postTransformation';
+import { SourcePostTransformationService } from '../services/source/postTransformation';
-export default class SourceController {
+export class SourceController {
public static async sourceTransform(ctx: Context) {
logger.debug(
'Native(Source-Transform):: Request to transformer::',
JSON.stringify(ctx.request.body),
);
const requestMetadata = MiscService.getRequestMetadata(ctx);
- const events = ctx.request.body as Object[];
+ const events = ctx.request.body as object[];
const { version, source }: { version: string; source: string } = ctx.params;
const integrationService = ServiceSelector.getNativeSourceService();
try {
- const resplist = await integrationService.sourceTransformRoutine(
- events,
+ const { implementationVersion, input } = ControllerUtility.adaptInputToVersion(
source,
version,
+ events,
+ );
+ const resplist = await integrationService.sourceTransformRoutine(
+ input,
+ source,
+ implementationVersion,
requestMetadata,
);
ctx.body = resplist;
} catch (err: any) {
const metaTO = integrationService.getTags();
- const resp = PostTransformationServiceSource.handleFailureEventsSource(err, metaTO);
+ const resp = SourcePostTransformationService.handleFailureEventsSource(err, metaTO);
ctx.body = [resp];
}
ControllerUtility.postProcess(ctx);
diff --git a/src/controllers/trackingPlan.ts b/src/controllers/trackingPlan.ts
index 66bf3607003..74e47e0ec92 100644
--- a/src/controllers/trackingPlan.ts
+++ b/src/controllers/trackingPlan.ts
@@ -1,8 +1,8 @@
import { Context } from 'koa';
-import TrackingPlanservice from '../services/trackingPlan';
-import ControllerUtility from './util';
+import { TrackingPlanservice } from '../services/trackingPlan';
+import { ControllerUtility } from './util';
-export default class TrackingPlanController {
+export class TrackingPlanController {
public static async validateTrackingPlan(ctx: Context) {
const events = ctx.request.body;
const requestSize = Number(ctx.request.get('content-length'));
diff --git a/src/controllers/userTransform.ts b/src/controllers/userTransform.ts
index cc64f5db1b9..c344bd072ad 100644
--- a/src/controllers/userTransform.ts
+++ b/src/controllers/userTransform.ts
@@ -1,26 +1,23 @@
import { Context } from 'koa';
-import MiscService from '../services/misc';
import { ProcessorTransformationRequest, UserTransformationServiceResponse } from '../types/index';
-import { compileUserLibrary } from '../util/ivmFactory';
-import UserTransformService from '../services/userTransform';
+import { UserTransformService } from '../services/userTransform';
import logger from '../logger';
import {
setupUserTransformHandler,
extractLibraries,
validateCode,
} from '../util/customTransformer';
-import ControllerUtility from './util';
+import { ControllerUtility } from './util';
-export default class UserTransformController {
+export class UserTransformController {
public static async transform(ctx: Context) {
logger.debug(
'(User transform - router:/customTransform ):: Request to transformer',
JSON.stringify(ctx.request.body),
);
- const requestMetadata = MiscService.getRequestMetadata(ctx);
const events = ctx.request.body as ProcessorTransformationRequest[];
const processedRespone: UserTransformationServiceResponse =
- await UserTransformService.transformRoutine(events);
+ await UserTransformService.transformRoutine(events, ctx.state.features);
ctx.body = processedRespone.transformedEvents;
ControllerUtility.postProcess(ctx, processedRespone.retryStatus);
logger.debug(
diff --git a/src/controllers/util/index.test.ts b/src/controllers/util/index.test.ts
new file mode 100644
index 00000000000..e23d3f68324
--- /dev/null
+++ b/src/controllers/util/index.test.ts
@@ -0,0 +1,149 @@
+import { ControllerUtility } from './index';
+
+describe('adaptInputToVersion', () => {
+ it('should return the input unchanged when the implementation version is not found', () => {
+ const sourceType = 'NA_SOURCE';
+ const requestVersion = 'v0';
+ const input = [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ];
+ const expected = {
+ implementationVersion: undefined,
+ input: [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ],
+ };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+ it('should return the input unchanged when the implementation version and request version are the same i.e. v0', () => {
+ const sourceType = 'pipedream';
+ const requestVersion = 'v0';
+ const input = [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ];
+ const expected = {
+ implementationVersion: 'v0',
+ input: [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ],
+ };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+ it('should return the input unchanged when the implementation version and request version are the same i.e. v1', () => {
+ const sourceType = 'webhook';
+ const requestVersion = 'v1';
+ const input = [
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ ];
+ const expected = {
+ implementationVersion: 'v1',
+ input: [
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ ],
+ };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+ it('should convert input from v0 to v1 when the request version is v0 and the implementation version is v1', () => {
+ const sourceType = 'webhook';
+ const requestVersion = 'v0';
+ const input = [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ];
+ const expected = {
+ implementationVersion: 'v1',
+ input: [
+ { event: { key1: 'val1', key2: 'val2' }, source: undefined },
+ { event: { key1: 'val1', key2: 'val2' }, source: undefined },
+ { event: { key1: 'val1', key2: 'val2' }, source: undefined },
+ ],
+ };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+
+ it('should convert input from v1 to v0 format when the request version is v1 and the implementation version is v0', () => {
+ const sourceType = 'pipedream';
+ const requestVersion = 'v1';
+ const input = [
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ {
+ event: { key1: 'val1', key2: 'val2' },
+ source: { id: 'source_id', config: { configField1: 'configVal1' } },
+ },
+ ];
+ const expected = {
+ implementationVersion: 'v0',
+ input: [
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ { key1: 'val1', key2: 'val2' },
+ ],
+ };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+
+ // Should return an empty array when the input is an empty array
+ it('should return an empty array when the input is an empty array', () => {
+ const sourceType = 'pipedream';
+ const requestVersion = 'v1';
+ const input = [];
+ const expected = { implementationVersion: 'v0', input: [] };
+
+ const result = ControllerUtility.adaptInputToVersion(sourceType, requestVersion, input);
+
+ expect(result).toEqual(expected);
+ });
+});
diff --git a/src/controllers/util/index.ts b/src/controllers/util/index.ts
index 67a314bc753..75d3d8ffa7c 100644
--- a/src/controllers/util/index.ts
+++ b/src/controllers/util/index.ts
@@ -1,3 +1,5 @@
+import fs = require('fs');
+import path = require('path');
import { Context } from 'koa';
import isEmpty from 'lodash/isEmpty';
import get from 'get-value';
@@ -7,22 +9,68 @@ import {
ProcessorTransformationRequest,
RouterTransformationRequestData,
RudderMessage,
+ SourceInput,
} from '../../types';
import { getValueFromMessage } from '../../v0/util';
import genericFieldMap from '../../v0/util/data/GenericFieldMapping.json';
import { EventType, MappedToDestinationKey } from '../../constants';
-export default class ControllerUtility {
+export class ControllerUtility {
+ private static sourceVersionMap: Map = new Map();
+
public static timestampValsMap: Record = {
[EventType.IDENTIFY]: [
`context.${RETL_TIMESTAMP}`,
`context.traits.${RETL_TIMESTAMP}`,
`traits.${RETL_TIMESTAMP}`,
- ...genericFieldMap['timestamp'],
+ ...genericFieldMap.timestamp,
],
- [EventType.TRACK]: [`properties.${RETL_TIMESTAMP}`, ...genericFieldMap['timestamp']],
+ [EventType.TRACK]: [`properties.${RETL_TIMESTAMP}`, ...genericFieldMap.timestamp],
};
+ private static getSourceVersionsMap(): Map {
+ if (this.sourceVersionMap?.size > 0) {
+ return this.sourceVersionMap;
+ }
+ const versions = ['v0', 'v1'];
+ versions.forEach((version) => {
+ const files = fs.readdirSync(path.resolve(__dirname, `../../${version}/sources`), {
+ withFileTypes: true,
+ });
+ const sources = files.filter((file) => file.isDirectory()).map((folder) => folder.name);
+ sources.forEach((source) => {
+ this.sourceVersionMap.set(source, version);
+ });
+ });
+ return this.sourceVersionMap;
+ }
+
+ private static convertSourceInputv1Tov0(sourceEvents: SourceInput[]): NonNullable[] {
+ return sourceEvents.map((sourceEvent) => sourceEvent.event);
+ }
+
+ private static convertSourceInputv0Tov1(sourceEvents: unknown[]): SourceInput[] {
+ return sourceEvents.map(
+ (sourceEvent) => ({ event: sourceEvent, source: undefined } as SourceInput),
+ );
+ }
+
+ public static adaptInputToVersion(
+ sourceType: string,
+ requestVersion: string,
+ input: NonNullable[],
+ ): { implementationVersion: string; input: NonNullable[] } {
+ const sourceToVersionMap = this.getSourceVersionsMap();
+ const implementationVersion = sourceToVersionMap.get(sourceType);
+ let updatedInput: NonNullable[] = input;
+ if (requestVersion === 'v0' && implementationVersion === 'v1') {
+ updatedInput = this.convertSourceInputv0Tov1(input);
+ } else if (requestVersion === 'v1' && implementationVersion === 'v0') {
+ updatedInput = this.convertSourceInputv1Tov0(input as SourceInput[]);
+ }
+ return { implementationVersion, input: updatedInput };
+ }
+
private static getCompatibleStatusCode(status: number): number {
return getCompatibleStatusCode(status);
}
diff --git a/src/features.json b/src/features.json
index 9784f03e442..e0745c22469 100644
--- a/src/features.json
+++ b/src/features.json
@@ -25,6 +25,7 @@
"PINTEREST_TAG": true,
"PROFITWELL": true,
"SALESFORCE": true,
+ "SALESFORCE_OAUTH": true,
"SFMC": true,
"SNAPCHAT_CONVERSION": true,
"TIKTOK_ADS": true,
@@ -57,6 +58,13 @@
"BRAZE": true,
"OPTIMIZELY_FULLSTACK": true,
"TWITTER_ADS": true,
- "CLEVERTAP": true
- }
+ "CLEVERTAP": true,
+ "ORTTO": true,
+ "GLADLY": true,
+ "ONE_SIGNAL": true,
+ "TIKTOK_AUDIENCE": true,
+ "REDDIT": true
+ },
+ "supportSourceTransformV1": true,
+ "supportTransformerProxyV1": true
}
diff --git a/src/helpers/fetchHandlers.ts b/src/helpers/fetchHandlers.ts
index 96a74e528d9..ef7d9e66116 100644
--- a/src/helpers/fetchHandlers.ts
+++ b/src/helpers/fetchHandlers.ts
@@ -1,6 +1,6 @@
-import MiscService from '../services/misc';
+import { MiscService } from '../services/misc';
-export default class FetchHandler {
+export class FetchHandler {
private static sourceHandlerMap: Map = new Map();
private static destHandlerMap: Map = new Map();
diff --git a/src/helpers/serviceSelector.ts b/src/helpers/serviceSelector.ts
index 99f897cedc6..89678e94074 100644
--- a/src/helpers/serviceSelector.ts
+++ b/src/helpers/serviceSelector.ts
@@ -1,15 +1,16 @@
+import { PlatformError } from '@rudderstack/integrations-lib';
import { ProcessorTransformationRequest, RouterTransformationRequestData } from '../types/index';
import { INTEGRATION_SERVICE } from '../routes/utils/constants';
-import CDKV1DestinationService from '../services/destination/cdkV1Integration';
-import CDKV2DestinationService from '../services/destination/cdkV2Integration';
-import DestinationService from '../interfaces/DestinationService';
-import NativeIntegrationDestinationService from '../services/destination/nativeIntegration';
-import SourceService from '../interfaces/SourceService';
-import NativeIntegrationSourceService from '../services/source/nativeIntegration';
-import { PlatformError } from '../v0/util/errorTypes';
-import ComparatorService from '../services/comparator';
+import { CDKV1DestinationService } from '../services/destination/cdkV1Integration';
+import { CDKV2DestinationService } from '../services/destination/cdkV2Integration';
+import { DestinationService } from '../interfaces/DestinationService';
+import { NativeIntegrationDestinationService } from '../services/destination/nativeIntegration';
+import { SourceService } from '../interfaces/SourceService';
+import { NativeIntegrationSourceService } from '../services/source/nativeIntegration';
+import { ComparatorService } from '../services/comparator';
+import { FixMe } from '../util/types';
-export default class ServiceSelector {
+export class ServiceSelector {
private static serviceMap: Map = new Map();
private static services = {
@@ -19,23 +20,23 @@ export default class ServiceSelector {
[INTEGRATION_SERVICE.NATIVE_SOURCE]: NativeIntegrationSourceService,
};
- private static isCdkDestination(destinationDefinitionConfig: Object) {
- return !!destinationDefinitionConfig?.['cdkEnabled'];
+ private static isCdkDestination(destinationDefinitionConfig: FixMe) {
+ return !!destinationDefinitionConfig?.cdkEnabled;
}
- private static isCdkV2Destination(destinationDefinitionConfig: Object) {
- return Boolean(destinationDefinitionConfig?.['cdkV2Enabled']);
+ private static isCdkV2Destination(destinationDefinitionConfig: FixMe) {
+ return Boolean(destinationDefinitionConfig?.cdkV2Enabled);
}
- private static isComparatorEnabled(destinationDefinitionConfig: Object): boolean {
+ private static isComparatorEnabled(destinationDefinitionConfig: FixMe): boolean {
return (
process.env.COMPARATOR_ENABLED === 'true' &&
- !!destinationDefinitionConfig['comparisonTestEnabeld']
+ !!destinationDefinitionConfig.comparisonTestEnabeld
);
}
- private static getSecondaryServiceName(destinationDefinitionConfig: Object): string {
- return destinationDefinitionConfig['comparisonService'];
+ private static getSecondaryServiceName(destinationDefinitionConfig: FixMe): string {
+ return destinationDefinitionConfig.comparisonService;
}
private static fetchCachedService(serviceType: string) {
@@ -65,7 +66,7 @@ export default class ServiceSelector {
private static getPrimaryDestinationService(
events: ProcessorTransformationRequest[] | RouterTransformationRequestData[],
): DestinationService {
- const destinationDefinitionConfig: Object =
+ const destinationDefinitionConfig: FixMe =
events[0]?.destination?.DestinationDefinition?.Config;
if (this.isCdkDestination(destinationDefinitionConfig)) {
return this.fetchCachedService(INTEGRATION_SERVICE.CDK_V1_DEST);
@@ -76,6 +77,7 @@ export default class ServiceSelector {
return this.fetchCachedService(INTEGRATION_SERVICE.NATIVE_DEST);
}
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
public static getSourceService(arg: unknown) {
// Implement source event based descision logic for selecting service
}
diff --git a/src/index.ts b/src/index.ts
index 92c54befca9..36f32f1aed6 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -4,20 +4,19 @@ import gracefulShutdown from 'http-graceful-shutdown';
import dotenv from 'dotenv';
import logger from './logger';
import cluster from './util/cluster';
-import { router } from './legacy/router';
-import { testRouter } from './testRouter';
import { metricsRouter } from './routes/metricsRouter';
-import { addStatMiddleware, addRequestSizeMiddleware } from './middleware';
+import { addStatMiddleware, addRequestSizeMiddleware, initPyroscope } from './middleware';
import { logProcessInfo } from './util/utils';
import { applicationRoutes, addSwaggerRoutes } from './routes';
import { RedisDB } from './util/redis/redisConnector';
dotenv.config();
const clusterEnabled = process.env.CLUSTER_ENABLED !== 'false';
-const useUpdatedRoutes = process.env.ENABLE_NEW_ROUTES !== 'false';
-const port = parseInt(process.env.PORT || '9090', 10);
+const port = parseInt(process.env.PORT ?? '9090', 10);
const metricsPort = parseInt(process.env.METRICS_PORT || '9091', 10);
+initPyroscope();
+
const app = new Koa();
addStatMiddleware(app);
@@ -30,19 +29,11 @@ app.use(
jsonLimit: '200mb',
}),
);
-
addRequestSizeMiddleware(app);
addSwaggerRoutes(app);
-if (useUpdatedRoutes) {
- logger.info('Using new routes');
- applicationRoutes(app);
-} else {
- // To be depricated
- logger.info('Using old routes');
- app.use(router.routes()).use(router.allowedMethods());
- app.use(testRouter.routes()).use(testRouter.allowedMethods());
-}
+logger.info('Using new routes');
+applicationRoutes(app);
function finalFunction() {
RedisDB.disconnect();
diff --git a/src/interfaces/DestinationService.ts b/src/interfaces/DestinationService.ts
index b1cae047f8c..bf39024d85e 100644
--- a/src/interfaces/DestinationService.ts
+++ b/src/interfaces/DestinationService.ts
@@ -5,12 +5,13 @@ import {
ProcessorTransformationResponse,
RouterTransformationRequestData,
RouterTransformationResponse,
- ProcessorTransformationOutput,
UserDeletionRequest,
UserDeletionResponse,
+ ProxyRequest,
+ DeliveriesResponse,
} from '../types/index';
-export default interface DestinationService {
+export interface DestinationService {
getName(): string;
init(): void;
@@ -26,28 +27,29 @@ export default interface DestinationService {
events: ProcessorTransformationRequest[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise;
doRouterTransformation(
events: RouterTransformationRequestData[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise;
doBatchTransformation(
events: RouterTransformationRequestData[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): RouterTransformationResponse[];
deliver(
- event: ProcessorTransformationOutput,
+ event: ProxyRequest,
destinationType: string,
- requestMetadata: Object,
- ): Promise;
+ requestMetadata: NonNullable,
+ version: string,
+ ): Promise;
processUserDeletion(
requests: UserDeletionRequest[],
diff --git a/src/interfaces/SourceService.ts b/src/interfaces/SourceService.ts
index 28d72ee9908..c7de8cfe8bc 100644
--- a/src/interfaces/SourceService.ts
+++ b/src/interfaces/SourceService.ts
@@ -1,12 +1,12 @@
import { MetaTransferObject, SourceTransformationResponse } from '../types/index';
-export default interface SourceService {
+export interface SourceService {
getTags(): MetaTransferObject;
sourceTransformRoutine(
- sourceEvents: Object[],
+ sourceEvents: NonNullable[],
sourceType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise;
}
diff --git a/src/legacy/router.js b/src/legacy/router.js
index d42f82e072f..25cf2c68330 100644
--- a/src/legacy/router.js
+++ b/src/legacy/router.js
@@ -4,9 +4,10 @@
/* eslint-disable import/no-dynamic-require */
/* eslint-disable global-require */
const Router = require('@koa/router');
-const _ = require('lodash');
+const lodash = require('lodash');
const fs = require('fs');
const path = require('path');
+const { PlatformError } = require('@rudderstack/integrations-lib');
const logger = require('../logger');
const stats = require('../util/stats');
const { SUPPORTED_VERSIONS, API_VERSION } = require('../routes/utils/constants');
@@ -35,7 +36,6 @@ const {
sendViolationMetrics,
constructValidationErrors,
} = require('../util/utils');
-const { PlatformError } = require('../v0/util/errorTypes');
const { processCdkV1 } = require('../cdk/v1/handler');
const { extractLibraries } = require('../util/customTransformer');
const { getCompatibleStatusCode } = require('../adapters/utils/networkUtils');
@@ -89,7 +89,7 @@ const functionsEnabled = () => {
return areFunctionsEnabled === 1;
};
-// eslint-disable-next-line no-unused-vars
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
function getCommonMetadata(ctx) {
// TODO: Parse information such as
// cluster, namespace, etc information
@@ -361,7 +361,7 @@ async function routerHandleDest(ctx) {
ctx.body = `${destType} doesn't support router transform`;
return null;
}
- const allDestEvents = _.groupBy(input, (event) => event.destination.ID);
+ const allDestEvents = lodash.groupBy(input, (event) => event.destination.ID);
await Promise.all(
Object.values(allDestEvents).map(async (destInputArray) => {
const newDestInputArray = processDynamicConfig(destInputArray, 'router');
@@ -392,7 +392,10 @@ async function routerHandleDest(ctx) {
// Add default stat tags
respEvents
- .filter((resp) => 'error' in resp && _.isObject(resp.statTags) && !_.isEmpty(resp.statTags))
+ .filter(
+ (resp) =>
+ 'error' in resp && lodash.isObject(resp.statTags) && !lodash.isEmpty(resp.statTags),
+ )
.forEach((resp) => {
// eslint-disable-next-line no-param-reassign
resp.statTags = {
@@ -529,13 +532,13 @@ if (startDestTransformer) {
});
let groupedEvents;
if (processSessions) {
- groupedEvents = _.groupBy(events, (event) => {
+ groupedEvents = lodash.groupBy(events, (event) => {
// to have the backward-compatibility and being extra careful. We need to remove this (message.anonymousId) in next release.
const rudderId = event.metadata.rudderId || event.message.anonymousId;
return `${event.destination.ID}_${event.metadata.sourceId}_${rudderId}`;
});
} else {
- groupedEvents = _.groupBy(
+ groupedEvents = lodash.groupBy(
events,
(event) => `${event.metadata.destinationId}_${event.metadata.sourceId}`,
);
@@ -571,14 +574,9 @@ if (startDestTransformer) {
destEvents.length > 0 && destEvents[0].metadata
? getMetadata(destEvents[0].metadata)
: {};
- const userFuncStartTime = new Date();
if (transformationVersionId) {
let destTransformedEvents;
try {
- stats.counter('user_transform_function_input_events', destEvents.length, {
- processSessions,
- ...metaTags,
- });
destTransformedEvents = await userTransformHandler()(
destEvents,
transformationVersionId,
@@ -590,7 +588,7 @@ if (startDestTransformer) {
return {
statusCode: 400,
error: ev.error,
- metadata: _.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
+ metadata: lodash.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
};
}
if (!isNonFuncObject(ev.transformedEvent)) {
@@ -599,12 +597,12 @@ if (startDestTransformer) {
error: `returned event in events from user transformation is not an object. transformationVersionId:${transformationVersionId} and returned event: ${JSON.stringify(
ev.transformedEvent,
)}`,
- metadata: _.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
+ metadata: lodash.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
};
}
return {
output: ev.transformedEvent,
- metadata: _.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
+ metadata: lodash.isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
statusCode: 200,
};
}),
@@ -630,12 +628,6 @@ if (startDestTransformer) {
processSessions,
...metaTags,
});
- } finally {
- stats.timing('user_transform_function_latency', userFuncStartTime, {
- transformationVersionId,
- processSessions,
- ...metaTags,
- });
}
} else {
const errorMessage = 'Transformation VersionID not found';
@@ -998,7 +990,7 @@ const batchHandler = (ctx) => {
ctx.body = `${destType} doesn't support batching`;
return null;
}
- const allDestEvents = _.groupBy(input, (event) => event.destination.ID);
+ const allDestEvents = lodash.groupBy(input, (event) => event.destination.ID);
const response = { batchedRequests: [], errors: [] };
Object.entries(allDestEvents).forEach(([, destEvents]) => {
diff --git a/src/middleware.js b/src/middleware.js
index 26ba4ee3bcf..53aabc90e3a 100644
--- a/src/middleware.js
+++ b/src/middleware.js
@@ -1,5 +1,21 @@
+const Pyroscope = require('@pyroscope/nodejs');
const stats = require('./util/stats');
+function initPyroscope() {
+ Pyroscope.init({
+ appName: 'rudder-transformer',
+ });
+ Pyroscope.startHeapCollecting();
+}
+
+function getCPUProfile(seconds) {
+ return Pyroscope.collectCpu(seconds);
+}
+
+function getHeapProfile() {
+ return Pyroscope.collectHeap();
+}
+
function durationMiddleware() {
return async (ctx, next) => {
const startTime = new Date();
@@ -45,4 +61,7 @@ function addRequestSizeMiddleware(app) {
module.exports = {
addStatMiddleware,
addRequestSizeMiddleware,
+ getHeapProfile,
+ getCPUProfile,
+ initPyroscope,
};
diff --git a/src/middlewares/featureFlag.ts b/src/middlewares/featureFlag.ts
new file mode 100644
index 00000000000..206fa7c5ea1
--- /dev/null
+++ b/src/middlewares/featureFlag.ts
@@ -0,0 +1,49 @@
+import { Context, Next } from 'koa';
+
+export interface FeatureFlags {
+ [key: string]: boolean | string;
+}
+
+export const FEATURE_FILTER_CODE = 'filter-code';
+
+export class FeatureFlagMiddleware {
+ public static async handle(ctx: Context, next: Next): Promise {
+ // Initialize ctx.state.features if it doesn't exist
+ ctx.state.features = (ctx.state.features || {}) as FeatureFlags;
+
+ // Get headers from the request
+ const { headers } = ctx.request;
+
+ // Filter headers that start with 'X-Feature-'
+ const featureHeaders = Object.keys(headers).filter((key) =>
+ key.toLowerCase().startsWith('x-feature-'),
+ );
+
+ // Convert feature headers to feature flags in ctx.state.features
+ featureHeaders.forEach((featureHeader) => {
+ // Get the feature name by removing the prefix, and convert to camelCase
+ const featureName = featureHeader
+ .substring(10)
+ .replace(/X-Feature-/g, '')
+ .toLowerCase();
+
+ let value: string | boolean | undefined;
+ const valueString = headers[featureHeader] as string;
+ if (valueString === 'true' || valueString === '?1') {
+ value = true;
+ } else if (valueString === 'false' || valueString === '?0') {
+ value = false;
+ } else {
+ value = valueString;
+ }
+
+ // Set the feature flag in ctx.state.features
+ if (value !== undefined) {
+ ctx.state.features[featureName] = value;
+ }
+ });
+
+ // Move to the next middleware
+ await next();
+ }
+}
diff --git a/src/middlewares/routeActivation.ts b/src/middlewares/routeActivation.ts
index bf457b2faa6..ffb1e15e80b 100644
--- a/src/middlewares/routeActivation.ts
+++ b/src/middlewares/routeActivation.ts
@@ -18,7 +18,7 @@ const destinationFilterList = process.env.DESTINATION_FILTER_LIST?.toLocaleLower
const sourceFilteList = process.env.SOURCE_FILTER_LIST?.toLocaleLowerCase();
const deliveryFilterList = process.env.DESTINATION_DELIVERY_FILTER_LIST?.toLocaleLowerCase();
-export default class RouteActivationMiddleware {
+export class RouteActivationMiddleware {
private static executeActivationRule(ctx: Context, next: Next, shouldActivate: boolean) {
if (shouldActivate) {
return next();
@@ -78,6 +78,7 @@ export default class RouteActivationMiddleware {
);
}
+ // eslint-disable-next-line sonarjs/no-identical-functions
public static destinationBatchFilter(ctx: Context, next: Next) {
const routerRequest = ctx.request.body as RouterTransformationRequest;
const destination = routerRequest.destType;
diff --git a/src/routes/bulkUpload.ts b/src/routes/bulkUpload.ts
index 386cf78c36e..efbd81c34e0 100644
--- a/src/routes/bulkUpload.ts
+++ b/src/routes/bulkUpload.ts
@@ -12,4 +12,6 @@ router.post('/fileUpload', fileUpload);
router.post('/pollStatus', pollStatus);
router.post('/getFailedJobs', getFailedJobStatus);
router.post('/getWarningJobs', getWarnJobStatus);
-export const bulkUploadRoutes = router.routes();
+const bulkUploadRoutes = router.routes();
+
+export default bulkUploadRoutes;
diff --git a/src/routes/delivery.ts b/src/routes/delivery.ts
index de4ec65934b..30f4e2fb788 100644
--- a/src/routes/delivery.ts
+++ b/src/routes/delivery.ts
@@ -1,20 +1,28 @@
import Router from '@koa/router';
-import DeliveryController from '../controllers/delivery';
-import RouteActivationMiddleware from '../middlewares/routeActivation';
+import { DeliveryController } from '../controllers/delivery';
+import { RouteActivationMiddleware } from '../middlewares/routeActivation';
const router = new Router();
router.post(
- '/:version/destinations/:destination/proxy',
+ '/v0/destinations/:destination/proxy',
RouteActivationMiddleware.isDeliveryRouteActive,
RouteActivationMiddleware.destinationDeliveryFilter,
DeliveryController.deliverToDestination,
);
+router.post(
+ '/v1/destinations/:destination/proxy',
+ RouteActivationMiddleware.isDeliveryRouteActive,
+ RouteActivationMiddleware.destinationDeliveryFilter,
+ DeliveryController.deliverToDestinationV1,
+);
+
router.post(
'/:version/destinations/:destination/proxyTest',
RouteActivationMiddleware.isDeliveryTestRouteActive,
DeliveryController.testDestinationDelivery,
);
-export const proxyRoutes = router.routes();
+const proxyRoutes = router.routes();
+export default proxyRoutes;
diff --git a/src/routes/destination.ts b/src/routes/destination.ts
index bed2a1af202..1c478251455 100644
--- a/src/routes/destination.ts
+++ b/src/routes/destination.ts
@@ -1,29 +1,34 @@
import Router from '@koa/router';
-import DestinationController from '../controllers/destination';
-import RegulationController from '../controllers/regulation';
-import RouteActivationController from '../middlewares/routeActivation';
+import { DestinationController } from '../controllers/destination';
+import { RegulationController } from '../controllers/regulation';
+import { FeatureFlagMiddleware } from '../middlewares/featureFlag';
+import { RouteActivationMiddleware } from '../middlewares/routeActivation';
const router = new Router();
router.post(
'/:version/destinations/:destination',
- RouteActivationController.isDestinationRouteActive,
- RouteActivationController.destinationProcFilter,
+ RouteActivationMiddleware.isDestinationRouteActive,
+ RouteActivationMiddleware.destinationProcFilter,
+ FeatureFlagMiddleware.handle,
DestinationController.destinationTransformAtProcessor,
);
router.post(
'/routerTransform',
- RouteActivationController.isDestinationRouteActive,
- RouteActivationController.destinationRtFilter,
+ RouteActivationMiddleware.isDestinationRouteActive,
+ RouteActivationMiddleware.destinationRtFilter,
+ FeatureFlagMiddleware.handle,
DestinationController.destinationTransformAtRouter,
);
router.post(
'/batch',
- RouteActivationController.isDestinationRouteActive,
- RouteActivationController.destinationBatchFilter,
+ RouteActivationMiddleware.isDestinationRouteActive,
+ RouteActivationMiddleware.destinationBatchFilter,
+ FeatureFlagMiddleware.handle,
DestinationController.batchProcess,
);
router.post('/deleteUsers', RegulationController.deleteUsers);
-export const destinationRoutes = router.routes();
+const destinationRoutes = router.routes();
+export default destinationRoutes;
diff --git a/src/routes/index.ts b/src/routes/index.ts
index cfeb4db9ea7..d77584bea34 100644
--- a/src/routes/index.ts
+++ b/src/routes/index.ts
@@ -4,20 +4,23 @@ import { existsSync, readFileSync } from 'fs';
import dotenv from 'dotenv';
import { koaSwagger } from 'koa2-swagger-ui';
import path from 'path';
-import { bulkUploadRoutes } from './bulkUpload';
-import { proxyRoutes } from './delivery';
-import { destinationRoutes } from './destination';
-import { miscRoutes } from './misc';
-import { sourceRoutes } from './source';
-import { testEventRoutes } from './testEvents';
+import userTransformRoutes from './userTransform';
+import bulkUploadRoutes from './bulkUpload';
+import proxyRoutes from './delivery';
+import destinationRoutes from './destination';
+import miscRoutes from './misc';
+import sourceRoutes from './source';
+import testEventRoutes from './testEvents';
import { trackingPlanRoutes } from './trackingPlan';
-import { userTransformRoutes } from './userTransform';
import logger from '../logger';
import { isNotEmpty } from '../v0/util';
dotenv.config();
-export function applicationRoutes(app: Koa) {
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const enableSwagger = process.env.ENABLE_SWAGGER === 'true';
+
+export function applicationRoutes(app: Koa) {
app.use(bulkUploadRoutes);
app.use(proxyRoutes);
app.use(destinationRoutes);
@@ -28,7 +31,7 @@ export function applicationRoutes(app: Koa) {
app.use(userTransformRoutes);
}
-export function addSwaggerRoutes(app: Koa) {
+export function addSwaggerRoutes(app: Koa) {
// Ading swagger routes, check swagger docs in http://localhost:9090/docs
try {
diff --git a/src/routes/misc.ts b/src/routes/misc.ts
index 12ee09b8a93..4d1c5d5fb54 100644
--- a/src/routes/misc.ts
+++ b/src/routes/misc.ts
@@ -1,6 +1,6 @@
import Router from '@koa/router';
-import ProfileController from '../controllers/profile';
-import MiscController from '../controllers/misc';
+import { ProfileController } from '../controllers/profile';
+import { MiscController } from '../controllers/misc';
const router = new Router();
@@ -10,5 +10,8 @@ router.get('/transformerBuildVersion', MiscController.buildVersion); // depricia
router.get('/buildVersion', MiscController.buildVersion);
router.get('/version', MiscController.version);
router.get('/features', MiscController.features);
+router.get('/debug/pprof/profile', MiscController.getCPUProfile);
+router.get('/debug/pprof/heap', MiscController.getHeapProfile);
-export const miscRoutes = router.routes();
+const miscRoutes = router.routes();
+export default miscRoutes;
diff --git a/src/routes/source.ts b/src/routes/source.ts
index 675e2286ce3..1abc46e2e4d 100644
--- a/src/routes/source.ts
+++ b/src/routes/source.ts
@@ -1,14 +1,15 @@
import Router from '@koa/router';
-import RouteActivationController from '../middlewares/routeActivation';
-import SourceController from '../controllers/source';
+import { RouteActivationMiddleware } from '../middlewares/routeActivation';
+import { SourceController } from '../controllers/source';
const router = new Router();
router.post(
'/:version/sources/:source',
- RouteActivationController.isSourceRouteActive,
- RouteActivationController.sourceFilter,
+ RouteActivationMiddleware.isSourceRouteActive,
+ RouteActivationMiddleware.sourceFilter,
SourceController.sourceTransform,
);
-export const sourceRoutes = router.routes();
+const sourceRoutes = router.routes();
+export default sourceRoutes;
diff --git a/src/routes/testEvents.ts b/src/routes/testEvents.ts
index cbfd78f3ecc..a35fe447ba7 100644
--- a/src/routes/testEvents.ts
+++ b/src/routes/testEvents.ts
@@ -1,9 +1,10 @@
import Router from '@koa/router';
-import EventTestController from '../controllers/eventTest';
+import { EventTestController } from '../controllers/eventTest';
const router = new Router({ prefix: '/test-router' });
router.post('/:version/:destination', EventTestController.testEvent);
router.get('/:version/health', EventTestController.status);
-export const testEventRoutes = router.routes();
+const testEventRoutes = router.routes();
+export default testEventRoutes;
diff --git a/src/routes/trackingPlan.ts b/src/routes/trackingPlan.ts
index d177af7b2ce..3e62ba2a749 100644
--- a/src/routes/trackingPlan.ts
+++ b/src/routes/trackingPlan.ts
@@ -1,5 +1,5 @@
import Router from '@koa/router';
-import TrackingPlanController from '../controllers/trackingPlan';
+import { TrackingPlanController } from '../controllers/trackingPlan';
const router = new Router();
diff --git a/src/routes/userTransform.ts b/src/routes/userTransform.ts
index 2f6dcd417ca..1fb8ad3a1cd 100644
--- a/src/routes/userTransform.ts
+++ b/src/routes/userTransform.ts
@@ -1,33 +1,36 @@
import Router from '@koa/router';
-import RouteActivationController from '../middlewares/routeActivation';
-import UserTransformController from '../controllers/userTransform';
+import { RouteActivationMiddleware } from '../middlewares/routeActivation';
+import { FeatureFlagMiddleware } from '../middlewares/featureFlag';
+import { UserTransformController } from '../controllers/userTransform';
const router = new Router();
router.post(
'/customTransform',
- RouteActivationController.isUserTransformRouteActive,
+ RouteActivationMiddleware.isUserTransformRouteActive,
+ FeatureFlagMiddleware.handle,
UserTransformController.transform,
);
router.post(
'/transformation/test',
- RouteActivationController.isUserTransformTestRouteActive,
+ RouteActivationMiddleware.isUserTransformTestRouteActive,
UserTransformController.testTransform,
);
router.post(
'/transformationLibrary/test',
- RouteActivationController.isUserTransformTestRouteActive,
+ RouteActivationMiddleware.isUserTransformTestRouteActive,
UserTransformController.testTransformLibrary,
);
router.post(
'/transformation/sethandle',
- RouteActivationController.isUserTransformTestRouteActive,
+ RouteActivationMiddleware.isUserTransformTestRouteActive,
UserTransformController.testTransformSethandle,
);
router.post(
'/extractLibs',
- RouteActivationController.isUserTransformRouteActive,
+ RouteActivationMiddleware.isUserTransformRouteActive,
UserTransformController.extractLibhandle,
);
-export const userTransformRoutes = router.routes();
+const userTransformRoutes = router.routes();
+export default userTransformRoutes;
diff --git a/src/routes/utils/constants.js b/src/routes/utils/constants.js
index f074db6c62f..ccec8e54dd0 100644
--- a/src/routes/utils/constants.js
+++ b/src/routes/utils/constants.js
@@ -1,4 +1,4 @@
-const SUPPORTED_VERSIONS = ['v0'];
+const SUPPORTED_VERSIONS = ['v0', 'v1'];
const API_VERSION = '2';
const INTEGRATION_SERVICE = {
COMPARATOR: 'comparator',
@@ -7,8 +7,8 @@ const INTEGRATION_SERVICE = {
NATIVE_DEST: 'native_dest',
NATIVE_SOURCE: 'native_source',
};
-const CHANNELS= {
- sources: 'sources'
+const CHANNELS = {
+ sources: 'sources',
};
const RETL_TIMESTAMP = 'timestamp';
diff --git a/src/services/comparator.ts b/src/services/comparator.ts
index ae6e1bcf570..d1e085b4bd6 100644
--- a/src/services/comparator.ts
+++ b/src/services/comparator.ts
@@ -1,12 +1,14 @@
-import IntegrationDestinationService from '../interfaces/DestinationService';
+/* eslint-disable class-methods-use-this */
+import { DestinationService } from '../interfaces/DestinationService';
import {
+ DeliveriesResponse,
DeliveryResponse,
Destination,
ErrorDetailer,
MetaTransferObject,
- ProcessorTransformationOutput,
ProcessorTransformationRequest,
ProcessorTransformationResponse,
+ ProxyRequest,
RouterTransformationRequestData,
RouterTransformationResponse,
UserDeletionRequest,
@@ -19,15 +21,12 @@ import { CommonUtils } from '../util/common';
const NS_PER_SEC = 1e9;
-export default class ComparatorService implements IntegrationDestinationService {
- secondaryService: IntegrationDestinationService;
+export class ComparatorService implements DestinationService {
+ secondaryService: DestinationService;
- primaryService: IntegrationDestinationService;
+ primaryService: DestinationService;
- constructor(
- primaryService: IntegrationDestinationService,
- secondaryService: IntegrationDestinationService,
- ) {
+ constructor(primaryService: DestinationService, secondaryService: DestinationService) {
this.primaryService = primaryService;
this.secondaryService = secondaryService;
}
@@ -62,7 +61,7 @@ export default class ComparatorService implements IntegrationDestinationService
}
private getTestThreshold(destination: Destination) {
- return destination.DestinationDefinition?.Config['camparisonTestThreshold'] || 0;
+ return destination.DestinationDefinition?.Config?.camparisonTestThreshold || 0;
}
private getComparisonLogs(
@@ -81,6 +80,7 @@ export default class ComparatorService implements IntegrationDestinationService
return;
}
+ // eslint-disable-next-line no-restricted-syntax
for (const [index, element] of primaryResplist.entries()) {
const objectDiff = CommonUtils.objectDiff(element, secondaryResplist[index]);
if (Object.keys(objectDiff).length > 0) {
@@ -129,6 +129,7 @@ export default class ComparatorService implements IntegrationDestinationService
}
let hasComparisonFailed = false;
+ // eslint-disable-next-line no-restricted-syntax
for (const [index, element] of primaryResplist.entries()) {
const objectDiff = CommonUtils.objectDiff(element, secondaryResplist[index]);
if (Object.keys(objectDiff).length > 0) {
@@ -156,7 +157,7 @@ export default class ComparatorService implements IntegrationDestinationService
secondaryServiceCallback: any,
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
feature: string,
destinationId: string,
): Promise {
@@ -194,7 +195,7 @@ export default class ComparatorService implements IntegrationDestinationService
events: ProcessorTransformationRequest[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
const destinationId = events[0].destination.ID;
const primaryStartTime = process.hrtime();
@@ -252,7 +253,7 @@ export default class ComparatorService implements IntegrationDestinationService
events: RouterTransformationRequestData[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
const destinationId = events[0].destination.ID;
const primaryStartTime = process.hrtime();
@@ -310,7 +311,7 @@ export default class ComparatorService implements IntegrationDestinationService
events: RouterTransformationRequestData[],
destinationType: string,
version: string,
- requestMetadata: Object,
+ requestMetadata: NonNullable,
): RouterTransformationResponse[] {
const destinationId = events[0].destination.ID;
const primaryStartTime = process.hrtime();
@@ -365,17 +366,18 @@ export default class ComparatorService implements IntegrationDestinationService
}
public async deliver(
- event: ProcessorTransformationOutput,
+ event: ProxyRequest,
destinationType: string,
- requestMetadata: Object,
- ): Promise {
+ requestMetadata: NonNullable,
+ version: string,
+ ): Promise {
const primaryResplist = await this.primaryService.deliver(
event,
destinationType,
requestMetadata,
+ version,
);
logger.error('[LIVE_COMPARE_TEST] not implemented for delivery routine');
-
return primaryResplist;
}
diff --git a/src/services/delivertTest/deliveryTest.ts b/src/services/delivertTest/deliveryTest.ts
index 051b67b5685..2f5db183e56 100644
--- a/src/services/delivertTest/deliveryTest.ts
+++ b/src/services/delivertTest/deliveryTest.ts
@@ -7,17 +7,18 @@ import stats from '../../util/stats';
import logger from '../../logger';
import tags from '../../v0/util/tags';
-export default class DeliveryTestService {
+export class DeliveryTestService {
public static async doTestDelivery(
destination: string,
routerDestReqPayload: any,
routerDeliveryPayload: any,
+ version,
) {
let response: any;
try {
- const destNetworkHandler = networkHandlerFactory.getNetworkHandler(destination);
+ const { networkHandler } = networkHandlerFactory.getNetworkHandler(destination, version);
- const proxyDestReqPayload = destNetworkHandler.prepareProxy(routerDeliveryPayload);
+ const proxyDestReqPayload = networkHandler.prepareProxy(routerDeliveryPayload);
response = {
destinationRequestPayload: proxyDestReqPayload,
};
@@ -29,6 +30,7 @@ export default class DeliveryTestService {
// This is to make sure we encode `~` in the data coming from the router.
// The data coming from the router is already a query parameter string
const routerDataVal = new URLSearchParams(routerDestReqPayload.data);
+ // eslint-disable-next-line no-param-reassign
routerDestReqPayload.data = routerDataVal;
const proxyDataVal = new URLSearchParams();
diff --git a/src/services/destination/cdkV1Integration.ts b/src/services/destination/cdkV1Integration.ts
index 44842fdddb9..197e3162ea6 100644
--- a/src/services/destination/cdkV1Integration.ts
+++ b/src/services/destination/cdkV1Integration.ts
@@ -1,6 +1,8 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
import { ConfigFactory, Executor, RudderBaseConfig } from 'rudder-transformer-cdk';
import path from 'path';
-import IntegrationDestinationService from '../../interfaces/DestinationService';
+import { TransformationError } from '@rudderstack/integrations-lib';
+import { DestinationService } from '../../interfaces/DestinationService';
import {
DeliveryResponse,
ErrorDetailer,
@@ -9,16 +11,17 @@ import {
ProcessorTransformationResponse,
RouterTransformationRequestData,
RouterTransformationResponse,
- ProcessorTransformationOutput,
UserDeletionRequest,
UserDeletionResponse,
+ ProxyRequest,
+ DeliveriesResponse,
} from '../../types/index';
-import { TransformationError } from '../../v0/util/errorTypes';
-import DestinationPostTransformationService from './postTransformation';
+import { DestinationPostTransformationService } from './postTransformation';
import tags from '../../v0/util/tags';
import { getErrorInfo } from '../../cdk/v1/handler';
+import { CatchErr } from '../../util/types';
-export default class CDKV1DestinationService implements IntegrationDestinationService {
+export class CDKV1DestinationService implements DestinationService {
public init() {
ConfigFactory.init({
basePath: path.resolve(__dirname, '../../cdk/v1'),
@@ -63,7 +66,7 @@ export default class CDKV1DestinationService implements IntegrationDestinationSe
events: ProcessorTransformationRequest[],
destinationType: string,
_version: string,
- _requestMetadata: Object,
+ _requestMetadata: NonNullable,
): Promise {
const tfConfig = await ConfigFactory.getConfig(destinationType);
const respList: ProcessorTransformationResponse[][] = await Promise.all(
@@ -76,7 +79,7 @@ export default class CDKV1DestinationService implements IntegrationDestinationSe
transformedPayloads,
undefined,
);
- } catch (error: any) {
+ } catch (error: CatchErr) {
const metaTO = this.getTags(
destinationType,
event.metadata.destinationId,
@@ -100,7 +103,7 @@ export default class CDKV1DestinationService implements IntegrationDestinationSe
_events: RouterTransformationRequestData[],
_destinationType: string,
_version: string,
- _requestMetadata: Object,
+ _requestMetadata: NonNullable,
): Promise {
throw new TransformationError('CDKV1 Does not Implement Router Transform Routine');
}
@@ -109,16 +112,16 @@ export default class CDKV1DestinationService implements IntegrationDestinationSe
_events: RouterTransformationRequestData[],
_destinationType: string,
_version: any,
- _requestMetadata: Object,
+ _requestMetadata: NonNullable,
): RouterTransformationResponse[] {
throw new TransformationError('CDKV1 Does not Implement Batch Transform Routine');
}
public deliver(
- _event: ProcessorTransformationOutput,
+ _event: ProxyRequest,
_destinationType: string,
- _requestMetadata: Object,
- ): Promise {
+ _requestMetadata: NonNullable,
+ ): Promise {
throw new TransformationError('CDV1 Does not Implement Delivery Routine');
}
diff --git a/src/services/destination/cdkV2Integration.ts b/src/services/destination/cdkV2Integration.ts
index 04a2dcb799f..be7f0e51d5c 100644
--- a/src/services/destination/cdkV2Integration.ts
+++ b/src/services/destination/cdkV2Integration.ts
@@ -1,6 +1,9 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable class-methods-use-this */
import groupBy from 'lodash/groupBy';
+import { TransformationError } from '@rudderstack/integrations-lib';
import { processCdkV2Workflow } from '../../cdk/v2/handler';
-import IntegrationDestinationService from '../../interfaces/DestinationService';
+import { DestinationService } from '../../interfaces/DestinationService';
import {
DeliveryResponse,
ErrorDetailer,
@@ -12,13 +15,15 @@ import {
ProcessorTransformationOutput,
UserDeletionRequest,
UserDeletionResponse,
+ ProxyRequest,
+ DeliveriesResponse,
} from '../../types/index';
-import { TransformationError } from '../../v0/util/errorTypes';
import tags from '../../v0/util/tags';
-import DestinationPostTransformationService from './postTransformation';
+import { DestinationPostTransformationService } from './postTransformation';
import stats from '../../util/stats';
+import { CatchErr } from '../../util/types';
-export default class CDKV2DestinationService implements IntegrationDestinationService {
+export class CDKV2DestinationService implements DestinationService {
public init() {}
public getName(): string {
@@ -49,7 +54,7 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
events: ProcessorTransformationRequest[],
destinationType: string,
_version: string,
- _requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
// TODO: Change the promise type
const respList: ProcessorTransformationResponse[][] = await Promise.all(
@@ -61,6 +66,7 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
destinationType,
event,
tags.FEATURES.PROCESSOR,
+ requestMetadata,
);
stats.increment('event_transform_success', {
@@ -78,7 +84,7 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
transformedPayloads,
undefined,
);
- } catch (error: any) {
+ } catch (error: CatchErr) {
const metaTo = this.getTags(
destinationType,
event.metadata.destinationId,
@@ -105,9 +111,9 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
events: RouterTransformationRequestData[],
destinationType: string,
_version: string,
- _requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
- const allDestEvents: Object = groupBy(
+ const allDestEvents: object = groupBy(
events,
(ev: RouterTransformationRequestData) => ev.destination?.ID,
);
@@ -123,7 +129,12 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
metaTo.metadata = destInputArray[0].metadata;
try {
const doRouterTransformationResponse: RouterTransformationResponse[] =
- await processCdkV2Workflow(destinationType, destInputArray, tags.FEATURES.ROUTER);
+ await processCdkV2Workflow(
+ destinationType,
+ destInputArray,
+ tags.FEATURES.ROUTER,
+ requestMetadata,
+ );
return DestinationPostTransformationService.handleRouterTransformSuccessEvents(
doRouterTransformationResponse,
undefined,
@@ -131,7 +142,7 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
tags.IMPLEMENTATIONS.CDK_V2,
destinationType.toUpperCase(),
);
- } catch (error: any) {
+ } catch (error: CatchErr) {
metaTo.metadatas = destInputArray.map((input) => input.metadata);
const erroredResp =
DestinationPostTransformationService.handleRouterTransformFailureEvents(
@@ -150,16 +161,16 @@ export default class CDKV2DestinationService implements IntegrationDestinationSe
_events: RouterTransformationRequestData[],
_destinationType: string,
_version: string,
- _requestMetadata: Object,
+ _requestMetadata: NonNullable,
): RouterTransformationResponse[] {
throw new TransformationError('CDKV2 Does not Implement Batch Transform Routine');
}
public deliver(
- _event: ProcessorTransformationOutput,
+ _event: ProxyRequest,
_destinationType: string,
- _requestMetadata: Object,
- ): Promise {
+ _requestMetadata: NonNullable,
+ ): Promise {
throw new TransformationError('CDKV2 Does not Implement Delivery Routine');
}
diff --git a/src/services/destination/nativeIntegration.ts b/src/services/destination/nativeIntegration.ts
index 8cec0f573fa..c3b0237cdc6 100644
--- a/src/services/destination/nativeIntegration.ts
+++ b/src/services/destination/nativeIntegration.ts
@@ -1,6 +1,9 @@
+/* eslint-disable prefer-destructuring */
+/* eslint-disable sonarjs/no-duplicate-string */
+/* eslint-disable @typescript-eslint/no-unused-vars */
import groupBy from 'lodash/groupBy';
-import cloneDeep from 'lodash/cloneDeep'
-import IntegrationDestinationService from '../../interfaces/DestinationService';
+import cloneDeep from 'lodash/cloneDeep';
+import { DestinationService } from '../../interfaces/DestinationService';
import {
DeliveryResponse,
ErrorDetailer,
@@ -12,13 +15,19 @@ import {
ProcessorTransformationOutput,
UserDeletionRequest,
UserDeletionResponse,
+ ProxyRequest,
+ ProxyDeliveriesRequest,
+ ProxyDeliveryRequest,
+ DeliveriesResponse,
+ DeliveryJobState,
} from '../../types/index';
-import DestinationPostTransformationService from './postTransformation';
+import { DestinationPostTransformationService } from './postTransformation';
import networkHandlerFactory from '../../adapters/networkHandlerFactory';
-import FetchHandler from '../../helpers/fetchHandlers';
+import { FetchHandler } from '../../helpers/fetchHandlers';
import tags from '../../v0/util/tags';
+import stats from '../../util/stats';
-export default class NativeIntegrationDestinationService implements IntegrationDestinationService {
+export class NativeIntegrationDestinationService implements DestinationService {
public init() {}
public getName(): string {
@@ -49,7 +58,7 @@ export default class NativeIntegrationDestinationService implements IntegrationD
events: ProcessorTransformationRequest[],
destinationType: string,
version: string,
- _requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
const destHandler = FetchHandler.getDestHandler(destinationType, version);
const respList: ProcessorTransformationResponse[][] = await Promise.all(
@@ -57,7 +66,7 @@ export default class NativeIntegrationDestinationService implements IntegrationD
try {
const transformedPayloads:
| ProcessorTransformationOutput
- | ProcessorTransformationOutput[] = await destHandler.process(event);
+ | ProcessorTransformationOutput[] = await destHandler.process(event, requestMetadata);
return DestinationPostTransformationService.handleProcessorTransformSucessEvents(
event,
transformedPayloads,
@@ -87,10 +96,10 @@ export default class NativeIntegrationDestinationService implements IntegrationD
events: RouterTransformationRequestData[],
destinationType: string,
version: string,
- _requestMetadata: Object,
+ requestMetadata: NonNullable,
): Promise {
const destHandler = FetchHandler.getDestHandler(destinationType, version);
- const allDestEvents: Object = groupBy(
+ const allDestEvents: NonNullable = groupBy(
events,
(ev: RouterTransformationRequestData) => ev.destination?.ID,
);
@@ -105,7 +114,7 @@ export default class NativeIntegrationDestinationService implements IntegrationD
);
try {
const doRouterTransformationResponse: RouterTransformationResponse[] =
- await destHandler.processRouterDest(cloneDeep(destInputArray));
+ await destHandler.processRouterDest(cloneDeep(destInputArray), requestMetadata);
metaTO.metadata = destInputArray[0].metadata;
return DestinationPostTransformationService.handleRouterTransformSuccessEvents(
doRouterTransformationResponse,
@@ -131,20 +140,23 @@ export default class NativeIntegrationDestinationService implements IntegrationD
events: RouterTransformationRequestData[],
destinationType: string,
version: any,
- _requestMetadata: Object,
+ requestMetadata: NonNullable,
): RouterTransformationResponse[] {
const destHandler = FetchHandler.getDestHandler(destinationType, version);
if (!destHandler.batch) {
throw new Error(`${destinationType} does not implement batch`);
}
- const allDestEvents: Object = groupBy(
+ const allDestEvents: NonNullable = groupBy(
events,
(ev: RouterTransformationRequestData) => ev.destination?.ID,
);
const groupedEvents: RouterTransformationRequestData[][] = Object.values(allDestEvents);
const response = groupedEvents.map((destEvents) => {
try {
- const destBatchedRequests: RouterTransformationResponse[] = destHandler.batch(destEvents);
+ const destBatchedRequests: RouterTransformationResponse[] = destHandler.batch(
+ destEvents,
+ requestMetadata,
+ );
return destBatchedRequests;
} catch (error: any) {
const metaTO = this.getTags(
@@ -165,29 +177,66 @@ export default class NativeIntegrationDestinationService implements IntegrationD
}
public async deliver(
- destinationRequest: ProcessorTransformationOutput,
+ deliveryRequest: ProxyRequest,
destinationType: string,
- _requestMetadata: Object,
- ): Promise {
+ _requestMetadata: NonNullable,
+ version: string,
+ ): Promise {
try {
- const networkHandler = networkHandlerFactory.getNetworkHandler(destinationType);
- const rawProxyResponse = await networkHandler.proxy(destinationRequest, destinationType);
+ const { networkHandler, handlerVersion } = networkHandlerFactory.getNetworkHandler(
+ destinationType,
+ version,
+ );
+ const rawProxyResponse = await networkHandler.proxy(deliveryRequest, destinationType);
const processedProxyResponse = networkHandler.processAxiosResponse(rawProxyResponse);
- return networkHandler.responseHandler(
+ let rudderJobMetadata =
+ version.toLowerCase() === 'v1'
+ ? (deliveryRequest as ProxyDeliveriesRequest).metadata
+ : (deliveryRequest as ProxyDeliveryRequest).metadata;
+
+ if (version.toLowerCase() === 'v1' && handlerVersion.toLowerCase() === 'v0') {
+ rudderJobMetadata = rudderJobMetadata[0];
+ }
+
+ let responseProxy = networkHandler.responseHandler(
{
...processedProxyResponse,
- rudderJobMetadata: destinationRequest.metadata,
+ rudderJobMetadata,
},
destinationType,
- ) as DeliveryResponse;
+ );
+ // Adaption Logic for V0 to V1
+ if (handlerVersion.toLowerCase() === 'v0' && version.toLowerCase() === 'v1') {
+ const v0Response = responseProxy as DeliveryResponse;
+ const jobStates = (deliveryRequest as ProxyDeliveriesRequest).metadata.map(
+ (metadata) =>
+ ({
+ error: JSON.stringify(v0Response.destinationResponse?.response),
+ statusCode: v0Response.status,
+ metadata,
+ } as DeliveryJobState),
+ );
+ responseProxy = {
+ response: jobStates,
+ } as DeliveriesResponse;
+ }
+ return responseProxy;
} catch (err: any) {
+ const metadata = Array.isArray(deliveryRequest.metadata)
+ ? deliveryRequest.metadata[0]
+ : deliveryRequest.metadata;
const metaTO = this.getTags(
destinationType,
- destinationRequest.metadata?.destinationId || 'Non-determininable',
- destinationRequest.metadata?.workspaceId || 'Non-determininable',
+ metadata?.destinationId || 'Non-determininable',
+ metadata?.workspaceId || 'Non-determininable',
tags.FEATURES.DATA_DELIVERY,
);
- metaTO.metadata = destinationRequest.metadata;
+
+ if (version.toLowerCase() === 'v1') {
+ metaTO.metadatas = (deliveryRequest as ProxyDeliveriesRequest).metadata;
+ return DestinationPostTransformationService.handlevV1DeliveriesFailureEvents(err, metaTO);
+ }
+ metaTO.metadata = (deliveryRequest as ProxyDeliveryRequest).metadata;
return DestinationPostTransformationService.handleDeliveryFailureEvents(err, metaTO);
}
}
@@ -198,6 +247,7 @@ export default class NativeIntegrationDestinationService implements IntegrationD
): Promise {
const response = await Promise.all(
requests.map(async (request) => {
+ const startTime = new Date();
const { destType } = request;
const destUserDeletionHandler: any = FetchHandler.getDeletionHandler(
destType.toLowerCase(),
@@ -214,6 +264,11 @@ export default class NativeIntegrationDestinationService implements IntegrationD
...request,
rudderDestInfo,
});
+ stats.timing('regulation_worker_requests_dest_latency', startTime, {
+ feature: tags.FEATURES.USER_DELETION,
+ implementation: tags.IMPLEMENTATIONS.NATIVE,
+ destType,
+ });
return result;
} catch (error: any) {
const metaTO = this.getTags(destType, 'unknown', 'unknown', tags.FEATURES.USER_DELETION);
diff --git a/src/services/destination/postTransformation.ts b/src/services/destination/postTransformation.ts
index 9e04f97fac3..3cec459f8bb 100644
--- a/src/services/destination/postTransformation.ts
+++ b/src/services/destination/postTransformation.ts
@@ -1,6 +1,8 @@
+/* eslint-disable no-param-reassign */
import cloneDeep from 'lodash/cloneDeep';
import isObject from 'lodash/isObject';
import isEmpty from 'lodash/isEmpty';
+import { PlatformError } from '@rudderstack/integrations-lib';
import {
ProcessorTransformationRequest,
ProcessorTransformationResponse,
@@ -9,13 +11,16 @@ import {
DeliveryResponse,
MetaTransferObject,
UserDeletionResponse,
+ DeliveriesResponse,
+ DeliveryJobState,
} from '../../types/index';
import { generateErrorObject } from '../../v0/util';
-import ErrorReportingService from '../errorReporting';
+import { ErrorReportingService } from '../errorReporting';
import tags from '../../v0/util/tags';
import stats from '../../util/stats';
+import { FixMe } from '../../util/types';
-export default class DestinationPostTransformationService {
+export class DestinationPostTransformationService {
public static handleProcessorTransformSucessEvents(
event: ProcessorTransformationRequest,
transformedPayloads: ProcessorTransformationOutput | ProcessorTransformationOutput[],
@@ -47,7 +52,7 @@ export default class DestinationPostTransformationService {
}
public static handleProcessorTransformFailureEvents(
- error: Object,
+ error: NonNullable,
metaTo: MetaTransferObject,
): ProcessorTransformationResponse {
const errObj = generateErrorObject(error, metaTo.errorDetails);
@@ -105,7 +110,7 @@ export default class DestinationPostTransformationService {
}
public static handleRouterTransformFailureEvents(
- error: Object,
+ error: NonNullable,
metaTo: MetaTransferObject,
): RouterTransformationResponse {
const errObj = generateErrorObject(error, metaTo.errorDetails);
@@ -122,7 +127,7 @@ export default class DestinationPostTransformationService {
}
public static handleBatchTransformFailureEvents(
- error: Object,
+ error: NonNullable,
metaTo: MetaTransferObject,
): RouterTransformationResponse {
const errObj = generateErrorObject(error, metaTo.errorDetails);
@@ -138,7 +143,7 @@ export default class DestinationPostTransformationService {
}
public static handleDeliveryFailureEvents(
- error: Object,
+ error: any,
metaTo: MetaTransferObject,
): DeliveryResponse {
const errObj = generateErrorObject(error, metaTo.errorDetails, false);
@@ -151,16 +156,50 @@ export default class DestinationPostTransformationService {
authErrorCategory: errObj.authErrorCategory,
}),
} as DeliveryResponse;
+
+ ErrorReportingService.reportError(error, metaTo.errorContext, resp);
+ return resp;
+ }
+
+ public static handlevV1DeliveriesFailureEvents(
+ error: FixMe,
+ metaTo: MetaTransferObject,
+ ): DeliveriesResponse {
+ const errObj = generateErrorObject(error, metaTo.errorDetails, false);
+ const metadataArray = metaTo.metadatas;
+ if (!Array.isArray(metadataArray)) {
+ // Panic
+ throw new PlatformError('Proxy v1 endpoint error : metadataArray is not an array');
+ }
+ const responses = metadataArray.map((metadata) => {
+ const resp = {
+ error:
+ JSON.stringify(error.destinationResponse?.response) ||
+ errObj.message ||
+ '[Delivery] Error occured while processing payload',
+ statusCode: errObj.status,
+ metadata,
+ } as DeliveryJobState;
+ return resp;
+ });
+
+ const resp = {
+ response: responses,
+ statTags: errObj.statTags,
+ authErrorCategory: errObj.authErrorCategory,
+ message: errObj.message.toString(),
+ } as DeliveriesResponse;
+
ErrorReportingService.reportError(error, metaTo.errorContext, resp);
return resp;
}
public static handleUserDeletionFailureEvents(
- error: Object,
+ error: NonNullable,
metaTo: MetaTransferObject,
): UserDeletionResponse {
const errObj = generateErrorObject(error, metaTo.errorDetails, false);
- // TODO: Add stat tags here
+ stats.increment('regulation_worker_user_deletion_failure', metaTo.errorDetails);
const resp = {
statusCode: errObj.status,
error: errObj.message,
diff --git a/src/services/destination/preTransformation.ts b/src/services/destination/preTransformation.ts
index dbd4caa10dc..9bdaab96612 100644
--- a/src/services/destination/preTransformation.ts
+++ b/src/services/destination/preTransformation.ts
@@ -3,13 +3,13 @@ import { ProcessorTransformationRequest, RouterTransformationRequestData } from
import { DynamicConfigParser } from '../../util/dynamicConfigParser';
import { oncehubTransformer } from '../../util/oncehub-custom-transformer';
-export default class PreTransformationDestinationService {
+export class DestinationPreTransformationService {
public static preProcess(
events: ProcessorTransformationRequest[] | RouterTransformationRequestData[],
ctx: Context,
) {
const reqParams = ctx.request.query;
- events = events.map(
+ const eventsProcessed = events.map(
(event: ProcessorTransformationRequest | RouterTransformationRequestData) => {
// look for traits under every object in file v0\util\data\GenericFieldMapping.json like
// "traits": ["traits", "context.traits"]
@@ -19,6 +19,6 @@ export default class PreTransformationDestinationService {
return parsedEvent;
},
);
- return events;
+ return eventsProcessed;
}
}
diff --git a/src/services/errorReporting.ts b/src/services/errorReporting.ts
index ba0bd9b21cb..3a4276f9780 100644
--- a/src/services/errorReporting.ts
+++ b/src/services/errorReporting.ts
@@ -1,7 +1,7 @@
import { client } from '../util/errorNotifier';
-export default class ErrorReportingService {
- public static reportError(error: Object, context: string, errorResp: Object) {
+export class ErrorReportingService {
+ public static reportError(error: NonNullable, context: string, errorResp: object) {
client.notify(error, context, {
...errorResp,
});
diff --git a/src/services/eventTest/eventTester.ts b/src/services/eventTest/eventTester.ts
index 3055b947afc..75df29cc63c 100644
--- a/src/services/eventTest/eventTester.ts
+++ b/src/services/eventTest/eventTester.ts
@@ -1,7 +1,9 @@
import { sendToDestination, userTransformHandler } from '../../routerUtils';
+import { FixMe } from '../../util/types';
-export default class EventTesterService {
+export class EventTesterService {
private static getDestHandler(version, destination) {
+ // eslint-disable-next-line global-require, import/no-dynamic-require
return require(`../../${version}/destinations/${destination}/transform`);
}
@@ -9,7 +11,7 @@ export default class EventTesterService {
function capitalize(s) {
return s === 'id' ? s.toUpperCase() : s.charAt(0).toUpperCase() + s.slice(1);
}
- const transformedObj = {};
+ const transformedObj: FixMe = {};
const { destinationDefinition } = dest;
Object.keys(dest).forEach((key) => {
transformedObj[capitalize(key)] = dest[key];
@@ -19,7 +21,7 @@ export default class EventTesterService {
Object.keys(destinationDefinition).forEach((key) => {
destDef[capitalize(key)] = destinationDefinition[key];
});
- transformedObj['DestinationDefinition'] = destDef;
+ transformedObj.DestinationDefinition = destDef;
return transformedObj;
}
@@ -52,19 +54,19 @@ export default class EventTesterService {
libraries,
};
- let response = {};
+ let response: FixMe = {};
let errorFound = false;
if (stage.user_transform) {
let librariesVersionIDs = [];
- if (event.libraries) {
+ if (libraries) {
librariesVersionIDs = events[0].libraries.map((library) => library.versionId);
}
const transformationVersionId =
ev.destination &&
- ev.destination['Transformations'] &&
- ev.destination['Transformations'][0] &&
- ev.destination['Transformations'][0].versionId;
+ ev.destination.Transformations &&
+ ev.destination.Transformations[0] &&
+ ev.destination.Transformations[0].versionId;
if (transformationVersionId) {
try {
@@ -78,16 +80,16 @@ export default class EventTesterService {
throw new Error(userTransformedEvent.error);
}
- response['user_transformed_payload'] = userTransformedEvent.transformedEvent;
+ response.user_transformed_payload = userTransformedEvent.transformedEvent;
ev.message = userTransformedEvent.transformedEvent;
} catch (err: any) {
errorFound = true;
- response['user_transformed_payload'] = {
+ response.user_transformed_payload = {
error: err.message || JSON.stringify(err),
};
}
} else {
- response['user_transformed_payload'] = {
+ response.user_transformed_payload = {
error: 'Transformation VersionID not found',
};
}
@@ -99,18 +101,18 @@ export default class EventTesterService {
const desthandler = this.getDestHandler(version, dest);
const transformedOutput = await desthandler.process(ev);
if (Array.isArray(transformedOutput)) {
- response['dest_transformed_payload'] = transformedOutput;
+ response.dest_transformed_payload = transformedOutput;
} else {
- response['dest_transformed_payload'] = [transformedOutput];
+ response.dest_transformed_payload = [transformedOutput];
}
} catch (err: any) {
errorFound = true;
- response['dest_transformed_payload'] = {
+ response.dest_transformed_payload = {
error: err.message || JSON.stringify(err),
};
}
} else {
- response['dest_transformed_payload'] = {
+ response.dest_transformed_payload = {
error: 'error encountered in user_transformation stage. Aborting.',
};
}
@@ -119,27 +121,27 @@ export default class EventTesterService {
if (stage.dest_transform && stage.send_to_destination) {
// send event to destination only after transformation
if (!errorFound) {
- const destResponses: any[] = [];
- const destResponseStatuses: any[] = [];
+ const destResponses: FixMe[] = [];
+ const destResponseStatuses: FixMe[] = [];
- const transformedPayloads = response['dest_transformed_payload'];
+ const transformedPayloads = response.dest_transformed_payload;
// eslint-disable-next-line no-restricted-syntax
for (const payload of transformedPayloads) {
// eslint-disable-next-line no-await-in-loop
const parsedResponse = await sendToDestination(dest, payload);
let contentType = '';
- let response = '';
+ let responsePayload = '';
if (parsedResponse.headers) {
contentType = parsedResponse.headers['content-type'];
if (this.isSupportedContentType(contentType)) {
- response = parsedResponse.response;
+ responsePayload = parsedResponse.response;
}
} else if (parsedResponse.networkFailure) {
- response = parsedResponse.response;
+ responsePayload = parsedResponse.response;
}
- destResponses.push(response);
+ destResponses.push(responsePayload);
destResponseStatuses.push(parsedResponse.status);
// TODO: Use updated handleResponseTransform function
@@ -162,7 +164,7 @@ export default class EventTesterService {
destination_response_status: destResponseStatuses,
};
} else {
- response['destination_response'] = {
+ response.destination_response = {
error: 'error encountered in dest_transformation stage. Aborting.',
};
}
diff --git a/src/services/misc.ts b/src/services/misc.ts
index 6508ced8094..e0953d08bf1 100644
--- a/src/services/misc.ts
+++ b/src/services/misc.ts
@@ -1,10 +1,12 @@
+/* eslint-disable global-require, import/no-dynamic-require */
import fs from 'fs';
import path from 'path';
import { Context } from 'koa';
import { DestHandlerMap } from '../constants/destinationCanonicalNames';
import { Metadata } from '../types';
+import { getCPUProfile, getHeapProfile } from '../middleware';
-export default class MiscService {
+export class MiscService {
public static getDestHandler(dest: string, version: string) {
if (DestHandlerMap.hasOwnProperty(dest)) {
return require(`../${version}/destinations/${DestHandlerMap[dest]}/transform`);
@@ -20,6 +22,7 @@ export default class MiscService {
return require(`../${version}/destinations/${dest}/deleteUsers`);
}
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
public static getRequestMetadata(ctx: Context) {
// TODO: Parse information such as
// cluster, namespace, etc information
@@ -27,12 +30,13 @@ export default class MiscService {
return {
namespace: 'Unknown',
cluster: 'Unknown',
+ features: ctx.state?.features || {},
};
}
public static getMetaTags(metadata: Metadata) {
if (!metadata) {
- return {}
+ return {};
}
return {
sourceType: metadata.sourceType,
@@ -62,4 +66,12 @@ export default class MiscService {
const obj = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../features.json'), 'utf8'));
return JSON.stringify(obj);
}
+
+ public static async getCPUProfile(seconds: number) {
+ return getCPUProfile(seconds);
+ }
+
+ public static async getHeapProfile() {
+ return getHeapProfile();
+ }
}
diff --git a/src/services/profile.ts b/src/services/profile.ts
index 5f02b5c2fa6..d71826e251e 100644
--- a/src/services/profile.ts
+++ b/src/services/profile.ts
@@ -7,6 +7,8 @@ import v8 from 'v8';
import pprof, { heap } from '@datadog/pprof';
import { promisify } from 'util';
import logger from '../logger';
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import { CatchErr } from '../util/types';
// The average number of bytes between samples.
// 512*1024 = 524288
@@ -20,8 +22,9 @@ logger.info(`Interval Bytes set: ${intervalBytes}`);
heap.start(intervalBytes, stackDepth);
-export default class ProfileService {
+export class ProfileService {
private static async promisifiedRead(readable: any) {
+ // eslint-disable-next-line no-new
new Promise((resolve, reject) => {
// Instructions for reading data
const chunks: any[] = [];
@@ -81,11 +84,13 @@ export default class ProfileService {
const shouldGenerateLocally = !credBucketDetails.sendTo;
logger.info('Before Heapsnapshot converted into a readable stream');
let fileName = '';
- let format = 'pb.gz';
+ // eslint-disable-next-line no-param-reassign
+ format = 'pb.gz';
let profile;
if (format && format === 'v8') {
const readable = v8.getHeapSnapshot();
snapshotReadableStream = await this.promisifiedRead(readable);
+ // eslint-disable-next-line no-param-reassign
format = 'heapsnapshot';
} else {
profile = heap.profile();
@@ -99,7 +104,7 @@ export default class ProfileService {
logger.info('Before pipeline');
try {
await writeFileProm(fileName, snapshotReadableStream);
- } catch (error: any) {
+ } catch (error: CatchErr) {
logger.error('Error occurred:', error);
throw new Error(error);
}
@@ -123,7 +128,7 @@ export default class ProfileService {
credBucketDetails.sendTo ? credBucketDetails.sendTo : 'locally'
} with filename: ${fileName}`,
};
- } catch (error: any) {
+ } catch (error: CatchErr) {
logger.error(error);
return {
success: false,
diff --git a/src/services/source/nativeIntegration.ts b/src/services/source/nativeIntegration.ts
index e654940fece..6eaef2f835b 100644
--- a/src/services/source/nativeIntegration.ts
+++ b/src/services/source/nativeIntegration.ts
@@ -1,16 +1,17 @@
-import IntegrationSourceService from '../../interfaces/SourceService';
+import { SourceService } from '../../interfaces/SourceService';
import {
ErrorDetailer,
MetaTransferObject,
RudderMessage,
SourceTransformationResponse,
} from '../../types/index';
-import PostTransformationServiceSource from './postTransformation';
-import FetchHandler from '../../helpers/fetchHandlers';
+import { FixMe } from '../../util/types';
+import { SourcePostTransformationService } from './postTransformation';
+import { FetchHandler } from '../../helpers/fetchHandlers';
import tags from '../../v0/util/tags';
import stats from '../../util/stats';
-export default class NativeIntegrationSourceService implements IntegrationSourceService {
+export class NativeIntegrationSourceService implements SourceService {
public getTags(): MetaTransferObject {
const metaTO = {
errorDetails: {
@@ -25,25 +26,26 @@ export default class NativeIntegrationSourceService implements IntegrationSource
}
public async sourceTransformRoutine(
- sourceEvents: Object[],
+ sourceEvents: NonNullable[],
sourceType: string,
version: string,
- _requestMetadata: Object,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ _requestMetadata: NonNullable,
): Promise {
const sourceHandler = FetchHandler.getSourceHandler(sourceType, version);
- const respList: SourceTransformationResponse[] = await Promise.all(
+ const respList: SourceTransformationResponse[] = await Promise.all(
sourceEvents.map(async (sourceEvent) => {
try {
const respEvents: RudderMessage | RudderMessage[] | SourceTransformationResponse =
await sourceHandler.process(sourceEvent);
- return PostTransformationServiceSource.handleSuccessEventsSource(respEvents);
- } catch (error: any) {
+ return SourcePostTransformationService.handleSuccessEventsSource(respEvents);
+ } catch (error: FixMe) {
const metaTO = this.getTags();
stats.increment('source_transform_errors', {
- sourceType,
+ source: sourceType,
version,
});
- return PostTransformationServiceSource.handleFailureEventsSource(error, metaTO);
+ return SourcePostTransformationService.handleFailureEventsSource(error, metaTO);
}
}),
);
diff --git a/src/services/source/postTransformation.ts b/src/services/source/postTransformation.ts
index 603f1b1c0a9..20c815171be 100644
--- a/src/services/source/postTransformation.ts
+++ b/src/services/source/postTransformation.ts
@@ -1,10 +1,11 @@
import { MetaTransferObject, RudderMessage, SourceTransformationResponse } from '../../types/index';
+import { CatchErr } from '../../util/types';
import { generateErrorObject } from '../../v0/util';
-import ErrorReportingService from '../errorReporting';
+import { ErrorReportingService } from '../errorReporting';
-export default class PostTransformationSourceService {
+export class SourcePostTransformationService {
public static handleFailureEventsSource(
- error: Object,
+ error: CatchErr,
metaTO: MetaTransferObject,
): SourceTransformationResponse {
const errObj = generateErrorObject(error, metaTO.errorDetails);
diff --git a/src/services/trackingPlan.ts b/src/services/trackingPlan.ts
index b7a648741cd..2e68df55e99 100644
--- a/src/services/trackingPlan.ts
+++ b/src/services/trackingPlan.ts
@@ -4,12 +4,13 @@ import { getMetadata } from '../v0/util';
import eventValidator from '../util/eventValidation';
import stats from '../util/stats';
-export default class TrackingPlanservice {
+export class TrackingPlanservice {
public static async validateTrackingPlan(events, requestSize, reqParams) {
const requestStartTime = new Date();
const respList: any[] = [];
const metaTags = events[0].metadata ? getMetadata(events[0].metadata) : {};
let ctxStatusCode = 200;
+
for (let i = 0; i < events.length; i++) {
const event = events[i];
const eventStartTime = new Date();
@@ -25,7 +26,7 @@ export default class TrackingPlanservice {
validationErrors: hv['validationErrors'],
error: JSON.stringify(constructValidationErrors(hv['validationErrors'])),
});
- stats.counter('hv_violation_type', 1, {
+ stats.counter('tp_violation_type', 1, {
violationType: hv['violationType'],
...metaTags,
});
@@ -37,7 +38,7 @@ export default class TrackingPlanservice {
validationErrors: hv['validationErrors'],
error: JSON.stringify(constructValidationErrors(hv['validationErrors'])),
});
- stats.counter('hv_propagated_events', 1, {
+ stats.counter('tp_propagated_events', 1, {
...metaTags,
});
}
@@ -58,24 +59,32 @@ export default class TrackingPlanservice {
validationErrors: [],
error: errMessage,
});
- stats.counter('hv_errors', 1, {
+ stats.counter('tp_errors', 1, {
...metaTags,
+ workspaceId: event.metadata?.workspaceId,
+ trackingPlanId: event.metadata?.trackingPlanId,
});
} finally {
- stats.timing('hv_event_latency', eventStartTime, {
+ stats.timing('tp_event_latency', eventStartTime, {
...metaTags,
});
}
- stats.counter('hv_events_count', events.length, {
- ...metaTags,
- });
- stats.histogram('hv_request_size', requestSize, {
- ...metaTags,
- });
- stats.timing('hv_request_latency', requestStartTime, {
- ...metaTags,
- });
}
+
+ stats.counter('tp_events_count', events.length, {
+ ...metaTags,
+ });
+
+ stats.histogram('tp_request_size', requestSize, {
+ ...metaTags,
+ });
+
+ stats.timing('tp_request_latency', requestStartTime, {
+ ...metaTags,
+ workspaceId: events[0]?.metadata?.workspaceId,
+ trackingPlanId: events[0]?.metadata?.trackingPlanId,
+ });
+
return { body: respList, status: ctxStatusCode };
}
}
diff --git a/src/services/userTransform.ts b/src/services/userTransform.ts
index 15c170bb7bc..bf34e3d82a3 100644
--- a/src/services/userTransform.ts
+++ b/src/services/userTransform.ts
@@ -7,20 +7,30 @@ import {
ProcessorTransformationResponse,
UserTransformationResponse,
UserTransformationServiceResponse,
+ MessageIdMetadataMap,
} from '../types/index';
-import { RespStatusError, RetryRequestError, extractStackTraceUptoLastSubstringMatch } from '../util/utils';
+import {
+ RespStatusError,
+ RetryRequestError,
+ extractStackTraceUptoLastSubstringMatch,
+} from '../util/utils';
import { getMetadata, isNonFuncObject } from '../v0/util';
import { SUPPORTED_FUNC_NAMES } from '../util/ivmFactory';
import logger from '../logger';
import stats from '../util/stats';
+import { CommonUtils } from '../util/common';
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import { CatchErr, FixMe } from '../util/types';
+import { FeatureFlags, FEATURE_FILTER_CODE } from '../middlewares/featureFlag';
+import { HTTP_CUSTOM_STATUS_CODES } from '../constants';
-export default class UserTransformService {
+export class UserTransformService {
public static async transformRoutine(
events: ProcessorTransformationRequest[],
+ features: FeatureFlags = {},
): Promise {
- const startTime = new Date();
let retryStatus = 200;
- const groupedEvents: Object = groupBy(
+ const groupedEvents: NonNullable = groupBy(
events,
(event: ProcessorTransformationRequest) =>
`${event.metadata.destinationId}_${event.metadata.sourceId}`,
@@ -28,25 +38,34 @@ export default class UserTransformService {
stats.counter('user_transform_function_group_size', Object.entries(groupedEvents).length, {});
stats.histogram('user_transform_input_events', events.length, {});
- const transformedEvents: any[] = [];
- let librariesVersionIDs: any[] = [];
+ const transformedEvents: FixMe[] = [];
+ let librariesVersionIDs: FixMe[] = [];
if (events[0].libraries) {
librariesVersionIDs = events[0].libraries.map(
(library: UserTransformationLibrary) => library.VersionID,
);
}
- const responses = await Promise.all(
- Object.entries(groupedEvents).map(async ([dest, destEvents]) => {
- logger.debug(`dest: ${dest}`);
+ const responses = await Promise.all(
+ Object.entries(groupedEvents).map(async ([, destEvents]) => {
const eventsToProcess = destEvents as ProcessorTransformationRequest[];
const transformationVersionId =
eventsToProcess[0]?.destination?.Transformations[0]?.VersionID;
- const messageIds = eventsToProcess.map((ev) => ev.metadata?.messageId);
+ const messageIds: string[] = [];
+ const messageIdsSet = new Set();
+ const messageIdMetadataMap: MessageIdMetadataMap = {};
+ eventsToProcess.forEach((ev) => {
+ messageIds.push(ev.metadata?.messageId);
+ messageIdsSet.add(ev.metadata?.messageId);
+ messageIdMetadataMap[ev.metadata?.messageId] = ev.metadata;
+ });
+
+ const messageIdsInOutputSet = new Set();
const commonMetadata = {
sourceId: eventsToProcess[0]?.metadata?.sourceId,
destinationId: eventsToProcess[0]?.metadata.destinationId,
destinationType: eventsToProcess[0]?.metadata.destinationType,
+ workspaceId: eventsToProcess[0]?.metadata.workspaceId,
messageIds,
};
@@ -63,49 +82,65 @@ export default class UserTransformService {
error: errorMessage,
metadata: commonMetadata,
} as ProcessorTransformationResponse);
- stats.counter('user_transform_errors', eventsToProcess.length, {
- transformationVersionId,
- type: 'NoVersionId',
- ...metaTags,
- });
return transformedEvents;
}
const userFuncStartTime = new Date();
try {
- stats.counter('user_transform_function_input_events', eventsToProcess.length, {
- ...metaTags,
- });
const destTransformedEvents: UserTransformationResponse[] = await userTransformHandler()(
eventsToProcess,
transformationVersionId,
librariesVersionIDs,
);
- transformedEvents.push(
- ...destTransformedEvents.map((ev) => {
- if (ev.error) {
- return {
- statusCode: 400,
- error: ev.error,
- metadata: isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
- } as ProcessorTransformationResponse;
- }
- if (!isNonFuncObject(ev.transformedEvent)) {
- return {
- statusCode: 400,
- error: `returned event in events from user transformation is not an object. transformationVersionId:${transformationVersionId} and returned event: ${JSON.stringify(
- ev.transformedEvent,
- )}`,
- metadata: isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
- } as ProcessorTransformationResponse;
- }
- return {
- output: ev.transformedEvent,
+
+ const transformedEventsWithMetadata: ProcessorTransformationResponse[] = [];
+ destTransformedEvents.forEach((ev) => {
+ // add messageId to output set
+ if (ev.metadata?.messageId) {
+ messageIdsInOutputSet.add(ev.metadata.messageId);
+ } else if (ev.metadata?.messageIds) {
+ ev.metadata.messageIds.forEach((id) => messageIdsInOutputSet.add(id));
+ }
+ if (ev.error) {
+ transformedEventsWithMetadata.push({
+ statusCode: 400,
+ error: ev.error,
metadata: isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
- statusCode: 200,
- } as ProcessorTransformationResponse;
- }),
- );
- } catch (error: any) {
+ } as unknown as ProcessorTransformationResponse);
+ return;
+ }
+ if (!isNonFuncObject(ev.transformedEvent)) {
+ transformedEventsWithMetadata.push({
+ statusCode: 400,
+ error: `returned event in events from user transformation is not an object. transformationVersionId:${transformationVersionId} and returned event: ${JSON.stringify(
+ ev.transformedEvent,
+ )}`,
+ metadata: isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
+ } as ProcessorTransformationResponse);
+ return;
+ }
+ transformedEventsWithMetadata.push({
+ output: ev.transformedEvent,
+ metadata: isEmpty(ev.metadata) ? commonMetadata : ev.metadata,
+ statusCode: 200,
+ } as ProcessorTransformationResponse);
+ });
+
+ if (features[FEATURE_FILTER_CODE]) {
+ // find difference between input and output messageIds
+ const messageIdsNotInOutput = CommonUtils.setDiff(messageIdsSet, messageIdsInOutputSet);
+ const droppedEvents = messageIdsNotInOutput.map((id) => ({
+ statusCode: HTTP_CUSTOM_STATUS_CODES.FILTERED,
+ metadata: {
+ ...(isEmpty(messageIdMetadataMap[id]) ? commonMetadata : messageIdMetadataMap[id]),
+ messageId: id,
+ messageIds: null,
+ },
+ }));
+ transformedEvents.push(...droppedEvents);
+ }
+
+ transformedEvents.push(...transformedEventsWithMetadata);
+ } catch (error: CatchErr) {
logger.error(error);
let status = 400;
const errorString = error.toString();
@@ -127,18 +162,19 @@ export default class UserTransformService {
),
);
stats.counter('user_transform_errors', eventsToProcess.length, {
- transformationVersionId,
- type: 'UnknownError',
+ transformationId: eventsToProcess[0]?.metadata?.transformationId,
+ workspaceId: eventsToProcess[0]?.metadata?.workspaceId,
status,
...metaTags,
});
} finally {
- stats.timing('user_transform_function_latency', userFuncStartTime, {
- transformationVersionId,
+ stats.timing('user_transform_request_latency', userFuncStartTime, {
+ workspaceId: eventsToProcess[0]?.metadata?.workspaceId,
+ transformationId: eventsToProcess[0]?.metadata?.transformationId,
...metaTags,
});
}
- stats.timing('user_transform_request_latency', startTime, {});
+
stats.counter('user_transform_requests', 1, {});
stats.histogram('user_transform_output_events', transformedEvents.length, {});
return transformedEvents;
@@ -153,7 +189,7 @@ export default class UserTransformService {
}
public static async testTransformRoutine(events, trRevCode, libraryVersionIDs) {
- const response: any = {};
+ const response: FixMe = {};
try {
if (!trRevCode || !trRevCode.code || !trRevCode.codeVersion) {
throw new Error('Invalid Request. Missing parameters in transformation code block');
@@ -163,6 +199,7 @@ export default class UserTransformService {
}
logger.debug(`[CT] Test Input Events: ${JSON.stringify(events)}`);
+ // eslint-disable-next-line no-param-reassign
trRevCode.versionId = 'testVersionId';
response.body = await userTransformHandler()(
events,
@@ -173,9 +210,11 @@ export default class UserTransformService {
);
logger.debug(`[CT] Test Output Events: ${JSON.stringify(response.body.transformedEvents)}`);
response.status = 200;
- } catch (error: any) {
+ } catch (error: CatchErr) {
response.status = 400;
- response.body = { error: extractStackTraceUptoLastSubstringMatch(error.stack, SUPPORTED_FUNC_NAMES) };
+ response.body = {
+ error: extractStackTraceUptoLastSubstringMatch(error.stack, SUPPORTED_FUNC_NAMES),
+ };
}
return response;
}
diff --git a/src/testRouter.js b/src/testRouter.js
index 5c9d56e78d5..60808166631 100644
--- a/src/testRouter.js
+++ b/src/testRouter.js
@@ -28,8 +28,8 @@ const isSupportedContentType = (contentType) => {
const testRouter = new Router({ prefix: '/test-router' });
-const getDestHandler = (version, destination) =>
- require(`./${version}/destinations/${destination}/transform`);
+const getDestHandler = (ver, destination) =>
+ require(`./${ver}/destinations/${destination}/transform`);
const getDestinations = () => fs.readdirSync(path.resolve(__dirname, version, 'destinations'));
diff --git a/src/types/index.ts b/src/types/index.ts
index 543dc040ab8..f4432e5c2ac 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -1,3 +1,6 @@
+import { CatchErr, FixMe } from '../util/types';
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
type ProcessorTransformationOutput = {
version: string;
type: string;
@@ -13,9 +16,46 @@ type ProcessorTransformationOutput = {
FORM?: Record;
};
files?: Record;
- metadata?: Metadata;
};
+type ProxyDeliveryRequest = {
+ version: string;
+ type: string;
+ method: string;
+ endpoint: string;
+ userId: string;
+ headers?: Record;
+ params?: Record;
+ body?: {
+ JSON?: Record;
+ JSON_ARRAY?: Record;
+ XML?: Record;
+ FORM?: Record;
+ };
+ files?: Record;
+ metadata: Metadata;
+};
+
+type ProxyDeliveriesRequest = {
+ version: string;
+ type: string;
+ method: string;
+ endpoint: string;
+ userId: string;
+ headers?: Record;
+ params?: Record;
+ body?: {
+ JSON?: Record;
+ JSON_ARRAY?: Record;
+ XML?: Record;
+ FORM?: Record;
+ };
+ files?: Record;
+ metadata: Metadata[];
+};
+
+type ProxyRequest = ProxyDeliveryRequest | ProxyDeliveriesRequest;
+
type Metadata = {
sourceId: string;
workspaceId: string;
@@ -25,8 +65,8 @@ type Metadata = {
sourceCategory: string;
trackingPlanId: string;
trackingPlanVersion: number;
- sourceTpConfig: Object;
- mergedTpConfig: Object;
+ sourceTpConfig: object;
+ mergedTpConfig: object;
destinationId: string;
jobRunId: string;
jobId: number;
@@ -35,7 +75,7 @@ type Metadata = {
sourceJobRunId: string;
sourceTaskId: string;
sourceTaskRunId: string;
- recordId: Object;
+ recordId: object;
destinationType: string;
messageId: string;
oauthAccessToken: string;
@@ -46,26 +86,32 @@ type Metadata = {
eventType: string;
sourceDefinitionId: string;
destinationDefinitionId: string;
+ transformationId: string;
+ dontBatch?: boolean;
+};
+
+type MessageIdMetadataMap = {
+ [key: string]: Metadata;
};
type UserTransformationInput = {
VersionID: string;
ID: string;
- Config: Object;
+ Config: object;
};
type DestinationDefinition = {
ID: string;
Name: string;
DisplayName: string;
- Config: Object;
+ Config: FixMe;
};
type Destination = {
ID: string;
Name: string;
DestinationDefinition: DestinationDefinition;
- Config: Object;
+ Config: FixMe;
Enabled: boolean;
WorkspaceID: string;
Transformations: UserTransformationInput[];
@@ -77,16 +123,16 @@ type UserTransformationLibrary = {
};
type ProcessorTransformationRequest = {
- request?: Object;
- message: Object;
+ request?: object;
+ message: object;
metadata: Metadata;
destination: Destination;
libraries: UserTransformationLibrary[];
};
type RouterTransformationRequestData = {
- request?: Object;
- message: Object;
+ request?: object;
+ message: object;
metadata: Metadata;
destination: Destination;
};
@@ -101,7 +147,7 @@ type ProcessorTransformationResponse = {
metadata: Metadata;
statusCode: number;
error?: string;
- statTags: Object;
+ statTags: object;
};
type RouterTransformationResponse = {
@@ -111,7 +157,7 @@ type RouterTransformationResponse = {
batched: boolean;
statusCode: number;
error: string;
- statTags: Object;
+ statTags: object;
};
type SourceTransformationOutput = {
@@ -120,18 +166,32 @@ type SourceTransformationOutput = {
type SourceTransformationResponse = {
output: SourceTransformationOutput;
- error: Object;
+ error: CatchErr;
statusCode: number;
- outputToSource: Object;
- statTags: Object;
+ outputToSource: object;
+ statTags: object;
};
type DeliveryResponse = {
status: number;
message: string;
- destinationResponse: Object;
- statTags: Object;
+ destinationResponse: any;
+ statTags: object;
+ authErrorCategory?: string;
+};
+
+type DeliveryJobState = {
+ error: string;
+ statusCode: number;
+ metadata: Metadata;
+};
+
+type DeliveriesResponse = {
+ status?: number;
+ message?: string;
+ statTags?: object;
authErrorCategory?: string;
+ response: DeliveryJobState[];
};
enum MessageType {
@@ -149,15 +209,15 @@ type RudderMessage = {
anonymousId: string;
type: MessageType;
channel: string;
- context: Object;
+ context: object;
originalTimestamp: Date;
sentAt: Date;
timestamp: Date;
event?: string;
- integrations?: Object;
+ integrations?: object;
messageId: string;
- properties?: Object;
- traits?: Object;
+ properties?: object;
+ traits?: object;
};
type ErrorDetailer = {
@@ -186,7 +246,7 @@ type MetaTransferObject = {
type UserTransformationResponse = {
transformedEvent: RudderMessage;
metadata: Metadata;
- error: Object;
+ error: CatchErr;
};
type UserTransformationServiceResponse = {
@@ -195,8 +255,8 @@ type UserTransformationServiceResponse = {
};
type UserDeletionRequest = {
- userAttributes: any[];
- config: Object;
+ userAttributes: FixMe[];
+ config: object;
destType: string;
jobId: string;
};
@@ -205,36 +265,71 @@ type UserDeletionResponse = {
statusCode: number;
error?: string;
status?: string;
- authErrorCategory: any;
- statTags: Object;
+ authErrorCategory: FixMe;
+ statTags: object;
};
type ComparatorInput = {
events: ProcessorTransformationRequest[] | RouterTransformationRequestData[];
destination: string;
version: string;
- requestMetadata: Object;
+ requestMetadata: object;
feature: string;
};
+type SourceDefinition = {
+ ID: string;
+ Name: string;
+ Category: string;
+ Type: string;
+};
+
+type Source = {
+ ID: string;
+ OriginalID: string;
+ Name: string;
+ SourceDefinition: SourceDefinition;
+ Config: object;
+ Enabled: boolean;
+ WorkspaceID: string;
+ WriteKey: string;
+ Transformations?: UserTransformationInput[];
+ RevisionID?: string;
+ Destinations?: Destination[];
+ Transient: boolean;
+ EventSchemasEnabled: boolean;
+ DgSourceTrackingPlanConfig: object;
+};
+type SourceInput = {
+ event: NonNullable[];
+ source?: Source;
+};
export {
+ ComparatorInput,
+ DeliveryJobState,
+ DeliveryResponse,
+ DeliveriesResponse,
+ Destination,
+ ErrorDetailer,
+ MessageIdMetadataMap,
+ MetaTransferObject,
Metadata,
- UserTransformationLibrary,
+ ProcessorTransformationOutput,
ProcessorTransformationRequest,
ProcessorTransformationResponse,
+ ProxyDeliveriesRequest,
+ ProxyDeliveryRequest,
+ ProxyRequest,
RouterTransformationRequest,
RouterTransformationRequestData,
RouterTransformationResponse,
RudderMessage,
- ProcessorTransformationOutput,
SourceTransformationResponse,
- DeliveryResponse,
- ErrorDetailer,
- UserTransformationResponse,
- UserTransformationServiceResponse,
- MetaTransferObject,
UserDeletionRequest,
UserDeletionResponse,
- Destination,
- ComparatorInput,
+ SourceInput,
+ Source,
+ UserTransformationLibrary,
+ UserTransformationResponse,
+ UserTransformationServiceResponse,
};
diff --git a/src/util/common.js b/src/util/common.js
index 5d732d34d17..8bf34f2eca2 100644
--- a/src/util/common.js
+++ b/src/util/common.js
@@ -20,6 +20,10 @@ const CommonUtils = {
}
return [obj];
},
+
+ setDiff(mainSet, comparisionSet) {
+ return [...mainSet].filter((item) => !comparisionSet.has(item));
+ },
};
module.exports = {
diff --git a/src/util/customTransformer-faas.js b/src/util/customTransformer-faas.js
index d1fa48d2d16..2c0bbfd8c00 100644
--- a/src/util/customTransformer-faas.js
+++ b/src/util/customTransformer-faas.js
@@ -1,7 +1,7 @@
const { v4: uuidv4 } = require('uuid');
const crypto = require('crypto');
const NodeCache = require('node-cache');
-const { getMetadata } = require('../v0/util');
+const { getMetadata, getTransformationMetadata } = require('../v0/util');
const stats = require('./stats');
const {
setupFaasFunction,
@@ -24,8 +24,8 @@ function generateFunctionName(userTransformation, libraryVersionIds, testMode) {
const ids = [userTransformation.workspaceId, userTransformation.versionId].concat(
(libraryVersionIds || []).sort(),
);
- const hash = crypto.createHash('md5').update(`${ids}`).digest('hex');
+ const hash = crypto.createHash('md5').update(`${ids}`).digest('hex');
return `fn-${userTransformation.workspaceId}-${hash}`.substring(0, 63).toLowerCase();
}
@@ -82,10 +82,10 @@ async function setOpenFaasUserTransform(
libraryVersionIds,
pregeneratedFnName,
testMode = false,
+ trMetadata = {},
) {
const tags = {
transformerVersionId: userTransformation.versionId,
- language: userTransformation.language,
identifier: 'openfaas',
testMode,
};
@@ -106,6 +106,7 @@ async function setOpenFaasUserTransform(
testMode,
),
testMode,
+ trMetadata,
);
stats.timing('creation_time', setupTime, tags);
@@ -126,24 +127,21 @@ async function runOpenFaasUserTransform(
if (events.length === 0) {
throw new Error('Invalid payload. No events');
}
- const metaTags = events[0].metadata ? getMetadata(events[0].metadata) : {};
- const tags = {
- transformerVersionId: userTransformation.versionId,
- language: userTransformation.language,
- identifier: 'openfaas',
- testMode,
- ...metaTags,
- };
+ const trMetadata = events[0].metadata ? getTransformationMetadata(events[0].metadata) : {};
// check and deploy faas function if not exists
const functionName = generateFunctionName(userTransformation, libraryVersionIds, testMode);
if (testMode) {
- await setOpenFaasUserTransform(userTransformation, libraryVersionIds, functionName, testMode);
+ await setOpenFaasUserTransform(
+ userTransformation,
+ libraryVersionIds,
+ functionName,
+ testMode,
+ trMetadata,
+ );
}
- const invokeTime = new Date();
- stats.counter('events_to_process', events.length, tags);
- const result = await executeFaasFunction(
+ return await executeFaasFunction(
functionName,
events,
userTransformation.versionId,
@@ -156,9 +154,8 @@ async function runOpenFaasUserTransform(
testMode,
),
testMode,
+ trMetadata,
);
- stats.timing('run_time', invokeTime, tags);
- return result;
}
module.exports = {
diff --git a/src/util/customTransformer-v1.js b/src/util/customTransformer-v1.js
index 397281d8d9c..60f8e493faa 100644
--- a/src/util/customTransformer-v1.js
+++ b/src/util/customTransformer-v1.js
@@ -1,7 +1,7 @@
const ivm = require('isolated-vm');
const { getFactory } = require('./ivmFactory');
-const { getMetadata } = require('../v0/util');
+const { getMetadata, getTransformationMetadata } = require('../v0/util');
const logger = require('../logger');
const stats = require('./stats');
@@ -54,63 +54,48 @@ async function userTransformHandlerV1(
libraryVersionIds,
testMode = false,
) {
- /*
- Removing pool usage to address memory leaks
- Env variable ON_DEMAND_ISOLATE_VM is not being used anymore
- */
- if (userTransformation.versionId) {
- const metaTags = events.length && events[0].metadata ? getMetadata(events[0].metadata) : {};
- const tags = {
- transformerVersionId: userTransformation.versionId,
- identifier: 'v1',
- ...metaTags,
- };
-
- logger.debug(`Isolate VM being created... `);
- const isolatevmFactory = await getFactory(
- userTransformation.code,
- libraryVersionIds,
- userTransformation.versionId,
- userTransformation.secrets || {},
- testMode,
- );
- const isolatevm = await isolatevmFactory.create();
- logger.debug(`Isolate VM created... `);
+ if (!userTransformation.versionId) {
+ return { transformedEvents : events };
+ }
- // Transform the event...
- stats.counter('events_to_process', events.length, tags);
- const isolateStartWallTime = calculateMsFromIvmTime(isolatevm.isolateStartWallTime);
- const isolateStartCPUTime = calculateMsFromIvmTime(isolatevm.isolateStartCPUTime);
+ const isolatevmFactory = await getFactory(
+ userTransformation.code,
+ libraryVersionIds,
+ userTransformation.versionId,
+ userTransformation.secrets || {},
+ testMode,
+ );
- const invokeTime = new Date();
- let transformedEvents;
- // Destroy isolatevm in case of execution errors
- try {
- transformedEvents = await transform(isolatevm, events);
- } catch (err) {
- logger.error(`Error encountered while executing transformation: ${err.message}`);
- isolatevmFactory.destroy(isolatevm);
- throw err;
- }
- const { logs } = isolatevm;
- stats.timing('run_time', invokeTime, tags);
- const isolateEndWallTime = calculateMsFromIvmTime(isolatevm.isolate.wallTime);
- const isolateEndCPUTime = calculateMsFromIvmTime(isolatevm.isolate.cpuTime);
+ logger.debug(`Creating IsolateVM`);
+ const isolatevm = await isolatevmFactory.create();
- //TODO: fix "Value is not a valid number: NaN" error and uncomment
- //stats.timing('isolate_wall_time', isolateEndWallTime - isolateStartWallTime, tags);
- //stats.timing('isolate_cpu_time', isolateEndCPUTime - isolateStartCPUTime, tags);
+ const invokeTime = new Date();
+ let transformedEvents;
+ let logs;
+ let transformationError;
- // Destroy the isolated vm resources created
- logger.debug(`Isolate VM being destroyed... `);
+ try {
+ transformedEvents = await transform(isolatevm, events);
+ logs = isolatevm.logs;
+ } catch (err) {
+ logger.error(`Error encountered while executing transformation: ${err.message}`);
+ transformationError = err;
+ throw err;
+ } finally {
+ logger.debug(`Destroying IsolateVM`);
isolatevmFactory.destroy(isolatevm);
- logger.debug(`Isolate VM destroyed... `);
-
- return { transformedEvents, logs };
- // Events contain message and destination. We take the message part of event and run transformation on it.
- // And put back the destination after transforrmation
+ // send the observability stats
+ const tags = {
+ identifier: 'v1',
+ errored: transformationError ? true : false,
+ ...events.length && events[0].metadata ? getMetadata(events[0].metadata) : {},
+ ...events.length && events[0].metadata ? getTransformationMetadata(events[0].metadata) : {}
+ }
+ stats.counter('user_transform_function_input_events', events.length, tags);
+ stats.timing('user_transform_function_latency', invokeTime, tags);
}
- return { transformedEvents: events };
+
+ return { transformedEvents, logs };
}
async function setUserTransformHandlerV1() {
diff --git a/src/util/customTransformer.js b/src/util/customTransformer.js
index 90dcea61b2b..001fe3216cf 100644
--- a/src/util/customTransformer.js
+++ b/src/util/customTransformer.js
@@ -7,6 +7,7 @@ const { UserTransformHandlerFactory } = require('./customTransformerFactory');
const { parserForImport } = require('./parser');
const stats = require('./stats');
const { fetchWithDnsWrapper } = require('./utils');
+const { getMetadata, getTransformationMetadata } = require('../v0/util');
const ISOLATE_VM_MEMORY = parseInt(process.env.ISOLATE_VM_MEMORY || '128', 10);
const GEOLOCATION_TIMEOUT_IN_MS = parseInt(process.env.GEOLOCATION_TIMEOUT_IN_MS || '1000', 10);
@@ -19,10 +20,6 @@ async function runUserTransform(
versionId,
testMode = false,
) {
- const tags = {
- transformerVersionId: versionId,
- identifier: 'v0',
- };
// TODO: Decide on the right value for memory limit
const isolate = new ivm.Isolate({ memoryLimit: ISOLATE_VM_MEMORY });
const context = await isolate.createContext();
@@ -214,9 +211,6 @@ async function runUserTransform(
const customScript = await isolate.compileScript(`${code}`);
await customScript.run(context);
const fnRef = await jail.get('transform', { reference: true });
- // stat
- stats.counter('events_to_process', events.length, tags);
- // TODO : check if we can resolve this
// eslint-disable-next-line no-async-promise-executor
const executionPromise = new Promise(async (resolve, reject) => {
const sharedMessagesList = new ivm.ExternalCopy(events).copyInto({
@@ -233,6 +227,7 @@ async function runUserTransform(
}
});
let result;
+ let transformationError;
const invokeTime = new Date();
try {
const timeoutPromise = new Promise((resolve) => {
@@ -245,8 +240,8 @@ async function runUserTransform(
if (result === 'Timedout') {
throw new Error('Timed out');
}
- stats.timing('run_time', invokeTime, tags);
} catch (error) {
+ transformationError = error;
throw error;
} finally {
// release function, script, context and isolate
@@ -255,6 +250,16 @@ async function runUserTransform(
bootstrapScriptResult.release();
context.release();
isolate.dispose();
+
+ const tags = {
+ identifier: 'v0',
+ errored: transformationError ? true : false,
+ ...events.length && events[0].metadata ? getMetadata(events[0].metadata) : {},
+ ...events.length && events[0].metadata ? getTransformationMetadata(events[0].metadata) : {}
+ }
+
+ stats.counter('user_transform_function_input_events', events.length, tags);
+ stats.timing('user_transform_function_latency', invokeTime, tags);
}
return {
diff --git a/src/util/customTransformerFactory.js b/src/util/customTransformerFactory.js
index 66268db2861..1bf10e5d458 100644
--- a/src/util/customTransformerFactory.js
+++ b/src/util/customTransformerFactory.js
@@ -1,9 +1,15 @@
-const { setOpenFaasUserTransform, runOpenFaasUserTransform } = require('./customTransformer-faas');
+const {
+ setOpenFaasUserTransform,
+ runOpenFaasUserTransform,
+} = require('./customTransformer-faas');
-const { userTransformHandlerV1, setUserTransformHandlerV1 } = require('./customTransformer-v1');
+const {
+ userTransformHandlerV1,
+ setUserTransformHandlerV1,
+} = require('./customTransformer-v1');
const UserTransformHandlerFactory = (userTransformation) => {
- const transformHandler = {
+ return {
setUserTransform: async (libraryVersionIds) => {
switch (userTransformation.language) {
case 'pythonfaas':
@@ -17,13 +23,23 @@ const UserTransformHandlerFactory = (userTransformation) => {
switch (userTransformation.language) {
case 'pythonfaas':
case 'python':
- return runOpenFaasUserTransform(events, userTransformation, libraryVersionIds, testMode);
+ return runOpenFaasUserTransform(
+ events,
+ userTransformation,
+ libraryVersionIds,
+ testMode
+ );
+
default:
- return userTransformHandlerV1(events, userTransformation, libraryVersionIds, testMode);
+ return userTransformHandlerV1(
+ events,
+ userTransformation,
+ libraryVersionIds,
+ testMode
+ );
}
},
};
- return transformHandler;
};
exports.UserTransformHandlerFactory = UserTransformHandlerFactory;
diff --git a/src/util/customTransforrmationsStore.js b/src/util/customTransforrmationsStore.js
index 46e2b9c9b50..08d417c07cd 100644
--- a/src/util/customTransforrmationsStore.js
+++ b/src/util/customTransforrmationsStore.js
@@ -4,7 +4,7 @@ const logger = require('../logger');
const { responseStatusHandler } = require('./utils');
const stats = require('./stats');
-const myCache = new NodeCache();
+const myCache = new NodeCache({ stdTTL: 60 * 60 * 24 * 1 });
// const CONFIG_BACKEND_URL = "http://localhost:5000";
const CONFIG_BACKEND_URL = process.env.CONFIG_BACKEND_URL || 'https://api.rudderlabs.com';
diff --git a/src/util/dynamicConfigParser.ts b/src/util/dynamicConfigParser.ts
index fc4a02bc846..6de2e38f945 100644
--- a/src/util/dynamicConfigParser.ts
+++ b/src/util/dynamicConfigParser.ts
@@ -1,5 +1,6 @@
import cloneDeep from 'lodash/cloneDeep';
import { ProcessorTransformationRequest, RouterTransformationRequestData } from '../types/index';
+import { FixMe } from './types';
/* eslint-disable no-param-reassign */
const get = require('get-value');
@@ -8,7 +9,7 @@ const unset = require('unset-value');
export class DynamicConfigParser {
private static getDynamicConfigValue(
event: ProcessorTransformationRequest | RouterTransformationRequestData,
- value: any,
+ value: FixMe,
) {
// this regex checks for pattern "only spaces {{ path || defaultvalue }} only spaces" .
// " {{message.traits.key || \"email\" }} "
@@ -38,7 +39,7 @@ export class DynamicConfigParser {
}
private static configureVal(
- value: any,
+ value: FixMe,
event: ProcessorTransformationRequest | RouterTransformationRequestData,
) {
if (value) {
diff --git a/src/util/errorNotifier/bugsnag.js b/src/util/errorNotifier/bugsnag.js
index 09b2cd9f718..ef01c587306 100644
--- a/src/util/errorNotifier/bugsnag.js
+++ b/src/util/errorNotifier/bugsnag.js
@@ -5,9 +5,6 @@ const {
DataValidationError,
} = require('rudder-transformer-cdk/build/error/index');
const stackTraceParser = require('stacktrace-parser');
-const { logger } = require('../../logger');
-const pkg = require('../../../package.json');
-
const {
BaseError,
TransformationError,
@@ -23,7 +20,10 @@ const {
UnhandledStatusCodeError,
UnauthorizedError,
NetworkInstrumentationError,
-} = require('../../v0/util/errorTypes');
+} = require('@rudderstack/integrations-lib');
+const { FilteredEventsError } = require('../../v0/util/errorTypes');
+const { logger } = require('../../logger');
+const pkg = require('../../../package.json');
const {
BUGSNAG_API_KEY: apiKey,
@@ -48,6 +48,7 @@ const errorTypesDenyList = [
NetworkInstrumentationError,
CDKCustomError,
DataValidationError,
+ FilteredEventsError,
];
const pathsDenyList = [
diff --git a/src/util/eventValidation.js b/src/util/eventValidation.js
index 19d091d6fbf..68d895dcc5a 100644
--- a/src/util/eventValidation.js
+++ b/src/util/eventValidation.js
@@ -10,9 +10,10 @@ const hash = require('object-hash');
const logger = require('../logger');
const trackingPlan = require('./trackingPlan');
+const SECONDS_IN_DAY = 60 * 60 * 24 * 1;
const eventSchemaCache = new NodeCache();
-const ajv19Cache = new NodeCache({ useClones: false });
-const ajv4Cache = new NodeCache({ useClones: false });
+const ajv19Cache = new NodeCache({ useClones: false, stdTTL: SECONDS_IN_DAY });
+const ajv4Cache = new NodeCache({ useClones: false, stdTTL: SECONDS_IN_DAY });
const { isEmptyObject } = require('../v0/util');
const defaultOptions = {
@@ -52,7 +53,7 @@ ajv19.addMetaSchema(draft7MetaSchema);
/**
* @param {*} ajvOptions
* @param {*} isDraft4
- * @returns {ajv}
+ * @returns {Ajv}
*
* Generates new ajv contructed from ajvoptions
*/
@@ -200,7 +201,7 @@ async function validate(event) {
message: error.message,
property: error.params.missingProperty,
meta: {
- instacePath: error.instancePath,
+ instancePath: error.instancePath,
schemaPath: error.schemaPath,
},
};
@@ -210,7 +211,7 @@ async function validate(event) {
type: violationTypes.DatatypeMismatch,
message: error.message,
meta: {
- instacePath: error.instancePath,
+ instancePath: error.instancePath,
schemaPath: error.schemaPath,
},
};
@@ -221,7 +222,7 @@ async function validate(event) {
message: `${error.message} '${error.params.additionalProperty}'`,
property: error.params.additionalProperty,
meta: {
- instacePath: error.instancePath,
+ instancePath: error.instancePath,
schemaPath: error.schemaPath,
},
};
@@ -231,7 +232,7 @@ async function validate(event) {
type: violationTypes.UnknownViolation,
message: error.message,
meta: {
- instacePath: error.instancePath,
+ instancePath: error.instancePath,
schemaPath: error.schemaPath,
},
};
diff --git a/src/util/fetch.js b/src/util/fetch.js
index efadc3c884a..95856dd7fd3 100644
--- a/src/util/fetch.js
+++ b/src/util/fetch.js
@@ -1,6 +1,7 @@
+/* eslint-disable @typescript-eslint/return-await */
const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');
-const _ = require('lodash');
+const lodash = require('lodash');
const { RetryRequestError } = require('./utils');
const fetchWithProxy = async (url, options = {}) => {
@@ -13,7 +14,7 @@ const fetchWithProxy = async (url, options = {}) => {
instanceOptions.agent = new HttpsProxyAgent(process.env.HTTPS_PROXY);
}
- if (_.isEmpty(instanceOptions)) {
+ if (lodash.isEmpty(instanceOptions)) {
return await fetch(url);
}
return await fetch(url, instanceOptions);
diff --git a/src/util/myAxios.js b/src/util/myAxios.js
index 9cce73dde18..d5a2ea6911e 100644
--- a/src/util/myAxios.js
+++ b/src/util/myAxios.js
@@ -1,81 +1,64 @@
-const axios = require('axios');
-const stats = require('./stats');
-
-const fireLatencyStat = (startTime, statTags) => {
- const destType = statTags.destType ? statTags.destType : '';
- const feature = statTags.feature ? statTags.feature : '';
- const endpointPath = statTags.endpointPath ? statTags.endpointPath : '';
- stats.timing('outgoing_request_latency', startTime, {
- feature,
- destType,
- endpointPath,
- });
-};
+const {
+ httpSend,
+ httpGET,
+ httpDELETE,
+ httpPOST,
+ httpPUT,
+ httpPATCH,
+} = require('../adapters/network');
const send = async (options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios(options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpSend(options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
const get = async (url, options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios.get(url, options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpGET(url, options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
const del = async (url, options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios.delete(url, options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpDELETE(url, options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
const post = async (url, data, options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios.post(url, data, options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpPOST(url, data, options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
const put = async (url, data, options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios.put(url, data, options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpPUT(url, data, options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
const patch = async (url, data, options, statTags = {}) => {
- const startTime = new Date();
- let response;
- try {
- response = await axios.patch(url, data, options);
- } finally {
- fireLatencyStat(startTime, statTags);
+ const res = await httpPATCH(url, data, options, statTags);
+ if (res.success) {
+ return res.response;
}
- return response;
+
+ throw res.response;
};
module.exports = {
diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js
index 1b3e531ceb4..878fa706d9f 100644
--- a/src/util/openfaas/index.js
+++ b/src/util/openfaas/index.js
@@ -1,6 +1,5 @@
const NodeCache = require('node-cache');
const {
- getFunction,
deleteFunction,
deployFunction,
invokeFunction,
@@ -8,6 +7,9 @@ const {
} = require('./faasApi');
const logger = require('../../logger');
const { RetryRequestError, RespStatusError } = require('../utils');
+const stats = require('../stats');
+const { getMetadata, getTransformationMetadata } = require('../../v0/util');
+const { HTTP_STATUS_CODES } = require('../../v0/util/constant');
const FAAS_BASE_IMG = process.env.FAAS_BASE_IMG || 'rudderlabs/openfaas-flask:main';
const FAAS_MAX_PODS_IN_TEXT = process.env.FAAS_MAX_PODS_IN_TEXT || '40';
@@ -20,8 +22,11 @@ const FAAS_MAX_INFLIGHT = process.env.FAAS_MAX_INFLIGHT || '4';
const FAAS_EXEC_TIMEOUT = process.env.FAAS_EXEC_TIMEOUT || '4s';
const FAAS_ENABLE_WATCHDOG_ENV_VARS = process.env.FAAS_ENABLE_WATCHDOG_ENV_VARS || 'true';
const CONFIG_BACKEND_URL = process.env.CONFIG_BACKEND_URL || 'https://api.rudderlabs.com';
+const GEOLOCATION_URL = process.env.GEOLOCATION_URL || '';
const FAAS_AST_VID = 'ast';
const FAAS_AST_FN_NAME = 'fn-ast';
+const CUSTOM_NETWORK_POLICY_WORKSPACE_IDS = process.env.CUSTOM_NETWORK_POLICY_WORKSPACE_IDS || '';
+const customNetworkPolicyWorkspaceIds = CUSTOM_NETWORK_POLICY_WORKSPACE_IDS.split(',');
// Initialise node cache
const functionListCache = new NodeCache();
@@ -110,7 +115,14 @@ const invalidateFnCache = () => {
functionListCache.set(FUNC_LIST_KEY, []);
};
-const deployFaasFunction = async (functionName, code, versionId, libraryVersionIDs, testMode) => {
+const deployFaasFunction = async (
+ functionName,
+ code,
+ versionId,
+ libraryVersionIDs,
+ testMode,
+ trMetadata = {},
+) => {
try {
logger.debug('[Faas] Deploying a faas function');
let envProcess = 'python index.py';
@@ -128,6 +140,25 @@ const deployFaasFunction = async (functionName, code, versionId, libraryVersionI
envVars.max_inflight = FAAS_MAX_INFLIGHT;
envVars.exec_timeout = FAAS_EXEC_TIMEOUT;
}
+ if (GEOLOCATION_URL) {
+ envVars.geolocation_url = GEOLOCATION_URL;
+ }
+ // labels
+ const labels = {
+ 'openfaas-fn': 'true',
+ 'parent-component': 'openfaas',
+ 'com.openfaas.scale.max': FAAS_MAX_PODS_IN_TEXT,
+ 'com.openfaas.scale.min': FAAS_MIN_PODS_IN_TEXT,
+ transformationId: trMetadata.transformationId,
+ workspaceId: trMetadata.workspaceId,
+ };
+ if (
+ trMetadata.workspaceId &&
+ customNetworkPolicyWorkspaceIds.includes(trMetadata.workspaceId)
+ ) {
+ labels['custom-network-policy'] = 'true';
+ }
+
// TODO: investigate and add more required labels and annotations
const payload = {
service: functionName,
@@ -135,12 +166,7 @@ const deployFaasFunction = async (functionName, code, versionId, libraryVersionI
image: FAAS_BASE_IMG,
envProcess,
envVars,
- labels: {
- 'openfaas-fn': 'true',
- 'parent-component': 'openfaas',
- 'com.openfaas.scale.max': FAAS_MAX_PODS_IN_TEXT,
- 'com.openfaas.scale.min': FAAS_MIN_PODS_IN_TEXT,
- },
+ labels,
annotations: {
'prometheus.io.scrape': 'true',
},
@@ -171,14 +197,28 @@ const deployFaasFunction = async (functionName, code, versionId, libraryVersionI
}
};
-async function setupFaasFunction(functionName, code, versionId, libraryVersionIDs, testMode) {
+async function setupFaasFunction(
+ functionName,
+ code,
+ versionId,
+ libraryVersionIDs,
+ testMode,
+ trMetadata = {},
+) {
try {
if (!testMode && isFunctionDeployed(functionName)) {
logger.debug(`[Faas] Function ${functionName} already deployed`);
return;
}
// deploy faas function
- await deployFaasFunction(functionName, code, versionId, libraryVersionIDs, testMode);
+ await deployFaasFunction(
+ functionName,
+ code,
+ versionId,
+ libraryVersionIDs,
+ testMode,
+ trMetadata,
+ );
// This api call is only used to check if function is spinned correctly
await awaitFunctionReadiness(functionName);
@@ -192,33 +232,33 @@ async function setupFaasFunction(functionName, code, versionId, libraryVersionID
}
const executeFaasFunction = async (
- functionName,
+ name,
events,
versionId,
libraryVersionIDs,
testMode,
+ trMetadata = {},
) => {
- try {
- logger.debug('[Faas] Invoking faas function');
+ logger.debug(`Executing faas function: ${name}`);
- if (testMode) await awaitFunctionReadiness(functionName);
+ const startTime = new Date();
+ let errorRaised;
- const res = await invokeFunction(functionName, events);
- logger.debug('[Faas] Invoked faas function');
- return res;
+ try {
+ if (testMode) await awaitFunctionReadiness(name);
+ return await invokeFunction(name, events);
} catch (error) {
- logger.error(`[Faas] Error while invoking ${functionName}: ${error.message}`);
- if (
- error.statusCode === 404 &&
- error.message.includes(`error finding function ${functionName}`)
- ) {
- removeFunctionFromCache(functionName);
- await setupFaasFunction(functionName, null, versionId, libraryVersionIDs, testMode);
- throw new RetryRequestError(`${functionName} not found`);
+ logger.error(`Error while invoking ${name}: ${error.message}`);
+ errorRaised = error;
+
+ if (error.statusCode === 404 && error.message.includes(`error finding function ${name}`)) {
+ removeFunctionFromCache(name);
+ await setupFaasFunction(name, null, versionId, libraryVersionIDs, testMode, trMetadata);
+ throw new RetryRequestError(`${name} not found`);
}
if (error.statusCode === 429) {
- throw new RetryRequestError(`Rate limit exceeded for ${functionName}`);
+ throw new RetryRequestError(`Rate limit exceeded for ${name}`);
}
if (error.statusCode === 500 || error.statusCode === 503) {
@@ -226,16 +266,30 @@ const executeFaasFunction = async (
}
if (error.statusCode === 504) {
- throw new RespStatusError('Timed out');
+ throw new RespStatusError(`${name} timed out`, 504);
}
throw error;
} finally {
+ // delete the function created, if it's called as part of testMode
if (testMode) {
- deleteFunction(functionName).catch((err) => {
- logger.error(`[Faas] Error while deleting ${functionName}: ${err.message}`);
- });
+ deleteFunction(name).catch((err) =>
+ logger.error(`[Faas] Error while deleting ${name}: ${err.message}`),
+ );
}
+
+ // setup the tags for observability and then fire the stats
+ const tags = {
+ identifier: 'openfaas',
+ testMode: testMode,
+ errored: errorRaised ? true : false,
+ statusCode: errorRaised ? errorRaised.statusCode : HTTP_STATUS_CODES.OK, // default statuscode is 200OK
+ ...(events.length && events[0].metadata ? getMetadata(events[0].metadata) : {}),
+ ...(events.length && events[0].metadata ? getTransformationMetadata(events[0].metadata) : {}),
+ };
+
+ stats.counter('user_transform_function_input_events', events.length, tags);
+ stats.timing('user_transform_function_latency', startTime, tags);
}
};
diff --git a/src/util/prometheus.js b/src/util/prometheus.js
index 20a9038066e..d7ba3b7c611 100644
--- a/src/util/prometheus.js
+++ b/src/util/prometheus.js
@@ -214,26 +214,32 @@ class Prometheus {
],
},
{
- name: 'hv_violation_type',
- help: 'hv_violation_type',
+ name: 'tp_violation_type',
+ help: 'tp_violation_type',
type: 'counter',
labelNames: ['violationType', 'sourceType', 'destinationType', 'k8_namespace'],
},
{
- name: 'hv_propagated_events',
- help: 'hv_propagated_events',
+ name: 'tp_propagated_events',
+ help: 'tp_propagated_events',
type: 'counter',
labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
},
{
- name: 'hv_errors',
- help: 'hv_errors',
+ name: 'tp_errors',
+ help: 'tp_errors',
type: 'counter',
- labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
+ labelNames: [
+ 'sourceType',
+ 'destinationType',
+ 'k8_namespace',
+ 'workspaceId',
+ 'trackingPlanId',
+ ],
},
{
- name: 'hv_events_count',
- help: 'hv_events_count',
+ name: 'tp_events_count',
+ help: 'tp_events_count',
type: 'counter',
labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
},
@@ -243,17 +249,18 @@ class Prometheus {
type: 'counter',
labelNames: ['processSessions'],
},
- {
- name: 'user_transform_function_input_events',
- help: 'user_transform_function_input_events',
- type: 'counter',
- labelNames: ['processSessions', 'sourceType', 'destinationType', 'k8_namespace'],
- },
{
name: 'user_transform_errors',
help: 'user_transform_errors',
type: 'counter',
- labelNames: ['l1', 'l2'],
+ labelNames: [
+ 'workspaceId',
+ 'transformationId',
+ 'status',
+ 'sourceType',
+ 'destinationType',
+ 'k8_namespace',
+ ],
},
{
name: 'c2',
@@ -417,7 +424,7 @@ class Prometheus {
name: 'marketo_bulk_upload_polling',
help: 'marketo_bulk_upload_polling',
type: 'counter',
- labelNames: ['status', 'state'],
+ labelNames: ['status', 'state', 'requestTime'],
},
{
name: 'marketo_fetch_token',
@@ -444,6 +451,12 @@ class Prometheus {
type: 'counter',
labelNames: ['writeKey', 'timestamp'],
},
+ {
+ name: 'regulation_worker_user_deletion_failure',
+ help: 'regulation_worker_user_deletion_failure',
+ type: 'counter',
+ labelNames: ['destType', 'module', 'implementation', 'feature'],
+ },
{
name: 'shopify_server_side_identifier_event',
help: 'shopify_server_side_identifier_event',
@@ -480,6 +493,12 @@ class Prometheus {
type: 'counter',
labelNames: ['type', 'writeKey', 'source'],
},
+ {
+ name: 'shopify_anon_id_resolve',
+ help: 'shopify_anon_id_resolve',
+ type: 'counter',
+ labelNames: ['method', 'writeKey', 'shopifyTopic'],
+ },
{
name: 'shopify_redis_calls',
help: 'shopify_redis_calls',
@@ -492,20 +511,6 @@ class Prometheus {
type: 'counter',
labelNames: ['writeKey', 'source'],
},
- {
- name: 'events_to_process',
- help: 'events_to_process',
- type: 'counter',
- labelNames: [
- 'transformerVersionId',
- 'language',
- 'identifier',
- 'testMode',
- 'sourceType',
- 'destinationType',
- 'k8_namespace',
- ],
- },
{
name: 'get_transformation_code',
help: 'get_transformation_code',
@@ -524,6 +529,12 @@ class Prometheus {
type: 'counter',
labelNames: ['writeKey', 'source', 'shopifyTopic'],
},
+ {
+ name: 'outgoing_request_count',
+ help: 'Outgoing HTTP requests count',
+ type: 'counter',
+ labelNames: ['feature', 'destType', 'endpointPath', 'success', 'statusCode'],
+ },
// Gauges
{
@@ -538,6 +549,24 @@ class Prometheus {
type: 'gauge',
labelNames: ['destType', 'feature'],
},
+ {
+ name: 'braze_batch_attributes_pack_size',
+ help: 'braze_batch_attributes_pack_size',
+ type: 'gauge',
+ labelNames: ['destination_id'],
+ },
+ {
+ name: 'braze_batch_events_pack_size',
+ help: 'braze_batch_events_pack_size',
+ type: 'gauge',
+ labelNames: ['destination_id'],
+ },
+ {
+ name: 'braze_batch_purchase_pack_size',
+ help: 'braze_batch_purchase_pack_size',
+ type: 'gauge',
+ labelNames: ['destination_id'],
+ },
// Histograms
{
@@ -553,16 +582,22 @@ class Prometheus {
labelNames: ['method', 'route', 'code'],
},
{
- name: 'hv_request_size',
- help: 'hv_request_size',
+ name: 'tp_request_size',
+ help: 'tp_request_size',
type: 'histogram',
labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
},
{
- name: 'hv_request_latency',
- help: 'hv_request_latency',
+ name: 'tp_request_latency',
+ help: 'tp_request_latency',
type: 'histogram',
- labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
+ labelNames: [
+ 'sourceType',
+ 'destinationType',
+ 'k8_namespace',
+ 'workspaceId',
+ 'trackingPlanId',
+ ],
},
{
name: 'cdk_events_latency',
@@ -571,11 +606,17 @@ class Prometheus {
labelNames: ['destination', 'sourceType', 'destinationType', 'k8_namespace'],
},
{
- name: 'hv_event_latency',
- help: 'hv_event_latency',
+ name: 'tp_event_latency',
+ help: 'tp_event_latency',
type: 'histogram',
labelNames: ['sourceType', 'destinationType', 'k8_namespace'],
},
+ {
+ name: 'regulation_worker_requests_dest_latency',
+ help: 'regulation_worker_requests_dest_latency',
+ type: 'histogram',
+ labelNames: ['feature', 'implementation', 'destType'],
+ },
{
name: 'dest_transform_request_latency',
help: 'dest_transform_request_latency',
@@ -593,15 +634,9 @@ class Prometheus {
name: 'user_transform_request_latency',
help: 'user_transform_request_latency',
type: 'histogram',
- labelNames: ['processSessions'],
- },
- {
- name: 'user_transform_function_latency',
- help: 'user_transform_function_latency',
- type: 'histogram',
labelNames: [
- 'transformationVersionId',
- 'processSessions',
+ 'workspaceId',
+ 'transformationId',
'sourceType',
'destinationType',
'k8_namespace',
@@ -631,21 +666,6 @@ class Prometheus {
type: 'histogram',
labelNames: ['transformerVersionId', 'language', 'identifier', 'publish', 'testMode'],
},
- {
- name: 'run_time',
- help: 'run_time',
- type: 'histogram',
- labelNames: [
- 'transformerVersionId',
- 'language',
- 'identifier',
- 'publish',
- 'testMode',
- 'sourceType',
- 'destinationType',
- 'k8_namespace',
- ],
- },
{ name: 'get_tracking_plan', help: 'get_tracking_plan', type: 'histogram', labelNames: [] },
{ name: 'createivm_duration', help: 'createivm_duration', type: 'histogram', labelNames: [] },
{
@@ -740,6 +760,12 @@ class Prometheus {
type: 'histogram',
labelNames: [],
},
+ {
+ name: 'braze_partial_failure',
+ help: 'braze_partial_failure',
+ type: 'counter',
+ labelNames: [],
+ },
{
name: 'braze_deduped_users_count',
help: 'braze deduped users count',
@@ -764,6 +790,18 @@ class Prometheus {
type: 'counter',
labelNames: ['http_status', 'destination_id'],
},
+ {
+ name: 'marketo_bulk_upload_upload_file_succJobs',
+ help: 'marketo_bulk_upload_upload_file_succJobs',
+ type: 'counter',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_upload_file_unsuccJobs',
+ help: 'marketo_bulk_upload_upload_file_unsuccJobs',
+ type: 'counter',
+ labelNames: [],
+ },
{
name: 'braze_lookup_time',
help: 'braze look-up time',
@@ -849,6 +887,74 @@ class Prometheus {
labelNames: ['processSessions'],
buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200],
},
+ {
+ name: 'marketo_bulk_upload_create_header_time',
+ help: 'marketo_bulk_upload_create_header_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_fetch_job_time',
+ help: 'marketo_bulk_upload_fetch_job_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_fetch_job_create_response_time',
+ help: 'marketo_bulk_upload_fetch_job_create_response_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_create_file_time',
+ help: 'marketo_bulk_upload_create_file_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_upload_file_time',
+ help: 'marketo_bulk_upload_upload_file_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'marketo_bulk_upload_create_csvloop_time',
+ help: 'marketo_bulk_upload_create_csvloop_time',
+ type: 'histogram',
+ labelNames: [],
+ },
+ {
+ name: 'user_transform_function_input_events',
+ help: 'user_transform_function_input_events',
+ type: 'counter',
+ labelNames: [
+ 'identifier',
+ 'testMode',
+ 'sourceType',
+ 'destinationType',
+ 'k8_namespace',
+ 'errored',
+ 'statusCode',
+ 'transformationId',
+ 'workspaceId',
+ ],
+ },
+ {
+ name: 'user_transform_function_latency',
+ help: 'user_transform_function_latency',
+ type: 'histogram',
+ labelNames: [
+ 'identifier',
+ 'testMode',
+ 'sourceType',
+ 'destinationType',
+ 'k8_namespace',
+ 'errored',
+ 'statusCode',
+ 'transformationId',
+ 'workspaceId',
+ ],
+ },
];
metrics.forEach((metric) => {
diff --git a/src/util/redis/redisConnector.js b/src/util/redis/redisConnector.js
index 5a61e683b67..84d578d3b36 100644
--- a/src/util/redis/redisConnector.js
+++ b/src/util/redis/redisConnector.js
@@ -1,5 +1,5 @@
const Redis = require('ioredis');
-const { RedisError } = require('../../v0/util/errorTypes');
+const { RedisError } = require('@rudderstack/integrations-lib');
const log = require('../../logger');
const stats = require('../stats');
@@ -32,7 +32,7 @@ const RedisDB = {
log.error(`Redis is down at ${this.host}:${this.port}`);
return false; // stop retrying
},
- tls: {}
+ tls: {},
});
this.client.on('ready', () => {
log.info(`Connected to redis at ${this.host}:${this.port}`);
@@ -102,7 +102,7 @@ const RedisDB = {
* @param {*} isValJson set to false if value is not a json object
*
*/
- async setVal(key, value, expiryTimeInSec = 60 * 60) {
+ async setVal(key, value, expiryTimeInSec = process.env.REDIS_EXPIRY_TIME_IN_SEC || 3600) {
try {
await this.checkAndConnectConnection(); // check if redis is connected and if not, connect
if (typeof value === 'object') {
diff --git a/src/util/redis/testData/shopify_source.json b/src/util/redis/testData/shopify_source.json
index a3188310724..53c60472988 100644
--- a/src/util/redis/testData/shopify_source.json
+++ b/src/util/redis/testData/shopify_source.json
@@ -5,9 +5,7 @@
"user_id": "rudder01",
"id": "shopify_test_get_items_fail",
"query_parameters": {
- "topic": [
- "carts_update"
- ]
+ "topic": ["carts_update"]
},
"token": "shopify_test_get_items_fail",
"email": "test@rudderstack.com",
@@ -56,9 +54,7 @@
"sessionId": "session_id",
"cartToken": "shopify_test_set_map_fail",
"query_parameters": {
- "writeKey": [
- "Shopify Write Key"
- ]
+ "writeKey": ["Shopify Write Key"]
},
"cart": {
"token": "shopify_test_set_map_fail",
@@ -80,9 +76,7 @@
"input": {
"cart_token": "shopifyGetSessionId",
"query_parameters": {
- "topic": [
- "checkouts_delete"
- ]
+ "topic": ["checkouts_delete"]
},
"line_items": [],
"note": null,
@@ -121,9 +115,7 @@
"input": {
"cart_token": "shopifyGetAnonymousId",
"query_parameters": {
- "topic": [
- "checkouts_delete"
- ]
+ "topic": ["checkouts_delete"]
},
"line_items": [],
"note": null,
@@ -162,9 +154,7 @@
"input": {
"id": "shopify_test3",
"query_parameters": {
- "topic": [
- "carts_update"
- ]
+ "topic": ["carts_update"]
},
"token": "shopify_test3",
"line_items": [],
@@ -185,9 +175,7 @@
"input": {
"id": "shopify_test3",
"query_parameters": {
- "topic": [
- "orders_delete"
- ]
+ "topic": ["orders_delete"]
},
"line_items": [],
"note": null,
@@ -225,9 +213,7 @@
"input": {
"id": "shopify_test3",
"query_parameters": {
- "topic": [
- "checkouts_delete"
- ]
+ "topic": ["checkouts_delete"]
},
"line_items": [],
"note": null,
@@ -266,9 +252,7 @@
"user_id": "rudder01",
"id": "shopify_test_cart",
"query_parameters": {
- "topic": [
- "carts_update"
- ]
+ "topic": ["carts_update"]
},
"token": "shopify_test_cart",
"email": "test@rudderstack.com",
@@ -292,7 +276,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -394,7 +378,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -464,9 +448,7 @@
],
"id": "shopify_test2",
"query_parameters": {
- "topic": [
- "orders_updated"
- ]
+ "topic": ["orders_updated"]
},
"shipping_address": "abc",
"billing_address": "abc",
@@ -540,9 +522,7 @@
"description": "Track Call -> fullfillments_create",
"input": {
"query_parameters": {
- "topic": [
- "fulfillments_create"
- ]
+ "topic": ["fulfillments_create"]
},
"order_id": "random",
"status": "success",
@@ -561,7 +541,7 @@
"quantity": 1,
"sku": "",
"variant_title": null,
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"fulfillment_service": "manual",
"product_id": 8100634689811,
"requires_shipping": true,
@@ -650,7 +630,7 @@
"price": "9.54",
"taxable": true,
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"fulfillable_quantity": 0,
"fulfillment_service": "manual",
"fulfillment_status": "fulfilled",
@@ -699,9 +679,7 @@
"id": "shopify_test2",
"user_id": "rudder01",
"query_parameters": {
- "topic": [
- "checkouts_update"
- ]
+ "topic": ["checkouts_update"]
},
"token": "shopify_test2",
"cart_token": "shopify_test2",
@@ -726,7 +704,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -828,7 +806,7 @@
"token": "shopify_test2",
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -902,9 +880,7 @@
],
"id": "shopify_test2",
"query_parameters": {
- "topic": [
- "checkouts_update"
- ]
+ "topic": ["checkouts_update"]
},
"cart_token": null,
"line_items": [
@@ -927,7 +903,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1033,7 +1009,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1097,9 +1073,7 @@
"input": {
"id": "shopify_test2",
"query_parameters": {
- "topic": [
- "checkouts_update"
- ]
+ "topic": ["checkouts_update"]
},
"cart_token": null,
"line_items": [
@@ -1122,7 +1096,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1218,7 +1192,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1282,9 +1256,7 @@
"input": {
"id": "shopify_test4",
"query_parameters": {
- "topic": [
- "carts_update"
- ]
+ "topic": ["carts_update"]
},
"token": "shopify_test4",
"line_items": [],
@@ -1326,9 +1298,7 @@
"anonymousId": "b9993cc5-9e60-4e69-be0e-4e38c228314b",
"cartToken": "shopify_test1",
"query_parameters": {
- "writeKey": [
- "Shopify Write Key"
- ]
+ "writeKey": ["Shopify Write Key"]
},
"cart": {
"token": "token",
@@ -1352,9 +1322,7 @@
"sessionId": "b9993cc5-9e60-4e69-be0e-4e38c228314b",
"cartToken": "shopify_test1",
"query_parameters": {
- "writeKey": [
- "Shopify Write Key"
- ]
+ "writeKey": ["Shopify Write Key"]
},
"cart": {
"token": "token",
@@ -1376,9 +1344,7 @@
"input": {
"id": "order_id",
"query_parameters": {
- "topic": [
- "checkouts_update"
- ]
+ "topic": ["checkouts_update"]
},
"token": "shopify_test2",
"cart_token": "shopify_test_no_sessionId",
@@ -1403,7 +1369,7 @@
"taxable": true,
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "vendor": "testAnant",
+ "vendor": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1502,7 +1468,7 @@
"token": "shopify_test2",
"title": "Shirt 2 - LARGE",
"total_discount": "0.00",
- "brand": "testAnant",
+ "brand": "testRudderlabs",
"discounted_price_set": {
"shop_money": {
"amount": "30.0",
@@ -1561,4 +1527,4 @@
"timestamp": "2023-02-10T12:16:07.251Z"
}
}
-]
\ No newline at end of file
+]
diff --git a/src/util/stats.js b/src/util/stats.js
index de77362ac1e..e57ab85731e 100644
--- a/src/util/stats.js
+++ b/src/util/stats.js
@@ -11,14 +11,19 @@ function init() {
return;
}
- if (statsClientType === 'statsd') {
- statsClient = new statsd.Statsd();
- logger.info('created statsd client');
- } else if (statsClientType === 'prometheus') {
- statsClient = new prometheus.Prometheus();
- logger.info('created prometheus client');
- } else {
- logger.info("Invalid stats client type. Valid values are 'statsd' and 'prometheus'.");
+ switch (statsClientType) {
+ case 'statsd':
+ logger.info("setting up statsd client")
+ statsClient = new statsd.Statsd();
+ break;
+
+ case 'prometheus':
+ logger.info("setting up prometheus client")
+ statsClient = new prometheus.Prometheus();
+ break;
+
+ default:
+ logger.error(`invalid stats client type: ${statsClientType}, supported values are 'statsd' and 'prometheues'`)
}
}
diff --git a/src/util/trackingPlan.js b/src/util/trackingPlan.js
index 0c038203089..a77265a5b8d 100644
--- a/src/util/trackingPlan.js
+++ b/src/util/trackingPlan.js
@@ -4,7 +4,7 @@ const logger = require('../logger');
const { responseStatusHandler } = require('./utils');
const stats = require('./stats');
-const tpCache = new NodeCache();
+const tpCache = new NodeCache({ useClones: false });
const CONFIG_BACKEND_URL = process.env.CONFIG_BACKEND_URL || 'https://api.rudderlabs.com';
const TRACKING_PLAN_URL = `${CONFIG_BACKEND_URL}/workspaces`;
diff --git a/src/util/types.ts b/src/util/types.ts
new file mode 100644
index 00000000000..579c35579cb
--- /dev/null
+++ b/src/util/types.ts
@@ -0,0 +1,25 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+export type FixMe = any;
+
+export type CatchErr = any;
+
+export interface Config {
+ cdkEnabled?: boolean;
+ cdkV2Enabled?: boolean;
+ comparisonTestEnabeld?: boolean;
+ comparisonService?: string;
+ camparisonTestThreshold?: number;
+}
+
+export interface IDestDefinition {
+ id: string;
+ name: string;
+ displayName: string;
+ config: Config;
+ options: {
+ isBeta?: boolean;
+ hidden?: boolean;
+ } | null;
+ isPopular: boolean;
+ uiConfig: FixMe;
+}
diff --git a/src/util/utils.js b/src/util/utils.js
index ee4b0f46be1..0ba6008368b 100644
--- a/src/util/utils.js
+++ b/src/util/utils.js
@@ -1,4 +1,4 @@
-/* eslint-disable max-classes-per-file */
+/* eslint-disable max-classes-per-file, @typescript-eslint/return-await */
const http = require('http');
const https = require('https');
const { Resolver } = require('dns').promises;
@@ -10,17 +10,22 @@ const stats = require('./stats');
const resolver = new Resolver();
-const LOCALHOST_IP = '127.0.0.1';
-const LOCALHOST_URL = `http://localhost`;
+const BLOCK_HOST_NAMES = process.env.BLOCK_HOST_NAMES || '';
+const BLOCK_HOST_NAMES_LIST = BLOCK_HOST_NAMES.split(',');
+const LOCAL_HOST_NAMES_LIST = ['localhost', '127.0.0.1', '[::]', '[::1]'];
+const LOCALHOST_OCTET = '127.';
const RECORD_TYPE_A = 4; // ipv4
const staticLookup = (transformerVersionId) => async (hostname, _, cb) => {
let ips;
const resolveStartTime = new Date();
try {
- ips = await resolver.resolve(hostname);
+ ips = await resolver.resolve4(hostname);
} catch (error) {
- stats.timing('fetch_dns_resolve_time', resolveStartTime, { transformerVersionId, error: 'true' });
+ stats.timing('fetch_dns_resolve_time', resolveStartTime, {
+ transformerVersionId,
+ error: 'true',
+ });
cb(null, `unable to resolve IP address for ${hostname}`, RECORD_TYPE_A);
return;
}
@@ -31,9 +36,10 @@ const staticLookup = (transformerVersionId) => async (hostname, _, cb) => {
return;
}
+ // eslint-disable-next-line no-restricted-syntax
for (const ip of ips) {
- if (ip.includes(LOCALHOST_IP)) {
- cb(null, `cannot use ${LOCALHOST_IP} as IP address`, RECORD_TYPE_A);
+ if (ip.startsWith(LOCALHOST_OCTET)) {
+ cb(null, `cannot use ${ip} as IP address`, RECORD_TYPE_A);
return;
}
}
@@ -47,8 +53,17 @@ const httpAgentWithDnsLookup = (scheme, transformerVersionId) => {
};
const blockLocalhostRequests = (url) => {
- if (url.includes(LOCALHOST_URL) || url.includes(LOCALHOST_IP)) {
- throw new Error('localhost requests are not allowed');
+ try {
+ const parseUrl = new URL(url);
+ const { hostname } = parseUrl;
+ if (LOCAL_HOST_NAMES_LIST.includes(hostname) || hostname.startsWith(LOCALHOST_OCTET)) {
+ throw new Error('localhost requests are not allowed');
+ }
+ if (BLOCK_HOST_NAMES_LIST.includes(hostname)) {
+ throw new Error('blocked host requests are not allowed');
+ }
+ } catch (error) {
+ throw new Error(`invalid url, ${error.message}`);
}
};
@@ -163,14 +178,14 @@ const extractStackTraceUptoLastSubstringMatch = (trace, stringLiterals) => {
const traceLines = trace.split('\n');
let lastRelevantIndex = 0;
- for(let i = traceLines.length - 1; i >= 0; i -= 1) {
- if (stringLiterals.some(str => traceLines[i].includes(str))) {
+ for (let i = traceLines.length - 1; i >= 0; i -= 1) {
+ if (stringLiterals.some((str) => traceLines[i].includes(str))) {
lastRelevantIndex = i;
break;
}
}
- return traceLines.slice(0, lastRelevantIndex + 1).join("\n");
+ return traceLines.slice(0, lastRelevantIndex + 1).join('\n');
};
module.exports = {
diff --git a/src/v0/destinations/active_campaign/transform.js b/src/v0/destinations/active_campaign/transform.js
index f995254730d..70caf47ea8a 100644
--- a/src/v0/destinations/active_campaign/transform.js
+++ b/src/v0/destinations/active_campaign/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable array-callback-return */
/* eslint-disable no-empty */
const get = require('get-value');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG, getHeader } = require('./config');
const {
@@ -12,13 +13,6 @@ const {
} = require('../../util');
const { errorHandler } = require('./util');
const { httpGET, httpPOST } = require('../../../adapters/network');
-const {
- InstrumentationError,
- TransformationError,
- NetworkError,
-} = require('../../util/errorTypes');
-const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
-const tags = require('../../util/tags');
const TOTAL_RECORDS_KEY = 'response.data.meta.total';
const EVENT_DATA_KEY = 'properties.eventData';
@@ -68,18 +62,11 @@ const syncContact = async (contactPayload, category, destination) => {
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to create new contact');
+ errorHandler(res, 'Failed to create new contact');
}
const createdContact = get(res, 'response.data.contact'); // null safe
if (!createdContact) {
- throw new NetworkError(
- 'Unable to Create Contact',
- res.response?.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(res.response?.status),
- },
- res.response,
- );
+ errorHandler(res, 'Failed to create new contact');
}
return createdContact.id;
};
@@ -111,7 +98,7 @@ const customTagProcessor = async (message, category, destination, contactId) =>
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to fetch already created tags');
+ errorHandler(res, 'Failed to fetch already created tags');
}
const storedTags = {};
@@ -130,7 +117,9 @@ const customTagProcessor = async (message, category, destination, contactId) =>
if (parseInt(get(res, TOTAL_RECORDS_KEY), 10) > 100) {
const limit = Math.floor(parseInt(get(res, TOTAL_RECORDS_KEY), 10) / 100);
for (let i = 0; i < limit; i += 1) {
- endpoint = `${destination.Config.apiUrl}${category.tagEndPoint}?limit=100&offset=${100 * (i + 1)}`;
+ endpoint = `${destination.Config.apiUrl}${category.tagEndPoint}?limit=100&offset=${
+ 100 * (i + 1)
+ }`;
requestOptions = {
headers: getHeader(destination),
};
@@ -180,7 +169,7 @@ const customTagProcessor = async (message, category, destination, contactId) =>
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to create new tag');
+ errorHandler(res, 'Failed to create new tag');
// For each tags successfully created the response id is pushed to tagIds
}
if (res.response.status === 201) tagIds.push(res.response.data.tag.id);
@@ -212,7 +201,7 @@ const customTagProcessor = async (message, category, destination, contactId) =>
);
responsesArr.forEach((respItem) => {
if (respItem.success === false)
- errorHandler(respItem.response, 'Failed to merge created contact with created tags');
+ errorHandler(respItem, 'Failed to merge created contact with created tags');
});
};
@@ -230,7 +219,7 @@ const customFieldProcessor = async (message, category, destination) => {
// Step - 2
// Get the existing field data from dest and store it in responseStaging
// Ref - https://developers.activecampaign.com/reference/retrieve-fields
- let endpoint = `${destination.Config.apiUrl}${`${category.fieldEndPoint}?limit=100`}`;
+ let endpoint = `${destination.Config.apiUrl}${category.fieldEndPoint}?limit=100`;
const requestOptions = {
headers: {
'Api-Token': destination.Config.apiKey,
@@ -241,7 +230,7 @@ const customFieldProcessor = async (message, category, destination) => {
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to get existing field data');
+ errorHandler(res, 'Failed to get existing field data');
}
responseStaging.push(res.response.status === 200 ? res.response.data.fields : []);
@@ -249,7 +238,9 @@ const customFieldProcessor = async (message, category, destination) => {
const limit = Math.floor(parseInt(get(res, TOTAL_RECORDS_KEY), 10) / 100);
if (parseInt(get(res, TOTAL_RECORDS_KEY), 10) > 100) {
for (let i = 0; i < limit; i += 1) {
- endpoint = `${destination.Config.apiUrl}${category.fieldEndPoint}?limit=100&offset=${100 * (i + 1)}`;
+ endpoint = `${destination.Config.apiUrl}${category.fieldEndPoint}?limit=100&offset=${
+ 100 * (i + 1)
+ }`;
const requestOpt = {
headers: {
'Api-Token': destination.Config.apiKey,
@@ -266,7 +257,7 @@ const customFieldProcessor = async (message, category, destination) => {
if (resp.success === true && resp.response.status === 200) {
responseStaging.push(resp.response.data.fields);
} else {
- errorHandler(resp.response, 'Failed to get existing field data');
+ errorHandler(resp, 'Failed to get existing field data');
}
});
}
@@ -283,7 +274,7 @@ const customFieldProcessor = async (message, category, destination) => {
const storedFields = Object.keys(fieldMap);
const filteredFieldKeys = [];
- fieldKeys.map((fieldKey) => {
+ fieldKeys.forEach((fieldKey) => {
// If the field is present in fieldMap push it to filteredFieldKeys else ignore
if (storedFields.includes(fieldKey)) {
filteredFieldKeys.push(fieldKey);
@@ -297,7 +288,7 @@ const customFieldProcessor = async (message, category, destination) => {
// Creating a field array list conating field id and field value which will be merged to the contact
// Ref: https://developers.activecampaign.com/reference/sync-a-contacts-data
const fieldsArrValues = [];
- filteredFieldKeys.map((key) => {
+ filteredFieldKeys.forEach((key) => {
let fPayload;
if (Array.isArray(fieldInfo[key])) {
fPayload = '||';
@@ -327,7 +318,7 @@ const customListProcessor = async (message, category, destination, contactId) =>
// The list info is pushed into a list object array
const listArr = [];
if (Array.isArray(listInfo)) {
- listInfo.map((list) => {
+ listInfo.forEach((list) => {
listArr.push(list);
});
} else {
@@ -337,7 +328,8 @@ const customListProcessor = async (message, category, destination, contactId) =>
// status information
// Ref: https://developers.activecampaign.com/reference/update-list-status-for-contact/
const promises = [];
- listArr.map(async (li) => {
+ // eslint-disable-next-line no-restricted-syntax
+ for (const li of listArr) {
if (li.status === 'subscribe' || li.status === 'unsubscribe') {
const endpoint = `${destination.Config.apiUrl}${category.mergeListWithContactUrl}`;
const requestData = {
@@ -356,11 +348,11 @@ const customListProcessor = async (message, category, destination, contactId) =>
});
promises.push(res);
}
- });
+ }
const responses = await Promise.all(promises);
responses.forEach((respItem) => {
if (respItem.success === false) {
- errorHandler(respItem.response, 'Failed to map created contact with the list');
+ errorHandler(respItem, 'Failed to map created contact with the list');
}
});
};
@@ -412,18 +404,11 @@ const screenRequestHandler = async (message, category, destination) => {
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to retrieve events');
+ errorHandler(res, 'Failed to retrieve events');
}
if (res?.response?.status !== 200) {
- throw new NetworkError(
- 'Unable to create event',
- res.response?.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(res.response?.status),
- },
- res.response,
- );
+ errorHandler(res, 'Unable to create event');
}
const storedEventsArr = res.response?.data?.eventTrackingEvents;
@@ -446,18 +431,11 @@ const screenRequestHandler = async (message, category, destination) => {
feature: 'transformation',
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to create event');
+ errorHandler(res, 'Failed to create event');
}
if (res.response.status !== 201) {
- throw new NetworkError(
- 'Unable to create event',
- res.response.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(res.response.status),
- },
- res?.response,
- );
+ errorHandler(res, 'Unable to create event');
}
}
// Previous operations successfull then
@@ -490,18 +468,11 @@ const trackRequestHandler = async (message, category, destination) => {
});
if (res.success === false) {
- errorHandler(res.response, 'Failed to retrieve events');
+ errorHandler(res, 'Failed to retrieve events');
}
if (res.response.status !== 200) {
- throw new NetworkError(
- 'Unable to fetch events. Aborting',
- res.response.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(res.response.status),
- },
- res?.response,
- );
+ errorHandler(res, 'Unable to fetch events. Aborting');
}
const storedEventsArr = res.response?.data?.eventTrackingEvents;
@@ -524,14 +495,7 @@ const trackRequestHandler = async (message, category, destination) => {
feature: 'transformation',
});
if (res.response?.status !== 201) {
- throw new NetworkError(
- 'Unable to create event. Aborting',
- res.response.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(res.response.status),
- },
- res.response,
- );
+ errorHandler(res, 'Unable to create event. Aborting');
}
}
diff --git a/src/v0/destinations/active_campaign/util.js b/src/v0/destinations/active_campaign/util.js
index c5086183367..40e15f95b3f 100644
--- a/src/v0/destinations/active_campaign/util.js
+++ b/src/v0/destinations/active_campaign/util.js
@@ -1,31 +1,24 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const {
- nodeSysErrorToStatus,
getDynamicErrorType,
+ processAxiosResponse,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
-const errorHandler = (err, message) => {
- if (err.response) {
- throw new NetworkError(
- `${message} (${err.response?.statusText},${JSON.stringify(err.response?.data)})`,
- err.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(err.status),
- },
- err,
- );
- } else {
- const httpError = nodeSysErrorToStatus(err.code);
- throw new NetworkError(
- `${message} ${httpError.message}`,
- httpError.status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(httpError.status),
- },
- err,
- );
+const errorHandler = (httpCallError, message) => {
+ const { response, status } = processAxiosResponse(httpCallError);
+ let msg = message;
+ if (response) {
+ msg = `${message} (${httpCallError.response?.statusText},${JSON.stringify(response)})`;
}
+ throw new NetworkError(
+ msg,
+ status,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
+ },
+ response,
+ );
};
const offsetLimitVarPath = 'response.data.meta.total';
diff --git a/src/v0/destinations/adj/transform.js b/src/v0/destinations/adj/transform.js
index 1862012bb11..8248e731c93 100644
--- a/src/v0/destinations/adj/transform.js
+++ b/src/v0/destinations/adj/transform.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ InstrumentationError,
+ TransformationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG, baseEndpoint } = require('./config');
const {
@@ -11,17 +16,17 @@ const {
isAppleFamily,
simpleProcessRouterDest,
} = require('../../util');
-const {
- InstrumentationError,
- TransformationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const rejectParams = ['revenue', 'currency'];
function responseBuilderSimple(message, category, destination) {
const payload = constructPayload(message, MAPPING_CONFIG[category.name]);
- const { appToken, customMappings, environment } = destination.Config;
+ const { appToken, customMappings, environment, partnerParamsKeys } = destination.Config;
+ if (!appToken) {
+ throw new ConfigurationError(
+ 'App Token is not present. Please configure your app token from config dashbaord',
+ );
+ }
const platform = get(message, 'context.device.type');
const id = get(message, 'context.device.id');
if (typeof platform !== 'string' || !platform || !id) {
@@ -37,7 +42,7 @@ function responseBuilderSimple(message, category, destination) {
throw new InstrumentationError('Device type not valid');
}
if (payload.revenue) {
- payload.currency = message.properties.currency || 'USD';
+ payload.currency = message?.properties?.currency || 'USD';
}
const hashMap = getHashFromArray(customMappings, 'from', 'to', false);
if (payload && message.event && hashMap[message.event]) {
@@ -46,11 +51,11 @@ function responseBuilderSimple(message, category, destination) {
Accept: '*/*',
};
- const partnerParamsKeysMap = getHashFromArray(destination?.Config?.partnerParamsKeys);
+ const partnerParamsKeysMap = getHashFromArray(partnerParamsKeys);
if (partnerParamsKeysMap) {
payload.partner_params = {};
Object.keys(partnerParamsKeysMap).forEach((key) => {
- if (message.properties[key]) {
+ if (message?.properties?.[key]) {
payload.partner_params[partnerParamsKeysMap[key]] = message.properties[key].toString();
}
});
@@ -81,9 +86,8 @@ function responseBuilderSimple(message, category, destination) {
// fail-safety for developer error
if (!message.event || !hashMap[message.event]) {
throw new ConfigurationError('No event token mapped for this event');
- } else {
- throw new TransformationError('Payload could not be constructed');
}
+ throw new TransformationError('Payload could not be constructed');
}
const processEvent = (message, destination) => {
diff --git a/src/v0/destinations/adobe_analytics/config.js b/src/v0/destinations/adobe_analytics/config.js
index 7a66b32a484..ed5852f5a57 100644
--- a/src/v0/destinations/adobe_analytics/config.js
+++ b/src/v0/destinations/adobe_analytics/config.js
@@ -44,4 +44,5 @@ module.exports = {
ECOM_PRODUCT_EVENTS,
commonConfig: MAPPING_CONFIG[CONFIG_CATEGORIES.COMMON.name],
formatDestinationConfig,
+ DESTINATION: 'ADOBE_ANALYTICS',
};
diff --git a/src/v0/destinations/adobe_analytics/networkHandler.js b/src/v0/destinations/adobe_analytics/networkHandler.js
new file mode 100644
index 00000000000..0ec1fad2869
--- /dev/null
+++ b/src/v0/destinations/adobe_analytics/networkHandler.js
@@ -0,0 +1,55 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
+const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
+const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+const { DESTINATION } = require('./config');
+
+/**
+ * Extract data inside different tags from an xml payload
+ * @param {*} xml
+ * @param {*} tagName
+ * @returns data inside the tagName
+ */
+function extractContent(xmlPayload, tagName) {
+ const pattern = new RegExp(`<${tagName}>(.*?)${tagName}>`);
+ const match = xmlPayload.match(pattern);
+ return match ? match[1] : null;
+}
+
+const responseHandler = (destinationResponse, dest) => {
+ const message = `[${DESTINATION}] - Request Processed Successfully`;
+ const { response, status } = destinationResponse;
+
+ // Extract values between different tags
+ const responseStatus = extractContent(response, 'status');
+ const reason = extractContent(response, 'reason');
+
+ // if the status tag in XML contains FAILURE, we build and throw an explicit error
+ if (responseStatus === 'FAILURE') {
+ if (reason) {
+ throw new InstrumentationError(
+ `[${DESTINATION} Response Handler] Request failed for destination ${dest} : ${reason}`,
+ );
+ } else {
+ throw new InstrumentationError(
+ `[${DESTINATION} Response Handler] Request failed for destination ${dest} with a general error`,
+ );
+ }
+ }
+
+ return {
+ status,
+ message,
+ destinationResponse,
+ };
+};
+
+function networkHandler() {
+ this.responseHandler = responseHandler;
+ this.proxy = proxyRequest;
+ this.prepareProxy = prepareProxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+}
+
+module.exports = {
+ networkHandler,
+};
diff --git a/src/v0/destinations/adobe_analytics/transform.js b/src/v0/destinations/adobe_analytics/transform.js
index 5daf11e62ef..b4281387249 100644
--- a/src/v0/destinations/adobe_analytics/transform.js
+++ b/src/v0/destinations/adobe_analytics/transform.js
@@ -1,5 +1,10 @@
const jsonxml = require('jsontoxml');
const get = require('get-value');
+const {
+ InstrumentationError,
+ TransformationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ECOM_PRODUCT_EVENTS, commonConfig, formatDestinationConfig } = require('./config');
const {
@@ -11,13 +16,9 @@ const {
isDefinedAndNotNull,
isDefinedAndNotNullAndNotEmpty,
getIntegrationsObj,
+ removeUndefinedAndNullValues,
simpleProcessRouterDest,
} = require('../../util');
-const {
- InstrumentationError,
- TransformationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const {
handleContextData,
@@ -36,7 +37,13 @@ const responseBuilderSimple = async (message, destinationConfig, basicPayload) =
const { event, context, properties } = message;
// set default value of properties.overridePageView to false if not provided
properties.overridePageView = properties.overridePageView ?? false;
- const { overrideEvars, overrideHiers, overrideLists, overrideCustomProperties } = properties;
+ const {
+ overrideEvars,
+ overrideHiers,
+ overrideLists,
+ overrideCustomProperties,
+ overridePageView,
+ } = properties;
// handle contextData
payload = handleContextData(payload, destinationConfig, message);
@@ -60,7 +67,7 @@ const responseBuilderSimple = async (message, destinationConfig, basicPayload) =
// handle link values
// default linktype to 'o', linkName to event name, linkURL to ctx.page.url if not passed in integrations object
const adobeIntegrationsObject = getIntegrationsObj(message, 'adobe_analytics');
- if (!properties?.overridePageView) {
+ if (!overridePageView) {
payload.linkType = adobeIntegrationsObject?.linkType || 'o';
payload.linkName = adobeIntegrationsObject?.linkName || event;
// setting linkname to page view for page calls
@@ -69,6 +76,7 @@ const responseBuilderSimple = async (message, destinationConfig, basicPayload) =
}
payload.linkURL =
adobeIntegrationsObject?.linkURL || context?.page?.url || 'No linkURL provided';
+ payload.linkURL = encodeURI(payload.linkURL);
}
// handle hier
if (overrideHiers) {
@@ -86,11 +94,11 @@ const responseBuilderSimple = async (message, destinationConfig, basicPayload) =
// handle pageName, pageUrl
const contextPageUrl = context?.page?.url;
- if (properties?.overridePageView) {
+ if (overridePageView) {
const propertiesPageUrl = properties?.pageUrl;
const pageUrl = contextPageUrl || propertiesPageUrl;
if (isDefinedAndNotNullAndNotEmpty(pageUrl)) {
- payload.pageUrl = pageUrl;
+ payload.pageUrl = encodeURI(pageUrl);
}
if (trackPageName) {
// better handling possible here, both error and implementation wise
@@ -337,11 +345,14 @@ const processTrackEvent = (message, adobeEventName, destinationConfig, extras =
const handleTrack = (message, destinationConfig) => {
const ORDER_ID_KEY = 'properties.order_id';
- const { event: rawEvent } = message;
+ const { event: rawEvent, properties } = message;
+ if (!rawEvent) {
+ throw new InstrumentationError('Event name is not present. Aborting message.');
+ }
let payload = null;
// handle ecommerce events separately
// generic events should go to the default
- const event = rawEvent?.toLowerCase();
+ const event = typeof rawEvent === 'string' ? rawEvent.toLowerCase() : rawEvent;
switch (event) {
case 'product viewed':
case 'product list viewed':
@@ -372,18 +383,14 @@ const handleTrack = (message, destinationConfig) => {
payload = processTrackEvent(message, 'scOpen', destinationConfig);
break;
default:
- if (destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()]) {
- payload = processTrackEvent(
- message,
- destinationConfig.rudderEventsToAdobeEvents[event.toLowerCase()].trim(),
- destinationConfig,
- );
- } else if (message?.properties?.overrideEventName) {
+ if (destinationConfig.rudderEventsToAdobeEvents[event]) {
payload = processTrackEvent(
message,
- message?.properties?.overrideEventName,
+ destinationConfig.rudderEventsToAdobeEvents[event]?.trim(),
destinationConfig,
);
+ } else if (properties?.overrideEventName) {
+ payload = processTrackEvent(message, properties.overrideEventName, destinationConfig);
} else {
throw new ConfigurationError(
'The event is not a supported ECOM event or a mapped custom event. Aborting.',
@@ -392,7 +399,7 @@ const handleTrack = (message, destinationConfig) => {
break;
}
- return payload;
+ return removeUndefinedAndNullValues(payload);
};
const process = async (event) => {
diff --git a/src/v0/destinations/adobe_analytics/utils.js b/src/v0/destinations/adobe_analytics/utils.js
index 55059884b1e..97dc6e90bbd 100644
--- a/src/v0/destinations/adobe_analytics/utils.js
+++ b/src/v0/destinations/adobe_analytics/utils.js
@@ -4,8 +4,8 @@
/* eslint-disable unicorn/no-for-loop */
/* eslint-disable no-restricted-syntax */
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { isDefinedAndNotNull, getValueFromMessage } = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const SOURCE_KEYS = ['properties', 'traits', 'context.traits', 'context'];
@@ -75,6 +75,28 @@ function handleContextData(payload, destinationConfig, message) {
return payload;
}
+/**
+ * This function is used for replacing '&', '<' and '>' with their respective HTML entities
+ * @param {*} inputString
+ * @returns string with HTML entities replaced
+ *
+ */
+
+function escapeToHTML(inputString) {
+ if (typeof inputString !== 'string') {
+ return inputString;
+ }
+ return inputString.replace(
+ /[&<>]/g,
+ (match) =>
+ ({
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ }[match]),
+ );
+}
+
/**
* This function is used for populating the eVars and hVars in the payload
* @param {*} destVarMapping
@@ -90,16 +112,16 @@ function rudderPropToDestMap(destVarMapping, message, payload, destVarStrPrefix)
let val = get(message, `properties.${key}`);
if (isDefinedAndNotNull(val)) {
const destVarKey = destVarStrPrefix + destVarMapping[key];
- mappedVar[destVarKey] = val;
+ mappedVar[destVarKey] = escapeToHTML(val);
} else {
SOURCE_KEYS.some((sourceKey) => {
val = getMappingFieldValueFormMessage(message, sourceKey, key);
if (isDefinedAndNotNull(val)) {
- mappedVar[`${destVarStrPrefix}${[destVarMapping[key]]}`] = val;
+ mappedVar[`${destVarStrPrefix}${[destVarMapping[key]]}`] = escapeToHTML(val);
} else {
val = getValueByPath(message, key);
if (isDefinedAndNotNull(val)) {
- mappedVar[`${destVarStrPrefix}${[destVarMapping[key]]}`] = val;
+ mappedVar[`${destVarStrPrefix}${[destVarMapping[key]]}`] = escapeToHTML(val);
}
}
});
@@ -147,13 +169,13 @@ function rudderPropToDestMapWithDelimitter(mapping, delimMapping, message, prefi
`${prefix} mapping properties variable is neither a string nor an array`,
);
}
-
+
if (typeof val === 'string') {
/* following regex is used to find the one or more commas separated/padded by white spaces.
Example: val = 'r15,faze90R' , 'r1v, bvp, pol'
*/
- val = val.replace(/\s*,+\s*/g, delimMapping[key]);
- // Above regex is good as for every comma with whitespace padding the no. of steps will increase by 4.
+ val = val.replace(/\s*,+\s*/g, delimMapping[key]);
+ // Above regex is good as for every comma with whitespace padding the no. of steps will increase by 4.
} else {
val = val.join(delimMapping[key]);
}
@@ -200,4 +222,5 @@ module.exports = {
handleList,
handleCustomProperties,
stringifyValueAndJoinWithDelimiter,
+ escapeToHTML,
};
diff --git a/src/v0/destinations/af/deleteUsers.js b/src/v0/destinations/af/deleteUsers.js
index 7970d02c207..2d68549fcca 100644
--- a/src/v0/destinations/af/deleteUsers.js
+++ b/src/v0/destinations/af/deleteUsers.js
@@ -1,12 +1,16 @@
/* eslint-disable no-await-in-loop */
/* eslint-disable no-param-reassign */
+const {
+ ConfigurationError,
+ InstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { generateUUID, isHttpStatusSuccess } = require('../../util');
-const { ConfigurationError, InstrumentationError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { executeCommonValidations } = require('../../util/regulation-api');
diff --git a/src/v0/destinations/af/transform.js b/src/v0/destinations/af/transform.js
index 858adce147d..4d7ed7e635c 100644
--- a/src/v0/destinations/af/transform.js
+++ b/src/v0/destinations/af/transform.js
@@ -1,6 +1,7 @@
const get = require('get-value');
const set = require('set-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
removeUndefinedValues,
@@ -15,7 +16,6 @@ const {
isDefinedAndNotNullAndNotEmpty,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { Event, ENDPOINT, ConfigCategory, mappingConfig, nameToEventMap } = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/airship/transform.js b/src/v0/destinations/airship/transform.js
index a390ec8060c..091c9b7f392 100644
--- a/src/v0/destinations/airship/transform.js
+++ b/src/v0/destinations/airship/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -22,7 +23,6 @@ const {
isEmptyObject,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const DEFAULT_ACCEPT_HEADER = 'application/vnd.urbanairship+json; version=3';
diff --git a/src/v0/destinations/algolia/transform.js b/src/v0/destinations/algolia/transform.js
index c8b9be28dd5..8e9cd57e8b3 100644
--- a/src/v0/destinations/algolia/transform.js
+++ b/src/v0/destinations/algolia/transform.js
@@ -1,10 +1,10 @@
const set = require('set-value');
-const { EventType } = require('../../../constants');
const {
InstrumentationError,
ConfigurationError,
PlatformError,
-} = require('../../util/errorTypes');
+} = require('@rudderstack/integrations-lib');
+const { EventType } = require('../../../constants');
const {
getValueFromMessage,
constructPayload,
diff --git a/src/v0/destinations/algolia/util.js b/src/v0/destinations/algolia/util.js
index 89048f0e435..eddb4dc16d6 100644
--- a/src/v0/destinations/algolia/util.js
+++ b/src/v0/destinations/algolia/util.js
@@ -1,5 +1,5 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const logger = require('../../../logger');
-const { InstrumentationError } = require('../../util/errorTypes');
const { EVENT_TYPES } = require('./config');
/**
diff --git a/src/v0/destinations/am/config.js b/src/v0/destinations/am/config.js
index 5e6fc06c272..3e51a671371 100644
--- a/src/v0/destinations/am/config.js
+++ b/src/v0/destinations/am/config.js
@@ -122,7 +122,8 @@ events.forEach((event) => {
const DELETE_MAX_BATCH_SIZE = 100;
const DESTINATION = 'amplitude';
const IDENTIFY_AM = '$identify';
-
+const AMBatchSizeLimit = 20 * 1024 * 1024; // 20 MB
+const AMBatchEventLimit = 500; // event size limit from sdk is 32KB => 15MB
module.exports = {
DESTINATION,
Event,
@@ -134,4 +135,6 @@ module.exports = {
DELETE_MAX_BATCH_SIZE,
batchEventsWithUserIdLengthLowerThanFive,
IDENTIFY_AM,
+ AMBatchSizeLimit,
+ AMBatchEventLimit
};
diff --git a/src/v0/destinations/am/deleteUsers.js b/src/v0/destinations/am/deleteUsers.js
index c0402284b49..578c58fb5c4 100644
--- a/src/v0/destinations/am/deleteUsers.js
+++ b/src/v0/destinations/am/deleteUsers.js
@@ -1,4 +1,5 @@
const btoa = require('btoa');
+const { ConfigurationError, NetworkError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const tags = require('../../util/tags');
const {
@@ -6,7 +7,6 @@ const {
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { isHttpStatusSuccess } = require('../../util');
-const { ConfigurationError, NetworkError } = require('../../util/errorTypes');
const { executeCommonValidations } = require('../../util/regulation-api');
const { DELETE_MAX_BATCH_SIZE } = require('./config');
const { getUserIdBatches } = require('../../util/deleteUserUtils');
diff --git a/src/v0/destinations/am/transform.js b/src/v0/destinations/am/transform.js
index e6ccf585df3..05a130d6e0b 100644
--- a/src/v0/destinations/am/transform.js
+++ b/src/v0/destinations/am/transform.js
@@ -1,8 +1,10 @@
/* eslint-disable no-lonely-if */
/* eslint-disable no-nested-ternary */
/* eslint-disable no-param-reassign */
+const cloneDeep = require('lodash/cloneDeep');
const get = require('get-value');
const set = require('set-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const {
EventType,
SpecedTraits,
@@ -26,6 +28,7 @@ const {
isAppleFamily,
isDefinedAndNotNullAndNotEmpty,
simpleProcessRouterDest,
+ isValidInteger,
} = require('../../util');
const {
BASE_URL,
@@ -34,17 +37,16 @@ const {
mappingConfig,
batchEventsWithUserIdLengthLowerThanFive,
IDENTIFY_AM,
+ AMBatchSizeLimit,
+ AMBatchEventLimit,
} = require('./config');
const tags = require('../../util/tags');
const AMUtils = require('./utils');
const logger = require('../../../logger');
-const { InstrumentationError } = require('../../util/errorTypes');
-const { JSON_MIME_TYPE } = require('../../util/constant');
-const AMBatchSizeLimit = 20 * 1024 * 1024; // 20 MB
-const AMBatchEventLimit = 500; // event size limit from sdk is 32KB => 15MB
+const { JSON_MIME_TYPE } = require('../../util/constant');
const EVENTS_KEY_PATH = 'body.JSON.events';
@@ -79,82 +81,96 @@ const aliasEndpoint = (destConfig) => {
return retVal;
};
-function handleSessionIdUnderRoot(message) {
- const sessionId = get(message, 'session_id');
+const handleSessionIdUnderRoot = (sessionId) => {
if (typeof sessionId === 'string') {
- return sessionId.substr(sessionId.lastIndexOf(':') + 1, sessionId.length);
+ const extractedPart = sessionId.split(':').reverse();
+ if (!isValidInteger(extractedPart[0])) return -1;
+ return Number(extractedPart[0]);
}
- return sessionId;
-}
+ return Number(sessionId);
+};
-function handleSessionIdUnderContext(message) {
- let sessionId = get(message, 'context.sessionId');
- sessionId = Number(sessionId);
- if (Number.isNaN(sessionId)) return -1;
- return sessionId;
-}
+const handleSessionIdUnderContext = (sessionId) => {
+ if (!isValidInteger(sessionId)) return -1;
+ return Number(sessionId);
+};
-function getSessionId(message) {
- return get(message, 'session_id')
- ? handleSessionIdUnderRoot(message)
- : get(message, 'context.sessionId')
- ? handleSessionIdUnderContext(message)
- : -1;
-}
+const checkForJSONAndUserIdLengthAndDeviceId = (jsonBody, userId, deviceId) =>
+ Object.keys(jsonBody).length === 0 ||
+ (userId &&
+ userId.length < 5 &&
+ (!batchEventsWithUserIdLengthLowerThanFive ||
+ (batchEventsWithUserIdLengthLowerThanFive && !deviceId)));
+const getSessionId = (message) => {
+ let sessionId = -1;
+ const rootSessionId = get(message, 'session_id');
+ if (rootSessionId) {
+ sessionId = handleSessionIdUnderRoot(rootSessionId);
+ if (sessionId !== -1) {
+ return sessionId;
+ }
+ }
+ const contextSessionId = get(message, 'context.sessionId');
+ if (contextSessionId) {
+ sessionId = handleSessionIdUnderContext(contextSessionId);
+ }
+ return sessionId;
+};
-function addMinIdlength() {
- return { min_id_length: 1 };
-}
+const addMinIdlength = () => ({ min_id_length: 1 });
-function setPriceQuanityInPayload(message, rawPayload) {
+const setPriceQuanityInPayload = (message, rawPayload) => {
let price;
let quantity;
- if (isDefinedAndNotNull(message.properties.price)) {
+ if (isDefinedAndNotNull(message.properties?.price)) {
price = message.properties.price;
- quantity = message.properties.quantity || 1;
+ quantity = message.properties?.quantity || 1;
} else {
- price = message.properties.revenue;
+ price = message.properties?.revenue;
quantity = 1;
}
rawPayload.price = price;
rawPayload.quantity = quantity;
- rawPayload.revenue = message.properties.revenue;
+ rawPayload.revenue = message.properties?.revenue;
return rawPayload;
-}
+};
-function createRevenuePayload(message, rawPayload) {
- rawPayload.productId = message.properties.product_id;
+const createRevenuePayload = (message, rawPayload) => {
+ rawPayload.productId = message.properties?.product_id;
rawPayload.revenueType =
- message.properties.revenueType || message.properties.revenue_type || 'Purchased';
+ message.properties?.revenueType || message.properties?.revenue_type || 'Purchased';
rawPayload = setPriceQuanityInPayload(message, rawPayload);
return rawPayload;
-}
+};
-function updateTraitsObject(property, traitsObject, actionKey) {
+const updateTraitsObject = (property, traitsObject, actionKey) => {
const propertyToUpdate = getValueFromMessage(traitsObject, property);
if (traitsObject[actionKey] && property && typeof property === 'string') {
traitsObject[actionKey][property] = propertyToUpdate;
deleteObjectProperty(traitsObject, property);
}
return traitsObject;
-}
+};
-function prepareTraitsConfig(configPropertyTrait, actionKey, traitsObject) {
+const prepareTraitsConfig = (configPropertyTrait, actionKey, traitsObject) => {
traitsObject[actionKey] = {};
configPropertyTrait.forEach((traitsElement) => {
- const property = traitsElement.traits;
+ const property = traitsElement?.traits;
traitsObject = updateTraitsObject(property, traitsObject, actionKey);
});
- if (Object.keys(traitsObject[actionKey]).length === 0) {
+ if (
+ typeof traitsObject?.[actionKey] === 'object' &&
+ Object.keys(traitsObject?.[actionKey] || {})?.length === 0
+ ) {
delete traitsObject[actionKey];
}
return traitsObject;
-}
+};
-function handleTraits(messageTrait, destination) {
+const handleTraits = (messageTrait, destination) => {
let traitsObject = JSON.parse(JSON.stringify(messageTrait));
- if (destination.Config.traitsToIncrement) {
+ if (destination.Config?.traitsToIncrement) {
const actionKey = '$add';
traitsObject = prepareTraitsConfig(
destination.Config.traitsToIncrement,
@@ -162,29 +178,41 @@ function handleTraits(messageTrait, destination) {
traitsObject,
);
}
- if (destination.Config.traitsToSetOnce) {
+ if (destination.Config?.traitsToSetOnce) {
const actionKey = '$setOnce';
traitsObject = prepareTraitsConfig(destination.Config.traitsToSetOnce, actionKey, traitsObject);
}
- if (destination.Config.traitsToAppend) {
+ if (destination.Config?.traitsToAppend) {
const actionKey = '$append';
traitsObject = prepareTraitsConfig(destination.Config.traitsToAppend, actionKey, traitsObject);
}
- if (destination.Config.traitsToPrepend) {
+ if (destination.Config?.traitsToPrepend) {
const actionKey = '$prepend';
traitsObject = prepareTraitsConfig(destination.Config.traitsToPrepend, actionKey, traitsObject);
}
return traitsObject;
-}
+};
+
+const getScreenevTypeAndUpdatedProperties = (message, CATEGORY_KEY) => {
+ const name = message.name || message.event || get(message, CATEGORY_KEY);
+
+ return {
+ eventType: `Viewed ${message.name || message.event || get(message, CATEGORY_KEY) || ''} Screen`,
+ updatedProperties: {
+ ...message.properties,
+ name,
+ },
+ };
+};
-function handleMappingJsonObject(
+const handleMappingJsonObject = (
mappingJson,
sourceKey,
validatePayload,
payload,
message,
Config,
-) {
+) => {
const { isFunc, funcName, outKey } = mappingJson[sourceKey];
if (isFunc) {
if (validatePayload) {
@@ -203,150 +231,242 @@ function handleMappingJsonObject(
if (isDefinedAndNotNull(data)) {
set(payload, outKey, data);
delete message.traits[outKey];
- } else {
- // get the destKey/outKey value from calling the util function
- set(payload, outKey, AMUtils[funcName](message, sourceKey, Config));
+ return;
}
+ // get the destKey/outKey value from calling the util function
+ set(payload, outKey, AMUtils[funcName](message, sourceKey, Config));
}
}
-}
+};
-function updateConfigProperty(message, payload, mappingJson, validatePayload, Config) {
+const updateConfigProperty = (message, payload, mappingJson, validatePayload, Config) => {
const sourceKeys = Object.keys(mappingJson);
sourceKeys.forEach((sourceKey) => {
// check if custom processing is required on the payload sourceKey ==> destKey
if (typeof mappingJson[sourceKey] === 'object') {
handleMappingJsonObject(mappingJson, sourceKey, validatePayload, payload, message, Config);
- } else {
- // For common config
- if (validatePayload) {
- // if data is present in traits assign
- const messageData = get(message.traits, mappingJson[sourceKey]);
- if (isDefinedAndNotNull(messageData)) {
- set(payload, mappingJson[sourceKey], messageData);
- } else {
- const data = get(payload, mappingJson[sourceKey]);
- if (!isDefinedAndNotNull(data)) {
- const val = get(message, sourceKey);
- if (val || val === false || val === 0) {
- set(payload, mappingJson[sourceKey], val);
- }
+ } else if (validatePayload) {
+ // if data is present in traits assign
+ const messageData = get(message.traits, mappingJson[sourceKey]);
+ if (isDefinedAndNotNull(messageData)) {
+ set(payload, mappingJson[sourceKey], messageData);
+ } else {
+ const data = get(payload, mappingJson[sourceKey]);
+ if (!isDefinedAndNotNull(data)) {
+ const val = get(message, sourceKey);
+ if (val || val === false || val === 0) {
+ set(payload, mappingJson[sourceKey], val);
}
}
+ }
+ } else {
+ const data = get(message.traits, mappingJson[sourceKey]);
+ if (isDefinedAndNotNull(data)) {
+ set(payload, mappingJson[sourceKey], data);
} else {
- const data = get(message.traits, mappingJson[sourceKey]);
- if (isDefinedAndNotNull(data)) {
- set(payload, mappingJson[sourceKey], data);
- } else {
- set(payload, mappingJson[sourceKey], get(message, sourceKey));
- }
+ set(payload, mappingJson[sourceKey], get(message, sourceKey));
}
}
});
-}
+};
+const identifyBuilder = (message, destination, rawPayload) => {
+ // update payload user_properties from userProperties/traits/context.traits/nested traits of Rudder message
+ // traits like address converted to top level user properties (think we can skip this extra processing as AM supports nesting upto 40 levels)
+ let traits = getFieldValueFromMessage(message, 'traits');
+ if (traits) {
+ traits = handleTraits(traits, destination);
+ }
+ rawPayload.user_properties = {
+ ...rawPayload.user_properties,
+ ...message.userProperties,
+ };
+ if (traits) {
+ Object.keys(traits).forEach((trait) => {
+ if (SpecedTraits.includes(trait)) {
+ const mapping = TraitsMapping[trait];
+ Object.keys(mapping).forEach((key) => {
+ const checkKey = get(rawPayload.user_properties, key);
+ // this is done only if we want to add default values under address to the user_properties
+ // these values are also sent to the destination at the top level.
+ if (!isDefinedAndNotNull(checkKey)) {
+ set(rawPayload, `user_properties.${key}`, get(traits, mapping[key]));
+ }
+ });
+ } else {
+ set(rawPayload, `user_properties.${trait}`, get(traits, trait));
+ }
+ });
+ }
+ return rawPayload;
+};
+
+const getDefaultResponseData = (message, rawPayload, evType, groupInfo) => {
+ const traits = getFieldValueFromMessage(message, 'traits');
+ set(rawPayload, 'event_properties', message.properties);
+
+ if (traits) {
+ rawPayload.user_properties = {
+ ...rawPayload.user_properties,
+ ...traits,
+ };
+ }
-function getResponseData(evType, destination, rawPayload, message, groupInfo) {
- let endpoint = defaultEndpoint(destination.Config);
- let traits;
+ rawPayload.event_type = evType;
+ rawPayload.user_id = message.userId;
+ if (message.isRevenue) {
+ // making the revenue payload
+ rawPayload = createRevenuePayload(message, rawPayload);
+ // deleting the properties price, product_id, quantity and revenue from event_properties since it is already in root
+ if (rawPayload.event_properties) {
+ delete rawPayload.event_properties.price;
+ delete rawPayload.event_properties.product_id;
+ delete rawPayload.event_properties.quantity;
+ delete rawPayload.event_properties.revenue;
+ }
+ }
+ const groups = groupInfo && cloneDeep(groupInfo);
+ return { groups, rawPayload };
+};
+const getResponseData = (evType, destination, rawPayload, message, groupInfo) => {
let groups;
switch (evType) {
case EventType.IDENTIFY:
+ // event_type for identify event is $identify
+ rawPayload.event_type = IDENTIFY_AM;
+ identifyBuilder(message, destination, rawPayload);
+ break;
case EventType.GROUP:
- endpoint = defaultEndpoint(destination.Config);
// event_type for identify event is $identify
rawPayload.event_type = IDENTIFY_AM;
-
- if (evType === EventType.IDENTIFY) {
- // update payload user_properties from userProperties/traits/context.traits/nested traits of Rudder message
- // traits like address converted to top level user properties (think we can skip this extra processing as AM supports nesting upto 40 levels)
- traits = getFieldValueFromMessage(message, 'traits');
- if (traits) {
- traits = handleTraits(traits, destination);
- }
- rawPayload.user_properties = {
- ...rawPayload.user_properties,
- ...message.userProperties,
- };
- if (traits) {
- Object.keys(traits).forEach((trait) => {
- if (SpecedTraits.includes(trait)) {
- const mapping = TraitsMapping[trait];
- Object.keys(mapping).forEach((key) => {
- const checkKey = get(rawPayload.user_properties, key);
- // this is done only if we want to add default values under address to the user_properties
- // these values are also sent to the destination at the top level.
- if (!isDefinedAndNotNull(checkKey)) {
- set(rawPayload, `user_properties.${key}`, get(traits, mapping[key]));
- }
- });
- } else {
- set(rawPayload, `user_properties.${trait}`, get(traits, trait));
- }
- });
- }
- }
-
- if (
- evType === EventType.GROUP && // for Rudder group call, update the user_properties with group info
- // Refer (1.)
- groupInfo &&
- groupInfo.group_type &&
- groupInfo.group_value
- ) {
+ // for Rudder group call, update the user_properties with group info
+ if (groupInfo?.group_type && groupInfo?.group_value) {
groups = {};
groups[groupInfo.group_type] = groupInfo.group_value;
set(rawPayload, `user_properties.${[groupInfo.group_type]}`, groupInfo.group_value);
}
break;
case EventType.ALIAS:
- endpoint = aliasEndpoint(destination.Config);
break;
default:
- traits = getFieldValueFromMessage(message, 'traits');
- set(rawPayload, 'event_properties', message.properties);
-
- if (traits) {
- rawPayload.user_properties = {
- ...rawPayload.user_properties,
- ...traits,
- };
- }
+ ({ groups, rawPayload } = getDefaultResponseData(message, rawPayload, evType, groupInfo));
+ }
+ return { rawPayload, groups };
+};
- rawPayload.event_type = evType;
- rawPayload.user_id = message.userId;
- if (message.isRevenue) {
- // making the revenue payload
- rawPayload = createRevenuePayload(message, rawPayload);
- // deleting the properties price, product_id, quantity and revenue from event_properties since it is already in root
- if (rawPayload.event_properties) {
- delete rawPayload.event_properties.price;
- delete rawPayload.event_properties.product_id;
- delete rawPayload.event_properties.quantity;
- delete rawPayload.event_properties.revenue;
- }
- }
- groups = groupInfo && Object.assign(groupInfo);
+const buildPayloadForMobileChannel = (message, destination, payload) => {
+ if (!destination.Config.mapDeviceBrand) {
+ set(payload, 'device_brand', get(message, 'context.device.manufacturer'));
}
- return { endpoint, rawPayload, groups };
-}
-function responseBuilderSimple(
+ const deviceId = get(message, 'context.device.id');
+ const platform = get(message, 'context.device.type');
+ const advertId = get(message, 'context.device.advertisingId');
+
+ if (platform) {
+ if (isAppleFamily(platform)) {
+ set(payload, 'idfa', advertId);
+ set(payload, 'idfv', deviceId);
+ } else if (platform.toLowerCase() === 'android') {
+ set(payload, 'adid', advertId);
+ }
+ }
+};
+const nonAliasResponsebuilder = (
+ message,
+ payload,
+ destination,
+ evType,
+ groupInfo,
+ rootElementName,
+) => {
+ const respList = [];
+ const addOptions = 'options';
+ const response = defaultRequestConfig();
+ const groupResponse = defaultRequestConfig();
+ const endpoint = defaultEndpoint(destination.Config);
+ if (message.channel === 'mobile') {
+ buildPayloadForMobileChannel(message, destination, payload);
+ }
+ payload.time = new Date(getFieldValueFromMessage(message, 'timestamp')).getTime();
+
+ // send user_id only when present, for anonymous users not required
+ if (message.userId && message.userId !== null) {
+ payload.user_id = message.userId;
+ }
+ payload.session_id = getSessionId(message);
+
+ updateConfigProperty(
+ message,
+ payload,
+ mappingConfig[ConfigCategory.COMMON_CONFIG.name],
+ true,
+ destination.Config,
+ );
+
+ // we are not fixing the verson for android specifically any more because we've put a fix in iOS SDK
+ // for correct versionName
+ // ====================
+ // fixVersion(payload, message);
+
+ if (payload.user_properties) {
+ delete payload.user_properties.city;
+ delete payload.user_properties.country;
+ if (payload.user_properties.address) {
+ delete payload.user_properties.address.city;
+ delete payload.user_properties.address.country;
+ }
+ }
+
+ if (!payload.user_id && !payload.device_id) {
+ logger.debug('Either of user ID or device ID fields must be specified');
+ throw new InstrumentationError('Either of user ID or device ID fields must be specified');
+ }
+
+ payload.ip = getParsedIP(message);
+ payload.library = 'rudderstack';
+ payload = removeUndefinedAndNullValues(payload);
+ response.endpoint = endpoint;
+ response.method = defaultPostRequestConfig.requestMethod;
+ response.headers = {
+ 'Content-Type': JSON_MIME_TYPE,
+ };
+ response.userId = message.anonymousId;
+ response.body.JSON = {
+ api_key: destination.Config.apiKey,
+ [rootElementName]: [payload],
+ [addOptions]: addMinIdlength(),
+ };
+ respList.push(response);
+
+ // https://developers.amplitude.com/docs/group-identify-api
+ // Refer (1.), Rudder group call updates group propertiees.
+ if (evType === EventType.GROUP && groupInfo) {
+ groupResponse.method = defaultPostRequestConfig.requestMethod;
+ groupResponse.endpoint = groupEndpoint(destination.Config);
+ let groupPayload = cloneDeep(groupInfo);
+ groupResponse.userId = message.anonymousId;
+ groupPayload = removeUndefinedValues(groupPayload);
+ groupResponse.body.FORM = {
+ api_key: destination.Config.apiKey,
+ identification: [JSON.stringify(groupPayload)],
+ };
+ respList.push(groupResponse);
+ }
+ return respList;
+};
+
+const responseBuilderSimple = (
groupInfo,
rootElementName,
message,
evType,
mappingJson,
destination,
-) {
- let rawPayload = {};
- const addOptions = 'options';
+) => {
+ const rawPayload = {};
const respList = [];
- const response = defaultRequestConfig();
- const groupResponse = defaultRequestConfig();
const aliasResponse = defaultRequestConfig();
- let endpoint = defaultEndpoint(destination.Config);
-
if (
EventType.IDENTIFY && // If mapped to destination, Add externalId to traits
get(message, MappedToDestinationKey)
@@ -375,7 +495,7 @@ function responseBuilderSimple(
const oldKeys = Object.keys(campaign);
// appends utm_ prefix to all the keys of campaign object. For example the `name` key in campaign object will be changed to `utm_name`
oldKeys.forEach((oldKey) => {
- Object.assign(campaign, { [`utm_${oldKey}`]: campaign[oldKey] });
+ campaign[`utm_${oldKey}`] = campaign[oldKey];
delete campaign[oldKey];
});
@@ -390,14 +510,13 @@ function responseBuilderSimple(
};
const respData = getResponseData(evType, destination, rawPayload, message, groupInfo);
- const { groups } = respData;
- ({ endpoint, rawPayload } = respData);
+ const { groups, rawPayload: updatedRawPayload } = respData;
// for https://api.amplitude.com/2/httpapi , pass the "groups" key
// refer (1.) for passing "groups" for Rudder group call
// https://developers.amplitude.com/docs/http-api-v2#schemaevent
- set(rawPayload, 'groups', groups);
- let payload = removeUndefinedValues(rawPayload);
+ set(updatedRawPayload, 'groups', groups);
+ let payload = removeUndefinedValues(updatedRawPayload);
let unmapUserId;
if (evType === EventType.ALIAS) {
// By default (1.), Alias config file populates user_id and global_user_id
@@ -419,116 +538,65 @@ function responseBuilderSimple(
};
respList.push(aliasResponse);
} else {
- if (message.channel === 'mobile') {
- if (!destination.Config.mapDeviceBrand) {
- set(payload, 'device_brand', get(message, 'context.device.manufacturer'));
- }
-
- const deviceId = get(message, 'context.device.id');
- const platform = get(message, 'context.device.type');
- const advertId = get(message, 'context.device.advertisingId');
-
- if (platform) {
- if (isAppleFamily(platform)) {
- set(payload, 'idfa', advertId);
- set(payload, 'idfv', deviceId);
- } else if (platform.toLowerCase() === 'android') {
- set(payload, 'adid', advertId);
- }
- }
- }
-
- payload.time = new Date(getFieldValueFromMessage(message, 'timestamp')).getTime();
-
- // send user_id only when present, for anonymous users not required
- if (
- message.userId &&
- message.userId !== '' &&
- message.userId !== 'null' &&
- message.userId !== null
- ) {
- payload.user_id = message.userId;
- }
- payload.session_id = getSessionId(message);
-
- updateConfigProperty(
+ return nonAliasResponsebuilder(
message,
payload,
- mappingConfig[ConfigCategory.COMMON_CONFIG.name],
- true,
- destination.Config,
+ destination,
+ evType,
+ groupInfo,
+ rootElementName,
);
+ }
+ return respList;
+};
- // we are not fixing the verson for android specifically any more because we've put a fix in iOS SDK
- // for correct versionName
- // ====================
- // fixVersion(payload, message);
-
- if (payload.user_properties) {
- delete payload.user_properties.city;
- delete payload.user_properties.country;
- if (payload.user_properties.address) {
- delete payload.user_properties.address.city;
- delete payload.user_properties.address.country;
- }
- }
-
- if (!payload.user_id && !payload.device_id) {
- logger.debug('Either of user ID or device ID fields must be specified');
- throw new InstrumentationError('Either of user ID or device ID fields must be specified');
- }
-
- payload.ip = getParsedIP(message);
- payload.library = 'rudderstack';
- payload = removeUndefinedAndNullValues(payload);
- response.endpoint = endpoint;
- response.method = defaultPostRequestConfig.requestMethod;
- response.headers = {
- 'Content-Type': JSON_MIME_TYPE,
- };
- response.userId = message.anonymousId;
- response.body.JSON = {
- api_key: destination.Config.apiKey,
- [rootElementName]: [payload],
- [addOptions]: addMinIdlength(),
- };
- respList.push(response);
-
- // https://developers.amplitude.com/docs/group-identify-api
- // Refer (1.), Rudder group call updates group propertiees.
- if (evType === EventType.GROUP && groupInfo) {
- groupResponse.method = defaultPostRequestConfig.requestMethod;
- groupResponse.endpoint = groupEndpoint(destination.Config);
- let groupPayload = Object.assign(groupInfo);
- groupResponse.userId = message.anonymousId;
- groupPayload = removeUndefinedValues(groupPayload);
- groupResponse.body.FORM = {
- api_key: destination.Config.apiKey,
- identification: [JSON.stringify(groupPayload)],
- };
- respList.push(groupResponse);
+const getGroupInfo = (destination, groupInfo, groupTraits) => {
+ const { groupTypeTrait, groupValueTrait } = destination.Config;
+ if (groupTypeTrait && groupValueTrait) {
+ let updatedGroupInfo = { ...groupInfo };
+ const groupTypeValue = get(groupTraits, groupTypeTrait);
+ const groupNameValue = get(groupTraits, groupValueTrait);
+ // since the property updates on group at https://api2.amplitude.com/groupidentify
+ // expects a string group name and value , so error out if the keys are not primitive
+ // Note: This different for groups object at https://api.amplitude.com/2/httpapi where the
+ // group value can be array of strings as well.
+ if (
+ groupTypeValue &&
+ typeof groupTypeValue === 'string' &&
+ groupNameValue &&
+ (typeof groupNameValue === 'string' || typeof groupNameValue === 'number')
+ ) {
+ updatedGroupInfo = {};
+ updatedGroupInfo.group_type = groupTypeValue;
+ updatedGroupInfo.group_value = groupNameValue;
+ // passing the entire group traits without deleting the above keys
+ updatedGroupInfo.group_properties = groupTraits;
+ return updatedGroupInfo;
}
+ logger.debug('Group call parameters are not valid');
+ throw new InstrumentationError('Group call parameters are not valid');
}
-
- return respList;
-}
+ return groupInfo;
+};
// Generic process function which invokes specific handler functions depending on message type
// and event type where applicable
-function processSingleMessage(message, destination) {
+const processSingleMessage = (message, destination) => {
let payloadObjectName = 'events';
let evType;
- let groupTraits;
- let groupTypeTrait;
- let groupValueTrait;
// It is expected that Rudder alias. identify group calls won't have this set
// To be used for track/page calls to associate the event to a group in AM
let groupInfo = get(message, 'integrations.Amplitude.groups') || undefined;
let category = ConfigCategory.DEFAULT;
-
+ const { name, event, properties } = message;
const messageType = message.type.toLowerCase();
const CATEGORY_KEY = 'properties.category';
- const { useUserDefinedPageEventName, userProvidedPageEventString } = destination.Config;
+ const {
+ useUserDefinedPageEventName,
+ userProvidedPageEventString,
+ useUserDefinedScreenEventName,
+ userProvidedScreenEventString,
+ } = destination.Config;
switch (messageType) {
case EventType.IDENTIFY:
payloadObjectName = 'events'; // identify same as events
@@ -545,27 +613,44 @@ function processSingleMessage(message, destination) {
.trim();
evType =
userProvidedPageEventString.trim() === ''
- ? message.name
+ ? name
: userProvidedPageEventString
.trim()
.replaceAll(/{{([^{}]+)}}/g, get(message, getMessagePath));
} else {
- evType = `Viewed ${message.name || get(message, CATEGORY_KEY) || ''} Page`;
+ evType = `Viewed ${name || get(message, CATEGORY_KEY) || ''} Page`;
}
-
message.properties = {
- ...message.properties,
- name: message.name || get(message, CATEGORY_KEY),
+ ...properties,
+ name: name || get(message, CATEGORY_KEY),
};
category = ConfigCategory.PAGE;
break;
case EventType.SCREEN:
- evType = `Viewed ${message.name || message.event || get(message, CATEGORY_KEY) || ''} Screen`;
- message.properties = {
- ...message.properties,
- name: message.name || message.event || get(message, CATEGORY_KEY),
- };
- category = ConfigCategory.SCREEN;
+ {
+ const { eventType, updatedProperties } = getScreenevTypeAndUpdatedProperties(
+ message,
+ CATEGORY_KEY,
+ );
+ let customScreenEv = '';
+ if (useUserDefinedScreenEventName) {
+ const getMessagePath = userProvidedScreenEventString
+ .substring(
+ userProvidedScreenEventString.indexOf('{') + 2,
+ userProvidedScreenEventString.indexOf('}'),
+ )
+ .trim();
+ customScreenEv =
+ userProvidedScreenEventString.trim() === ''
+ ? name
+ : userProvidedScreenEventString
+ .trim()
+ .replaceAll(/{{([^{}]+)}}/g, get(message, getMessagePath));
+ }
+ evType = useUserDefinedScreenEventName ? customScreenEv : eventType;
+ message.properties = updatedProperties;
+ category = ConfigCategory.SCREEN;
+ }
break;
case EventType.GROUP:
evType = 'group';
@@ -574,34 +659,13 @@ function processSingleMessage(message, destination) {
// read from group traits from message
// groupTraits => top level "traits" for JS SDK
// groupTraits => "context.traits" for mobile SDKs
- groupTraits = getFieldValueFromMessage(message, 'groupTraits');
+ groupInfo = getGroupInfo(
+ destination,
+ groupInfo,
+ getFieldValueFromMessage(message, 'groupTraits'),
+ );
// read destination config related group settings
// https://developers.amplitude.com/docs/group-identify-api
- groupTypeTrait = get(destination, 'Config.groupTypeTrait');
- groupValueTrait = get(destination, 'Config.groupValueTrait');
- if (groupTypeTrait && groupValueTrait) {
- const groupTypeValue = get(groupTraits, groupTypeTrait);
- const groupNameValue = get(groupTraits, groupValueTrait);
- // since the property updates on group at https://api2.amplitude.com/groupidentify
- // expects a string group name and value , so error out if the keys are not primitive
- // Note: This different for groups object at https://api.amplitude.com/2/httpapi where the
- // group value can be array of strings as well.
- if (
- groupTypeValue &&
- typeof groupTypeValue === 'string' &&
- groupNameValue &&
- (typeof groupNameValue === 'string' || typeof groupNameValue === 'number')
- ) {
- groupInfo = {};
- groupInfo.group_type = groupTypeValue;
- groupInfo.group_value = groupNameValue;
- // passing the entire group traits without deleting the above keys
- groupInfo.group_properties = groupTraits;
- } else {
- logger.debug('Group call parameters are not valid');
- throw new InstrumentationError('Group call parameters are not valid');
- }
- }
break;
case EventType.ALIAS:
evType = 'alias';
@@ -611,21 +675,19 @@ function processSingleMessage(message, destination) {
category = ConfigCategory.ALIAS;
break;
case EventType.TRACK:
- evType = message.event;
+ evType = event;
if (!isDefinedAndNotNullAndNotEmpty(evType)) {
- throw new InstrumentationError('message type not defined');
+ throw new InstrumentationError('Event not present. Please send event field');
}
if (
- message.properties &&
- isDefinedAndNotNull(message.properties.revenue) &&
- isDefinedAndNotNull(message.properties.revenue_type)
+ properties &&
+ isDefinedAndNotNull(properties?.revenue) &&
+ isDefinedAndNotNull(properties?.revenue_type)
) {
// if properties has revenue and revenue_type fields
// consider the event as revenue event directly
category = ConfigCategory.REVENUE;
- break;
}
-
break;
default:
logger.debug('could not determine type');
@@ -639,10 +701,10 @@ function processSingleMessage(message, destination) {
mappingConfig[category.name],
destination,
);
-}
+};
-function createProductPurchasedEvent(message, destination, product, counter) {
- const eventClonePurchaseProduct = JSON.parse(JSON.stringify(message));
+const createProductPurchasedEvent = (message, destination, product, counter) => {
+ const eventClonePurchaseProduct = cloneDeep(message);
eventClonePurchaseProduct.event = 'Product Purchased';
// In product purchased event event properties consists of the details of each product
@@ -654,17 +716,17 @@ function createProductPurchasedEvent(message, destination, product, counter) {
// need to modify the message id of each newly created event, as it is mapped to insert_id and that is used by Amplitude for dedup.
eventClonePurchaseProduct.messageId = `${message.messageId}-${counter}`;
return eventClonePurchaseProduct;
-}
+};
-function isProductArrayInPayload(message) {
+const isProductArrayInPayload = (message) => {
const isProductArray =
- (message.properties.products &&
+ (message.properties?.products &&
Array.isArray(message.properties.products) &&
message.properties.products.length > 0) === true;
return isProductArray;
-}
+};
-function getProductPurchasedEvents(message, destination) {
+const getProductPurchasedEvents = (message, destination) => {
const productPurchasedEvents = [];
if (isProductArrayInPayload(message)) {
let counter = 0;
@@ -682,16 +744,16 @@ function getProductPurchasedEvents(message, destination) {
});
}
return productPurchasedEvents;
-}
+};
-function trackRevenueEvent(message, destination) {
+const trackRevenueEvent = (message, destination) => {
let sendEvents = [];
- const originalEvent = JSON.parse(JSON.stringify(message));
+ const originalEvent = cloneDeep(message);
if (destination.Config.trackProductsOnce === false) {
if (isProductArrayInPayload(message)) {
// when trackProductsOnce false no product array present
- delete originalEvent.properties.products;
+ delete originalEvent.properties?.products;
} else {
// when product array is not there in payload, will track the revenue of the original event.
originalEvent.isRevenue = true;
@@ -719,16 +781,19 @@ function trackRevenueEvent(message, destination) {
}
}
return sendEvents;
-}
+};
-function process(event) {
+const process = (event) => {
const respList = [];
const { message, destination } = event;
- const messageType = message.type.toLowerCase();
+ const messageType = message.type?.toLowerCase();
const toSendEvents = [];
+ if (!destination?.Config?.apiKey) {
+ throw new ConfigurationError('No API Key is Found. Please Configure API key from dashbaord');
+ }
if (messageType === EventType.TRACK) {
const { properties } = message;
- if (properties && isDefinedAndNotNull(properties.revenue)) {
+ if (isDefinedAndNotNull(properties?.revenue)) {
const revenueEvents = trackRevenueEvent(message, destination);
revenueEvents.forEach((revenueEvent) => {
toSendEvents.push(revenueEvent);
@@ -744,9 +809,9 @@ function process(event) {
respList.push(...processSingleMessage(sendEvent, destination));
});
return respList;
-}
+};
-function getBatchEvents(message, destination, metadata, batchEventResponse) {
+const getBatchEvents = (message, destination, metadata, batchEventResponse) => {
let batchComplete = false;
const batchEventArray = get(batchEventResponse, 'batchedRequest.body.JSON.events') || [];
const batchEventJobs = get(batchEventResponse, 'metadata') || [];
@@ -760,18 +825,19 @@ function getBatchEvents(message, destination, metadata, batchEventResponse) {
: incomingMessageEvent;
const userId = incomingMessageEvent.user_id;
- // delete the userId as it is less than 5 as AM is giving 400
- // that is not a documented behviour where it states if either deviceid or userid is present
- // batch request won't return 400
- // {
- // "code": 400,
- // "events_with_invalid_id_lengths": {
- // "user_id": [
- // 0
- // ]
- // },
- // "error": "Invalid id length for user_id or device_id"
- // }
+ /* delete the userId as it is less than 5 as AM is giving 400
+ that is not a documented behviour where it states if either deviceid or userid is present
+ batch request won't return 400
+ {
+ "code": 400,
+ "events_with_invalid_id_lengths": {
+ "user_id": [
+ 0
+ ]
+ },
+ "error": "Invalid id length for user_id or device_id"
+ }
+ */
if (batchEventsWithUserIdLengthLowerThanFive && userId && userId.length < 5) {
delete incomingMessageEvent.user_id;
}
@@ -782,10 +848,7 @@ function getBatchEvents(message, destination, metadata, batchEventResponse) {
if (batchEventArray.length === 0) {
if (JSON.stringify(incomingMessageJSON).length < AMBatchSizeLimit) {
delete message.body.JSON.options;
- batchEventResponse = Object.assign(batchEventResponse, {
- batchedRequest: message,
- });
-
+ batchEventResponse.batchedRequest = message;
set(batchEventResponse, 'batchedRequest.endpoint', BATCH_ENDPOINT);
batchEventResponse.metadata = [metadata];
}
@@ -807,16 +870,16 @@ function getBatchEvents(message, destination, metadata, batchEventResponse) {
}
}
return batchComplete;
-}
+};
-function batch(destEvents) {
+const getFirstEvent = (messageEvent) =>
+ messageEvent && Array.isArray(messageEvent) ? messageEvent[0] : messageEvent;
+const batch = (destEvents) => {
const respList = [];
let batchEventResponse = defaultBatchRequestConfig();
let response;
let isBatchComplete;
let jsonBody;
- let userId;
- let deviceId;
let messageEvent;
let destinationObject;
destEvents.forEach((ev) => {
@@ -824,18 +887,11 @@ function batch(destEvents) {
destinationObject = { ...destination };
jsonBody = get(message, 'body.JSON');
messageEvent = get(message, EVENTS_KEY_PATH);
- userId =
- messageEvent && Array.isArray(messageEvent)
- ? messageEvent[0].user_id
- : messageEvent
- ? messageEvent.user_id
- : undefined;
- deviceId =
- messageEvent && Array.isArray(messageEvent)
- ? messageEvent[0].device_id
- : messageEvent
- ? messageEvent.device_id
- : undefined;
+ const firstEvent = getFirstEvent(messageEvent);
+
+ const userId = firstEvent?.user_id ?? undefined;
+ const deviceId = firstEvent?.device_id ?? undefined;
+
// this case shold not happen and should be filtered already
// by the first pass of single event transformation
if (messageEvent && !userId && !deviceId) {
@@ -851,16 +907,13 @@ function batch(destEvents) {
respList.push(errorResponse);
return;
}
- // check if not a JSON body or (userId length < 5 && batchEventsWithUserIdLengthLowerThanFive is false) or
- // (batchEventsWithUserIdLengthLowerThanFive is true and userId is less than 5 but deviceId not present)
- // , send the event as is after batching
- if (
- Object.keys(jsonBody).length === 0 ||
- (!batchEventsWithUserIdLengthLowerThanFive && userId && userId.length < 5) ||
- (batchEventsWithUserIdLengthLowerThanFive && userId && userId.length < 5 && !deviceId)
- ) {
+ /* check if not a JSON body or (userId length < 5 && batchEventsWithUserIdLengthLowerThanFive is false) or
+ (batchEventsWithUserIdLengthLowerThanFive is true and userId is less than 5 but deviceId not present),
+ send the event as is after batching
+ */
+ if (checkForJSONAndUserIdLengthAndDeviceId(jsonBody, userId, deviceId)) {
response = defaultBatchRequestConfig();
- response = Object.assign(response, { batchedRequest: message });
+ response.batchedRequest = message;
response.metadata = [metadata];
response.destination = destinationObject;
respList.push(response);
@@ -868,8 +921,9 @@ function batch(destEvents) {
// check if the event can be pushed to an existing batch
isBatchComplete = getBatchEvents(message, destination, metadata, batchEventResponse);
if (isBatchComplete) {
- // if the batch is already complete, push it to response list
- // and push the event to a new batch
+ /* if the batch is already complete, push it to response list
+ and push the event to a new batch
+ */
batchEventResponse.destination = destinationObject;
respList.push({ ...batchEventResponse });
batchEventResponse = defaultBatchRequestConfig();
@@ -879,12 +933,12 @@ function batch(destEvents) {
}
});
// if there is some unfinished batch push it to response list
- if (isBatchComplete !== undefined && isBatchComplete === false) {
+ if (isDefinedAndNotNull(isBatchComplete) && !isBatchComplete) {
batchEventResponse.destination = destinationObject;
respList.push(batchEventResponse);
}
return respList;
-}
+};
const processRouterDest = async (inputs, reqMetadata) => {
const respList = await simpleProcessRouterDest(inputs, process, reqMetadata);
diff --git a/src/v0/destinations/am/utils.js b/src/v0/destinations/am/utils.js
index 33040c2146b..b9925c20d83 100644
--- a/src/v0/destinations/am/utils.js
+++ b/src/v0/destinations/am/utils.js
@@ -13,65 +13,65 @@ const uaParser = require('@amplitude/ua-parser-js');
const logger = require('../../../logger');
const { isDefinedAndNotNull } = require('../../util');
-function getInfoFromUA(path, payload, defaultVal) {
+const getInfoFromUA = (path, payload, defaultVal) => {
const ua = get(payload, 'context.userAgent');
const devInfo = ua ? uaParser(ua) : {};
return get(devInfo, path) || defaultVal;
-}
+};
-function getOSName(payload, sourceKey) {
+const getOSName = (payload, sourceKey) => {
const payloadVal = get(payload, sourceKey);
if (payload.channel && payload.channel.toLowerCase() === 'web') {
return getInfoFromUA('browser.name', payload, payloadVal);
}
return payloadVal;
-}
+};
-function getOSVersion(payload, sourceKey) {
+const getOSVersion = (payload, sourceKey) => {
const payloadVal = get(payload, sourceKey);
if (payload.channel && payload.channel.toLowerCase() === 'web') {
return getInfoFromUA('browser.version', payload, payloadVal);
}
return payloadVal;
-}
+};
-function getDeviceModel(payload, sourceKey) {
+const getDeviceModel = (payload, sourceKey) => {
const payloadVal = get(payload, sourceKey);
if (payload.channel && payload.channel.toLowerCase() === 'web') {
return getInfoFromUA('os.name', payload, payloadVal);
}
return payloadVal;
-}
+};
-function getDeviceManufacturer(payload, sourceKey) {
+const getDeviceManufacturer = (payload, sourceKey) => {
const payloadVal = get(payload, sourceKey);
if (payload.channel && payload.channel.toLowerCase() === 'web') {
return getInfoFromUA('device.vendor', payload, payloadVal);
}
return payloadVal;
-}
+};
-function getPlatform(payload, sourceKey) {
+const getPlatform = (payload, sourceKey) => {
const payloadVal = get(payload, sourceKey);
return payload.channel
? payload.channel.toLowerCase() === 'web'
? 'Web'
: payloadVal
: payloadVal;
-}
+};
-function getBrand(payload, sourceKey, Config) {
+const getBrand = (payload, sourceKey, Config) => {
if (Config.mapDeviceBrand) {
const payloadVal = get(payload, sourceKey);
return payloadVal;
}
return undefined;
-}
+};
-function getEventId(payload, sourceKey) {
+const getEventId = (payload, sourceKey) => {
const eventId = get(payload, sourceKey);
if (isDefinedAndNotNull(eventId)) {
@@ -80,7 +80,7 @@ function getEventId(payload, sourceKey) {
} else return eventId;
}
return undefined;
-}
+};
module.exports = {
getOSName,
diff --git a/src/v0/destinations/appcues/transform.js b/src/v0/destinations/appcues/transform.js
index 095256cc4e7..57a54bce33e 100644
--- a/src/v0/destinations/appcues/transform.js
+++ b/src/v0/destinations/appcues/transform.js
@@ -1,4 +1,5 @@
/* eslint-disable no-underscore-dangle */
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -9,7 +10,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const { InstrumentationError } = require('../../util/errorTypes');
const { ConfigCategory, mappingConfig, getEndpoint } = require('./config');
diff --git a/src/v0/destinations/attentive_tag/transform.js b/src/v0/destinations/attentive_tag/transform.js
index 231beec1434..fa05eb6c212 100644
--- a/src/v0/destinations/attentive_tag/transform.js
+++ b/src/v0/destinations/attentive_tag/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ConfigCategory, mappingConfig, BASE_URL } = require('./config');
const {
@@ -18,7 +19,6 @@ const {
getPropertiesKeyValidation,
validateTimestamp,
} = require('./util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, apiKey, endpoint) => {
diff --git a/src/v0/destinations/attentive_tag/util.js b/src/v0/destinations/attentive_tag/util.js
index 890f73cdc9f..c96d03028f2 100644
--- a/src/v0/destinations/attentive_tag/util.js
+++ b/src/v0/destinations/attentive_tag/util.js
@@ -1,13 +1,13 @@
/* eslint-disable no-restricted-syntax */
const get = require('get-value');
const moment = require('moment');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
constructPayload,
isDefinedAndNotNull,
getDestinationExternalID,
isDefinedAndNotNullAndNotEmpty,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { mappingConfig, ConfigCategory } = require('./config');
/**
diff --git a/src/v0/destinations/attribution/transform.js b/src/v0/destinations/attribution/transform.js
index 712f3e5e5d2..fa42a6238a0 100644
--- a/src/v0/destinations/attribution/transform.js
+++ b/src/v0/destinations/attribution/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { batchEndpoint } = require('./config');
const {
defaultPostRequestConfig,
@@ -5,7 +6,6 @@ const {
removeUndefinedAndNullValues,
getFieldValueFromMessage,
} = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilderSimple(payload, attributionConfig) {
diff --git a/src/v0/destinations/autopilot/transform.js b/src/v0/destinations/autopilot/transform.js
index e0fe9aa400e..e4a2c408af5 100644
--- a/src/v0/destinations/autopilot/transform.js
+++ b/src/v0/destinations/autopilot/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
@@ -9,7 +10,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const identifyFields = [
diff --git a/src/v0/destinations/awin/transform.js b/src/v0/destinations/awin/transform.js
index f6070fccd5c..49a115c1ffe 100644
--- a/src/v0/destinations/awin/transform.js
+++ b/src/v0/destinations/awin/transform.js
@@ -1,8 +1,8 @@
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { BASE_URL, ConfigCategory, mappingConfig } = require('./config');
const { defaultRequestConfig, constructPayload, simpleProcessRouterDest } = require('../../util');
const { getParams } = require('./utils');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const responseBuilder = (message, { Config }) => {
const { advertiserId, eventsToTrack } = Config;
diff --git a/src/v0/destinations/azure_event_hub/transform.js b/src/v0/destinations/azure_event_hub/transform.js
index 6200e32ce72..98180b55b42 100644
--- a/src/v0/destinations/azure_event_hub/transform.js
+++ b/src/v0/destinations/azure_event_hub/transform.js
@@ -1,6 +1,5 @@
const cloneDeep = require('lodash/cloneDeep');
const { getIntegrationsObj } = require('../../util');
-// const { InstrumentationError } = require("../../util/errorTypes");
function process(event) {
const { message, destination } = event;
diff --git a/src/v0/destinations/blueshift/transform.js b/src/v0/destinations/blueshift/transform.js
index b79af327d25..cdfbfe32e14 100644
--- a/src/v0/destinations/blueshift/transform.js
+++ b/src/v0/destinations/blueshift/transform.js
@@ -1,3 +1,8 @@
+const {
+ TransformationError,
+ InstrumentationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
constructPayload,
@@ -10,11 +15,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const {
- TransformationError,
- InstrumentationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const {
MAPPING_CONFIG,
diff --git a/src/v0/destinations/bqstream/transform.js b/src/v0/destinations/bqstream/transform.js
index 4db1856535c..598a97946d3 100644
--- a/src/v0/destinations/bqstream/transform.js
+++ b/src/v0/destinations/bqstream/transform.js
@@ -1,14 +1,16 @@
/* eslint-disable no-console */
-const _ = require('lodash');
+const lodash = require('lodash');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultBatchRequestConfig,
getSuccessRespEvents,
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
+ groupEventsByType,
} = require('../../util');
const { MAX_ROWS_PER_REQUEST, DESTINATION } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
+const { getRearrangedEvents } = require('./util');
const getInsertIdColValue = (properties, insertIdCol) => {
if (
@@ -50,11 +52,11 @@ const process = (event) => {
};
};
-const batchEvents = (eventsChunk) => {
+const batchEachUserSuccessEvents = (eventsChunk) => {
const batchedResponseList = [];
// arrayChunks = [[e1,e2, ..batchSize], [e1,e2, ..batchSize], ...]
- const arrayChunks = _.chunk(eventsChunk, MAX_ROWS_PER_REQUEST);
+ const arrayChunks = lodash.chunk(eventsChunk, MAX_ROWS_PER_REQUEST);
// list of chunks [ [..], [..] ]
arrayChunks.forEach((chunk) => {
@@ -68,7 +70,7 @@ const batchEvents = (eventsChunk) => {
chunk.forEach((ev) => {
// Pixel code must be added above "batch": [..]
batchResponseList.push(ev.message.properties);
- metadata.push(ev.metadata);
+ metadata.push(ev.metadata[0]);
});
batchEventResponse.batchedRequest = {
@@ -97,26 +99,23 @@ const batchEvents = (eventsChunk) => {
return batchedResponseList;
};
-const processRouterDest = (inputs) => {
- const errorRespEvents = checkInvalidRtTfEvents(inputs, DESTINATION);
- if (errorRespEvents.length > 0) {
- return errorRespEvents;
- }
-
- const eventsChunk = []; // temporary variable to divide payload into chunks
- const errorRespList = [];
-
- inputs.forEach((event) => {
+const processEachTypedEventList = (
+ typedEventList,
+ eachTypeSuccessEventList,
+ eachTypeErrorEventsList,
+) => {
+ typedEventList.forEach((event) => {
try {
if (event.message.statusCode) {
// already transformed event
- eventsChunk.push(event);
+ eachTypeSuccessEventList.push(event);
} else {
// if not transformed
- let response = process(event);
- response = Array.isArray(response) ? response : [response];
- response.forEach((res) => {
- eventsChunk.push({
+ const response = process(event);
+ const transformedEvents = Array.isArray(response) ? response : [response];
+
+ transformedEvents.forEach((res) => {
+ eachTypeSuccessEventList.push({
message: res,
metadata: event.metadata,
destination: event.destination,
@@ -124,16 +123,44 @@ const processRouterDest = (inputs) => {
});
}
} catch (error) {
- const errRespEvent = handleRtTfSingleEventError(event, error, DESTINATION);
- errorRespList.push(errRespEvent);
+ const eachUserErrorEvent = handleRtTfSingleEventError(event, error, DESTINATION);
+ eachTypeErrorEventsList.push(eachUserErrorEvent);
}
});
+};
- let batchedResponseList = [];
- if (eventsChunk.length > 0) {
- batchedResponseList = batchEvents(eventsChunk);
+const processRouterDest = (inputs) => {
+ const errorRespEvents = checkInvalidRtTfEvents(inputs, DESTINATION);
+ if (errorRespEvents.length > 0) {
+ return errorRespEvents;
}
- return [...batchedResponseList, ...errorRespList];
+ const finalResp = [];
+
+ const batchedEvents = groupEventsByType(inputs);
+
+ batchedEvents.forEach((typedEventList) => {
+ const eachTypeSuccessEventList = []; // list of events that are transformed successfully
+ const eachTypeErrorEventsList = []; // list of events that are errored out
+ processEachTypedEventList(typedEventList, eachTypeSuccessEventList, eachTypeErrorEventsList);
+
+ const orderedEventsList = getRearrangedEvents(
+ eachTypeSuccessEventList,
+ eachTypeErrorEventsList,
+ );
+
+ orderedEventsList.forEach((eventList) => {
+ // no error event list will have more than one items in the list
+ if (eventList[0].error) {
+ finalResp.push([...eventList]);
+ } else {
+ // batch the successful events
+ const eachTypeBatchedResponse = batchEachUserSuccessEvents(eventList);
+ finalResp.push([...eachTypeBatchedResponse]);
+ }
+ });
+ });
+
+ return finalResp.flat();
};
module.exports = { process, processRouterDest };
diff --git a/src/v0/destinations/bqstream/util.js b/src/v0/destinations/bqstream/util.js
index cc3aba78b2e..4fa926e54e5 100644
--- a/src/v0/destinations/bqstream/util.js
+++ b/src/v0/destinations/bqstream/util.js
@@ -1,146 +1,84 @@
/* eslint-disable no-param-reassign */
-const getValue = require('get-value');
-const {
- getDynamicErrorType,
- processAxiosResponse,
-} = require('../../../adapters/utils/networkUtils');
-const { DISABLE_DEST, REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
-const { isHttpStatusSuccess } = require('../../util');
-const { proxyRequest } = require('../../../adapters/network');
-const { UnhandledStatusCodeError, NetworkError, AbortedError } = require('../../util/errorTypes');
-const tags = require('../../util/tags');
-
-const DESTINATION_NAME = 'bqstream';
-
-const trimBqStreamResponse = (response) => ({
- code: getValue(response, 'response.response.data.error.code'), // data.error.status which contains PERMISSION_DENIED
- status: getValue(response, 'response.response.status'),
- statusText: getValue(response, 'response.response.statusText'),
- headers: getValue(response, 'response.response.headers'),
- data: getValue(response, 'response.response.data'), // Incase of errors, this contains error data
- success: getValue(response, 'suceess'),
-});
+const { isDefinedAndNotNull } = require('../../util');
/**
- * Obtains the Destination OAuth Error Category based on the error code obtained from destination
+ * Optimizes the error response by merging the metadata of the same error type and adding it to the result array.
*
- * - If an error code is such that the user will not be allowed inside the destination,
- * such error codes fall under DISABLE_DESTINATION
- * - If an error code is such that upon refresh we can get a new token which can be used to send event,
- * such error codes fall under REFRESH_TOKEN category
- * - If an error code doesn't fall under both categories, we can return an empty string
- * @param {string} errorCategory - The error code obtained from the destination
- * @returns Destination OAuth Error Category
+ * @param {Object} item - An object representing an error event with properties like `error`, `jobId`, and `metadata`.
+ * @param {Map} errorMap - A Map object to store the error events and their metadata.
+ * @param {Array} resultArray - An array to store the optimized error response.
+ * @returns {void}
*/
-const getDestAuthCategory = (errorCategory) => {
- switch (errorCategory) {
- case 'PERMISSION_DENIED':
- return DISABLE_DEST;
- case 'UNAUTHENTICATED':
- return REFRESH_TOKEN;
- default:
- return '';
+const optimizeErrorResponse = (item, errorMap, resultArray) => {
+ const currentError = item.error;
+ if (errorMap.has(currentError)) {
+ // If the error already exists in the map, merge the metadata
+ const existingErrDetails = errorMap.get(currentError);
+ existingErrDetails.metadata.push(...item.metadata);
+ } else {
+ // Otherwise, add it to the map
+ errorMap.set(currentError, { ...item });
+ resultArray.push([errorMap.get(currentError)]);
}
};
-const destToRudderStatusMap = {
- 403: {
- rateLimitExceeded: 429,
- default: 400,
- },
- 400: {
- tableUnavailable: 500,
- default: 400,
- },
- 500: { default: 500 },
- 503: { default: 500 },
- 401: { default: 500 },
- 404: { default: 400 },
- 501: { default: 400 },
+const convertMetadataToArray = (eventList) => {
+ const processedEvents = eventList.map((event) => ({
+ ...event,
+ metadata: Array.isArray(event.metadata) ? event.metadata : [event.metadata],
+ }));
+ return processedEvents;
};
-const getStatusAndCategory = (dresponse, status) => {
- const authErrorCategory = getDestAuthCategory(dresponse.error.status);
- const reason =
- dresponse.error.errors &&
- Array.isArray(dresponse.error.errors) &&
- dresponse.error.errors.length > 0 &&
- dresponse.error.errors[0].reason;
+/**
+ * Formats a list of error events into a composite response.
+ *
+ * @param {Array} errorEvents - A list of error events, where each event can have an `error` property and a `metadata` array.
+ * @returns {Array} The formatted composite response, where each element is an array containing the error details.
+ */
+const formatCompositeResponse = (errorEvents) => {
+ const resultArray = [];
+ const errorMap = new Map();
- const trStatus = destToRudderStatusMap[status]
- ? destToRudderStatusMap[status][reason] || destToRudderStatusMap[status].default
- : 500;
- return { status: trStatus, authErrorCategory };
+ // eslint-disable-next-line no-restricted-syntax
+ for (const item of errorEvents) {
+ if (isDefinedAndNotNull(item.error)) {
+ optimizeErrorResponse(item, errorMap, resultArray);
+ }
+ }
+ return resultArray;
};
/**
- * This class actually handles the response for BigQuery Stream API
- * It can also be used for any Google related API but an API related handling has to be done separately
- *
- * Here we are only trying to handle OAuth related error(s)
- * Any destination specific error handling has to be done in their own way
- *
- * Reference doc for OAuth Errors
- * 1. https://cloud.google.com/apigee/docs/api-platform/reference/policies/oauth-http-status-code-reference
- * 2. https://cloud.google.com/bigquery/docs/error-messages
- *
- * Summary:
- * Abortable -> 403, 501, 400
- * Retryable -> 5[0-9][02-9], 401(UNAUTHENTICATED)
- * "Special Cases":
- * status=200, resp.insertErrors.length > 0 === Failure
- * 403 => AccessDenied -> DISABLE_DEST, other 403 => Just abort
+ * Rearranges the events based on their success or error status.
+ * If there are no successful events, it groups error events with the same error and their metadata.
+ * If there are successful events, it returns the batched response of successful events.
*
+ * @param {Array} successEventList - An array of objects representing successful events.
+ * Each object should have an `id` and `metadata` property.
+ * @param {Array} errorEventList - An array of objects representing error events.
+ * Each object should have an `id`, `metadata`, and `error` property.
+ * @returns {Array} - An array of rearranged events.
*/
-const processResponse = ({ dresponse, status } = {}) => {
- const isSuccess =
- !dresponse.error &&
- isHttpStatusSuccess(status) &&
- (!dresponse.insertErrors || (dresponse.insertErrors && dresponse.insertErrors.length === 0));
+const getRearrangedEvents = (successEventList, errorEventList) => {
+ // Convert 'metadata' to an array if it's not already
+ const processedSuccessfulEvents = convertMetadataToArray(successEventList);
+ const processedErrorEvents = convertMetadataToArray(errorEventList);
- if (!isSuccess) {
- if (dresponse.error) {
- const { status: trStatus } = getStatusAndCategory(dresponse, status);
- throw new NetworkError(
- dresponse.error.message || `Request failed for ${DESTINATION_NAME} with status: ${status}`,
- trStatus,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(trStatus),
- },
- dresponse,
- );
- } else if (dresponse.insertErrors && dresponse.insertErrors.length > 0) {
- const temp = trimBqStreamResponse(dresponse);
- throw new AbortedError(
- 'Problem during insert operation',
- 400,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(temp.status || 400),
- },
- temp,
- getDestAuthCategory(temp.code),
- );
- }
- throw new UnhandledStatusCodeError('Unhandled error type while sending to destination');
+ // if there are no error events, then return the batched response
+ if (errorEventList.length === 0) {
+ return [processedSuccessfulEvents];
+ }
+ // if there are no batched response, then return the error events
+ if (successEventList.length === 0) {
+ return formatCompositeResponse(processedErrorEvents);
}
-};
-const responseHandler = (respTransformPayload) => {
- const { response, status } = respTransformPayload;
- processResponse({
- dresponse: response,
- status,
- });
- return {
- status,
- destinationResponse: response,
- message: 'Request Processed Successfully',
- };
+ // if there are both batched response and error events, then order them
+ const combinedTransformedEventList = [
+ [...processedSuccessfulEvents],
+ ...formatCompositeResponse(processedErrorEvents),
+ ];
+ return combinedTransformedEventList;
};
-function networkHandler() {
- this.responseHandler = responseHandler;
- this.proxy = proxyRequest;
- this.processAxiosResponse = processAxiosResponse;
-}
-
-module.exports = { networkHandler };
+module.exports = { getRearrangedEvents };
diff --git a/src/v0/destinations/bqstream/util.test.js b/src/v0/destinations/bqstream/util.test.js
new file mode 100644
index 00000000000..c7635772ac7
--- /dev/null
+++ b/src/v0/destinations/bqstream/util.test.js
@@ -0,0 +1,267 @@
+const { getRearrangedEvents } = require('./util');
+
+describe('getRearrangedEvents', () => {
+ // Tests that the function returns an array of transformed events when there are no error events
+ it('should return an array of transformed events when all events are track and successfully transformed', () => {
+ const eachUserSuccessEventslist = [
+ { message: { type: 'track' }, metadata: { jobId: 1 } },
+ { message: { type: 'track' }, metadata: { jobId: 3 } },
+ { message: { type: 'track' }, metadata: { jobId: 5 } },
+ ];
+ const eachUserErrorEventsList = [];
+ const expected = [
+ [
+ { message: { type: 'track' }, metadata: [{ jobId: 1 }] },
+ { message: { type: 'track' }, metadata: [{ jobId: 3 }] },
+ { message: { type: 'track' }, metadata: [{ jobId: 5 }] },
+ ],
+ ];
+ const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList);
+ expect(result).toEqual(expected);
+ });
+
+ // Tests that the function returns an empty array when both input arrays are empty
+ it('should return an empty array when both input arrays are empty', () => {
+ const eachUserSuccessEventslist = [];
+ const eachUserErrorEventsList = [];
+ const expected = [[]];
+ const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList);
+ expect(result).toEqual(expected);
+ });
+
+ // Tests that the function returns an array with only error events when all events are erroneous
+ it('should return an array with only error events when all events are erroneous', () => {
+ const eachUserSuccessEventslist = [];
+ const eachUserErrorEventsList = [
+ {
+ batched: false,
+ destination: {},
+ error: 'Message Type not supported: identify',
+ metadata: [{ jobId: 3, userId: 'user12345' }],
+ },
+ {
+ batched: false,
+ destination: {},
+ error: 'Message Type not supported: identify',
+ metadata: [{ jobId: 4, userId: 'user12345' }],
+ },
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 5, userId: 'user12345' }],
+ },
+ ];
+ const expected = [
+ [
+ {
+ batched: false,
+ destination: {},
+ error: 'Message Type not supported: identify',
+ metadata: [
+ { jobId: 3, userId: 'user12345' },
+ { jobId: 4, userId: 'user12345' },
+ ],
+ },
+ ],
+ [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [
+ {
+ jobId: 5,
+ userId: 'user12345',
+ },
+ ],
+ },
+ ],
+ ];
+ const result = getRearrangedEvents(eachUserSuccessEventslist, eachUserErrorEventsList);
+ expect(result).toEqual(expected);
+ });
+ // Tests that the function does not return an ordered array of events with both successful and erroneous events
+ it('case 1 : 1--> success, 2 --> fail, 3 --> success, 4 --> fail, 5 --> success', () => {
+ const errorEventsList = [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 2, userId: 'user12345' }],
+ },
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 4, userId: 'user12345' }],
+ },
+ ];
+ const successEventslist = [
+ { message: { type: 'track' }, metadata: { jobId: 1 } },
+ { message: { type: 'track' }, metadata: { jobId: 3 } },
+ { message: { type: 'track' }, metadata: { jobId: 5 } },
+ ];
+ const expected = [
+ [
+ { message: { type: 'track' }, metadata: [{ jobId: 1 }] },
+ { message: { type: 'track' }, metadata: [{ jobId: 3 }] },
+ { message: { type: 'track' }, metadata: [{ jobId: 5 }] },
+ ],
+ [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [
+ { jobId: 2, userId: 'user12345' },
+ { jobId: 4, userId: 'user12345' },
+ ],
+ },
+ ],
+ ];
+ const result = getRearrangedEvents(successEventslist, errorEventsList);
+ expect(result).toEqual(expected);
+ });
+
+ it('case 2 : 1--> success, 2 --> success, 3 --> fail, 4 --> fail, 5 --> success', () => {
+ const errorEventsList = [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 3, userId: 'user12345' }],
+ },
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 4, userId: 'user12345' }],
+ },
+ ];
+ const successEventslist = [
+ { message: { type: 'track' }, metadata: { jobId: 1 } },
+ { message: { type: 'track' }, metadata: { jobId: 2 } },
+ { message: { type: 'track' }, metadata: { jobId: 5 } },
+ ];
+ const expected = [
+ [
+ {
+ message: {
+ type: 'track',
+ },
+ metadata: [
+ {
+ jobId: 1,
+ },
+ ],
+ },
+ {
+ message: {
+ type: 'track',
+ },
+ metadata: [
+ {
+ jobId: 2,
+ },
+ ],
+ },
+ {
+ message: {
+ type: 'track',
+ },
+ metadata: [
+ {
+ jobId: 5,
+ },
+ ],
+ },
+ ],
+ [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [
+ {
+ jobId: 3,
+ userId: 'user12345',
+ },
+ {
+ jobId: 4,
+ userId: 'user12345',
+ },
+ ],
+ },
+ ],
+ ];
+ const result = getRearrangedEvents(successEventslist, errorEventsList);
+ console.log(JSON.stringify(result));
+ expect(result).toEqual(expected);
+ });
+
+ it('case 3 : 1--> fail, 2 --> success, 3 --> success, 4 --> fail', () => {
+ const errorEventsList = [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 1, userId: 'user12345' }],
+ },
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [{ jobId: 4, userId: 'user12345' }],
+ },
+ ];
+ const successEventslist = [
+ { message: { type: 'track' }, metadata: { jobId: 2 } },
+ { message: { type: 'track' }, metadata: { jobId: 3 } },
+ ];
+ const expected = [
+ [
+ {
+ message: {
+ type: 'track',
+ },
+ metadata: [
+ {
+ jobId: 2,
+ },
+ ],
+ },
+ {
+ message: {
+ type: 'track',
+ },
+ metadata: [
+ {
+ jobId: 3,
+ },
+ ],
+ },
+ ],
+ [
+ {
+ batched: false,
+ destination: {},
+ error: 'Invalid payload for the destination',
+ metadata: [
+ {
+ jobId: 1,
+ userId: 'user12345',
+ },
+ {
+ jobId: 4,
+ userId: 'user12345',
+ },
+ ],
+ },
+ ],
+ ];
+ const result = getRearrangedEvents(successEventslist, errorEventsList);
+ console.log(JSON.stringify(result));
+ expect(result).toEqual(expected);
+ });
+});
diff --git a/src/v0/destinations/branch/transform.js b/src/v0/destinations/branch/transform.js
index ae214819b2b..23dcd6c8db4 100644
--- a/src/v0/destinations/branch/transform.js
+++ b/src/v0/destinations/branch/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { endpoints } = require('./config');
const { categoriesList } = require('./data/eventMapping');
@@ -11,7 +12,6 @@ const {
isAppleFamily,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilder(payload, message, destination, category) {
@@ -44,12 +44,18 @@ function getCategoryAndName(rudderEventName) {
for (const category of categoriesList) {
let requiredName = null;
let requiredCategory = null;
- // eslint-disable-next-line array-callback-return
+ // eslint-disable-next-line array-callback-return, sonarjs/no-ignored-return
Object.keys(category.name).find((branchKey) => {
- if (branchKey.toLowerCase() === rudderEventName.toLowerCase()) {
+ if (
+ typeof branchKey === 'string' &&
+ typeof rudderEventName === 'string' &&
+ branchKey.toLowerCase() === rudderEventName.toLowerCase()
+ ) {
requiredName = category.name[branchKey];
requiredCategory = category;
+ return true;
}
+ return false;
});
if (requiredName != null && requiredCategory != null) {
return { evName: requiredName, category: requiredCategory };
@@ -108,6 +114,7 @@ function mapPayload(category, rudderProperty, rudderPropertiesObj) {
let valFound = false;
if (category.content_items) {
+ // eslint-disable-next-line sonarjs/no-ignored-return
Object.keys(category.content_items).find((branchMappingProperty) => {
if (branchMappingProperty === rudderProperty) {
const tmpKeyName = category.content_items[branchMappingProperty];
@@ -164,7 +171,7 @@ function getCommonPayload(message, category, evName) {
productObj = {};
for (let i = 0; i < rudderPropertiesObj.products.length; i += 1) {
const product = rudderPropertiesObj.products[i];
- // eslint-disable-next-line no-loop-func
+ // eslint-disable-next-line @typescript-eslint/no-loop-func
Object.keys(product).forEach((productProp) => {
const { contentItemsObj, eventDataObj, customDataObj } = mapPayload(
category,
diff --git a/src/v0/destinations/braze/braze.util.test.js b/src/v0/destinations/braze/braze.util.test.js
index eb5a46fe344..9859e161524 100644
--- a/src/v0/destinations/braze/braze.util.test.js
+++ b/src/v0/destinations/braze/braze.util.test.js
@@ -1219,4 +1219,145 @@ describe('getPurchaseObjs', () => {
);
}
});
+
+ test('products having extra properties', () => {
+ const output = getPurchaseObjs(
+ {
+ properties: {
+ products: [
+ { product_id: '123', price: 10.99, quantity: 2, random_extra_property_a: 'abc' },
+ { product_id: '456', price: 5.49, quantity: 1, random_extra_property_b: 'efg' },
+ {
+ product_id: '789',
+ price: 15.49,
+ quantity: 1,
+ random_extra_property_a: 'abc',
+ random_extra_property_b: 'efg',
+ random_extra_property_c: 'hij',
+ },
+ ],
+ currency: 'USD',
+ },
+ timestamp: '2023-08-04T12:34:56Z',
+ anonymousId: 'abc',
+ },
+ {
+ sendPurchaseEventWithExtraProperties: true,
+ },
+ );
+ expect(output).toEqual([
+ {
+ product_id: '123',
+ price: 10.99,
+ currency: 'USD',
+ quantity: 2,
+ time: '2023-08-04T12:34:56Z',
+ properties: {
+ random_extra_property_a: 'abc',
+ },
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ {
+ product_id: '456',
+ price: 5.49,
+ currency: 'USD',
+ quantity: 1,
+ time: '2023-08-04T12:34:56Z',
+ properties: {
+ random_extra_property_b: 'efg',
+ },
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ {
+ product_id: '789',
+ price: 15.49,
+ currency: 'USD',
+ quantity: 1,
+ time: '2023-08-04T12:34:56Z',
+ properties: {
+ random_extra_property_a: 'abc',
+ random_extra_property_b: 'efg',
+ random_extra_property_c: 'hij',
+ },
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ ]);
+ });
+
+ test('products having extra properties with sendPurchaseEventWithExtraProperties as false', () => {
+ const output = getPurchaseObjs(
+ {
+ properties: {
+ products: [
+ { product_id: '123', price: 10.99, quantity: 2, random_extra_property_a: 'abc' },
+ { product_id: '456', price: 5.49, quantity: 1, random_extra_property_b: 'efg' },
+ {
+ product_id: '789',
+ price: 15.49,
+ quantity: 1,
+ random_extra_property_a: 'abc',
+ random_extra_property_b: 'efg',
+ random_extra_property_c: 'hij',
+ },
+ ],
+ currency: 'USD',
+ },
+ timestamp: '2023-08-04T12:34:56Z',
+ anonymousId: 'abc',
+ },
+ {
+ sendPurchaseEventWithExtraProperties: false,
+ },
+ );
+ expect(output).toEqual([
+ {
+ product_id: '123',
+ price: 10.99,
+ currency: 'USD',
+ quantity: 2,
+ time: '2023-08-04T12:34:56Z',
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ {
+ product_id: '456',
+ price: 5.49,
+ currency: 'USD',
+ quantity: 1,
+ time: '2023-08-04T12:34:56Z',
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ {
+ product_id: '789',
+ price: 15.49,
+ currency: 'USD',
+ quantity: 1,
+ time: '2023-08-04T12:34:56Z',
+ _update_existing_only: false,
+ user_alias: {
+ alias_name: 'abc',
+ alias_label: 'rudder_id',
+ },
+ },
+ ]);
+ });
});
diff --git a/src/v0/destinations/braze/config.js b/src/v0/destinations/braze/config.js
index 2e24f43f614..2bbade2754d 100644
--- a/src/v0/destinations/braze/config.js
+++ b/src/v0/destinations/braze/config.js
@@ -56,6 +56,7 @@ const BRAZE_NON_BILLABLE_ATTRIBUTES = [
'subscription_groups',
];
+const BRAZE_PURCHASE_STANDARD_PROPERTIES = ['product_id', 'sku', 'price', 'quantity', 'currency'];
module.exports = {
ConfigCategory,
mappingConfig,
@@ -64,6 +65,7 @@ module.exports = {
getSubscriptionGroupEndPoint,
getAliasMergeEndPoint,
BRAZE_PARTNER_NAME,
+ BRAZE_PURCHASE_STANDARD_PROPERTIES,
TRACK_BRAZE_MAX_REQ_COUNT,
IDENTIFY_BRAZE_MAX_REQ_COUNT,
DESTINATION,
@@ -71,5 +73,5 @@ module.exports = {
DEL_MAX_BATCH_SIZE,
BRAZE_NON_BILLABLE_ATTRIBUTES,
ALIAS_BRAZE_MAX_REQ_COUNT,
- SUBSCRIPTION_BRAZE_MAX_REQ_COUNT
+ SUBSCRIPTION_BRAZE_MAX_REQ_COUNT,
};
diff --git a/src/v0/destinations/braze/deleteUsers.js b/src/v0/destinations/braze/deleteUsers.js
index 799aa3f9b47..b94d901138c 100644
--- a/src/v0/destinations/braze/deleteUsers.js
+++ b/src/v0/destinations/braze/deleteUsers.js
@@ -1,3 +1,4 @@
+const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const {
processAxiosResponse,
@@ -8,7 +9,6 @@ const { isHttpStatusSuccess } = require('../../util');
const { executeCommonValidations } = require('../../util/regulation-api');
const { DEL_MAX_BATCH_SIZE } = require('./config');
const { getUserIdBatches } = require('../../util/deleteUserUtils');
-const { NetworkError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const userDeletionHandler = async (userAttributes, config) => {
diff --git a/src/v0/destinations/braze/networkHandler.js b/src/v0/destinations/braze/networkHandler.js
index f942fdc3c37..c6cf7222eaa 100644
--- a/src/v0/destinations/braze/networkHandler.js
+++ b/src/v0/destinations/braze/networkHandler.js
@@ -1,4 +1,5 @@
/* eslint-disable no-unused-vars */
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { isHttpStatusSuccess } = require('../../util/index');
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const {
@@ -6,9 +7,10 @@ const {
processAxiosResponse,
} = require('../../../adapters/utils/networkUtils');
const { DESTINATION } = require('./config');
-const { NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
+const stats = require('../../../util/stats');
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
const responseHandler = (destinationResponse, _dest) => {
const message = `Request for ${DESTINATION} Processed Successfully`;
const { response, status } = destinationResponse;
@@ -23,6 +25,17 @@ const responseHandler = (destinationResponse, _dest) => {
destinationResponse,
);
}
+
+ // Partial errors
+ if (
+ !!response &&
+ response.message === 'success' &&
+ response.errors &&
+ response.errors.length > 0
+ ) {
+ stats.increment('braze_partial_failure');
+ }
+
// application level errors
if (
!!response &&
diff --git a/src/v0/destinations/braze/transform.js b/src/v0/destinations/braze/transform.js
index c3eb2d3ee57..38c4b348db8 100644
--- a/src/v0/destinations/braze/transform.js
+++ b/src/v0/destinations/braze/transform.js
@@ -1,6 +1,8 @@
/* eslint-disable no-nested-ternary,no-param-reassign */
-const _ = require('lodash');
+const lodash = require('lodash');
const get = require('get-value');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
+const { FilteredEventsError } = require('../../util/errorTypes');
const {
BrazeDedupUtility,
CustomAttributeOperationUtil,
@@ -20,10 +22,11 @@ const {
getFieldValueFromMessage,
removeUndefinedValues,
isHttpStatusSuccess,
+ isDefinedAndNotNull,
simpleProcessRouterDestSync,
simpleProcessRouterDest,
+ isNewStatusCodesAccepted,
} = require('../../util');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const {
ConfigCategory,
mappingConfig,
@@ -80,7 +83,7 @@ function getIdentifyPayload(message) {
let payload = {};
payload = setAliasObjectWithAnonId(payload, message);
payload = setExternalId(payload, message);
- return { aliases_to_identify: [payload] };
+ return { aliases_to_identify: [payload], merge_behavior: 'merge' };
}
function populateCustomAttributesWithOperation(
@@ -93,7 +96,10 @@ function populateCustomAttributesWithOperation(
// add,update,remove on json attributes
if (enableNestedArrayOperations) {
Object.keys(traits)
- .filter((key) => typeof traits[key] === 'object' && !Array.isArray(traits[key]))
+ .filter(
+ (key) =>
+ traits[key] !== null && typeof traits[key] === 'object' && !Array.isArray(traits[key]),
+ )
.forEach((key) => {
if (traits[key][CustomAttributeOperationTypes.UPDATE]) {
CustomAttributeOperationUtil.customAttributeUpdateOperation(
@@ -148,11 +154,16 @@ function getUserAttributesObject(message, mappingJson, destination) {
Object.keys(mappingJson).forEach((destKey) => {
let value = get(traits, mappingJson[destKey]);
if (value || (value === null && reservedKeys.includes(destKey))) {
+ // if email is not string remove it from attributes
+ if (destKey === 'email' && typeof value !== 'string') {
+ throw new InstrumentationError('Invalid email, email must be a valid string');
+ }
+
// handle gender special case
if (destKey === 'gender') {
value = formatGender(value);
- } else if (destKey === 'email' && value !== null) {
- value = value?.toLowerCase();
+ } else if (destKey === 'email' && isDefinedAndNotNull(value)) {
+ value = value.toString().toLowerCase();
}
data[destKey] = value;
}
@@ -213,7 +224,7 @@ async function processIdentify(message, destination) {
);
if (!isHttpStatusSuccess(brazeIdentifyResp.status)) {
throw new NetworkError(
- 'Braze identify failed',
+ `Braze identify failed - ${JSON.stringify(brazeIdentifyResp.response)}`,
brazeIdentifyResp.status,
{
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(brazeIdentifyResp.status),
@@ -223,7 +234,13 @@ async function processIdentify(message, destination) {
}
}
-function processTrackWithUserAttributes(message, destination, mappingJson, processParams) {
+function processTrackWithUserAttributes(
+ message,
+ destination,
+ mappingJson,
+ processParams,
+ reqMetadata,
+) {
let payload = getUserAttributesObject(message, mappingJson);
if (payload && Object.keys(payload).length > 0) {
payload = setExternalIdOrAliasObject(payload, message);
@@ -236,6 +253,10 @@ function processTrackWithUserAttributes(message, destination, mappingJson, proce
);
if (dedupedAttributePayload) {
requestJson.attributes = [dedupedAttributePayload];
+ } else if (isNewStatusCodesAccepted(reqMetadata)) {
+ throw new FilteredEventsError(
+ '[Braze Deduplication]: Duplicate user detected, the user is dropped',
+ );
} else {
throw new InstrumentationError(
'[Braze Deduplication]: Duplicate user detected, the user is dropped',
@@ -303,7 +324,7 @@ function processTrackEvent(messageType, message, destination, mappingJson, proce
typeof eventName === 'string' &&
eventName.toLowerCase() === 'order completed'
) {
- const purchaseObjs = getPurchaseObjs(message);
+ const purchaseObjs = getPurchaseObjs(message, destination.Config);
// del used properties
delete properties.products;
@@ -379,6 +400,7 @@ function processGroup(message, destination) {
} else if (email) {
subscriptionGroup.emails = [email];
}
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const subscription_groups = [subscriptionGroup];
const response = defaultRequestConfig();
response.endpoint = getSubscriptionGroupEndPoint(getEndpointFromConfig(destination));
@@ -443,7 +465,7 @@ function processAlias(message, destination) {
);
}
-async function process(event, processParams = { userStore: new Map() }) {
+async function process(event, processParams = { userStore: new Map() }, reqMetadata = {}) {
let response;
const { message, destination } = event;
const messageType = message.type.toLowerCase();
@@ -489,6 +511,7 @@ async function process(event, processParams = { userStore: new Map() }) {
destination,
mappingConfig[category.name],
processParams,
+ reqMetadata,
);
break;
case EventType.GROUP:
@@ -518,7 +541,7 @@ const processRouterDest = async (inputs, reqMetadata) => {
BrazeDedupUtility.updateUserStore(userStore, lookedUpUsers, destination.ID);
}
// group events by userId or anonymousId and then call process
- const groupedInputs = _.groupBy(
+ const groupedInputs = lodash.groupBy(
inputs,
(input) => input.message.userId || input.message.anonymousId,
);
@@ -537,7 +560,7 @@ const processRouterDest = async (inputs, reqMetadata) => {
const output = await Promise.all(allResps);
- const allTransfomredEvents = _.flatMap(output);
+ const allTransfomredEvents = lodash.flatMap(output);
return processBatch(allTransfomredEvents);
};
diff --git a/src/v0/destinations/braze/util.js b/src/v0/destinations/braze/util.js
index f531f08551a..3b0855b338b 100644
--- a/src/v0/destinations/braze/util.js
+++ b/src/v0/destinations/braze/util.js
@@ -1,4 +1,4 @@
-/* eslint-disable camelcase */
+/* eslint-disable */
const _ = require('lodash');
const get = require('get-value');
const stats = require('../../../util/stats');
@@ -21,11 +21,12 @@ const {
SUBSCRIPTION_BRAZE_MAX_REQ_COUNT,
ALIAS_BRAZE_MAX_REQ_COUNT,
TRACK_BRAZE_MAX_REQ_COUNT,
+ BRAZE_PURCHASE_STANDARD_PROPERTIES,
} = require('./config');
-const { JSON_MIME_TYPE } = require('../../util/constant');
+const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant');
const { isObject } = require('../../util');
const { removeUndefinedValues, getIntegrationsObj } = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const getEndpointFromConfig = (destination) => {
// Init -- mostly for test cases
@@ -298,7 +299,7 @@ const BrazeDedupUtility = {
external_id,
user_alias,
};
- const identifier = external_id || user_alias.alias_name;
+ const identifier = external_id || user_alias?.alias_name;
store.set(identifier, { ...storedUserData, ...deduplicatedUserData });
return removeUndefinedValues(deduplicatedUserData);
},
@@ -363,11 +364,14 @@ const processBatch = (transformedEvents) => {
const purchaseArray = [];
const successMetadata = [];
const failureResponses = [];
+ const filteredResponses = [];
const subscriptionsArray = [];
const mergeUsersArray = [];
for (const transformedEvent of transformedEvents) {
if (!isHttpStatusSuccess(transformedEvent?.statusCode)) {
failureResponses.push(transformedEvent);
+ } else if (transformedEvent?.statusCode === HTTP_STATUS_CODES.FILTER_EVENTS) {
+ filteredResponses.push(transformedEvent);
} else if (transformedEvent?.batchedRequest?.body?.JSON) {
const { attributes, events, purchases, subscription_groups, merge_updates } =
transformedEvent.batchedRequest.body.JSON;
@@ -416,6 +420,23 @@ const processBatch = (transformedEvents) => {
const attributes = attributeArrayChunks[i];
const events = eventsArrayChunks[i];
const purchases = purchaseArrayChunks[i];
+
+ if (attributes) {
+ stats.gauge('braze_batch_attributes_pack_size', attributes.length, {
+ destination_id: destination.ID,
+ });
+ }
+ if (events) {
+ stats.gauge('braze_batch_events_pack_size', events.length, {
+ destination_id: destination.ID,
+ });
+ }
+ if (purchases) {
+ stats.gauge('braze_batch_purchase_pack_size', purchases.length, {
+ destination_id: destination.ID,
+ });
+ }
+
const response = defaultRequestConfig();
response.endpoint = endpoint;
response.body.JSON = removeUndefinedAndNullValues({
@@ -446,6 +467,10 @@ const processBatch = (transformedEvents) => {
finalResponse.push(...failureResponses);
}
+ if (filteredResponses.length > 0) {
+ finalResponse.push(...filteredResponses);
+ }
+
return finalResponse;
};
@@ -515,7 +540,7 @@ function addMandatoryPurchaseProperties(productId, price, currencyCode, quantity
};
}
-function getPurchaseObjs(message) {
+function getPurchaseObjs(message, config) {
// ref:https://www.braze.com/docs/api/objects_filters/purchase_object/
const validateForPurchaseEvent = (message) => {
const { properties } = message;
@@ -610,6 +635,10 @@ function getPurchaseObjs(message) {
parseInt(quantity, 10),
timestamp,
);
+ const extraProperties = _.omit(product, BRAZE_PURCHASE_STANDARD_PROPERTIES);
+ if (Object.keys(extraProperties).length > 0 && config.sendPurchaseEventWithExtraProperties) {
+ purchaseObj = { ...purchaseObj, properties: extraProperties };
+ }
purchaseObj = setExternalIdOrAliasObject(purchaseObj, message);
purchaseObjs.push(purchaseObj);
});
diff --git a/src/v0/destinations/campaign_manager/config.js b/src/v0/destinations/campaign_manager/config.js
index 063f65cb14d..b3a95313476 100644
--- a/src/v0/destinations/campaign_manager/config.js
+++ b/src/v0/destinations/campaign_manager/config.js
@@ -9,6 +9,8 @@ const ConfigCategories = {
},
};
+const MAX_BATCH_CONVERSATIONS_SIZE = 1000;
+
const EncryptionEntityType = [
'ENCRYPTION_ENTITY_TYPE_UNKNOWN',
'DCM_ACCOUNT',
@@ -28,4 +30,5 @@ module.exports = {
BASE_URL,
EncryptionEntityType,
EncryptionSource,
+ MAX_BATCH_CONVERSATIONS_SIZE,
};
diff --git a/src/v0/destinations/campaign_manager/data/CampaignManagerTrackConfig.json b/src/v0/destinations/campaign_manager/data/CampaignManagerTrackConfig.json
index e547bb0f35f..c8bd10d5248 100644
--- a/src/v0/destinations/campaign_manager/data/CampaignManagerTrackConfig.json
+++ b/src/v0/destinations/campaign_manager/data/CampaignManagerTrackConfig.json
@@ -13,10 +13,7 @@
"destKey": "timestampMicros",
"sourceKeys": "timestamp",
"sourceFromGenericMap": true,
- "required": true,
- "metadata": {
- "type": "microSecondTimestamp"
- }
+ "required": true
},
{
"destKey": "floodlightActivityId",
diff --git a/src/v0/destinations/campaign_manager/networkHandler.js b/src/v0/destinations/campaign_manager/networkHandler.js
index d324c6300be..a1fa24835c1 100644
--- a/src/v0/destinations/campaign_manager/networkHandler.js
+++ b/src/v0/destinations/campaign_manager/networkHandler.js
@@ -1,45 +1,53 @@
+/* eslint-disable no-restricted-syntax */
+const { AbortedError, RetryableError, NetworkError } = require('@rudderstack/integrations-lib');
const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
-const { isHttpStatusSuccess } = require('../../util/index');
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
+const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { AbortedError, RetryableError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
-/**
- * This function helps to detarmine type of error occured. According to the response
- * we set authErrorCategory to take decision if we need to refresh the access_token
- * or need to disable the destination.
- * @param {*} code
- * @returns
- */
-const getAuthErrCategory = (code) => {
- if (code === 401) {
- return REFRESH_TOKEN;
- }
- return '';
-};
-
function checkIfFailuresAreRetryable(response) {
+ const { status } = response;
try {
- if (Array.isArray(response.status) && Array.isArray(response.status[0].errors)) {
- return (
- response.status[0].errors[0].code !== 'PERMISSION_DENIED' &&
- response.status[0].errors[0].code !== 'INVALID_ARGUMENT'
- );
+ if (Array.isArray(status)) {
+ // iterate over each status, and if found retryable in conversations ..retry else discard
+ /* status : [{
+ "conversion": {
+ object (Conversion)
+ },
+ "errors": [
+ {
+ object (ConversionError)
+ }
+ ],
+ "kind": string
+ }] */
+ for (const st of status) {
+ for (const err of st.errors) {
+ // if code is any of these, event is not retryable
+ if (
+ err.code === 'PERMISSION_DENIED' ||
+ err.code === 'INVALID_ARGUMENT' ||
+ err.code === 'NOT_FOUND'
+ ) {
+ return false;
+ }
+ }
+ }
}
return true;
} catch (e) {
- return true;
+ return false;
}
}
const responseHandler = (destinationResponse) => {
const message = `[CAMPAIGN_MANAGER Response Handler] - Request Processed Successfully`;
const { response, status } = destinationResponse;
+
if (isHttpStatusSuccess(status)) {
// check for Failures
if (response.hasFailures === true) {
@@ -67,13 +75,13 @@ const responseHandler = (destinationResponse) => {
}
throw new NetworkError(
- `Campaign Manager: ${response.error.message} during CAMPAIGN_MANAGER response transformation 3`,
- status,
+ `Campaign Manager: ${response.error?.message} during CAMPAIGN_MANAGER response transformation 3`,
+ 500,
{
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
},
destinationResponse,
- getAuthErrCategory(status),
+ getAuthErrCategoryFromStCode(status),
);
};
diff --git a/src/v0/destinations/campaign_manager/transform.js b/src/v0/destinations/campaign_manager/transform.js
index 93ec3e8ea3c..3b480dbac23 100644
--- a/src/v0/destinations/campaign_manager/transform.js
+++ b/src/v0/destinations/campaign_manager/transform.js
@@ -1,12 +1,17 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
+const lodash = require('lodash');
const { EventType } = require('../../../constants');
-
const {
constructPayload,
defaultRequestConfig,
defaultPostRequestConfig,
+ defaultBatchRequestConfig,
removeUndefinedAndNullValues,
+ getSuccessRespEvents,
isDefinedAndNotNull,
- simpleProcessRouterDest,
+ checkInvalidRtTfEvents,
+ handleRtTfSingleEventError,
+ getAccessToken,
} = require('../../util');
const {
@@ -15,18 +20,12 @@ const {
BASE_URL,
EncryptionEntityType,
EncryptionSource,
+ MAX_BATCH_CONVERSATIONS_SIZE,
} = require('./config');
-const { InstrumentationError, OAuthSecretError } = require('../../util/errorTypes');
+const { convertToMicroseconds } = require('./util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const getAccessToken = ({ secret }) => {
- if (!secret) {
- throw new OAuthSecretError('[CAMPAIGN MANAGER (DCM)]:: OAuth - access token not found');
- }
- return secret.access_token;
-};
-
function isEmptyObject(obj) {
return Object.keys(obj).length === 0 && obj.constructor === Object;
}
@@ -36,7 +35,7 @@ function buildResponse(requestJson, metadata, endpointUrl, requestType, encrypti
const response = defaultRequestConfig();
response.endpoint = endpointUrl;
response.headers = {
- Authorization: `Bearer ${getAccessToken(metadata)}`,
+ Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`,
'Content-Type': JSON_MIME_TYPE,
};
response.method = defaultPostRequestConfig.requestMethod;
@@ -78,7 +77,8 @@ function processTrack(message, metadata, destination) {
delete requestJson.childDirectedTreatment;
delete requestJson.limitAdTracking;
}
- requestJson.timestampMicros = requestJson.timestampMicros.toString();
+
+ requestJson.timestampMicros = convertToMicroseconds(requestJson.timestampMicros).toString();
const encryptionInfo = {};
// prepare encrptionInfo if encryptedUserId or encryptedUserIdCandidates is given
@@ -144,35 +144,17 @@ function postValidateRequest(response) {
);
}
- let count = 0;
-
- if (response.body.JSON.conversions[0].gclid) {
- count += 1;
- }
-
- if (response.body.JSON.conversions[0].dclid) {
- count += 1;
- }
-
- if (response.body.JSON.conversions[0].encryptedUserId) {
- count += 1;
- }
-
- if (response.body.JSON.conversions[0].encryptedUserIdCandidates) {
- count += 1;
- }
-
- if (response.body.JSON.conversions[0].mobileDeviceId) {
- count += 1;
- }
-
- if (response.body.JSON.conversions[0].impressionId) {
- count += 1;
- }
-
- if (count !== 1) {
+ if (
+ !response.body.JSON.conversions[0].gclid &&
+ !response.body.JSON.conversions[0].matchId &&
+ !response.body.JSON.conversions[0].dclid &&
+ !response.body.JSON.conversions[0].encryptedUserId &&
+ !response.body.JSON.conversions[0].encryptedUserIdCandidates &&
+ !response.body.JSON.conversions[0].mobileDeviceId &&
+ !response.body.JSON.conversions[0].impressionId
+ ) {
throw new InstrumentationError(
- '[CAMPAIGN MANAGER (DCM)]: For CM360 we need one of encryptedUserId,encryptedUserIdCandidates, matchId, mobileDeviceId, gclid, dclid, impressionId.',
+ '[CAMPAIGN MANAGER (DCM)]: Atleast one of encryptedUserId,encryptedUserIdCandidates, matchId, mobileDeviceId, gclid, dclid, impressionId.',
);
}
}
@@ -200,9 +182,110 @@ function process(event) {
return response;
}
+const generateBatch = (eventKind, events) => {
+ const batchRequestObject = defaultBatchRequestConfig();
+ const conversions = [];
+ let encryptionInfo = {};
+ const metadata = [];
+ // extracting destination, message from the first event in a batch
+ const { destination, message } = events[0];
+ // Batch event into dest batch structure
+ events.forEach((ev) => {
+ conversions.push(...ev.message.body.JSON.conversions);
+ metadata.push(ev.metadata);
+ if (ev.message.body.JSON.encryptionInfo) {
+ encryptionInfo = ev.message.body.JSON.encryptionInfo;
+ }
+ });
+
+ batchRequestObject.batchedRequest.body.JSON = {
+ kind: eventKind,
+ conversions,
+ };
+
+ if (Object.keys(encryptionInfo).length > 0) {
+ batchRequestObject.batchedRequest.body.JSON.encryptionInfo = encryptionInfo;
+ }
+
+ batchRequestObject.batchedRequest.endpoint = message.endpoint;
+
+ batchRequestObject.batchedRequest.headers = message.headers;
+
+ return {
+ ...batchRequestObject,
+ metadata,
+ destination,
+ };
+};
+
+const batchEvents = (eventChunksArray) => {
+ const batchedResponseList = [];
+
+ // group batchInsert and batchUpdate payloads
+ const groupedEventChunks = lodash.groupBy(
+ eventChunksArray,
+ (event) => event.message.body.JSON.kind,
+ );
+ Object.keys(groupedEventChunks).forEach((eventKind) => {
+ // eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
+ const eventChunks = lodash.chunk(groupedEventChunks[eventKind], MAX_BATCH_CONVERSATIONS_SIZE);
+ eventChunks.forEach((chunk) => {
+ const batchEventResponse = generateBatch(eventKind, chunk);
+ batchedResponseList.push(
+ getSuccessRespEvents(
+ batchEventResponse.batchedRequest,
+ batchEventResponse.metadata,
+ batchEventResponse.destination,
+ true,
+ ),
+ );
+ });
+ });
+ return batchedResponseList;
+};
+
const processRouterDest = async (inputs, reqMetadata) => {
- const respList = await simpleProcessRouterDest(inputs, process, reqMetadata);
- return respList;
+ const errorRespEvents = checkInvalidRtTfEvents(inputs);
+ if (errorRespEvents.length > 0) {
+ return errorRespEvents;
+ }
+
+ const batchErrorRespList = [];
+ const eventChunksArray = [];
+ const { destination } = inputs[0];
+ await Promise.all(
+ inputs.map(async (event) => {
+ try {
+ if (event.message.statusCode) {
+ // already transformed event
+ eventChunksArray.push({
+ message: event.message,
+ metadata: event.metadata,
+ destination,
+ });
+ } else {
+ // if not transformed
+ const proccessedRespList = process(event);
+ const transformedPayload = {
+ message: proccessedRespList,
+ metadata: event.metadata,
+ destination,
+ };
+ eventChunksArray.push(transformedPayload);
+ }
+ } catch (error) {
+ const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata);
+ batchErrorRespList.push(errRespEvent);
+ }
+ }),
+ );
+
+ let batchResponseList = [];
+ if (eventChunksArray.length > 0) {
+ batchResponseList = batchEvents(eventChunksArray);
+ }
+
+ return [...batchResponseList, ...batchErrorRespList];
};
module.exports = { process, processRouterDest };
diff --git a/src/v0/destinations/campaign_manager/util.js b/src/v0/destinations/campaign_manager/util.js
new file mode 100644
index 00000000000..434322440f0
--- /dev/null
+++ b/src/v0/destinations/campaign_manager/util.js
@@ -0,0 +1,33 @@
+function convertToMicroseconds(input) {
+ const timestamp = Date.parse(input);
+
+ if (!Number.isNaN(timestamp)) {
+ // If the input is a valid date string, timestamp will be a number
+ if (input.includes('Z')) {
+ // ISO 8601 date string with milliseconds
+ return timestamp * 1000;
+ }
+ // to handle case of "2022-11-17T00:22:02.903+05:30" strings
+ return timestamp.toString().length === 13 ? timestamp * 1000 : timestamp * 1000000;
+ }
+
+ if (/^\d+$/.test(input)) {
+ // If the input is a numeric string (assume microseconds or milliseconds)
+ if (input.length === 13) {
+ // equal to 13 indicates milliseconds
+ return parseInt(input, 10) * 1000;
+ }
+
+ if (input.length === 10) {
+ // equal to 10 indicates seconds
+ return parseInt(input, 10) * 1000000;
+ }
+ // Otherwise, assume microseconds
+ return parseInt(input, 10);
+ }
+ return timestamp;
+}
+
+module.exports = {
+ convertToMicroseconds,
+};
diff --git a/src/v0/destinations/campaign_manager/util.test.js b/src/v0/destinations/campaign_manager/util.test.js
new file mode 100644
index 00000000000..8f69b57a9fa
--- /dev/null
+++ b/src/v0/destinations/campaign_manager/util.test.js
@@ -0,0 +1,23 @@
+const { convertToMicroseconds } = require('./util');
+
+describe('convertToMicroseconds utility test', () => {
+ it('ISO 8601 input', () => {
+ expect(convertToMicroseconds('2021-01-04T08:25:04.780Z')).toEqual(1609748704780000);
+ });
+
+ it('unix microseconds input', () => {
+ expect(convertToMicroseconds('1668624722903333')).toEqual(1668624722903333);
+ });
+
+ it('non numeric time input', () => {
+ expect(convertToMicroseconds('2022-11-17T00:22:02.903+05:30')).toEqual(1668624722903000);
+ });
+
+ it('unix seconds input', () => {
+ expect(convertToMicroseconds('1697013935')).toEqual(1697013935000000);
+ });
+
+ it('unix miliseconds input', () => {
+ expect(convertToMicroseconds('1697013935000')).toEqual(1697013935000000);
+ });
+});
diff --git a/src/v0/destinations/candu/transform.js b/src/v0/destinations/candu/transform.js
index 659af365405..d1149984846 100644
--- a/src/v0/destinations/candu/transform.js
+++ b/src/v0/destinations/candu/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -6,7 +7,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { endpoint, identifyDataMapping, trackDataMapping } = require('./config');
const responseBuilder = (body, { Config }) => {
diff --git a/src/v0/destinations/canny/transform.js b/src/v0/destinations/canny/transform.js
index d837a8ddd3b..f4364e1fb79 100644
--- a/src/v0/destinations/canny/transform.js
+++ b/src/v0/destinations/canny/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ConfigCategory, mappingConfig, BASE_URL } = require('./config');
const {
@@ -14,7 +15,6 @@ const {
validateCreatePostFields,
validateEventMapping,
} = require('./util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (responseConfgs) => {
diff --git a/src/v0/destinations/canny/util.js b/src/v0/destinations/canny/util.js
index 9666f143df0..59644bcd6b1 100644
--- a/src/v0/destinations/canny/util.js
+++ b/src/v0/destinations/canny/util.js
@@ -1,8 +1,8 @@
const qs = require('qs');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const { getDestinationExternalID } = require('../../util');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const logger = require('../../../logger');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -25,7 +25,7 @@ const retrieveUserId = async (apiKey, message) => {
message.traits?.email || message.context?.traits?.email || message.properties?.email;
const { userId } = message;
- const header = {
+ const headers = {
'Content-Type': 'application/x-www-form-urlencoded',
Accept: JSON_MIME_TYPE,
};
@@ -38,10 +38,15 @@ const retrieveUserId = async (apiKey, message) => {
} else {
requestBody.userID = `${userId}`;
}
- const response = await httpPOST(url, qs.stringify(requestBody), header, {
- destType: 'canny',
- feature: 'transformation',
- });
+ const response = await httpPOST(
+ url,
+ qs.stringify(requestBody),
+ { headers },
+ {
+ destType: 'canny',
+ feature: 'transformation',
+ },
+ );
logger.debug(response);
// If the request fails, throwing error.
if (response.success === false) {
diff --git a/src/v0/destinations/clevertap/deleteUsers.js b/src/v0/destinations/clevertap/deleteUsers.js
index 355aee1e581..3c07a63d93c 100644
--- a/src/v0/destinations/clevertap/deleteUsers.js
+++ b/src/v0/destinations/clevertap/deleteUsers.js
@@ -1,3 +1,4 @@
+const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const { getEndpoint, DEL_MAX_BATCH_SIZE } = require('./config');
const {
@@ -6,7 +7,6 @@ const {
} = require('../../../adapters/utils/networkUtils');
const { isHttpStatusSuccess } = require('../../util');
const { executeCommonValidations } = require('../../util/regulation-api');
-const { NetworkError, ConfigurationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { getUserIdBatches } = require('../../util/deleteUserUtils');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -25,6 +25,7 @@ const userDeletionHandler = async (userAttributes, config) => {
}
const endpoint = getEndpoint(config, '/delete/profiles.json');
+ const endpointPath = '/delete/profiles';
const headers = {
'X-CleverTap-Account-Id': accountId,
'X-CleverTap-Passcode': passcode,
@@ -51,6 +52,7 @@ const userDeletionHandler = async (userAttributes, config) => {
{
destType: 'clevertap',
feature: 'deleteUsers',
+ endpointPath,
},
);
const handledDelResponse = processAxiosResponse(deletionResponse);
diff --git a/src/v0/destinations/clevertap/networkHandler.js b/src/v0/destinations/clevertap/networkHandler.js
index aafe77e7929..e17afb57d19 100644
--- a/src/v0/destinations/clevertap/networkHandler.js
+++ b/src/v0/destinations/clevertap/networkHandler.js
@@ -1,10 +1,10 @@
+const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib');
const { isHttpStatusSuccess } = require('../../util/index');
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, AbortedError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const responseHandler = (destinationResponse) => {
@@ -43,6 +43,7 @@ const responseHandler = (destinationResponse) => {
};
};
+// eslint-disable-next-line @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.responseHandler = responseHandler;
diff --git a/src/v0/destinations/clevertap/transform.js b/src/v0/destinations/clevertap/transform.js
index 7ce864aae26..efcd101668a 100644
--- a/src/v0/destinations/clevertap/transform.js
+++ b/src/v0/destinations/clevertap/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-param-reassign */
/* eslint-disable no-nested-ternary */
const get = require('get-value');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
getEndpoint,
@@ -25,7 +26,6 @@ const {
} = require('../../util');
const { generateClevertapBatchedPayload } = require('./utils');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const TIMESTAMP_KEY_PATH = 'context.traits.ts';
@@ -232,7 +232,7 @@ const getClevertapProfile = (message, category) => {
if (message.traits?.overrideFields) {
const { overrideFields } = message.traits;
Object.assign(profile, overrideFields);
- } else if (message.context.traits?.overrideFields) {
+ } else if (message.context?.traits?.overrideFields) {
const { overrideFields } = message.context.traits;
Object.assign(profile, overrideFields);
}
@@ -419,7 +419,7 @@ const processRouterDest = (inputs, reqMetadata) => {
batchedEvents.forEach((batch) => {
const batchedRequest = generateClevertapBatchedPayload(batch.events, batch.destination);
batchResponseList.push(
- getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, reqMetadata),
+ getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination),
);
});
}
diff --git a/src/v0/destinations/clickup/transform.js b/src/v0/destinations/clickup/transform.js
index d93e53b3490..0637d65bd4c 100644
--- a/src/v0/destinations/clickup/transform.js
+++ b/src/v0/destinations/clickup/transform.js
@@ -1,3 +1,4 @@
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -14,7 +15,6 @@ const {
checkEventIfUIMapped,
} = require('./util');
const { CONFIG_CATEGORIES, MAPPING_CONFIG, createTaskEndPoint } = require('./config');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = async (payload, listId, apiToken) => {
diff --git a/src/v0/destinations/clickup/util.js b/src/v0/destinations/clickup/util.js
index 7b17f83bb65..148fe1bd073 100644
--- a/src/v0/destinations/clickup/util.js
+++ b/src/v0/destinations/clickup/util.js
@@ -1,3 +1,4 @@
+const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { httpGET } = require('../../../adapters/network');
const {
processAxiosResponse,
@@ -9,7 +10,6 @@ const {
formatTimeStamp,
} = require('../../util');
const { getCustomFieldsEndPoint } = require('./config');
-const { NetworkError, InstrumentationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/confluent_cloud/transform.js b/src/v0/destinations/confluent_cloud/transform.js
index e8f0f4d2e21..b33abc90cf8 100644
--- a/src/v0/destinations/confluent_cloud/transform.js
+++ b/src/v0/destinations/confluent_cloud/transform.js
@@ -1,6 +1,5 @@
const cloneDeep = require('lodash/cloneDeep');
const { getIntegrationsObj } = require('../../util');
-// const { InstrumentationError } = require("../../util/errorTypes");
function process(event) {
const { message, destination } = event;
diff --git a/src/v0/destinations/courier/transform.js b/src/v0/destinations/courier/transform.js
index 7d52b503d9b..d5e25434ec2 100644
--- a/src/v0/destinations/courier/transform.js
+++ b/src/v0/destinations/courier/transform.js
@@ -1,3 +1,8 @@
+const {
+ TransformationError,
+ InstrumentationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -6,11 +11,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const {
- TransformationError,
- InstrumentationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const { API_URL } = require('./config');
const responseBuilder = (payload, endpoint, destination) => {
diff --git a/src/v0/destinations/criteo_audience/networkHandler.js b/src/v0/destinations/criteo_audience/networkHandler.js
index 5bf29f63c51..18bd9a93a06 100644
--- a/src/v0/destinations/criteo_audience/networkHandler.js
+++ b/src/v0/destinations/criteo_audience/networkHandler.js
@@ -1,3 +1,10 @@
+const {
+ NetworkError,
+ ThrottledError,
+ NetworkInstrumentationError,
+ AbortedError,
+ RetryableError,
+} = require('@rudderstack/integrations-lib');
const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
const { isHttpStatusSuccess } = require('../../util/index');
const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
@@ -6,13 +13,6 @@ const {
getDynamicErrorType,
processAxiosResponse,
} = require('../../../adapters/utils/networkUtils');
-const {
- NetworkError,
- ThrottledError,
- NetworkInstrumentationError,
- AbortedError,
- RetryableError,
-} = require('../../util/errorTypes');
// https://developers.criteo.com/marketing-solutions/v2021.01/docs/how-to-handle-api-errors#:~:text=the%20response%20body.-,401,-Authentication%20error
// Following fucntion tells us if there is a particular error code in the response.
@@ -26,7 +26,11 @@ const criteoAudienceRespHandler = (destResponse, stageMsg) => {
// https://developers.criteo.com/marketing-solutions/docs/api-error-types#error-category-types
// to handle the case when authorization-token is invalid
- if (status === 401 && matchErrorCode('authorization-token-invalid', response)) {
+ if (
+ status === 401 &&
+ (matchErrorCode('authorization-token-invalid', response) ||
+ matchErrorCode('authorization-token-expired', response))
+ ) {
throw new NetworkError(
`${response?.errors[0]?.title} ${stageMsg}`,
status,
@@ -81,6 +85,7 @@ const responseHandler = (destinationResponse) => {
};
};
+// eslint-disable-next-line @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.responseHandler = responseHandler;
diff --git a/src/v0/destinations/criteo_audience/transform.js b/src/v0/destinations/criteo_audience/transform.js
index 7ddbdbef203..25e53cc3058 100644
--- a/src/v0/destinations/criteo_audience/transform.js
+++ b/src/v0/destinations/criteo_audience/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { BASE_ENDPOINT, operation } = require('./config');
const {
defaultRequestConfig,
@@ -9,7 +10,6 @@ const {
getEventType,
getDestinationExternalIDInfoForRetl,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { MappedToDestinationKey } = require('../../../constants');
const { preparePayload } = require('./util');
diff --git a/src/v0/destinations/criteo_audience/util.js b/src/v0/destinations/criteo_audience/util.js
index ab58560fb1c..d9d37bc3316 100644
--- a/src/v0/destinations/criteo_audience/util.js
+++ b/src/v0/destinations/criteo_audience/util.js
@@ -1,6 +1,6 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { isDefinedAndNotNullAndNotEmpty } = require('../../util');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { MAX_IDENTIFIERS } = require('./config');
const populateIdentifiers = (audienceList, audienceType) => {
@@ -14,7 +14,7 @@ const populateIdentifiers = (audienceList, audienceType) => {
}
identifiers.push(userTraits[audienceType]);
});
- const identifierChunks = _.chunk(identifiers, MAX_IDENTIFIERS);
+ const identifierChunks = lodash.chunk(identifiers, MAX_IDENTIFIERS);
return identifierChunks;
};
diff --git a/src/v0/destinations/custify/deleteUsers.js b/src/v0/destinations/custify/deleteUsers.js
index e90abe7abb0..147fcc602ca 100644
--- a/src/v0/destinations/custify/deleteUsers.js
+++ b/src/v0/destinations/custify/deleteUsers.js
@@ -1,9 +1,13 @@
+const {
+ ConfigurationError,
+ InstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const { httpDELETE } = require('../../../adapters/network');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { ConfigurationError, InstrumentationError, NetworkError } = require('../../util/errorTypes');
const { executeCommonValidations } = require('../../util/regulation-api');
const tags = require('../../util/tags');
diff --git a/src/v0/destinations/custify/transform.js b/src/v0/destinations/custify/transform.js
index fd81511982a..6b08be1c566 100644
--- a/src/v0/destinations/custify/transform.js
+++ b/src/v0/destinations/custify/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const { ConfigCategory } = require('./config');
const {
@@ -9,7 +10,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { processIdentify, processTrack, processGroup } = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
/**
diff --git a/src/v0/destinations/custify/util.js b/src/v0/destinations/custify/util.js
index d943b5c8bf6..ae6f21fe20f 100644
--- a/src/v0/destinations/custify/util.js
+++ b/src/v0/destinations/custify/util.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
const {
ConfigCategory,
MappingConfig,
@@ -16,7 +17,6 @@ const {
constructPayload,
isHttpStatusSuccess,
} = require('../../util');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/customerio/transform.js b/src/v0/destinations/customerio/transform.js
index 1dd5b29973c..be4486717c1 100644
--- a/src/v0/destinations/customerio/transform.js
+++ b/src/v0/destinations/customerio/transform.js
@@ -1,6 +1,7 @@
const get = require('get-value');
const btoa = require('btoa');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const {
@@ -12,6 +13,7 @@ const {
adduserIdFromExternalId,
getFieldValueFromMessage,
handleRtTfSingleEventError,
+ validateEventName,
} = require('../../util');
const logger = require('../../../logger');
@@ -23,7 +25,6 @@ const {
defaultResponseBuilder,
validateConfigFields,
} = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilder(message, evType, evName, destination, messageType) {
@@ -101,6 +102,7 @@ function processSingleMessage(message, destination) {
break;
case EventType.TRACK:
evType = 'event';
+ validateEventName(message.event);
evName = message.event;
break;
case EventType.ALIAS:
@@ -113,10 +115,11 @@ function processSingleMessage(message, destination) {
logger.error(`could not determine type ${messageType}`);
throw new InstrumentationError(`could not determine type ${messageType}`);
}
+ evName = evName ? String(evName) : evName;
const response = responseBuilder(message, evType, evName, destination, messageType);
// replace default domain with EU data center domainc for EU based account
- if (destination.Config.datacenterEU) {
+ if (destination.Config?.datacenter === 'EU' || destination.Config?.datacenterEU) {
response.endpoint = response.endpoint.replace('track.customer.io', 'track-eu.customer.io');
}
diff --git a/src/v0/destinations/customerio/util.js b/src/v0/destinations/customerio/util.js
index dec16b355ef..ef983748a51 100644
--- a/src/v0/destinations/customerio/util.js
+++ b/src/v0/destinations/customerio/util.js
@@ -1,8 +1,8 @@
const get = require('get-value');
const set = require('set-value');
const truncate = require('truncate-utf8-bytes');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { MAX_BATCH_SIZE, configFieldsToCheck } = require('./config');
-const logger = require('../../../logger');
const {
constructPayload,
defaultPutRequestConfig,
@@ -29,8 +29,6 @@ const {
DEVICE_REGISTER_ENDPOINT,
} = require('./config');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
-
const deviceRelatedEventNames = [
'Application Installed',
'Application Opened',
@@ -102,7 +100,7 @@ const isdeviceRelatedEventName = (eventName, destination) =>
const identifyResponseBuilder = (userId, message) => {
const rawPayload = {};
// if userId is not there simply drop the payload
- const id = userId || getFieldValueFromMessage(message, "email");
+ const id = userId || getFieldValueFromMessage(message, 'email');
if (!id) {
throw new InstrumentationError('userId or email is not present');
}
@@ -177,6 +175,7 @@ const aliasResponseBuilder = (message, userId) => {
if (validateEmail(userId)) {
cioProperty = 'email';
}
+ // eslint-disable-next-line @typescript-eslint/naming-convention
let prev_cioProperty = 'id';
if (validateEmail(message.previousId)) {
prev_cioProperty = 'email';
@@ -229,12 +228,11 @@ const defaultResponseBuilder = (message, evName, userId, evType, destination, me
let requestConfig = defaultPostRequestConfig;
// any other event type except identify
const token = get(message, 'context.device.token');
- const id = userId || getFieldValueFromMessage(message, "email");
+ const id = userId || getFieldValueFromMessage(message, 'email');
// use this if only top level keys are to be sent
// DEVICE DELETE from CustomerIO
const isDeviceDeleteEvent = deviceDeleteRelatedEventName === evName;
if (isDeviceDeleteEvent) {
-
if (!id || !token) {
throw new InstrumentationError('userId/email or device_token not present');
}
@@ -253,7 +251,7 @@ const defaultResponseBuilder = (message, evName, userId, evType, destination, me
last_used: Math.floor(new Date(timestamp).getTime() / 1000),
};
const deviceType = get(message, 'context.device.type');
- if (deviceType && typeof deviceType === "string") {
+ if (deviceType && typeof deviceType === 'string') {
// Ref - https://www.customer.io/docs/api/#operation/add_device
// supported platform are "ios", "android"
devProps.platform = isAppleFamily(deviceType) ? 'ios' : deviceType.toLowerCase();
@@ -288,10 +286,6 @@ const defaultResponseBuilder = (message, evName, userId, evType, destination, me
// 100 - len(`Viewed Screen`) = 86
trimmedEvName = `Viewed ${truncate(message.event || message.properties.name, 86)} Screen`;
} else {
- if (!evName) {
- logger.error(`Could not determine event name`);
- throw new InstrumentationError(`Could not determine event name`);
- }
trimmedEvName = truncate(evName, 100);
}
// anonymous_id needs to be sent for anon track calls to provide information on which anon user is being tracked
@@ -306,9 +300,9 @@ const defaultResponseBuilder = (message, evName, userId, evType, destination, me
return { rawPayload, endpoint, requestConfig };
};
-const validateConfigFields = destination => {
+const validateConfigFields = (destination) => {
const { Config } = destination;
- configFieldsToCheck.forEach(configProperty => {
+ configFieldsToCheck.forEach((configProperty) => {
if (!Config[configProperty]) {
throw new ConfigurationError(`${configProperty} not found in Configs`);
}
@@ -323,5 +317,5 @@ module.exports = {
defaultResponseBuilder,
populateSpecedTraits,
isdeviceRelatedEventName,
- validateConfigFields
+ validateConfigFields,
};
diff --git a/src/v0/destinations/customerio/util.test.js b/src/v0/destinations/customerio/util.test.js
index 9117ed287c9..2c308cd262d 100644
--- a/src/v0/destinations/customerio/util.test.js
+++ b/src/v0/destinations/customerio/util.test.js
@@ -112,17 +112,17 @@ describe('Unit test cases for customerio identifyResponseBuilder', () => {
expect(identifyResponseBuilder('user1', getTestMessage())).toEqual(expectedOutput);
});
it('No Identifier to send for Identify Call', async () => {
- let expectedOutput = "userId or email is not present";
+ let expectedOutput = 'userId or email is not present';
try {
- identifyResponseBuilder(null, getIdentifyTestMessage())
+ identifyResponseBuilder(null, getIdentifyTestMessage());
} catch (error) {
expect(error.message).toEqual(expectedOutput);
}
});
it('No Identifier to send for Identify Call', async () => {
- let expectedOutput = "userId or email is not present";
+ let expectedOutput = 'userId or email is not present';
try {
- identifyResponseBuilder('', getIdentifyTestMessage())
+ identifyResponseBuilder('', getIdentifyTestMessage());
} catch (error) {
expect(error.message).toEqual(expectedOutput);
}
@@ -141,26 +141,28 @@ describe('Unit test cases for customerio aliasResponseBuilder', () => {
it('Merging happending with previous_id as email and present one as id', async () => {
let expectedOutput = {
endpoint: 'https://track.customer.io/api/v1/merge_customers',
- rawPayload: { primary: { id: 'user1' }, secondary: { email: "abc@test.com" } },
+ rawPayload: { primary: { id: 'user1' }, secondary: { email: 'abc@test.com' } },
requestConfig: { requestFormat: 'JSON', requestMethod: 'POST' },
};
- expect(aliasResponseBuilder({ previousId: "abc@test.com" }, "user1")).toEqual(expectedOutput);
+ expect(aliasResponseBuilder({ previousId: 'abc@test.com' }, 'user1')).toEqual(expectedOutput);
});
it('Merging happending with userId as email and present one as id', async () => {
let expectedOutput = {
endpoint: 'https://track.customer.io/api/v1/merge_customers',
- rawPayload: { secondary: { id: 'user1' }, primary: { email: "abc@test.com" } },
+ rawPayload: { secondary: { id: 'user1' }, primary: { email: 'abc@test.com' } },
requestConfig: { requestFormat: 'JSON', requestMethod: 'POST' },
};
- expect(aliasResponseBuilder({ previousId: "user1" }, "abc@test.com")).toEqual(expectedOutput);
+ expect(aliasResponseBuilder({ previousId: 'user1' }, 'abc@test.com')).toEqual(expectedOutput);
});
it('Merging happending with userId as email and present one as id', async () => {
let expectedOutput = {
endpoint: 'https://track.customer.io/api/v1/merge_customers',
- rawPayload: { secondary: { email: 'user1@test.com' }, primary: { email: "abc@test.com" } },
+ rawPayload: { secondary: { email: 'user1@test.com' }, primary: { email: 'abc@test.com' } },
requestConfig: { requestFormat: 'JSON', requestMethod: 'POST' },
};
- expect(aliasResponseBuilder({ previousId: "user1@test.com" }, "abc@test.com")).toEqual(expectedOutput);
+ expect(aliasResponseBuilder({ previousId: 'user1@test.com' }, 'abc@test.com')).toEqual(
+ expectedOutput,
+ );
});
});
diff --git a/src/v0/destinations/delighted/transform.js b/src/v0/destinations/delighted/transform.js
index f5a2afdcaf4..cf80dc878d8 100644
--- a/src/v0/destinations/delighted/transform.js
+++ b/src/v0/destinations/delighted/transform.js
@@ -1,3 +1,8 @@
+const {
+ InstrumentationError,
+ ConfigurationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
getFieldValueFromMessage,
@@ -20,11 +25,6 @@ const {
userValidity,
} = require('./util');
const { ENDPOINT, TRACKING_EXCLUSION_FIELDS, identifyMapping } = require('./config');
-const {
- InstrumentationError,
- ConfigurationError,
- NetworkInstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const identifyResponseBuilder = (message, { Config }) => {
diff --git a/src/v0/destinations/delighted/util.js b/src/v0/destinations/delighted/util.js
index 3cf26a3697b..2c92685fd77 100644
--- a/src/v0/destinations/delighted/util.js
+++ b/src/v0/destinations/delighted/util.js
@@ -1,11 +1,11 @@
-const myAxios = require('../../../util/myAxios');
-const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
-const { getValueFromMessage } = require('../../util');
const {
NetworkInstrumentationError,
InstrumentationError,
NetworkError,
-} = require('../../util/errorTypes');
+} = require('@rudderstack/integrations-lib');
+const myAxios = require('../../../util/myAxios');
+const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
+const { getValueFromMessage } = require('../../util');
const { ENDPOINT } = require('./config');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/discord/transform.js b/src/v0/destinations/discord/transform.js
index 4eb2f792350..714ee4f52bf 100644
--- a/src/v0/destinations/discord/transform.js
+++ b/src/v0/destinations/discord/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-nested-ternary */
/* eslint-disable no-prototype-builtins */
const Handlebars = require('handlebars');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -9,7 +10,6 @@ const {
getFieldValueFromMessage,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const {
stringifyJSON,
getName,
diff --git a/src/v0/destinations/drip/transform.js b/src/v0/destinations/drip/transform.js
index 9abe3e3f778..4ccba076d05 100644
--- a/src/v0/destinations/drip/transform.js
+++ b/src/v0/destinations/drip/transform.js
@@ -1,3 +1,8 @@
+const {
+ InstrumentationError,
+ ConfigurationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
getDestinationExternalID,
@@ -31,11 +36,6 @@ const {
createUpdateUser,
createList,
} = require('./util');
-const {
- InstrumentationError,
- ConfigurationError,
- NetworkInstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const identifyResponseBuilder = async (message, { Config }) => {
diff --git a/src/v0/destinations/drip/util.js b/src/v0/destinations/drip/util.js
index dbb59fc6afe..a502cf0d202 100644
--- a/src/v0/destinations/drip/util.js
+++ b/src/v0/destinations/drip/util.js
@@ -1,8 +1,8 @@
+const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const logger = require('../../../logger');
const { constructPayload, isDefinedAndNotNull } = require('../../util');
-const { NetworkError, AbortedError } = require('../../util/errorTypes');
const { ENDPOINT, productMapping } = require('./config');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/engage/deleteUsers.js b/src/v0/destinations/engage/deleteUsers.js
index 940529ea0c6..a3c3055c7d9 100644
--- a/src/v0/destinations/engage/deleteUsers.js
+++ b/src/v0/destinations/engage/deleteUsers.js
@@ -1,3 +1,4 @@
+const { ConfigurationError, NetworkError } = require('@rudderstack/integrations-lib');
const { httpDELETE } = require('../../../adapters/network');
const {
processAxiosResponse,
@@ -5,7 +6,6 @@ const {
} = require('../../../adapters/utils/networkUtils');
const { isHttpStatusSuccess } = require('../../util');
const tags = require('../../util/tags');
-const { ConfigurationError, NetworkError } = require('../../util/errorTypes');
const { executeCommonValidations } = require('../../util/regulation-api');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/engage/transform.js b/src/v0/destinations/engage/transform.js
index 98b8bb2bb9b..f5daafb98cb 100644
--- a/src/v0/destinations/engage/transform.js
+++ b/src/v0/destinations/engage/transform.js
@@ -1,4 +1,5 @@
const { set } = require('lodash');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
constructPayload,
@@ -14,7 +15,6 @@ const { getDestinationExternalID } = require('../../util');
const { EventType } = require('../../../constants');
const { mappingConfig, ConfigCategories } = require('./config');
const { refinePayload, generatePageName, getLists } = require('./utils');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const UID_ERROR_MSG = 'Neither externalId nor userId is available';
diff --git a/src/v0/destinations/eventbridge/transform.js b/src/v0/destinations/eventbridge/transform.js
index 71c77310747..53c74d0f883 100644
--- a/src/v0/destinations/eventbridge/transform.js
+++ b/src/v0/destinations/eventbridge/transform.js
@@ -1,5 +1,5 @@
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const { removeUndefinedAndNullValues, simpleProcessRouterDest } = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
function getResouceList(config) {
let resource;
diff --git a/src/v0/destinations/facebook_conversions/config.js b/src/v0/destinations/facebook_conversions/config.js
new file mode 100644
index 00000000000..0c1fc12e155
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/config.js
@@ -0,0 +1,126 @@
+const { getMappingConfig } = require('../../util');
+
+const ENDPOINT = (datasetId, accessToken) =>
+ `https://graph.facebook.com/v18.0/${datasetId}/events?access_token=${accessToken}`;
+
+const CONFIG_CATEGORIES = {
+ USERDATA: {
+ standard: false,
+ type: 'identify',
+ name: 'FBCUserDataConfig',
+ },
+ COMMON: { name: 'FBCCommonConfig' },
+ APPDATA: { name: 'FBCAppEventsConfig' },
+ SIMPLE_TRACK: {
+ standard: false,
+ type: 'simple track',
+ name: 'FBCSimpleCustomConfig',
+ },
+ PRODUCT_LIST_VIEWED: {
+ standard: true,
+ type: 'product list viewed',
+ eventName: 'ViewContent',
+ name: 'FBCProductListViewedCustomData',
+ },
+ PRODUCT_VIEWED: {
+ standard: true,
+ type: 'product viewed',
+ eventName: 'ViewContent',
+ name: 'FBCProductViewedCustomData',
+ },
+ PRODUCT_ADDED: {
+ standard: true,
+ type: 'product added',
+ eventName: 'AddToCart',
+ name: 'FBCProductAddedCustomData',
+ },
+ ORDER_COMPLETED: {
+ standard: true,
+ type: 'order completed',
+ eventName: 'Purchase',
+ name: 'FBCOrderCompletedCustomData',
+ },
+ PRODUCTS_SEARCHED: {
+ standard: true,
+ type: 'products searched',
+ eventName: 'Search',
+ name: 'FBCProductSearchedCustomData',
+ },
+ CHECKOUT_STARTED: {
+ standard: true,
+ type: 'checkout started',
+ eventName: 'InitiateCheckout',
+ name: 'FBCCheckoutStartedCustomData',
+ },
+ PAYMENT_INFO_ENTERED: {
+ standard: true,
+ type: 'payment info entered',
+ eventName: 'AddPaymentInfo',
+ name: 'FBCPaymentInfoEnteredCustomData',
+ },
+ PRODUCT_ADDED_TO_WISHLIST: {
+ standard: true,
+ type: 'product added to wishlist',
+ eventName: 'AddToWishlist',
+ name: 'FBCProductAddedToWishlistCustomData',
+ },
+ OTHER_STANDARD: {
+ standard: true,
+ type: 'otherStandard',
+ name: 'FBCSimpleCustomConfig',
+ },
+ PAGE_VIEW: {
+ standard: true,
+ type: 'page_view',
+ eventName: 'PageView',
+ name: 'FBCSimpleCustomConfig',
+ },
+};
+
+const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
+const ACTION_SOURCES_VALUES = [
+ 'email',
+ 'website',
+ 'app',
+ 'phone_call',
+ 'chat',
+ 'physical_store',
+ 'system_generated',
+ 'other',
+];
+
+const OTHER_STANDARD_EVENTS = [
+ 'Lead',
+ 'CompleteRegistration',
+ 'Contact',
+ 'CustomizeProduct',
+ 'Donate',
+ 'FindLocation',
+ 'Schedule',
+ 'StartTrial',
+ 'SubmitApplication',
+ 'Subscribe',
+];
+
+const FB_CONVERSIONS_DEFAULT_EXCLUSION = ['opt_out', 'event_id', 'action_source'];
+const STANDARD_ECOMM_EVENTS_CATEGORIES = [
+ CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED,
+ CONFIG_CATEGORIES.PRODUCT_VIEWED,
+ CONFIG_CATEGORIES.PRODUCT_ADDED,
+ CONFIG_CATEGORIES.ORDER_COMPLETED,
+ CONFIG_CATEGORIES.PRODUCTS_SEARCHED,
+ CONFIG_CATEGORIES.CHECKOUT_STARTED,
+ CONFIG_CATEGORIES.PAYMENT_INFO_ENTERED,
+ CONFIG_CATEGORIES.PRODUCT_ADDED_TO_WISHLIST,
+];
+
+module.exports = {
+ ENDPOINT,
+ MAPPING_CONFIG,
+ CONFIG_CATEGORIES,
+ ACTION_SOURCES_VALUES,
+ FB_CONVERSIONS_DEFAULT_EXCLUSION,
+ STANDARD_ECOMM_EVENTS_CATEGORIES,
+ OTHER_STANDARD_EVENTS,
+ DESTINATION: 'FACEBOOK_CONVERSIONS',
+};
diff --git a/src/v0/destinations/facebook_conversions/data/FBCAppEventsConfig.json b/src/v0/destinations/facebook_conversions/data/FBCAppEventsConfig.json
new file mode 100644
index 00000000000..e8e2944ea06
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCAppEventsConfig.json
@@ -0,0 +1,101 @@
+[
+ {
+ "destKey": "advertiser_tracking_enabled",
+ "sourceKeys": "context.device.adTrackingEnabled",
+ "required": true
+ },
+ {
+ "destKey": "application_tracking_enabled",
+ "sourceKeys": "properties.application_tracking_enabled",
+ "required": true
+ },
+ {
+ "destKey": "extinfo.0",
+ "sourceKeys": "context.device.type",
+ "required": true,
+ "metadata": {
+ "type": "toLower"
+ }
+ },
+ {
+ "destKey": "extinfo.1",
+ "sourceKeys": "context.app.namespace"
+ },
+ {
+ "destKey": "extinfo.2",
+ "sourceKeys": "context.app.build"
+ },
+ {
+ "destKey": "extinfo.3",
+ "sourceKeys": "context.app.version"
+ },
+ {
+ "destKey": "extinfo.4",
+ "sourceKeys": "context.os.version",
+ "required": true
+ },
+ {
+ "destKey": "extinfo.5",
+ "sourceKeys": "context.device.model"
+ },
+ {
+ "destKey": "extinfo.6",
+ "sourceKeys": "context.locale"
+ },
+ {
+ "destKey": "extinfo.7",
+ "sourceKeys": "context.abv_timezone"
+ },
+ {
+ "destKey": "extinfo.8",
+ "sourceKeys": "context.network.carrier"
+ },
+ {
+ "destKey": "extinfo.9",
+ "sourceKeys": "context.screen.width"
+ },
+ {
+ "destKey": "extinfo.10",
+ "sourceKeys": "context.screen.height"
+ },
+ {
+ "destKey": "extinfo.11",
+ "sourceKeys": "context.screen.density"
+ },
+ {
+ "destKey": "extinfo.12",
+ "sourceKeys": "context.cpu_cores"
+ },
+ {
+ "destKey": "extinfo.13",
+ "sourceKeys": "context.ext_storage_size"
+ },
+ {
+ "destKey": "extinfo.14",
+ "sourceKeys": "context.avl_storage_size"
+ },
+ {
+ "destKey": "extinfo.15",
+ "sourceKeys": "context.timezone"
+ },
+ {
+ "destKey": "campaign_ids",
+ "sourceKeys": ["properties.campaignId", "context.traits.campaignId", "context.campaign.name"]
+ },
+ {
+ "destKey": "install_referrer",
+ "sourceKeys": "properties.install_referrer"
+ },
+ {
+ "destKey": "installer_package",
+ "sourceKeys": "properties.installer_package"
+ },
+ {
+ "destKey": "url_schemes",
+ "sourceKeys": "properties.url_schemes"
+ },
+ {
+ "destKey": "windows_attribution_id",
+ "sourceKeys": "properties.windows_attribution_id"
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCCheckoutStartedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCCheckoutStartedCustomData.json
new file mode 100644
index 00000000000..6bef31195b2
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCCheckoutStartedCustomData.json
@@ -0,0 +1,53 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category"
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ },
+ {
+ "destKey": "num_items",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": 0
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCCommonConfig.json b/src/v0/destinations/facebook_conversions/data/FBCCommonConfig.json
new file mode 100644
index 00000000000..11a81a20abc
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCCommonConfig.json
@@ -0,0 +1,37 @@
+[
+ {
+ "destKey": "event_name",
+ "sourceKeys": ["event", "type"],
+ "required": true
+ },
+ {
+ "destKey": "event_time",
+ "sourceKeys": "timestamp",
+ "sourceFromGenericMap": true,
+ "required": true,
+ "metadata": {
+ "type": "secondTimestamp"
+ }
+ },
+ {
+ "destKey": "event_source_url",
+ "sourceKeys": "pageUrl",
+ "sourceFromGenericMap": true
+ },
+ {
+ "destKey": "opt_out",
+ "sourceKeys": ["traits.opt_out", "context.traits.opt_out", "properties.opt_out"]
+ },
+ {
+ "destKey": "event_id",
+ "sourceKeys": ["traits.event_id", "context.traits.event_id", "properties.event_id", "messageId"]
+ },
+ {
+ "destKey": "action_source",
+ "sourceKeys": [
+ "traits.action_source",
+ "context.traits.action_source",
+ "properties.action_source"
+ ]
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCOrderCompletedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCOrderCompletedCustomData.json
new file mode 100644
index 00000000000..799ddfcd856
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCOrderCompletedCustomData.json
@@ -0,0 +1,57 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category"
+ },
+ {
+ "destKey": "content_name",
+ "sourceKeys": ["properties.content_name", "properties.contentName"]
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ },
+ {
+ "destKey": "num_items",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": 0
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCPaymentInfoEnteredCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCPaymentInfoEnteredCustomData.json
new file mode 100644
index 00000000000..5f346732a18
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCPaymentInfoEnteredCustomData.json
@@ -0,0 +1,42 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCProductAddedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCProductAddedCustomData.json
new file mode 100644
index 00000000000..28e981d9e5f
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCProductAddedCustomData.json
@@ -0,0 +1,56 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "content_name",
+ "sourceKeys": ["properties.name", "properties.product_name"],
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCProductAddedToWishlistCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCProductAddedToWishlistCustomData.json
new file mode 100644
index 00000000000..796d7ab3d47
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCProductAddedToWishlistCustomData.json
@@ -0,0 +1,49 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "content_name",
+ "sourceKeys": ["properties.name", "properties.product_name"],
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCProductListViewedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCProductListViewedCustomData.json
new file mode 100644
index 00000000000..4a4e29d34e4
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCProductListViewedCustomData.json
@@ -0,0 +1,53 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "content_name",
+ "sourceKeys": ["properties.content_name", "properties.contentName"]
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCProductSearchedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCProductSearchedCustomData.json
new file mode 100644
index 00000000000..08b2e755ec7
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCProductSearchedCustomData.json
@@ -0,0 +1,53 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ },
+ {
+ "destKey": "search_string",
+ "sourceKeys": "properties.query"
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCProductViewedCustomData.json b/src/v0/destinations/facebook_conversions/data/FBCProductViewedCustomData.json
new file mode 100644
index 00000000000..28e981d9e5f
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCProductViewedCustomData.json
@@ -0,0 +1,56 @@
+[
+ {
+ "destKey": "content_ids",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "contents",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": []
+ }
+ },
+ {
+ "destKey": "content_type",
+ "sourceKeys": "",
+ "metadata": {
+ "defaultValue": "product"
+ }
+ },
+ {
+ "destKey": "content_category",
+ "sourceKeys": "properties.category",
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "content_name",
+ "sourceKeys": ["properties.name", "properties.product_name"],
+ "metadata": {
+ "defaultValue": ""
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ },
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCSimpleCustomConfig.json b/src/v0/destinations/facebook_conversions/data/FBCSimpleCustomConfig.json
new file mode 100644
index 00000000000..e506b333347
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCSimpleCustomConfig.json
@@ -0,0 +1,21 @@
+[
+ {
+ "destKey": "value",
+ "sourceKeys": [
+ "properties.revenue",
+ "properties.value",
+ "properties.price",
+ "properties.total"
+ ],
+ "metadata": {
+ "type": "numberForRevenue"
+ }
+ },
+ {
+ "destKey": "currency",
+ "sourceKeys": "properties.currency",
+ "metadata": {
+ "defaultValue": "USD"
+ }
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/data/FBCUserDataConfig.json b/src/v0/destinations/facebook_conversions/data/FBCUserDataConfig.json
new file mode 100644
index 00000000000..2d72260ac66
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/data/FBCUserDataConfig.json
@@ -0,0 +1,169 @@
+[
+ {
+ "destKey": "external_id",
+ "sourceKeys": [
+ "userId",
+ "traits.userId",
+ "traits.id",
+ "context.traits.userId",
+ "context.traits.id",
+ "anonymousId"
+ ],
+ "required": true,
+ "metadata": {
+ "type": "hashToSha256"
+ }
+ },
+ {
+ "destKey": "em",
+ "sourceKeys": ["traits.email", "context.traits.email"],
+ "required": false,
+ "metadata": {
+ "type": ["trim", "toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "ph",
+ "sourceKeys": ["traits.phone", "context.traits.phone"],
+ "required": false,
+ "metadata": {
+ "type": "hashToSha256"
+ }
+ },
+ {
+ "destKey": "ge",
+ "sourceKeys": ["traits.gender", "context.traits.gender"],
+ "required": false,
+ "metadata": {
+ "type": "getFbGenderVal"
+ }
+ },
+ {
+ "destKey": "db",
+ "sourceKeys": ["traits.birthday", "context.traits.birthday"],
+ "required": false,
+ "metadata": {
+ "type": "hashToSha256"
+ }
+ },
+ {
+ "destKey": "ln",
+ "sourceKeys": [
+ "traits.lastname",
+ "traits.lastName",
+ "traits.last_name",
+ "context.traits.lastname",
+ "context.traits.lastName",
+ "context.traits.last_name"
+ ],
+ "required": false,
+ "metadata": {
+ "type": ["trim", "toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "fn",
+ "sourceKeys": [
+ "traits.firstname",
+ "traits.firstName",
+ "traits.first_name",
+ "context.traits.firstname",
+ "context.traits.firstName",
+ "context.traits.first_name"
+ ],
+ "required": false,
+ "metadata": {
+ "type": ["trim", "toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "name",
+ "sourceKeys": ["traits.name", "context.traits.name"],
+ "required": false,
+ "metadata": {
+ "type": "toString"
+ }
+ },
+ {
+ "destKey": "ct",
+ "sourceKeys": ["traits.address.city", "context.traits.address.city"],
+ "required": false,
+ "metadata": {
+ "type": ["toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "st",
+ "sourceKeys": ["traits.address.state", "context.traits.address.state"],
+ "required": false,
+ "metadata": {
+ "type": ["toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "zp",
+ "sourceKeys": [
+ "traits.address.zip",
+ "context.traits.address.zip",
+ "traits.address.postalCode",
+ "context.traits.address.postalCode"
+ ],
+ "required": false,
+ "metadata": {
+ "type": ["toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "country",
+ "sourceKeys": ["traits.address.country", "context.traits.address.country"],
+ "required": false,
+ "metadata": {
+ "type": ["toLower", "hashToSha256"]
+ }
+ },
+ {
+ "destKey": "client_ip_address",
+ "sourceKeys": ["context.ip", "request_ip"],
+ "required": false
+ },
+ {
+ "destKey": "client_user_agent",
+ "sourceKeys": "context.userAgent",
+ "required": false
+ },
+ {
+ "destKey": "fbc",
+ "sourceKeys": "context.fbc",
+ "required": false
+ },
+ {
+ "destKey": "fbp",
+ "sourceKeys": "context.fbp",
+ "required": false
+ },
+ {
+ "destKey": "subscription_id",
+ "sourceKeys": "context.subscription_id",
+ "required": false
+ },
+ {
+ "destKey": "lead_id",
+ "sourceKeys": "context.lead_id",
+ "required": false
+ },
+ {
+ "destKey": "fb_login_id",
+ "sourceKeys": "context.fb_login_id",
+ "required": false
+ },
+ {
+ "destKey": "madid",
+ "sourceKeys": "context.device.advertisingId",
+ "required": false
+ },
+ {
+ "destKey": "anon_id",
+ "sourceKeys": ["properties.anon_id", "context.device.advertisingId"],
+ "required": false
+ }
+]
diff --git a/src/v0/destinations/facebook_conversions/networkHandler.js b/src/v0/destinations/facebook_conversions/networkHandler.js
new file mode 100644
index 00000000000..0ea7aff7da6
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/networkHandler.js
@@ -0,0 +1,6 @@
+const { networkHandler, errorResponseHandler } = require('../../util/facebookUtils/networkHandler');
+
+module.exports = {
+ networkHandler,
+ errorResponseHandler,
+};
diff --git a/src/v0/destinations/facebook_conversions/transform.js b/src/v0/destinations/facebook_conversions/transform.js
new file mode 100644
index 00000000000..1bb97b2672f
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/transform.js
@@ -0,0 +1,192 @@
+/* eslint-disable no-param-reassign */
+const get = require('get-value');
+const moment = require('moment');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
+const {
+ CONFIG_CATEGORIES,
+ MAPPING_CONFIG,
+ FB_CONVERSIONS_DEFAULT_EXCLUSION,
+ DESTINATION,
+ ENDPOINT,
+} = require('./config');
+const { EventType } = require('../../../constants');
+
+const {
+ constructPayload,
+ extractCustomFields,
+ getIntegrationsObj,
+ getValidDynamicFormConfig,
+ simpleProcessRouterDest,
+ getHashFromArray,
+ getFieldValueFromMessage,
+} = require('../../util');
+
+const {
+ populateCustomDataBasedOnCategory,
+ getCategoryFromEvent,
+ getActionSource,
+ fetchAppData,
+} = require('./utils');
+
+const {
+ transformedPayloadData,
+ fetchUserData,
+ formingFinalResponse,
+} = require('../../util/facebookUtils');
+
+const responseBuilderSimple = (message, category, destination) => {
+ const { Config, ID } = destination;
+ let { categoryToContent } = Config;
+ if (Array.isArray(categoryToContent)) {
+ categoryToContent = getValidDynamicFormConfig(categoryToContent, 'from', 'to', DESTINATION, ID);
+ }
+
+ const {
+ blacklistPiiProperties,
+ whitelistPiiProperties,
+ limitedDataUSage,
+ testDestination,
+ testEventCode,
+ datasetId,
+ accessToken,
+ actionSource,
+ } = Config;
+ const integrationsObj = getIntegrationsObj(message, DESTINATION.toLowerCase());
+
+ const userData = fetchUserData(
+ message,
+ Config,
+ MAPPING_CONFIG[CONFIG_CATEGORIES.USERDATA.name],
+ DESTINATION.toLowerCase(),
+ );
+
+ if (category.standard) {
+ message.event = category.eventName;
+ }
+
+ const commonData = constructPayload(
+ message,
+ MAPPING_CONFIG[CONFIG_CATEGORIES.COMMON.name],
+ DESTINATION.toLowerCase(),
+ );
+ commonData.action_source = getActionSource(commonData, actionSource);
+
+ let customData = {};
+ customData = extractCustomFields(
+ message,
+ customData,
+ ['properties'],
+ FB_CONVERSIONS_DEFAULT_EXCLUSION,
+ );
+
+ customData = transformedPayloadData(
+ message,
+ customData,
+ blacklistPiiProperties,
+ whitelistPiiProperties,
+ integrationsObj,
+ );
+ customData = populateCustomDataBasedOnCategory(customData, message, category, categoryToContent);
+
+ if (limitedDataUSage) {
+ const dataProcessingOptions = get(message, 'context.dataProcessingOptions');
+ if (dataProcessingOptions && Array.isArray(dataProcessingOptions)) {
+ [
+ commonData.data_processing_options,
+ commonData.data_processing_options_country,
+ commonData.data_processing_options_state,
+ ] = dataProcessingOptions;
+ }
+ }
+
+ let appData = {};
+ if (commonData.action_source === 'app') {
+ appData = fetchAppData(message);
+ }
+
+ return formingFinalResponse(
+ userData,
+ commonData,
+ customData,
+ ENDPOINT(datasetId, accessToken),
+ testDestination,
+ testEventCode,
+ appData,
+ );
+};
+
+const processEvent = (message, destination) => {
+ if (!message.type) {
+ throw new InstrumentationError("'type' is missing");
+ }
+
+ const timeStamp = getFieldValueFromMessage(message, 'timestamp');
+ if (timeStamp) {
+ const start = moment.unix(moment(timeStamp).format('X'));
+ const current = moment.unix(moment().format('X'));
+ // calculates past event in days
+ const deltaDay = Math.ceil(moment.duration(current.diff(start)).asDays());
+ // calculates future event in minutes
+ const deltaMin = Math.ceil(moment.duration(start.diff(current)).asMinutes());
+ if (deltaDay > 7 || deltaMin > 1) {
+ throw new InstrumentationError(
+ 'Events must be sent within seven days of their occurrence or up to one minute in the future.',
+ );
+ }
+ }
+
+ const { datasetId, accessToken } = destination.Config;
+ if (!datasetId) {
+ throw new ConfigurationError('Dataset Id not found. Aborting');
+ }
+ if (!accessToken) {
+ throw new ConfigurationError('Access token not found. Aborting');
+ }
+
+ let eventsToEvents;
+ if (Array.isArray(destination.Config.eventsToEvents)) {
+ eventsToEvents = getValidDynamicFormConfig(
+ destination.Config.eventsToEvents,
+ 'from',
+ 'to',
+ DESTINATION,
+ destination.ID,
+ );
+ }
+
+ const messageType = message.type.toLowerCase();
+ let category;
+ let mappedEvent;
+ switch (messageType) {
+ case EventType.PAGE:
+ case EventType.SCREEN:
+ category = CONFIG_CATEGORIES.PAGE_VIEW;
+ break;
+ case EventType.TRACK:
+ if (!message.event || typeof message.event !== 'string') {
+ throw new InstrumentationError("'event' is required and should be a string");
+ }
+ if (eventsToEvents) {
+ const eventMappingHash = getHashFromArray(eventsToEvents);
+ mappedEvent = eventMappingHash[message.event.toLowerCase()];
+ }
+ category = getCategoryFromEvent(mappedEvent || message.event.toLowerCase());
+ break;
+ default:
+ throw new InstrumentationError(`Message type ${messageType} not supported`);
+ }
+ // build the response
+ return responseBuilderSimple(message, category, destination);
+};
+
+const process = (event) => processEvent(event.message, event.destination);
+
+const processRouterDest = async (inputs, reqMetadata) => {
+ const respList = await simpleProcessRouterDest(inputs, process, reqMetadata);
+ return respList;
+};
+
+module.exports = {
+ process,
+ processRouterDest,
+};
diff --git a/src/v0/destinations/facebook_conversions/utils.js b/src/v0/destinations/facebook_conversions/utils.js
new file mode 100644
index 00000000000..26204ec61a3
--- /dev/null
+++ b/src/v0/destinations/facebook_conversions/utils.js
@@ -0,0 +1,216 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
+const {
+ CONFIG_CATEGORIES,
+ OTHER_STANDARD_EVENTS,
+ STANDARD_ECOMM_EVENTS_CATEGORIES,
+ MAPPING_CONFIG,
+ ACTION_SOURCES_VALUES,
+ DESTINATION,
+} = require('./config');
+const { constructPayload, isObject, isAppleFamily } = require('../../util');
+const { getContentType, getContentCategory } = require('../../util/facebookUtils');
+
+const getActionSource = (payload, fallbackActionSource) => {
+ let actionSource = fallbackActionSource;
+ if (payload.action_source) {
+ const isActionSourceValid = ACTION_SOURCES_VALUES.includes(payload.action_source);
+ if (!isActionSourceValid) {
+ throw new InstrumentationError('Invalid Action Source type');
+ }
+ actionSource = payload.action_source;
+ }
+
+ return actionSource;
+};
+
+const getCategoryFromEvent = (eventName) => {
+ let category = STANDARD_ECOMM_EVENTS_CATEGORIES.find(
+ (configCategory) => eventName === configCategory.type || eventName === configCategory.eventName,
+ );
+
+ if (!category && OTHER_STANDARD_EVENTS.includes(eventName)) {
+ category = CONFIG_CATEGORIES.OTHER_STANDARD;
+ category.eventName = eventName;
+ }
+
+ if (!category && eventName === CONFIG_CATEGORIES.PAGE_VIEW.eventName) {
+ category = CONFIG_CATEGORIES.PAGE_VIEW;
+ }
+
+ if (!category) {
+ category = CONFIG_CATEGORIES.SIMPLE_TRACK;
+ }
+
+ return category;
+};
+
+const populateContentsAndContentIDs = (
+ productPropertiesArray,
+ fallbackQuantity,
+ fallbackDeliveryCategory,
+) => {
+ const contentIds = [];
+ const contents = [];
+ if (Array.isArray(productPropertiesArray)) {
+ productPropertiesArray.forEach((productProps) => {
+ if (isObject(productProps)) {
+ const productId = productProps.product_id || productProps.sku || productProps.id;
+ if (productId) {
+ contentIds.push(productId);
+ contents.push({
+ id: productId,
+ quantity: productProps.quantity || fallbackQuantity || 1,
+ item_price: productProps.price,
+ delivery_category: productProps.delivery_category || fallbackDeliveryCategory,
+ });
+ }
+ }
+ });
+ }
+
+ return { contentIds, contents };
+};
+
+const validateProductSearchedData = (eventTypeCustomData) => {
+ const query = eventTypeCustomData.search_string;
+ const validQueryType = ['string', 'number', 'boolean'];
+ if (query && !validQueryType.includes(typeof query)) {
+ throw new InstrumentationError("'query' should be in string format only");
+ }
+};
+
+const populateCustomDataBasedOnCategory = (customData, message, category, categoryToContent) => {
+ let eventTypeCustomData = {};
+ if (category.name) {
+ eventTypeCustomData = constructPayload(message, MAPPING_CONFIG[category.name]);
+ }
+
+ switch (category.type) {
+ case 'product list viewed': {
+ const { contentIds, contents } = populateContentsAndContentIDs(
+ message.properties?.products,
+ message.properties?.quantity,
+ );
+
+ const contentCategory = eventTypeCustomData.content_category;
+ let contentType;
+ if (contentIds.length > 0) {
+ contentType = 'product';
+ } else if (contentCategory) {
+ contentIds.push(contentCategory);
+ contents.push({
+ id: contentCategory,
+ quantity: 1,
+ });
+ contentType = 'product_group';
+ }
+
+ eventTypeCustomData = {
+ ...eventTypeCustomData,
+ content_ids: contentIds,
+ contents,
+ content_type: getContentType(
+ message,
+ contentType,
+ categoryToContent,
+ DESTINATION.toLowerCase(),
+ ),
+ content_category: getContentCategory(contentCategory),
+ };
+ break;
+ }
+ case 'product added':
+ case 'product viewed':
+ case 'products searched':
+ case 'payment info entered':
+ case 'product added to wishlist': {
+ const contentCategory = eventTypeCustomData.content_category;
+ const contentType = eventTypeCustomData.content_type;
+ const { contentIds, contents } = populateContentsAndContentIDs([message.properties]);
+ eventTypeCustomData = {
+ ...eventTypeCustomData,
+ content_ids: contentIds,
+ contents,
+ content_type: getContentType(
+ message,
+ contentType,
+ categoryToContent,
+ DESTINATION.toLowerCase(),
+ ),
+ content_category: getContentCategory(contentCategory),
+ };
+ validateProductSearchedData(eventTypeCustomData);
+ break;
+ }
+ case 'order completed':
+ case 'checkout started': {
+ const { contentIds, contents } = populateContentsAndContentIDs(
+ message.properties?.products,
+ message.properties?.quantity,
+ message.properties?.delivery_category,
+ );
+
+ const contentCategory = eventTypeCustomData.content_category;
+ const contentType = eventTypeCustomData.content_type;
+
+ eventTypeCustomData = {
+ ...eventTypeCustomData,
+ content_ids: contentIds,
+ contents,
+ content_type: getContentType(
+ message,
+ contentType,
+ categoryToContent,
+ DESTINATION.toLowerCase(),
+ ),
+ content_category: getContentCategory(contentCategory),
+ num_items: contentIds.length,
+ };
+ break;
+ }
+ case 'page_view':
+ case 'otherStandard':
+ case 'simple track':
+ default:
+ eventTypeCustomData = { ...eventTypeCustomData };
+ break;
+ }
+
+ return { ...customData, ...eventTypeCustomData };
+};
+
+const fetchAppData = (message) => {
+ const appData = constructPayload(
+ message,
+ MAPPING_CONFIG[CONFIG_CATEGORIES.APPDATA.name],
+ DESTINATION.toLowerCase(),
+ );
+
+ if (appData) {
+ let sourceSDK = appData.extinfo[0];
+ if (sourceSDK === 'android') {
+ sourceSDK = 'a2';
+ } else if (isAppleFamily(sourceSDK)) {
+ sourceSDK = 'i2';
+ } else {
+ // if the sourceSDK is not android or ios
+ throw new InstrumentationError(
+ 'Extended device information i.e, "context.device.type" is not a valid value. It should be either android or ios/watchos/ipados/tvos',
+ );
+ }
+ appData.extinfo[0] = sourceSDK;
+ }
+
+ appData.extinfo = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''].map(
+ (val, ind) => (appData.extinfo[ind] ? appData.extinfo[ind] : val),
+ );
+
+ return appData;
+};
+
+module.exports = {
+ fetchAppData,
+ getActionSource,
+ getCategoryFromEvent,
+ populateCustomDataBasedOnCategory,
+};
diff --git a/src/v0/destinations/facebook_offline_conversions/transform.js b/src/v0/destinations/facebook_offline_conversions/transform.js
index e30bc2fa9a7..cc95270fcce 100644
--- a/src/v0/destinations/facebook_offline_conversions/transform.js
+++ b/src/v0/destinations/facebook_offline_conversions/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
simpleProcessRouterDest,
@@ -7,7 +8,6 @@ const {
const { offlineConversionResponseBuilder, prepareUrls } = require('./utils');
const { EventType } = require('../../../constants');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const responseBuilder = (endpoint) => {
if (endpoint) {
diff --git a/src/v0/destinations/facebook_offline_conversions/utils.js b/src/v0/destinations/facebook_offline_conversions/utils.js
index 819bf8056d1..c48de4e0b99 100644
--- a/src/v0/destinations/facebook_offline_conversions/utils.js
+++ b/src/v0/destinations/facebook_offline_conversions/utils.js
@@ -1,5 +1,6 @@
const sha256 = require('sha256');
const get = require('get-value');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const {
isObject,
formatTimeStamp,
@@ -22,7 +23,6 @@ const {
eventToStandardMapping,
MATCH_KEY_FIELD_TYPE_DICTIONARY,
} = require('./config');
-const { ConfigurationError } = require('../../util/errorTypes');
/**
* @param {*} message
diff --git a/src/v0/destinations/facebook_pixel/config.js b/src/v0/destinations/facebook_pixel/config.js
index 09be8e043d1..17d5887e1b1 100644
--- a/src/v0/destinations/facebook_pixel/config.js
+++ b/src/v0/destinations/facebook_pixel/config.js
@@ -1,5 +1,7 @@
const { getMappingConfig } = require('../../util');
+const VERSION = 'v18.0';
+
const CONFIG_CATEGORIES = {
USERDATA: {
standard: false,
@@ -15,31 +17,37 @@ const CONFIG_CATEGORIES = {
PRODUCT_LIST_VIEWED: {
standard: true,
type: 'product list viewed',
+ eventName: 'ViewContent',
name: 'FBPIXELPSimpleCustomConfig',
},
PRODUCT_VIEWED: {
standard: true,
type: 'product viewed',
+ eventName: 'ViewContent',
name: 'FBPIXELPSimpleCustomConfig',
},
PRODUCT_ADDED: {
standard: true,
type: 'product added',
+ eventName: 'AddToCart',
name: 'FBPIXELPSimpleCustomConfig',
},
ORDER_COMPLETED: {
standard: true,
type: 'order completed',
+ eventName: 'Purchase',
name: 'FBPIXELPSimpleCustomConfig',
},
PRODUCTS_SEARCHED: {
standard: true,
type: 'products searched',
+ eventName: 'Search',
name: 'FBPIXELPSimpleCustomConfig',
},
CHECKOUT_STARTED: {
standard: true,
type: 'checkout started',
+ eventName: 'InitiateCheckout',
name: 'FBPIXELPSimpleCustomConfig',
},
OTHER_STANDARD: {
@@ -50,9 +58,15 @@ const CONFIG_CATEGORIES = {
PAGE_VIEW: {
standard: true,
type: 'page_view',
+ eventName: 'PageView',
+ name: 'FBPIXELPSimpleCustomConfig',
+ },
+ PAGE: {
+ standard: false,
+ type: 'page',
+ eventName: 'PageView',
name: 'FBPIXELPSimpleCustomConfig',
},
- PAGE: { standard: false, type: 'page', name: 'FBPIXELPSimpleCustomConfig' },
};
const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
@@ -67,7 +81,23 @@ const ACTION_SOURCES_VALUES = [
'other',
];
+const OTHER_STANDARD_EVENTS = [
+ 'AddToWishlist',
+ 'AddPaymentInfo',
+ 'Lead',
+ 'CompleteRegistration',
+ 'Contact',
+ 'CustomizeProduct',
+ 'Donate',
+ 'FindLocation',
+ 'Schedule',
+ 'StartTrial',
+ 'SubmitApplication',
+ 'Subscribe',
+];
+
const FB_PIXEL_DEFAULT_EXCLUSION = ['opt_out', 'event_id', 'action_source'];
+const FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING = ['content_ids', 'contents'];
const STANDARD_ECOMM_EVENTS_TYPE = [
CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED.type,
CONFIG_CATEGORIES.PRODUCT_VIEWED.type,
@@ -78,10 +108,13 @@ const STANDARD_ECOMM_EVENTS_TYPE = [
];
module.exports = {
+ VERSION,
CONFIG_CATEGORIES,
MAPPING_CONFIG,
ACTION_SOURCES_VALUES,
FB_PIXEL_DEFAULT_EXCLUSION,
+ FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING,
STANDARD_ECOMM_EVENTS_TYPE,
+ OTHER_STANDARD_EVENTS,
DESTINATION: 'FACEBOOK_PIXEL',
};
diff --git a/src/v0/destinations/facebook_pixel/networkHandler.js b/src/v0/destinations/facebook_pixel/networkHandler.js
index f02453e1eb4..0ea7aff7da6 100644
--- a/src/v0/destinations/facebook_pixel/networkHandler.js
+++ b/src/v0/destinations/facebook_pixel/networkHandler.js
@@ -1,220 +1,4 @@
-const { isEmpty } = require('lodash');
-const get = require('get-value');
-const {
- processAxiosResponse,
- getDynamicErrorType,
-} = require('../../../adapters/utils/networkUtils');
-const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
-const { NetworkError } = require('../../util/errorTypes');
-const tags = require('../../util/tags');
-const { ErrorDetailsExtractorBuilder } = require('../../../util/error-extractor');
-
-/**
- * Only under below mentioned scenario(s), add the errorCodes, subCodes etc,. to this map
- *
- * The actual API reference doc to which events from Rudderstack are being sent
- * https://developers.facebook.com/docs/marketing-api/reference/ads-pixel/events/v13.0
- *
- * The documents referred while formulating the error responses
- * 1. https://developers.facebook.com/docs/graph-api/guides/error-handling/
- * - This seems like a generic document that contains errors possible for Graph API
- * 2. https://developers.facebook.com/docs/marketing-api/error-reference/
- * - The doc seems to be more related to Marketing API
- * 3. https://developers.facebook.com/docs/marketing-api/error-reference/
-{
- // A scenario where in we have to know the error with code and subcode, we can conclude that
- // this error will have a particular status, statTags
- code1: {
- subCode1: {
- status: ,
- // Only tags that are unique to this error needs to be provided
- statTags: {},
- messageDetails: {
- message: "",
- field:
- },
-
- }
- }
-}
- */
-const errorDetailsMap = {
- 100: {
- // This error talks about event being sent after seven days or so
- 2804003: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804001: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804007: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804016: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804017: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804019: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- 2804048: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessageField('error_user_title')
- .build(),
- // This error-subcode indicates that the business access token expired or is invalid or sufficient permissions are not provided
- // since there is involvement of changes required on dashboard to make event successful
- // for now, we are aborting this error-subCode combination
- 33: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessage(
- "Object with ID 'PIXEL_ID' does not exist, cannot be loaded due to missing permissions, or does not support this operation",
- )
- .build(),
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessage('Invalid Parameter')
- .build(),
- },
- 1: {
- // An unknown error occurred.
- // This error may occur if you set level to adset but the correct value should be campaign
- 99: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage(
- 'This error may occur if you set level to adset but the correct value should be campaign',
- )
- .build(),
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage('An unknown error occurred')
- .build(),
- },
- 190: {
- 460: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessage(
- 'The session has been invalidated because the user changed their password or Facebook has changed the session for security reasons',
- )
- .build(),
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessage('Invalid OAuth 2.0 access token')
- .build(),
- },
- 3: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(400)
- .setMessage('Capability or permissions issue.')
- .build(),
- },
- 2: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage('Temporary issue due to downtime.')
- .build(),
- },
- 341: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage('Application limit reached: Temporary issue due to downtime or throttling')
- .build(),
- },
- 368: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage('Temporarily blocked for policies violations.')
- .build(),
- },
- 5000: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(500)
- .setMessage('Unknown Error Code')
- .build(),
- },
- 4: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(429)
- .setMessage('API Too Many Calls')
- .build(),
- },
- 17: {
- default: new ErrorDetailsExtractorBuilder()
- .setStatus(429)
- .setMessage('API User Too Many Calls')
- .build(),
- },
-};
-
-const getErrorDetailsFromErrorMap = (error) => {
- const { code, error_subcode: subCode } = error;
- let errDetails;
- if (!isEmpty(errorDetailsMap[code])) {
- errDetails = errorDetailsMap[code][subCode] || errorDetailsMap[code]?.default;
- }
- return errDetails;
-};
-
-const getStatus = (error) => {
- const errorDetail = getErrorDetailsFromErrorMap(error);
- let errorStatus = 500;
- const isErrorDetailEmpty = isEmpty(errorDetail);
- if (isErrorDetailEmpty) {
- // Unhandled error response
- return {status: errorStatus, tags: { [tags.TAG_NAMES.META]: tags.METADATA.UNHANDLED_STATUS_CODE, } }
- }
- errorStatus = errorDetail.status;
-
- let errorMessage = errorDetail?.messageDetails?.message;
- if (errorDetail?.messageDetails?.field) {
- errorMessage = get(error, errorDetail?.messageDetails?.field);
- }
-
- return { status: errorStatus, errorMessage };
-};
-
-const errorResponseHandler = (destResponse) => {
- const { response } = destResponse;
- if (!response.error) {
- // successful response from facebook pixel api
- return;
- }
- const { error } = response;
- const { status, errorMessage, tags: errorStatTags } = getStatus(error);
- throw new NetworkError(
- `${errorMessage || error.message || 'Unknown failure during response transformation'}`,
- status,
- {
- ...errorStatTags,
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
- },
- { ...response, status: destResponse.status },
- );
-};
-
-const destResponseHandler = (destinationResponse) => {
- errorResponseHandler(destinationResponse);
- return {
- destinationResponse: destinationResponse.response,
- message: 'Request Processed Successfully',
- status: destinationResponse.status,
- };
-};
-
-function networkHandler() {
- // The order of execution also happens in this way
- this.prepareProxy = prepareProxyRequest;
- this.proxy = proxyRequest;
- this.processAxiosResponse = processAxiosResponse;
- this.responseHandler = destResponseHandler;
-}
+const { networkHandler, errorResponseHandler } = require('../../util/facebookUtils/networkHandler');
module.exports = {
networkHandler,
diff --git a/src/v0/destinations/facebook_pixel/transform.js b/src/v0/destinations/facebook_pixel/transform.js
index c81718dea08..8a63998b454 100644
--- a/src/v0/destinations/facebook_pixel/transform.js
+++ b/src/v0/destinations/facebook_pixel/transform.js
@@ -1,11 +1,14 @@
/* eslint-disable no-param-reassign */
const get = require('get-value');
const moment = require('moment');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const stats = require('../../../util/stats');
const {
+ VERSION,
CONFIG_CATEGORIES,
MAPPING_CONFIG,
FB_PIXEL_DEFAULT_EXCLUSION,
+ FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING,
STANDARD_ECOMM_EVENTS_TYPE,
} = require('./config');
const { EventType } = require('../../../constants');
@@ -17,24 +20,32 @@ const {
getIntegrationsObj,
getValidDynamicFormConfig,
simpleProcessRouterDest,
+ getHashFromArray,
} = require('../../util');
const {
- transformedPayloadData,
getActionSource,
- fetchUserData,
handleProduct,
handleSearch,
handleProductListViewed,
handleOrder,
- formingFinalResponse,
+ populateCustomDataBasedOnCategory,
+ getCategoryFromEvent,
} = require('./utils');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
+const {
+ transformedPayloadData,
+ fetchUserData,
+ formingFinalResponse,
+} = require('../../util/facebookUtils');
-const responseBuilderSimple = (message, category, destination, categoryToContent) => {
- const { Config } = destination;
+const responseBuilderSimple = (message, category, destination) => {
+ const { Config, ID } = destination;
const { pixelId, accessToken } = Config;
+ let { categoryToContent } = Config;
+ if (Array.isArray(categoryToContent)) {
+ categoryToContent = getValidDynamicFormConfig(categoryToContent, 'from', 'to', 'FB_PIXEL', ID);
+ }
if (!pixelId) {
throw new ConfigurationError('Pixel Id not found. Aborting');
@@ -55,19 +66,32 @@ const responseBuilderSimple = (message, category, destination, categoryToContent
} = Config;
const integrationsObj = getIntegrationsObj(message, 'fb_pixel');
- const endpoint = `https://graph.facebook.com/v17.0/${pixelId}/events?access_token=${accessToken}`;
+ const endpoint = `https://graph.facebook.com/${VERSION}/${pixelId}/events?access_token=${accessToken}`;
- const userData = fetchUserData(message, Config);
-
- let customData = {};
- let commonData = {};
+ const userData = fetchUserData(
+ message,
+ Config,
+ MAPPING_CONFIG[CONFIG_CATEGORIES.USERDATA.name],
+ 'fb_pixel',
+ );
- commonData = constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.COMMON.name], 'fb_pixel');
+ const commonData = constructPayload(
+ message,
+ MAPPING_CONFIG[CONFIG_CATEGORIES.COMMON.name],
+ 'fb_pixel',
+ );
commonData.action_source = getActionSource(commonData, message?.channel);
+ let customData = {};
+
if (category.type !== 'identify') {
customData = flattenJson(
- extractCustomFields(message, customData, ['properties'], FB_PIXEL_DEFAULT_EXCLUSION),
+ extractCustomFields(
+ message,
+ customData,
+ ['properties'],
+ [...FB_PIXEL_DEFAULT_EXCLUSION, ...FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING],
+ ),
);
if (standardPageCall && category.type === 'page') {
category.standard = true;
@@ -82,74 +106,20 @@ const responseBuilderSimple = (message, category, destination, categoryToContent
customData,
blacklistPiiProperties,
whitelistPiiProperties,
- category.standard,
integrationsObj,
);
message.properties = message.properties || {};
if (category.standard) {
- switch (category.type) {
- case 'product list viewed':
- customData = {
- ...customData,
- ...handleProductListViewed(message, categoryToContent),
- };
- commonData.event_name = 'ViewContent';
- break;
- case 'product viewed':
- customData = {
- ...customData,
- ...handleProduct(message, categoryToContent, valueFieldIdentifier),
- };
- commonData.event_name = 'ViewContent';
- break;
- case 'product added':
- customData = {
- ...customData,
- ...handleProduct(message, categoryToContent, valueFieldIdentifier),
- };
- commonData.event_name = 'AddToCart';
- break;
- case 'order completed':
- customData = {
- ...customData,
- ...handleOrder(message, categoryToContent),
- };
- commonData.event_name = 'Purchase';
- break;
- case 'products searched': {
- customData = {
- ...customData,
- ...handleSearch(message),
- };
- commonData.event_name = 'Search';
- break;
- }
- case 'checkout started': {
- const orderPayload = handleOrder(message, categoryToContent);
- delete orderPayload.content_name;
- customData = {
- ...customData,
- ...orderPayload,
- };
- commonData.event_name = 'InitiateCheckout';
- break;
- }
- case 'page_view': // executed when sending track calls but with standard type PageView
- case 'page': // executed when page call is done with standard PageView turned on
- customData = { ...customData };
- commonData.event_name = 'PageView';
- break;
- case 'otherStandard':
- customData = { ...customData };
- commonData.event_name = category.event;
- break;
- default:
- throw new InstrumentationError(
- `${category.standard} type of standard event does not exist`,
- );
- }
+ commonData.event_name = category.eventName;
+ customData = populateCustomDataBasedOnCategory(
+ customData,
+ message,
+ category,
+ categoryToContent,
+ valueFieldIdentifier,
+ );
customData.currency = STANDARD_ECOMM_EVENTS_TYPE.includes(category.type)
- ? message.properties.currency || 'USD'
+ ? message.properties?.currency || 'USD'
: undefined;
} else {
const { type } = category;
@@ -159,8 +129,13 @@ const responseBuilderSimple = (message, category, destination, categoryToContent
: `Viewed a ${type}`;
}
if (type === 'simple track') {
- customData.value = message.properties ? message.properties.revenue : undefined;
+ customData.value = message.properties?.revenue;
delete customData.revenue;
+ FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING.forEach((customDataParameter) => {
+ if (message.properties?.[customDataParameter]) {
+ customData[customDataParameter] = message.properties[customDataParameter];
+ }
+ });
}
}
} else {
@@ -189,57 +164,6 @@ const responseBuilderSimple = (message, category, destination, categoryToContent
);
};
-function getCategoryFromEvent(checkEvent) {
- let category;
- switch (checkEvent) {
- case CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED.type:
- case 'ViewContent':
- category = CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED;
- break;
- case CONFIG_CATEGORIES.PRODUCT_VIEWED.type:
- category = CONFIG_CATEGORIES.PRODUCT_VIEWED;
- break;
- case CONFIG_CATEGORIES.PRODUCT_ADDED.type:
- case 'AddToCart':
- category = CONFIG_CATEGORIES.PRODUCT_ADDED;
- break;
- case CONFIG_CATEGORIES.ORDER_COMPLETED.type:
- case 'Purchase':
- category = CONFIG_CATEGORIES.ORDER_COMPLETED;
- break;
- case CONFIG_CATEGORIES.PRODUCTS_SEARCHED.type:
- case 'Search':
- category = CONFIG_CATEGORIES.PRODUCTS_SEARCHED;
- break;
- case CONFIG_CATEGORIES.CHECKOUT_STARTED.type:
- case 'InitiateCheckout':
- category = CONFIG_CATEGORIES.CHECKOUT_STARTED;
- break;
- case 'AddToWishlist':
- case 'AddPaymentInfo':
- case 'Lead':
- case 'CompleteRegistration':
- case 'Contact':
- case 'CustomizeProduct':
- case 'Donate':
- case 'FindLocation':
- case 'Schedule':
- case 'StartTrial':
- case 'SubmitApplication':
- case 'Subscribe':
- category = CONFIG_CATEGORIES.OTHER_STANDARD;
- category.event = checkEvent;
- break;
- case 'PageView':
- category = CONFIG_CATEGORIES.PAGE_VIEW;
- break;
- default:
- category = CONFIG_CATEGORIES.SIMPLE_TRACK;
- break;
- }
- return category;
-}
-
const processEvent = (message, destination) => {
if (!message.type) {
throw new InstrumentationError("'type' is missing");
@@ -265,7 +189,7 @@ const processEvent = (message, destination) => {
}
let eventsToEvents;
- if (destination.Config.eventsToEvents)
+ if (Array.isArray(destination.Config.eventsToEvents)) {
eventsToEvents = getValidDynamicFormConfig(
destination.Config.eventsToEvents,
'from',
@@ -273,21 +197,12 @@ const processEvent = (message, destination) => {
'FB_PIXEL',
destination.ID,
);
- let categoryToContent;
- if (destination.Config.categoryToContent)
- categoryToContent = getValidDynamicFormConfig(
- destination.Config.categoryToContent,
- 'from',
- 'to',
- 'FB_PIXEL',
- destination.ID,
- );
+ }
+
const { advancedMapping } = destination.Config;
- let standard;
- let standardTo = '';
- let checkEvent;
const messageType = message.type.toLowerCase();
let category;
+ let mappedEvent;
switch (messageType) {
case EventType.IDENTIFY:
if (advancedMapping) {
@@ -309,24 +224,17 @@ const processEvent = (message, destination) => {
if (typeof message.event !== 'string') {
throw new InstrumentationError('event name should be string');
}
- standard = eventsToEvents;
- if (standard) {
- standardTo = standard.reduce((filtered, standards) => {
- if (standards.from.toLowerCase() === message.event.toLowerCase()) {
- filtered = standards.to;
- }
- return filtered;
- }, '');
+ if (eventsToEvents) {
+ const eventMappingHash = getHashFromArray(eventsToEvents);
+ mappedEvent = eventMappingHash[message.event.toLowerCase()];
}
- checkEvent = standardTo !== '' ? standardTo : message.event.toLowerCase();
-
- category = getCategoryFromEvent(checkEvent);
+ category = getCategoryFromEvent(mappedEvent || message.event.toLowerCase());
break;
default:
throw new InstrumentationError(`Message type ${messageType} not supported`);
}
// build the response
- return responseBuilderSimple(message, category, destination, categoryToContent);
+ return responseBuilderSimple(message, category, destination);
};
const process = (event) => processEvent(event.message, event.destination);
diff --git a/src/v0/destinations/facebook_pixel/utils.js b/src/v0/destinations/facebook_pixel/utils.js
index e1347278bf0..8a63a0b0fe2 100644
--- a/src/v0/destinations/facebook_pixel/utils.js
+++ b/src/v0/destinations/facebook_pixel/utils.js
@@ -1,16 +1,12 @@
-const sha256 = require('sha256');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
+const { isObject } = require('../../util');
const {
- isObject,
- getFieldValueFromMessage,
- formatTimeStamp,
- getIntegrationsObj,
- constructPayload,
- defaultPostRequestConfig,
- defaultRequestConfig,
-} = require('../../util');
-const { ACTION_SOURCES_VALUES, CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
-
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
+ ACTION_SOURCES_VALUES,
+ CONFIG_CATEGORIES,
+ OTHER_STANDARD_EVENTS,
+ FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING,
+} = require('./config');
+const { getContentType, getContentCategory } = require('../../util/facebookUtils');
/** format revenue according to fb standards with max two decimal places.
* @param revenue
@@ -18,211 +14,13 @@ const { InstrumentationError, TransformationError } = require('../../util/errorT
*/
const formatRevenue = (revenue) => {
- const formattedRevenue = parseFloat(parseFloat(revenue || 0).toFixed(2));
+ const formattedRevenue = parseFloat(parseFloat(revenue || '0').toFixed(2));
if (!Number.isNaN(formattedRevenue)) {
return formattedRevenue;
}
throw new InstrumentationError('Revenue could not be converted to number');
};
-/**
- *
- * @param {*} message Rudder Payload
- * @param {*} defaultValue product / product_group
- * @param {*} categoryToContent [ { from: 'clothing', to: 'product' } ]
- *
- * We will be mapping properties.category to user provided content else taking the default value as per ecomm spec
- * If category is clothing it will be set to ["product"]
- * @return Content Type array as defined in:
- * - https://developers.facebook.com/docs/facebook-pixel/reference/#object-properties
- */
-const getContentType = (message, defaultValue, categoryToContent) => {
- let tempCategoryToContent = categoryToContent;
- const { properties } = message;
- const integrationsObj = getIntegrationsObj(message, 'fb_pixel');
-
- if (integrationsObj?.contentType) {
- return integrationsObj.contentType;
- }
-
- let { category } = properties;
- if (!category) {
- const { products } = properties;
- if (products && products.length > 0 && Array.isArray(products) && isObject(products[0])) {
- category = products[0].category;
- }
- } else {
- if (tempCategoryToContent === undefined) {
- tempCategoryToContent = [];
- }
- const mapped = tempCategoryToContent;
- const mappedTo = mapped.reduce((filtered, map) => {
- let filter = filtered;
- if (map.from === category) {
- filter = map.to;
- }
- return filter;
- }, '');
- if (mappedTo.length > 0) {
- return mappedTo;
- }
- }
- return defaultValue;
-};
-
-/** This function transforms the payloads according to the config settings and adds, removes or hashes pii data.
-Also checks if it is a standard event and sends properties only if it is mentioned in our configs.
-@param message --> the rudder payload
-
-{
- anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1',
- destination_props: { Fb: { app_id: 'RudderFbApp' } },
- context: {
- device: {
- id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R',
- manufacturer: 'Xiaomi',
- model: 'Redmi 6',
- name: 'xiaomi'
- },
- network: { carrier: 'Banglalink' },
- os: { name: 'android', version: '8.1.0' },
- screen: { height: '100', density: 50 },
- traits: {
- email: 'abc@gmail.com',
- anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1'
- }
- },
- event: 'spin_result',
- integrations: {
- All: true,
- FacebookPixel: {
- dataProcessingOptions: [Array],
- fbc: 'fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890',
- fbp: 'fb.1.1554763741205.234567890',
- fb_login_id: 'fb_id',
- lead_id: 'lead_id'
- }
- },
- message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8',
- properties: { revenue: 400, additional_bet_index: 0 },
- timestamp: '2019-09-01T15:46:51.693229+05:30',
- type: 'track'
- }
-
-@param customData --> properties
-{ revenue: 400, additional_bet_index: 0 }
-
-@param blacklistPiiProperties -->
-[ { blacklistPiiProperties: 'phone', blacklistPiiHash: true } ] // hashes the phone property
-
-@param whitelistPiiProperties -->
-[ { whitelistPiiProperties: 'email' } ] // sets email
-
-
-@param eventCustomProperties -->
-[ { eventCustomProperties: 'leadId' } ] // leadId if present will be set
-
-*/
-
-const transformedPayloadData = (
- message,
- customData,
- blacklistPiiProperties,
- whitelistPiiProperties,
- integrationsObj,
-) => {
- const defaultPiiProperties = [
- 'email',
- 'firstName',
- 'lastName',
- 'firstname',
- 'lastname',
- 'first_name',
- 'last_name',
- 'gender',
- 'city',
- 'country',
- 'phone',
- 'state',
- 'zip',
- 'postalCode',
- 'birthday',
- ];
- const clonedCustomData = { ...customData };
- const finalBlacklistPiiProperties = blacklistPiiProperties || [];
- const finalWhitelistPiiProperties = whitelistPiiProperties || [];
- const customBlackListedPiiProperties = {};
-
- // create list of whitelisted properties
- const customWhiteListedProperties = finalWhitelistPiiProperties.map(
- (propObject) => propObject.whitelistPiiProperties,
- );
-
- // create map of blacklisted properties
- finalBlacklistPiiProperties.forEach((property) => {
- const singularConfigInstance = property;
- customBlackListedPiiProperties[singularConfigInstance.blacklistPiiProperties] =
- singularConfigInstance.blacklistPiiHash;
- });
-
- // remove properties which are default pii properties and not whitelisted
- Object.keys(clonedCustomData).forEach((eventProp) => {
- const isDefaultPiiProperty = defaultPiiProperties.includes(eventProp);
- const isProperyWhiteListed = customWhiteListedProperties.includes(eventProp);
-
- if (Object.prototype.hasOwnProperty.call(customBlackListedPiiProperties, eventProp)) {
- if (customBlackListedPiiProperties[eventProp]) {
- // if customBlackListedPiiProperty is marked to be hashed from UI
- clonedCustomData[eventProp] = integrationsObj?.hashed
- ? String(message.properties[eventProp])
- : sha256(String(message.properties[eventProp]));
- } else if (isDefaultPiiProperty && !isProperyWhiteListed) {
- delete clonedCustomData[eventProp];
- }
- } else if (isDefaultPiiProperty && !isProperyWhiteListed) {
- delete clonedCustomData[eventProp];
- }
- });
-
- return clonedCustomData;
-};
-
-/**
- *
- * @param {*} message
- * @returns fbc parameter which is a combined string of the parameters below
- *
- * version : "fb" (default)
- *
- * subdomainIndex : 1 ( recommended by facebook, as well as our JS SDK sets cookies on the main domain, i.e "facebook.com")
- *
- * creationTime : mapped to originalTimestamp converted in miliseconds
- *
- * fbclid : deduced query paramter from context.page.url
- *
- * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc#fbc
- */
-const deduceFbcParam = (message) => {
- const url = message.context?.page?.url;
- if (!url) {
- return undefined;
- }
- let parseUrl;
- try {
- parseUrl = new URL(url);
- } catch {
- return undefined;
- }
- const paramsList = new URLSearchParams(parseUrl.search);
- const fbclid = paramsList.get('fbclid');
-
- if (!fbclid) {
- return undefined;
- }
- const creationTime = getFieldValueFromMessage(message, 'timestamp');
- return `fb.1.${formatTimeStamp(creationTime)}.${fbclid}`;
-};
-
/**
* Returns action source
* ref : https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event#action-source
@@ -247,65 +45,10 @@ const getActionSource = (payload, channel) => {
return actionSource;
};
-/**
- * This method gets content category with proper error-handling
- *
- * @param {*} category
- * @returns The content category as a string
- */
-const getContentCategory = (category) => {
- let contentCategory = category;
- if (Array.isArray(contentCategory)) {
- contentCategory = contentCategory.map(String).join(',');
- }
- if (
- contentCategory &&
- typeof contentCategory !== 'string' &&
- typeof contentCategory !== 'object'
- ) {
- contentCategory = String(contentCategory);
- }
- if (
- contentCategory &&
- typeof contentCategory !== 'string' &&
- !Array.isArray(contentCategory) &&
- typeof contentCategory === 'object'
- ) {
- throw new InstrumentationError("'properties.category' must be either be a string or an array");
- }
- return contentCategory;
-};
-
-const fetchUserData = (message, Config) => {
- const integrationsObj = getIntegrationsObj(message, 'fb_pixel');
- const userData = constructPayload(
- message,
- MAPPING_CONFIG[CONFIG_CATEGORIES.USERDATA.name],
- 'fb_pixel',
- );
- const { removeExternalId } = Config;
- if (removeExternalId) {
- delete userData.external_id;
- }
-
- if (userData) {
- const split = userData.name?.split(' ');
- if (split && split.length === 2) {
- const hashValue = (value) => (integrationsObj?.hashed ? value : sha256(value));
- userData.fn = hashValue(split[0]);
- userData.ln = hashValue(split[1]);
- }
- delete userData.name;
- userData.fbc = userData.fbc || deduceFbcParam(message);
- }
-
- return userData;
-};
-
/**
*
* @param {*} message Rudder element
- * @param {*} categoryToContent [ { from: 'clothing', to: 'product' } ]
+ * @param {*} categoryToContent example: [ { from: 'clothing', to: 'product' } ]
*
* Handles order completed and checkout started types of specific events
*/
@@ -316,11 +59,18 @@ const handleOrder = (message, categoryToContent) => {
const contentType = getContentType(message, 'product', categoryToContent);
const contentIds = [];
const contents = [];
- const { category, quantity, price, currency, contentName } = message.properties;
+ const {
+ category,
+ quantity,
+ price,
+ currency,
+ contentName,
+ delivery_category: deliveryCategory,
+ } = message.properties;
if (products) {
if (products.length > 0 && Array.isArray(products)) {
products.forEach((singleProduct) => {
- const pId = singleProduct.product_id || singleProduct.sku || singleProduct.id;
+ const pId = singleProduct?.product_id || singleProduct?.sku || singleProduct?.id;
if (pId) {
contentIds.push(pId);
// required field for content
@@ -329,6 +79,7 @@ const handleOrder = (message, categoryToContent) => {
id: pId,
quantity: singleProduct.quantity || quantity || 1,
item_price: singleProduct.price || price,
+ delivery_category: singleProduct.delivery_category || deliveryCategory,
};
contents.push(content);
}
@@ -353,7 +104,7 @@ const handleOrder = (message, categoryToContent) => {
/**
*
* @param {*} message Rudder element
- * @param {*} categoryToContent [ { from: 'clothing', to: 'product' } ]
+ * @param {*} categoryToContent example [ { from: 'clothing', to: 'product' } ]
*
* Handles product list viewed
*/
@@ -405,7 +156,7 @@ const handleProductListViewed = (message, categoryToContent) => {
/**
*
* @param {*} message Rudder Payload
- * @param {*} categoryToContent [ { from: 'clothing', to: 'product' } ]
+ * @param {*} categoryToContent Example: [ { from: 'clothing', to: 'product' } ]
* @param {*} valueFieldIdentifier it can be either value or price which will be matched from properties and assigned to value for fb payload
*/
const handleProduct = (message, categoryToContent, valueFieldIdentifier) => {
@@ -476,49 +227,115 @@ const handleSearch = (message) => {
};
};
-const formingFinalResponse = (
- userData,
- commonData,
+const populateCustomDataBasedOnCategory = (
customData,
- endpoint,
- testDestination,
- testEventCode,
+ message,
+ category,
+ categoryToContent,
+ valueFieldIdentifier,
) => {
- if (userData && commonData) {
- const response = defaultRequestConfig();
- response.endpoint = endpoint;
- response.method = defaultPostRequestConfig.requestMethod;
- const jsonStringify = JSON.stringify({
- user_data: userData,
- ...commonData,
- custom_data: customData,
- });
- const payload = {
- data: [jsonStringify],
- };
-
- // Ref: https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api/
- // Section: Test Events Tool
- if (testDestination) {
- payload.test_event_code = testEventCode;
+ let updatedCustomData;
+ switch (category.type) {
+ case 'product list viewed':
+ updatedCustomData = {
+ ...customData,
+ ...handleProductListViewed(message, categoryToContent),
+ };
+ break;
+ case 'product viewed':
+ case 'product added':
+ updatedCustomData = {
+ ...customData,
+ ...handleProduct(message, categoryToContent, valueFieldIdentifier),
+ };
+ break;
+ case 'order completed':
+ updatedCustomData = {
+ ...customData,
+ ...handleOrder(message, categoryToContent),
+ };
+ break;
+ case 'products searched': {
+ updatedCustomData = {
+ ...customData,
+ ...handleSearch(message),
+ };
+ break;
+ }
+ case 'checkout started': {
+ const orderPayload = handleOrder(message, categoryToContent);
+ delete orderPayload.content_name;
+ updatedCustomData = {
+ ...customData,
+ ...orderPayload,
+ };
+ break;
}
- response.body.FORM = payload;
- return response;
+ case 'page_view': // executed when sending track calls but with standard type PageView
+ case 'page': // executed when page call is done with standard PageView turned on
+ case 'otherStandard':
+ updatedCustomData = { ...customData };
+ FB_PIXEL_CUSTOM_DATA_EXCLUDE_FLATTENING.forEach((customDataParameter) => {
+ if (message.properties?.[customDataParameter]) {
+ updatedCustomData[customDataParameter] = message.properties[customDataParameter];
+ }
+ });
+ break;
+ default:
+ throw new InstrumentationError(`${category.standard} type of standard event does not exist`);
+ }
+ return updatedCustomData;
+};
+
+const getCategoryFromEvent = (eventName) => {
+ let category;
+ switch (eventName) {
+ case CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED.type:
+ case CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED.eventName:
+ category = CONFIG_CATEGORIES.PRODUCT_LIST_VIEWED;
+ break;
+ case CONFIG_CATEGORIES.PRODUCT_VIEWED.type:
+ category = CONFIG_CATEGORIES.PRODUCT_VIEWED;
+ break;
+ case CONFIG_CATEGORIES.PRODUCT_ADDED.type:
+ case CONFIG_CATEGORIES.PRODUCT_ADDED.eventName:
+ category = CONFIG_CATEGORIES.PRODUCT_ADDED;
+ break;
+ case CONFIG_CATEGORIES.ORDER_COMPLETED.type:
+ case CONFIG_CATEGORIES.ORDER_COMPLETED.eventName:
+ category = CONFIG_CATEGORIES.ORDER_COMPLETED;
+ break;
+ case CONFIG_CATEGORIES.PRODUCTS_SEARCHED.type:
+ case CONFIG_CATEGORIES.PRODUCTS_SEARCHED.eventName:
+ category = CONFIG_CATEGORIES.PRODUCTS_SEARCHED;
+ break;
+ case CONFIG_CATEGORIES.CHECKOUT_STARTED.type:
+ case CONFIG_CATEGORIES.CHECKOUT_STARTED.eventName:
+ category = CONFIG_CATEGORIES.CHECKOUT_STARTED;
+ break;
+ case CONFIG_CATEGORIES.PAGE_VIEW.eventName:
+ category = CONFIG_CATEGORIES.PAGE_VIEW;
+ break;
+ default:
+ category = CONFIG_CATEGORIES.SIMPLE_TRACK;
+ break;
}
- // fail-safety for developer error
- throw new TransformationError('Payload could not be constructed');
+
+ if (OTHER_STANDARD_EVENTS.includes(eventName)) {
+ category = CONFIG_CATEGORIES.OTHER_STANDARD;
+ category.eventName = eventName;
+ }
+
+ return category;
};
module.exports = {
- deduceFbcParam,
formatRevenue,
- getContentType,
- transformedPayloadData,
getActionSource,
- fetchUserData,
handleProduct,
handleSearch,
handleProductListViewed,
handleOrder,
- formingFinalResponse,
+ populateCustomDataBasedOnCategory,
+ getCategoryFromEvent,
};
diff --git a/src/v0/destinations/factorsai/transform.js b/src/v0/destinations/factorsai/transform.js
index 612afe54d6b..9824b73bbf6 100644
--- a/src/v0/destinations/factorsai/transform.js
+++ b/src/v0/destinations/factorsai/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -9,7 +10,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const { InstrumentationError } = require('../../util/errorTypes');
const { ConfigCategories, mappingConfig, BASE_URL } = require('./config');
@@ -44,6 +44,7 @@ function processTrack(message, factorsAIApiKey) {
// process Page Call
function processPageAndGroup(message, factorsAIApiKey, category) {
const requestJson = constructPayload(message, mappingConfig[category]);
+ requestJson.type = message.type;
return buildResponse(requestJson, factorsAIApiKey);
}
diff --git a/src/v0/destinations/fb/config.js b/src/v0/destinations/fb/config.js
index 2ad9aeacba9..0e52b424164 100644
--- a/src/v0/destinations/fb/config.js
+++ b/src/v0/destinations/fb/config.js
@@ -1,6 +1,8 @@
const fs = require('fs');
const path = require('path');
+const VERSION = 'v18.0';
+
const getPath = (file) => path.resolve(__dirname, file);
const baseMapping = JSON.parse(fs.readFileSync(getPath('./data/FbAppBasicMapping.json')));
@@ -20,6 +22,7 @@ const eventPropToTypeMapping = JSON.parse(
);
module.exports = {
+ VERSION,
baseMapping,
eventNameMapping,
eventPropsMapping,
diff --git a/src/v0/destinations/fb/networkHandler.js b/src/v0/destinations/fb/networkHandler.js
index b79b2ab4931..06235fab402 100644
--- a/src/v0/destinations/fb/networkHandler.js
+++ b/src/v0/destinations/fb/networkHandler.js
@@ -11,6 +11,7 @@ const destResponseHandler = (destinationResponse) => {
};
};
+// eslint-disable-next-line @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.prepareProxyRequest = prepareProxyRequest;
diff --git a/src/v0/destinations/fb/transform.js b/src/v0/destinations/fb/transform.js
index a73bbdca8b4..e6f8e986cf2 100644
--- a/src/v0/destinations/fb/transform.js
+++ b/src/v0/destinations/fb/transform.js
@@ -1,6 +1,7 @@
const get = require('get-value');
const set = require('set-value');
const sha256 = require('sha256');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
removeUndefinedValues,
@@ -13,6 +14,7 @@ const {
} = require('../../util');
const {
+ VERSION,
baseMapping,
eventNameMapping,
eventPropsMapping,
@@ -20,7 +22,6 @@ const {
eventPropToTypeMapping,
} = require('./config');
const logger = require('../../../logger');
-const { InstrumentationError } = require('../../util/errorTypes');
// const funcMap = {
// integer: parseInt,
@@ -83,7 +84,11 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) {
case 'ud[ln]':
case 'ud[st]':
case 'ud[cn]':
- if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') {
+ if (
+ clonedUpdatedEvent[prop] &&
+ typeof clonedUpdatedEvent[prop] === 'string' &&
+ clonedUpdatedEvent[prop] !== ''
+ ) {
isUDSet = true;
clonedUpdatedEvent[prop] = sha256(clonedUpdatedEvent[prop].toLowerCase());
}
@@ -105,8 +110,7 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) {
if (clonedUpdatedEvent[prop] && clonedUpdatedEvent[prop] !== '') {
if (typeof clonedUpdatedEvent[prop] !== 'string') {
delete clonedUpdatedEvent[prop];
- }
- else {
+ } else {
isUDSet = true;
clonedUpdatedEvent[prop] = sha256(
clonedUpdatedEvent[prop].toLowerCase() === 'female' ? 'f' : 'm',
@@ -158,7 +162,7 @@ function sanityCheckPayloadForTypesAndModifications(updatedEvent) {
return clonedUpdatedEvent;
}
-function getCorrectedTypedValue(pathToKey, value, originalPath) {
+function getCorrectedTypedValue(pathToKey, value) {
const type = eventPropToTypeMapping[pathToKey];
// TODO: we should remove this eslint rule or comeup with a better way
// eslint-disable-next-line valid-typeof
@@ -166,9 +170,12 @@ function getCorrectedTypedValue(pathToKey, value, originalPath) {
return value;
}
+ const mappingKey = Object.keys(eventPropsMapping).find(
+ (key) => eventPropsMapping[key] === pathToKey,
+ );
+
throw new InstrumentationError(
- `${typeof originalPath === 'object' ? JSON.stringify(originalPath) : originalPath
- } is not of valid type`,
+ `Value of ${mappingKey} is not of valid type. It should be of type ${type}`,
);
}
@@ -217,7 +224,6 @@ function processEventTypeGeneric(message, baseEvent, fbEventName) {
updatedEvent.custom_events[0][fbEventPath][length] = getCorrectedTypedValue(
fbEventPath,
intendValue,
- parentArray[length],
);
length += 1;
count -= 1;
@@ -229,7 +235,7 @@ function processEventTypeGeneric(message, baseEvent, fbEventName) {
set(
updatedEvent.custom_events[0],
fbEventPath,
- getCorrectedTypedValue(fbEventPath, intendValue, rudderEventPath),
+ getCorrectedTypedValue(fbEventPath, intendValue),
);
}
} else {
@@ -245,7 +251,7 @@ function responseBuilderSimple(message, payload, destination) {
// "https://graph.facebook.com/v13.0/644748472345539/activities"
- const endpoint = `https://graph.facebook.com/v17.0/${appID}/activities`;
+ const endpoint = `https://graph.facebook.com/${VERSION}/${appID}/activities`;
const response = defaultRequestConfig();
response.endpoint = endpoint;
diff --git a/src/v0/destinations/fb_custom_audience/config.js b/src/v0/destinations/fb_custom_audience/config.js
index 635ad2a9bbf..284ab0d4a49 100644
--- a/src/v0/destinations/fb_custom_audience/config.js
+++ b/src/v0/destinations/fb_custom_audience/config.js
@@ -1,4 +1,4 @@
-const BASE_URL = 'https://graph.facebook.com/v17.0';
+const BASE_URL = 'https://graph.facebook.com/v18.0';
function getEndPoint(audienceId) {
return `${BASE_URL}/${audienceId}/users`;
@@ -93,7 +93,7 @@ const subTypeFields = [
// const MAX_USER_COUNT = 500; (using from destination definition)
const USER_ADD = 'add';
const USER_DELETE = 'remove';
-/* No official Documentation is available for this but using trial
+/* No official Documentation is available for this but using trial
and error method we found that 65000 bytes is the maximum payload allowed size but we are 60000 just to be sure batching is done properly
*/
const maxPayloadSize = 60000; // bytes
diff --git a/src/v0/destinations/fb_custom_audience/networkHandler.js b/src/v0/destinations/fb_custom_audience/networkHandler.js
new file mode 100644
index 00000000000..0ea7aff7da6
--- /dev/null
+++ b/src/v0/destinations/fb_custom_audience/networkHandler.js
@@ -0,0 +1,6 @@
+const { networkHandler, errorResponseHandler } = require('../../util/facebookUtils/networkHandler');
+
+module.exports = {
+ networkHandler,
+ errorResponseHandler,
+};
diff --git a/src/v0/destinations/fb_custom_audience/transform.js b/src/v0/destinations/fb_custom_audience/transform.js
index 64125ffc3ba..9320a3476b5 100644
--- a/src/v0/destinations/fb_custom_audience/transform.js
+++ b/src/v0/destinations/fb_custom_audience/transform.js
@@ -1,5 +1,10 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const get = require('get-value');
+const {
+ InstrumentationError,
+ TransformationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
defaultPostRequestConfig,
@@ -26,11 +31,6 @@ const {
} = require('./config');
const { MappedToDestinationKey } = require('../../../constants');
-const {
- InstrumentationError,
- TransformationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const responseBuilderSimple = (payload, audienceId) => {
if (payload) {
@@ -62,7 +62,7 @@ const preparePayload = (
disableFormat,
destinationId,
) => {
- const prepareFinalPayload = _.cloneDeep(paramsPayload);
+ const prepareFinalPayload = lodash.cloneDeep(paramsPayload);
if (Array.isArray(userSchema)) {
prepareFinalPayload.schema = userSchema;
} else {
diff --git a/src/v0/destinations/fb_custom_audience/util.js b/src/v0/destinations/fb_custom_audience/util.js
index 809de48a646..47ccb9bf7d2 100644
--- a/src/v0/destinations/fb_custom_audience/util.js
+++ b/src/v0/destinations/fb_custom_audience/util.js
@@ -1,12 +1,12 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const sha256 = require('sha256');
const get = require('get-value');
const jsonSize = require('json-size');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const stats = require('../../../util/stats');
const { isDefinedAndNotNull } = require('../../util');
const { maxPayloadSize } = require('./config');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
/**
* Example payload ={
@@ -20,7 +20,7 @@ const { InstrumentationError, ConfigurationError } = require('../../util/errorTy
],
"data": [
[
- "shrouti@abc.com",
+ "test@abc.com",
"IN"
]
]
@@ -31,7 +31,7 @@ const batchingWithPayloadSize = (payload) => {
const revisedPayloadArray = [];
const noOfBatches = Math.ceil(payloadSize / maxPayloadSize);
const revisedRecordsPerPayload = Math.floor(payload.data.length / noOfBatches);
- const revisedDataArray = _.chunk(payload.data, revisedRecordsPerPayload);
+ const revisedDataArray = lodash.chunk(payload.data, revisedRecordsPerPayload);
revisedDataArray.forEach((data) => {
revisedPayloadArray.push({ ...payload, data });
});
diff --git a/src/v0/destinations/firehose/transform.js b/src/v0/destinations/firehose/transform.js
index b0dc8415799..81e2a1ebc8d 100644
--- a/src/v0/destinations/firehose/transform.js
+++ b/src/v0/destinations/firehose/transform.js
@@ -1,6 +1,6 @@
const isString = require('lodash/isString');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const { getHashFromArray, simpleProcessRouterDest } = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
function getDeliveryStreamMapTo(event) {
const { message, destination } = event;
diff --git a/src/v0/destinations/freshmarketer/config.js b/src/v0/destinations/freshmarketer/config.js
index f1018d439c1..a0d6449c3ab 100644
--- a/src/v0/destinations/freshmarketer/config.js
+++ b/src/v0/destinations/freshmarketer/config.js
@@ -4,23 +4,23 @@ const CONFIG_CATEGORIES = {
IDENTIFY: {
name: 'FRESHMARKETERIdentifyConfig',
type: 'identify',
- baseUrl: '.myfreshworks.com/crm/sales/api/contacts/upsert',
+ baseUrl: '/crm/sales/api/contacts/upsert',
},
GROUP: {
name: 'FRESHMARKETERGroupConfig',
type: 'group',
- baseUrlAccount: '.myfreshworks.com/crm/sales/api/sales_accounts/upsert',
- baseUrlList: '.myfreshworks.com/crm/sales/api/lists',
+ baseUrlAccount: '/crm/sales/api/sales_accounts/upsert',
+ baseUrlList: '/crm/sales/api/lists',
},
SALES_ACTIVITY: {
name: 'SalesActivityConfig',
- baseUrlCreate: '.myfreshworks.com/crm/sales/api/sales_activities',
- baseUrlListAll: '.myfreshworks.com/crm/sales/api/selector/sales_activity_types',
+ baseUrlCreate: '/crm/sales/api/sales_activities',
+ baseUrlListAll: '/crm/sales/api/selector/sales_activity_types',
},
};
-const DELETE_ENDPOINT = '.myfreshworks.com/crm/sales/api/contacts/';
-const LIFECYCLE_STAGE_ENDPOINT = '.myfreshworks.com/crm/sales/api/selector/lifecycle_stages';
+const DELETE_ENDPOINT = '/crm/sales/api/contacts/';
+const LIFECYCLE_STAGE_ENDPOINT = '/crm/sales/api/selector/lifecycle_stages';
const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
module.exports = {
diff --git a/src/v0/destinations/freshmarketer/transform.js b/src/v0/destinations/freshmarketer/transform.js
index 41c604d407e..aa0e03811d8 100644
--- a/src/v0/destinations/freshmarketer/transform.js
+++ b/src/v0/destinations/freshmarketer/transform.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ InstrumentationError,
+ NetworkInstrumentationError,
+ TransformationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -9,11 +14,6 @@ const {
getValidDynamicFormConfig,
simpleProcessRouterDest,
} = require('../../util');
-const {
- InstrumentationError,
- NetworkInstrumentationError,
- TransformationError,
-} = require('../../util/errorTypes');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
diff --git a/src/v0/destinations/freshmarketer/utils.js b/src/v0/destinations/freshmarketer/utils.js
index 5b47bb91706..6fa1fe99762 100644
--- a/src/v0/destinations/freshmarketer/utils.js
+++ b/src/v0/destinations/freshmarketer/utils.js
@@ -1,5 +1,10 @@
/* eslint-disable no-param-reassign */
const get = require('get-value');
+const {
+ InstrumentationError,
+ NetworkInstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const logger = require('../../../logger');
const { httpPOST, httpGET } = require('../../../adapters/network');
const {
@@ -13,11 +18,6 @@ const {
getFieldValueFromMessage,
} = require('../../util');
const { CONFIG_CATEGORIES, LIFECYCLE_STAGE_ENDPOINT } = require('./config');
-const {
- InstrumentationError,
- NetworkInstrumentationError,
- NetworkError,
-} = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -203,7 +203,7 @@ const updateAccountWOContact = (payload, Config) => {
*/
const updateContactWithList = (userId, listId, Config) => {
const response = defaultRequestConfig();
- response.endpoint = `https://${Config.domain}.myfreshworks.com/crm/sales/api/lists/${listId}/add_contacts`;
+ response.endpoint = `https://${Config.domain}/crm/sales/api/lists/${listId}/add_contacts`;
response.headers = getHeaders(Config.apiKey);
response.body.JSON = {
ids: [userId],
diff --git a/src/v0/destinations/freshsales/config.js b/src/v0/destinations/freshsales/config.js
index c6ae4b8165b..62f54c1297d 100644
--- a/src/v0/destinations/freshsales/config.js
+++ b/src/v0/destinations/freshsales/config.js
@@ -4,23 +4,23 @@ const CONFIG_CATEGORIES = {
IDENTIFY: {
name: 'identifyConfig',
type: 'identify',
- baseUrl: '.myfreshworks.com/crm/sales/api/contacts/upsert',
+ baseUrl: '/crm/sales/api/contacts/upsert',
method: 'POST',
},
GROUP: {
name: 'groupConfig',
type: 'group',
- baseUrlAccount: '.myfreshworks.com/crm/sales/api/sales_accounts/upsert',
+ baseUrlAccount: '/crm/sales/api/sales_accounts/upsert',
method: 'POST',
},
SALES_ACTIVITY: {
name: 'SalesActivityConfig',
- baseUrlCreate: '.myfreshworks.com/crm/sales/api/sales_activities',
- baseUrlListAll: '.myfreshworks.com/crm/sales/api/selector/sales_activity_types',
+ baseUrlCreate: '/crm/sales/api/sales_activities',
+ baseUrlListAll: '/crm/sales/api/selector/sales_activity_types',
},
};
-const LIFECYCLE_STAGE_ENDPOINT = '.myfreshworks.com/crm/sales/api/selector/lifecycle_stages';
+const LIFECYCLE_STAGE_ENDPOINT = '/crm/sales/api/selector/lifecycle_stages';
const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
module.exports = {
diff --git a/src/v0/destinations/freshsales/transform.js b/src/v0/destinations/freshsales/transform.js
index 46a9e8c5000..096a2d749cf 100644
--- a/src/v0/destinations/freshsales/transform.js
+++ b/src/v0/destinations/freshsales/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -8,8 +9,8 @@ const {
defaultPostRequestConfig,
getValidDynamicFormConfig,
simpleProcessRouterDest,
+ validateEventName,
} = require('../../util');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
getUserAccountDetails,
@@ -66,9 +67,6 @@ const identifyResponseBuilder = (message, { Config }) => {
* @returns
*/
const trackResponseBuilder = async (message, { Config }, event) => {
- if (!event) {
- throw new InstrumentationError('Event name is required for track call.');
- }
let payload;
const response = defaultRequestConfig();
@@ -126,9 +124,6 @@ const groupResponseBuilder = async (message, { Config }) => {
// Checks if there are any mapping events for the track event and returns them
function eventMappingHandler(message, destination) {
const event = get(message, 'event');
- if (!event) {
- throw new InstrumentationError('Event name is required');
- }
let { rudderEventsToFreshsalesEvents } = destination.Config;
const mappedEvents = new Set();
@@ -162,6 +157,7 @@ const processEvent = async (message, destination) => {
response = identifyResponseBuilder(message, destination);
break;
case EventType.TRACK: {
+ validateEventName(message.event);
const mappedEvents = eventMappingHandler(message, destination);
if (mappedEvents.length > 0) {
const respList = await Promise.all(
diff --git a/src/v0/destinations/freshsales/utils.js b/src/v0/destinations/freshsales/utils.js
index b30d9fa16bc..96acabb0371 100644
--- a/src/v0/destinations/freshsales/utils.js
+++ b/src/v0/destinations/freshsales/utils.js
@@ -1,5 +1,10 @@
/* eslint-disable no-param-reassign */
const get = require('get-value');
+const {
+ NetworkInstrumentationError,
+ InstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const { httpPOST, httpGET } = require('../../../adapters/network');
const {
processAxiosResponse,
@@ -10,11 +15,6 @@ const {
defaultPostRequestConfig,
getFieldValueFromMessage,
} = require('../../util');
-const {
- NetworkInstrumentationError,
- InstrumentationError,
- NetworkError,
-} = require('../../util/errorTypes');
const { CONFIG_CATEGORIES, LIFECYCLE_STAGE_ENDPOINT } = require('./config');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/ga/deleteUsers.js b/src/v0/destinations/ga/deleteUsers.js
index cf4694f44af..bb909a0053a 100644
--- a/src/v0/destinations/ga/deleteUsers.js
+++ b/src/v0/destinations/ga/deleteUsers.js
@@ -1,7 +1,7 @@
const { isEmpty } = require('lodash');
+const { InstrumentationError, OAuthSecretError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
-const { InstrumentationError, OAuthSecretError } = require('../../util/errorTypes');
const { executeCommonValidations } = require('../../util/regulation-api');
const { GA_USER_DELETION_ENDPOINT } = require('./config');
const { gaResponseHandler } = require('./networkHandler');
diff --git a/src/v0/destinations/ga/networkHandler.js b/src/v0/destinations/ga/networkHandler.js
index ac244fb4a7d..57db1cb7afa 100644
--- a/src/v0/destinations/ga/networkHandler.js
+++ b/src/v0/destinations/ga/networkHandler.js
@@ -1,10 +1,13 @@
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
+const { NetworkError, InvalidAuthTokenError } = require('@rudderstack/integrations-lib');
+const {
+ REFRESH_TOKEN,
+ AUTH_STATUS_INACTIVE,
+} = require('../../../adapters/networkhandler/authConstants');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, InvalidAuthTokenError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
/**
@@ -29,6 +32,18 @@ const gaResponseHandler = (gaResponse) => {
if (isInvalidCredsError || response?.error?.status === 'UNAUTHENTICATED') {
throw new InvalidAuthTokenError('invalid credentials', 500, response, REFRESH_TOKEN);
}
+ const isInvalidGrantError =
+ response?.error.code === 403 &&
+ response.error?.errors?.some((errObj) => errObj.reason === 'insufficientPermissions');
+ if (isInvalidGrantError) {
+ throw new InvalidAuthTokenError(
+ response?.error?.message || 'insufficent permissions',
+ 400,
+ response,
+ AUTH_STATUS_INACTIVE,
+ );
+ }
+
throw new NetworkError(
`Error occurred while completing deletion request: ${response.error?.message}`,
status,
diff --git a/src/v0/destinations/ga/transform.js b/src/v0/destinations/ga/transform.js
index 0c2a0f8a49b..32e94bdd41a 100644
--- a/src/v0/destinations/ga/transform.js
+++ b/src/v0/destinations/ga/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-nested-ternary */
const get = require('get-value');
const md5 = require('md5');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const { Event, GA_ENDPOINT, ConfigCategory, mappingConfig, nameToEventMap } = require('./config');
const { setContextualFields } = require('./utils');
@@ -19,7 +20,6 @@ const {
} = require('../../util');
const { isDefinedAndNotNull } = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const gaDisplayName = 'Google Analytics';
@@ -443,7 +443,7 @@ function processRefundEvent(message, destination) {
let { enhancedEcommerce } = destination.Config;
enhancedEcommerce = enhancedEcommerce || false;
- // eslint-disable-next-line camelcase
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { products, order_id } = message.properties;
if (products && products.length > 0) {
const productParams = setProductLevelProperties(
@@ -598,7 +598,7 @@ function processProductEvent(message, destination) {
const customParamKeys = getCustomParamKeys(destination.Config);
Object.assign(parameters, getProductLevelCustomParams(message.properties, 1, customParamKeys));
}
- // eslint-disable-next-line camelcase
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { sku, product_id } = message.properties;
// eslint-disable-next-line camelcase
const productId = product_id;
diff --git a/src/v0/destinations/ga/utils.js b/src/v0/destinations/ga/utils.js
index 0d3a2f97985..617f2522a00 100644
--- a/src/v0/destinations/ga/utils.js
+++ b/src/v0/destinations/ga/utils.js
@@ -1,4 +1,4 @@
-const { InstrumentationError } = require('../../util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { GA_ENDPOINT } = require('./config');
/**
diff --git a/src/v0/destinations/ga360/transform.js b/src/v0/destinations/ga360/transform.js
index a9d4f6b2103..3655c330d51 100644
--- a/src/v0/destinations/ga360/transform.js
+++ b/src/v0/destinations/ga360/transform.js
@@ -1,5 +1,6 @@
const get = require('get-value');
const md5 = require('md5');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { Event, GA_ENDPOINT, ConfigCategory, mappingConfig, nameToEventMap } = require('./config');
const {
@@ -12,7 +13,6 @@ const {
getDestinationExternalID,
simpleProcessRouterDest,
} = require('../../util');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const gaDisplayName = 'Google Analytics';
@@ -401,7 +401,7 @@ function processRefundEvent(message, destination) {
let { enhancedEcommerce } = destination.Config;
enhancedEcommerce = enhancedEcommerce || false;
- // eslint-disable-next-line camelcase
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { products, order_id } = message.properties;
if (products && products.length > 0) {
const productParams = setProductLevelProperties(
@@ -545,7 +545,7 @@ function processProductEvent(message, destination) {
const customParamKeys = getCustomParamKeys(destination.Config);
Object.assign(parameters, getProductLevelCustomParams(message.properties, 1, customParamKeys));
}
- // eslint-disable-next-line camelcase
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { sku, product_id } = message.properties;
// eslint-disable-next-line camelcase
const productId = product_id;
diff --git a/src/v0/destinations/ga4/config.js b/src/v0/destinations/ga4/config.js
index a177107b4e1..d76e2d26396 100644
--- a/src/v0/destinations/ga4/config.js
+++ b/src/v0/destinations/ga4/config.js
@@ -45,6 +45,7 @@ const ConfigCategory = {
name: 'GA4GenerateLeadConfig',
event: 'generate_lead',
},
+ CAMPAIGN_DETAILS: { name: 'GA4CampaignDetailsConfig', event: 'campaign_details' },
/* E-Commerce Events */
// Ref - https://www.rudderstack.com/docs/rudderstack-api/api-specification/rudderstack-ecommerce-events-specification/
diff --git a/src/v0/destinations/ga4/data/GA4CampaignDetailsConfig.json b/src/v0/destinations/ga4/data/GA4CampaignDetailsConfig.json
new file mode 100644
index 00000000000..85a55c0c46b
--- /dev/null
+++ b/src/v0/destinations/ga4/data/GA4CampaignDetailsConfig.json
@@ -0,0 +1,32 @@
+[
+ {
+ "destKey": "campaign_id",
+ "sourceKeys": ["context.campaign.id", "properties.campaign.id"],
+ "required": false
+ },
+ {
+ "destKey": "campaign",
+ "sourceKeys": ["context.campaign.name", "properties.campaign.name"],
+ "required": false
+ },
+ {
+ "destKey": "source",
+ "sourceKeys": ["context.campaign.source", "properties.campaign.source"],
+ "required": false
+ },
+ {
+ "destKey": "medium",
+ "sourceKeys": ["context.campaign.medium", "properties.campaign.medium"],
+ "required": false
+ },
+ {
+ "destKey": "term",
+ "sourceKeys": ["context.campaign.term", "properties.campaign.term"],
+ "required": false
+ },
+ {
+ "destKey": "content",
+ "sourceKeys": ["context.campaign.content", "properties.campaign.content"],
+ "required": false
+ }
+]
diff --git a/src/v0/destinations/ga4/networkHandler.js b/src/v0/destinations/ga4/networkHandler.js
index e90d2c30953..b62fcc8d3bd 100644
--- a/src/v0/destinations/ga4/networkHandler.js
+++ b/src/v0/destinations/ga4/networkHandler.js
@@ -1,3 +1,4 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const {
getDynamicErrorType,
@@ -5,7 +6,6 @@ const {
} = require('../../../adapters/utils/networkUtils');
const { isDefinedAndNotNull, isDefined, isHttpStatusSuccess } = require('../../util');
-const { NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const responseHandler = (destinationResponse, dest) => {
diff --git a/src/v0/destinations/ga4/transform.js b/src/v0/destinations/ga4/transform.js
index dc899270859..d8fc531e92c 100644
--- a/src/v0/destinations/ga4/transform.js
+++ b/src/v0/destinations/ga4/transform.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ ConfigurationError,
+ InstrumentationError,
+ UnsupportedEventError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
isEmptyObject,
@@ -11,11 +16,6 @@ const {
getDestinationExternalID,
removeUndefinedAndNullValues,
} = require('../../util');
-const {
- ConfigurationError,
- InstrumentationError,
- UnsupportedEventError,
-} = require('../../util/errorTypes');
const {
ENDPOINT,
mappingConfig,
@@ -106,7 +106,7 @@ const responseBuilder = (message, { Config }) => {
}
break;
default:
- throw ConfigurationError('Invalid type of client');
+ throw new ConfigurationError('Invalid type of client');
}
let payload = {};
@@ -119,7 +119,7 @@ const responseBuilder = (message, { Config }) => {
payload.name = evConfigEvent;
payload.params = constructPayload(message, mappingConfig[name]);
- const { items, mapRootLevelPropertiesToGA4ItemsArray } = getItemsArray(message, item, itemList)
+ const { items, mapRootLevelPropertiesToGA4ItemsArray } = getItemsArray(message, item, itemList);
if (items.length > 0) {
payload.params.items = items;
@@ -233,7 +233,7 @@ const responseBuilder = (message, { Config }) => {
}
// Prepare GA4 user properties
- const userProperties = prepareUserProperties(message);
+ const userProperties = prepareUserProperties(message, Config.piiPropertiesToIgnore);
if (!isEmptyObject(userProperties)) {
rawPayload.user_properties = userProperties;
}
diff --git a/src/v0/destinations/ga4/utils.js b/src/v0/destinations/ga4/utils.js
index b86d14ef1ba..e4db494727b 100644
--- a/src/v0/destinations/ga4/utils.js
+++ b/src/v0/destinations/ga4/utils.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
isEmpty,
constructPayload,
@@ -7,7 +8,6 @@ const {
extractCustomFields,
isDefinedAndNotNull,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { mappingConfig, ConfigCategory } = require('./config');
/**
@@ -166,13 +166,15 @@ const GA4_ITEM_EXCLUSION = [
];
/**
- * Remove arrays and objects from transformed payload
- * @param {*} params
- * @returns
+ * Remove arrays and objects from transformed payload
+ * @param {*} params
+ * @returns
*/
const removeInvalidParams = (params) =>
Object.fromEntries(
- Object.entries(params).filter(([key, value]) => key === 'items' || (typeof value !== 'object' && !isEmpty(value))),
+ Object.entries(params).filter(
+ ([key, value]) => key === 'items' || (typeof value !== 'object' && !isEmpty(value)),
+ ),
);
/**
@@ -244,10 +246,10 @@ const getItem = (message, isItemsRequired) => {
/**
* Returns items array for ga4 event payload
- * @param {*} message
- * @param {*} item
- * @param {*} itemList
- * @returns
+ * @param {*} message
+ * @param {*} item
+ * @param {*} itemList
+ * @returns
*/
const getItemsArray = (message, item, itemList) => {
let items = [];
@@ -269,7 +271,7 @@ const getItemsArray = (message, item, itemList) => {
}
return { items, mapRootLevelPropertiesToGA4ItemsArray };
-}
+};
/**
* get exclusion list for a particular event
* ga4ExclusionList contains the sourceKeys that are already mapped
@@ -398,21 +400,33 @@ const isValidUserProperty = (key, value) => {
/**
* Function to validate and prepare user_properties
* @param {*} message
+ * @param {*} piiPropertiesToIgnore
+ * @returns
*/
-const prepareUserProperties = (message) => {
+const prepareUserProperties = (message, piiPropertiesToIgnore = []) => {
+ // Exclude PII user traits
+ const piiProperties = [];
+ if (piiPropertiesToIgnore.length > 0) {
+ piiPropertiesToIgnore.forEach((property) => {
+ if (typeof property.piiProperty === 'string' && property.piiProperty.trim() !== '') {
+ piiProperties.push(property.piiProperty.trim());
+ }
+ });
+ }
+
const userProperties = extractCustomFields(
message,
{},
['properties.user_properties', 'context.traits'],
- GA4_RESERVED_USER_PROPERTY_EXCLUSION,
+ [...GA4_RESERVED_USER_PROPERTY_EXCLUSION, ...piiProperties],
);
const validatedUserProperties = Object.entries(userProperties)
.filter(([key, value]) => isValidUserProperty(key, value))
.reduce((acc, [key, value]) => {
- const userProperties = acc;
- userProperties[key] = { value };
- return userProperties;
+ const userPropertiesObj = acc;
+ userPropertiesObj[key] = { value };
+ return userPropertiesObj;
}, {});
return validatedUserProperties;
diff --git a/src/v0/destinations/ga4/utils.test.js b/src/v0/destinations/ga4/utils.test.js
index a39fef6f5e5..7826c23d351 100644
--- a/src/v0/destinations/ga4/utils.test.js
+++ b/src/v0/destinations/ga4/utils.test.js
@@ -2,7 +2,7 @@ const { validateEventName, prepareUserProperties, removeInvalidParams } = requir
const userPropertyData = [
{
- description: "Should validate and prepare user_properties",
+ description: 'Should validate and prepare user_properties',
input: {
userId: 'user@1',
group_id: 'group@1',
@@ -163,6 +163,256 @@ describe('Google Analytics 4 utils test', () => {
});
describe('prepareUserProperties function tests', () => {
+ // Empty message and context returns empty object
+ it('should return empty object when message and context are empty', () => {
+ // Arrange
+ const message = {};
+ const context = {};
+
+ // Act
+ const result = prepareUserProperties(message, []);
+
+ // Assert
+ expect(result).toEqual({});
+ });
+
+ // Filters out reserved and PII properties
+ it('should filter out reserved and PII properties', () => {
+ // Arrange
+ const message = {
+ context: {
+ traits: {
+ property3: 'value3',
+ property4: 'value4',
+ pii_property3: 'pii_value3',
+ pii_property4: 'pii_value4',
+ },
+ },
+ properties: {
+ user_properties: {
+ property1: 'value1',
+ property2: 'value2',
+ pii_property1: 'pii_value1',
+ pii_property2: 'pii_value2',
+ },
+ },
+ };
+
+ const piiPropertiesToIgnore = [
+ { piiProperty: 'pii_property1' },
+ { piiProperty: 'pii_property2' },
+ { piiProperty: 'pii_property3' },
+ { piiProperty: 'pii_property4' },
+ ];
+
+ // Act
+ const result = prepareUserProperties(message, piiPropertiesToIgnore);
+
+ // Assert
+ expect(result).toEqual({
+ property1: { value: 'value1' },
+ property2: { value: 'value2' },
+ property3: { value: 'value3' },
+ property4: { value: 'value4' },
+ });
+ });
+
+ // Validates user properties and returns them in expected format
+ it('should validate user properties and return them in expected format', () => {
+ // Arrange
+ const message = {
+ context: {
+ traits: {
+ valid_property3: 'value3',
+ _invalid_property3: '12_invalid_value3',
+ valid_property4: 'value4',
+ invalid_property4: [],
+ },
+ },
+ properties: {
+ user_properties: {
+ valid_property1: 'value1',
+ '12invalid_property1': 'ga_invalid_value1',
+ valid_property2: 'value2',
+ ga_invalid_property2: 'google_invalid_value2',
+ },
+ },
+ };
+ // Act
+ const result = prepareUserProperties(message, []);
+
+ // Assert
+ expect(result).toEqual({
+ valid_property1: { value: 'value1' },
+ valid_property2: { value: 'value2' },
+ valid_property3: { value: 'value3' },
+ valid_property4: { value: 'value4' },
+ });
+ });
+
+ // Invalid user properties are filtered out
+
+ // User properties with invalid value types are filtered out
+ it('should filter out user properties with invalid value types', () => {
+ // Arrange
+ const message = {
+ context: {
+ traits: {
+ valid_property3: 'value3',
+ invalid_property3: { 456: 'value3' },
+ valid_property4: 'value4',
+ invalid_property4: '01234567890123456789012345678901234567890123456789',
+ },
+ },
+ properties: {
+ user_properties: {
+ valid_property1: 'value1',
+ invalid_property1: [123, 456],
+ valid_property2: 'value2',
+ },
+ },
+ };
+
+ // Act
+ const result = prepareUserProperties(message, []);
+
+ // Assert
+ expect(result).toEqual({
+ valid_property1: { value: 'value1' },
+ valid_property2: { value: 'value2' },
+ valid_property3: { value: 'value3' },
+ valid_property4: { value: 'value4' },
+ });
+ });
+
+ // PII properties are filtered out
+ it('should filter out PII properties from user_properties', () => {
+ // Arrange
+ const message = {
+ properties: {
+ user_properties: {
+ property1: 'value1',
+ property2: 'value2',
+ pii_property1: 'pii_value1',
+ pii_property2: 'pii_value2',
+ },
+ },
+ };
+ const piiPropertiesToIgnore = [
+ { piiProperty: 'pii_property1' },
+ { piiProperty: 'pii_property2' },
+ ];
+
+ // Act
+ const result = prepareUserProperties(message, piiPropertiesToIgnore);
+
+ // Assert
+ expect(result).toEqual({
+ property1: { value: 'value1' },
+ property2: { value: 'value2' },
+ });
+ });
+
+ // PII properties are undefined
+ it('should return undefined when user_properties is undefined', () => {
+ // Arrange
+ const message = {
+ properties: {
+ user_properties: {
+ property1: 'value1',
+ property2: 'value2',
+ pii_property1: 'pii_value1',
+ pii_property2: 'pii_value2',
+ },
+ },
+ };
+ const piiPropertiesToIgnore = undefined;
+
+ // Act
+ const result = prepareUserProperties(message, piiPropertiesToIgnore);
+
+ // Assert
+ expect(result).toEqual({
+ pii_property1: { value: 'pii_value1' },
+ pii_property2: { value: 'pii_value2' },
+ property1: { value: 'value1' },
+ property2: { value: 'value2' },
+ });
+ });
+
+ // User properties with valid keys and values are returned in expected format
+ it('should return user properties with valid keys and values in expected format', () => {
+ // Arrange
+ const message = {
+ properties: {
+ user_properties: {
+ property1: 'value1',
+ property2: 'value2',
+ },
+ },
+ };
+
+ // Act
+ const result = prepareUserProperties(message, []);
+
+ // Assert
+ expect(result).toEqual({
+ property1: { value: 'value1' },
+ property2: { value: 'value2' },
+ });
+ });
+
+ // User properties with valid keys but invalid values are filtered out
+ it('should filter out user properties with invalid values', () => {
+ // Arrange
+ const message = {
+ properties: {
+ user_properties: {
+ validKey1: 'validValue1',
+ validKey2: 'validValue2',
+ invalidKey1: '',
+ invalidKey2:
+ 'invalidValueThatIsTooLongInvalidValueThatIsTooLongInvalidValueThatIsTooLongInvalidValueThatIsTooLong',
+ validKey4: true,
+ },
+ },
+ };
+ const piiPropertiesToIgnore = [];
+
+ // Act
+ const result = prepareUserProperties(message, piiPropertiesToIgnore);
+
+ // Assert
+ expect(result).toEqual({
+ validKey1: { value: 'validValue1' },
+ validKey2: { value: 'validValue2' },
+ validKey4: { value: true },
+ });
+ });
+ // User properties with keys starting with reserved prefixes are filtered out
+ it('should filter out user properties with keys starting with reserved prefixes', () => {
+ // Arrange
+ const message = {
+ properties: {
+ user_properties: {
+ google_property: 'value1',
+ ga_property: 'value2',
+ firebase_property: 'value3',
+ valid_property: 'value4',
+ },
+ },
+ };
+ const piiPropertiesToIgnore = [];
+
+ // Act
+ const result = prepareUserProperties(message, piiPropertiesToIgnore);
+
+ // Assert
+ expect(result).toEqual({
+ valid_property: { value: 'value4' },
+ });
+ });
+
userPropertyData.forEach((dataPoint) => {
it(`${dataPoint.description}`, () => {
try {
diff --git a/src/v0/destinations/gainsight/transform.js b/src/v0/destinations/gainsight/transform.js
index f58fc0d5666..f47296f066c 100644
--- a/src/v0/destinations/gainsight/transform.js
+++ b/src/v0/destinations/gainsight/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-nested-ternary */
const set = require('set-value');
const get = require('get-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
identifyMapping,
@@ -28,7 +29,6 @@ const {
renameCustomFieldsFromMap,
getConfigOrThrowError,
} = require('./util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
/**
diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js
index 3c986b420df..39e666c1a58 100644
--- a/src/v0/destinations/gainsight/util.js
+++ b/src/v0/destinations/gainsight/util.js
@@ -1,7 +1,11 @@
+const {
+ ConfigurationError,
+ RetryableError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const logger = require('../../../logger');
-const { ConfigurationError, RetryableError, NetworkError } = require('../../util/errorTypes');
const { ENDPOINTS, getLookupPayload } = require('./config');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/gainsight_px/transform.js b/src/v0/destinations/gainsight_px/transform.js
index ab66b87c5a4..4d91980f117 100644
--- a/src/v0/destinations/gainsight_px/transform.js
+++ b/src/v0/destinations/gainsight_px/transform.js
@@ -1,4 +1,5 @@
/* eslint-disable no-nested-ternary */
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
isEmptyObject,
@@ -29,7 +30,6 @@ const {
groupMapping,
identifyMapping,
} = require('./config');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
/**
diff --git a/src/v0/destinations/gainsight_px/util.js b/src/v0/destinations/gainsight_px/util.js
index 6900180ab50..5109286b3f3 100644
--- a/src/v0/destinations/gainsight_px/util.js
+++ b/src/v0/destinations/gainsight_px/util.js
@@ -1,6 +1,6 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { ENDPOINTS } = require('./config');
-const { NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/config.js b/src/v0/destinations/google_adwords_enhanced_conversions/config.js
index a86d0606a6f..66d12c34d77 100644
--- a/src/v0/destinations/google_adwords_enhanced_conversions/config.js
+++ b/src/v0/destinations/google_adwords_enhanced_conversions/config.js
@@ -1,6 +1,6 @@
const { getMappingConfig } = require('../../util');
-const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers';
+const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers';
const CONFIG_CATEGORIES = {
TRACK_CONFIG: { type: 'track', name: 'trackConfig' },
diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js
index 5349b741780..8ac432935f9 100644
--- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js
+++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js
@@ -1,8 +1,8 @@
const { get, set } = require('lodash');
const sha256 = require('sha256');
+const { NetworkError, NetworkInstrumentationError } = require('@rudderstack/integrations-lib');
const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network');
-const { isHttpStatusSuccess } = require('../../util/index');
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
+const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index');
const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config');
const Cache = require('../../util/cache');
@@ -13,20 +13,10 @@ const {
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { BASE_ENDPOINT } = require('./config');
-const { NetworkError, NetworkInstrumentationError } = require('../../util/errorTypes');
+
const tags = require('../../util/tags');
-/**
- * This function helps to detarmine type of error occured. According to the response
- * we set authErrorCategory to take decision if we need to refresh the access_token
- * or need to disable the destination.
- * @param {*} code
- * @param {*} response
- * @returns
- */
-const getAuthErrCategory = (code, response) => {
- if (code === 401 && !get(response, 'error.details')) return REFRESH_TOKEN;
- return '';
-};
+
+const ERROR_MSG_PATH = 'response[0].error.message';
/**
* This function is used for collecting the conversionActionId using the conversion name
@@ -59,8 +49,8 @@ const getConversionActionId = async (method, headers, params) => {
if (!isHttpStatusSuccess(gaecConversionActionIdResponse.status)) {
throw new NetworkError(
`"${JSON.stringify(
- get(gaecConversionActionIdResponse, 'response[0].error.message', '')
- ? get(gaecConversionActionIdResponse, 'response[0].error.message', '')
+ get(gaecConversionActionIdResponse, ERROR_MSG_PATH, '')
+ ? get(gaecConversionActionIdResponse, ERROR_MSG_PATH, '')
: gaecConversionActionIdResponse.response,
)} during Google_adwords_enhanced_conversions response transformation"`,
gaecConversionActionIdResponse.status,
@@ -68,10 +58,7 @@ const getConversionActionId = async (method, headers, params) => {
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(gaecConversionActionIdResponse.status),
},
gaecConversionActionIdResponse.response,
- getAuthErrCategory(
- get(gaecConversionActionIdResponse, 'status'),
- get(gaecConversionActionIdResponse, 'response[0].error.message'),
- ),
+ getAuthErrCategoryFromStCode(gaecConversionActionIdResponse.status),
);
}
const conversionActionId = get(
@@ -117,7 +104,23 @@ const responseHandler = (destinationResponse) => {
const message = 'Request Processed Successfully';
const { status } = destinationResponse;
if (isHttpStatusSuccess(status)) {
- // Mostly any error will not have a status of 2xx
+ // for google ads enhance conversions the partialFailureError returns with status 200
+ const { partialFailureError } = destinationResponse.response;
+ // non-zero code signifies partialFailure
+ // Ref - https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
+ if (partialFailureError && partialFailureError.code !== 0) {
+ throw new NetworkError(
+ `[Google Ads Offline Conversions]:: partialFailureError - ${JSON.stringify(
+ partialFailureError,
+ )}`,
+ 400,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(400),
+ },
+ partialFailureError,
+ );
+ }
+
return {
status,
message,
@@ -134,10 +137,11 @@ const responseHandler = (destinationResponse) => {
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
},
response,
- getAuthErrCategory(status, response),
+ getAuthErrCategoryFromStCode(status),
);
};
-// eslint-disable-next-line func-names
+
+// eslint-disable-next-line func-names, @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.proxy = ProxyRequest;
@@ -146,4 +150,5 @@ class networkHandler {
this.prepareProxy = prepareProxyRequest;
}
}
+
module.exports = { networkHandler };
diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js
index 96ef0890016..0be7c3f0ee5 100644
--- a/src/v0/destinations/google_adwords_enhanced_conversions/transform.js
+++ b/src/v0/destinations/google_adwords_enhanced_conversions/transform.js
@@ -2,20 +2,16 @@
const get = require('get-value');
const { cloneDeep } = require('lodash');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const {
constructPayload,
defaultRequestConfig,
getValueFromMessage,
removeHyphens,
simpleProcessRouterDest,
+ getAccessToken,
} = require('../../util');
-const {
- InstrumentationError,
- ConfigurationError,
- OAuthSecretError,
-} = require('../../util/errorTypes');
-
const { trackMapping, BASE_ENDPOINT } = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -36,34 +32,13 @@ const updateMappingJson = (mapping) => {
return newMapping;
};
-/**
- * Get access token to be bound to the event req headers
- *
- * Note:
- * This method needs to be implemented particular to the destination
- * As the schema that we'd get in `metadata.secret` can be different
- * for different destinations
- *
- * @param {Object} metadata
- * @returns
- */
-const getAccessToken = (metadata) => {
- // OAuth for this destination
- const { secret } = metadata;
- // we would need to verify if secret is present and also if the access token field is present in secret
- if (!secret || !secret.access_token) {
- throw new OAuthSecretError('Empty/Invalid access token');
- }
- return secret.access_token;
-};
-
const responseBuilder = async (metadata, message, { Config }, payload) => {
const response = defaultRequestConfig();
const { event } = message;
const filteredCustomerId = removeHyphens(Config.customerId);
response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}:uploadConversionAdjustments`;
response.body.JSON = payload;
- const accessToken = getAccessToken(metadata);
+ const accessToken = getAccessToken(metadata, 'access_token');
response.headers = {
Authorization: `Bearer ${accessToken}`,
'Content-Type': JSON_MIME_TYPE,
diff --git a/src/v0/destinations/google_adwords_offline_conversions/config.js b/src/v0/destinations/google_adwords_offline_conversions/config.js
index 1d77af02e68..a02732894fb 100644
--- a/src/v0/destinations/google_adwords_offline_conversions/config.js
+++ b/src/v0/destinations/google_adwords_offline_conversions/config.js
@@ -1,6 +1,6 @@
const { getMappingConfig } = require('../../util');
-const API_VERSION = 'v13';
+const API_VERSION = 'v14';
const BASE_ENDPOINT = `https://googleads.googleapis.com/${API_VERSION}/customers/:customerId`;
diff --git a/src/v0/destinations/google_adwords_offline_conversions/helper.js b/src/v0/destinations/google_adwords_offline_conversions/helper.js
new file mode 100644
index 00000000000..047cebedf23
--- /dev/null
+++ b/src/v0/destinations/google_adwords_offline_conversions/helper.js
@@ -0,0 +1,9 @@
+const moment = require('moment-timezone');
+
+module.exports = {
+ formatTimestamp: (timestamp) => {
+ const tsMomentInstance = moment(timestamp);
+ const offsetFromUtc = tsMomentInstance.utcOffset();
+ return tsMomentInstance.utcOffset(offsetFromUtc).format('YYYY-MM-DD HH:mm:ssZ');
+ },
+};
diff --git a/src/v0/destinations/google_adwords_offline_conversions/helper.test.js b/src/v0/destinations/google_adwords_offline_conversions/helper.test.js
new file mode 100644
index 00000000000..2ac5c6cfa04
--- /dev/null
+++ b/src/v0/destinations/google_adwords_offline_conversions/helper.test.js
@@ -0,0 +1,31 @@
+const moment = require('moment-timezone');
+const { formatTimestamp } = require('./helper');
+
+describe('google adwords offline conversions - helper', () => {
+ it('should correctly format to IST', () => {
+ moment.tz.setDefault('Asia/Calcutta');
+ expect(formatTimestamp('2019-10-14 11:15:18.299Z')).toEqual('2019-10-14 16:45:18+05:30');
+ });
+ it('should correctly format to UTC', () => {
+ moment.tz.setDefault('UTC');
+ expect(formatTimestamp('2019-10-14 11:15:18.299Z')).toEqual('2019-10-14 11:15:18+00:00');
+ });
+ it('should return "Invalid date" when a string not in date-format is sent as argument', () => {
+ expect(formatTimestamp('abc')).toEqual('Invalid date');
+ });
+ it('should return offset value correctly when number is passed', () => {
+ moment.tz.setDefault('Asia/Tokyo');
+ expect(formatTimestamp(11245)).toEqual('1970-01-01 09:00:11+09:00');
+ });
+ it('should return current date when a value not string is sent as argument', () => {
+ moment.tz.setDefault('UTC');
+ const spy = jest.spyOn(Date, 'now').mockReturnValue('2023-10-22 12:51:30+00:00');
+ expect(formatTimestamp([])).toEqual('2023-10-22 12:51:30+00:00');
+ expect(formatTimestamp({})).toEqual('2023-10-22 12:51:30+00:00');
+ expect(formatTimestamp(undefined)).toEqual('2023-10-22 12:51:30+00:00');
+ spy.mockClear();
+ });
+ it('should return "Invalid date" when null value is passed as argument', () => {
+ expect(formatTimestamp(null)).toEqual('Invalid date');
+ });
+});
diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js
index 4d960f94d75..a87a2431f2c 100644
--- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js
+++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js
@@ -1,12 +1,17 @@
const set = require('set-value');
const get = require('get-value');
const sha256 = require('sha256');
+const {
+ AbortedError,
+ NetworkInstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const { prepareProxyRequest, httpSend, httpPOST } = require('../../../adapters/network');
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
const {
isHttpStatusSuccess,
getHashFromArray,
isDefinedAndNotNullAndNotEmpty,
+ getAuthErrCategoryFromStCode,
} = require('../../util');
const { getConversionActionId } = require('./utils');
const Cache = require('../../util/cache');
@@ -15,30 +20,10 @@ const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const {
- AbortedError,
- NetworkInstrumentationError,
- NetworkError,
-} = require('../../util/errorTypes');
const tags = require('../../util/tags');
const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL);
-/**
- * This function helps to determine the type of error occurred. We set the authErrorCategory
- * as per the destination response that is received and take the decision whether
- * to refresh the access_token or disable the destination.
- * @param {*} status
- * @returns
- */
-const getAuthErrCategory = (status) => {
- if (status === 401) {
- // UNAUTHORIZED
- return REFRESH_TOKEN;
- }
- return '';
-};
-
const createJob = async (endpoint, headers, payload) => {
const endPoint = `${endpoint}:create`;
let createJobResponse = await httpPOST(
@@ -57,7 +42,7 @@ const createJob = async (endpoint, headers, payload) => {
`[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`,
status,
response,
- getAuthErrCategory(status),
+ getAuthErrCategoryFromStCode(status),
);
}
return response.resourceName.split('/')[3];
@@ -80,7 +65,7 @@ const addConversionToJob = async (endpoint, headers, jobId, payload) => {
`[Google Ads Offline Conversions]:: ${addConversionToJobResponse.response?.error?.message} during google_ads_offline_store_conversions Add Conversion`,
addConversionToJobResponse.status,
addConversionToJobResponse.response,
- getAuthErrCategory(get(addConversionToJobResponse, 'status')),
+ getAuthErrCategoryFromStCode(get(addConversionToJobResponse, 'status')),
);
}
return true;
@@ -131,7 +116,7 @@ const getConversionCustomVariable = async (headers, params) => {
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(searchStreamResponse.status),
},
searchStreamResponse?.response || searchStreamResponse,
- getAuthErrCategory(searchStreamResponse.status),
+ getAuthErrCategoryFromStCode(searchStreamResponse.status),
);
}
const conversionCustomVariable = get(searchStreamResponse, 'response.0.results');
@@ -174,6 +159,24 @@ const getConversionCustomVariableHashMap = (arrays) => {
return hashMap;
};
+/**
+ * Validates custom variable
+ * @param {*} customVariables
+ * @returns
+ */
+const isValidCustomVariables = (customVariables) => {
+ if (
+ isDefinedAndNotNullAndNotEmpty(customVariables) &&
+ Array.isArray(customVariables) &&
+ customVariables.length > 0
+ ) {
+ return customVariables.some(
+ (customVariable) => !!(customVariable.from !== '' && customVariable.to !== ''),
+ );
+ }
+ return false;
+};
+
/**
* collect conversionActionId for conversionAction parameter
* @param {*} request
@@ -206,7 +209,7 @@ const ProxyRequest = async (request) => {
set(body.JSON, 'conversions.0.conversionAction', conversionActionId);
}
// customVariables would be undefined in case of Store Conversions
- if (isDefinedAndNotNullAndNotEmpty(params.customVariables)) {
+ if (isValidCustomVariables(params.customVariables)) {
// fetch all conversion custom variable in google ads
let conversionCustomVariable = await getConversionCustomVariable(headers, params);
@@ -252,9 +255,9 @@ const responseHandler = (destinationResponse) => {
if (partialFailureError && partialFailureError.code !== 0) {
throw new NetworkError(
`[Google Ads Offline Conversions]:: partialFailureError - ${partialFailureError?.message}`,
- status,
+ 400,
{
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(400),
},
partialFailureError,
);
@@ -274,7 +277,7 @@ const responseHandler = (destinationResponse) => {
`[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_conversions response transformation`,
status,
response,
- getAuthErrCategory(status),
+ getAuthErrCategoryFromStCode(status),
);
};
diff --git a/src/v0/destinations/google_adwords_offline_conversions/transform.js b/src/v0/destinations/google_adwords_offline_conversions/transform.js
index db87d2488ef..397895c6032 100644
--- a/src/v0/destinations/google_adwords_offline_conversions/transform.js
+++ b/src/v0/destinations/google_adwords_offline_conversions/transform.js
@@ -1,5 +1,5 @@
const { set, get } = require('lodash');
-const moment = require('moment');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
getHashFromArrayWithDuplicate,
@@ -22,7 +22,7 @@ const {
requestBuilder,
getClickConversionPayloadAndEndpoint,
} = require('./utils');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
+const helper = require('./helper');
/**
* get conversions depending on the type set from dashboard
@@ -65,9 +65,7 @@ const getConversions = (message, metadata, { Config }, event, conversionType) =>
// eslint-disable-next-line unicorn/consistent-destructuring
if (!properties.conversionDateTime && (timestamp || originalTimestamp)) {
const conversionTimestamp = timestamp || originalTimestamp;
- const conversionDateTime = moment(conversionTimestamp)
- .utcOffset(moment(conversionTimestamp).utcOffset())
- .format('YYYY-MM-DD HH:mm:ssZ');
+ const conversionDateTime = helper.formatTimestamp(conversionTimestamp);
set(payload, 'conversions[0].conversionDateTime', conversionDateTime);
}
payload.partialFailure = true;
@@ -100,7 +98,9 @@ const trackResponseBuilder = (message, metadata, destination) => {
const responseList = [];
if (!eventsToConversionsNamesMapping[event] || !eventsToOfflineConversionsTypeMapping[event]) {
- throw new ConfigurationError(`Event name '${event}' is not valid`);
+ throw new ConfigurationError(
+ `Event name '${event}' is not present in the mapping provided in the dashboard.`,
+ );
}
const conversionTypes = Array.from(eventsToOfflineConversionsTypeMapping[event]);
conversionTypes.forEach((conversionType) => {
@@ -139,6 +139,7 @@ const process = async (event) => {
const getEventChunks = (event, storeSalesEvents, clickCallEvents) => {
const { message, metadata, destination } = event;
+ // eslint-disable-next-line @typescript-eslint/no-shadow
message.forEach((message) => {
if (message.body.JSON?.isStoreConversion) {
storeSalesEvents.push({ message, metadata, destination });
@@ -166,7 +167,7 @@ const batchEvents = (storeSalesEvents) => {
if (index === 0) {
return;
}
- batchEventResponse.batchedRequest?.body?.JSON['addConversionPayload']?.operations?.push(
+ batchEventResponse.batchedRequest?.body?.JSON.addConversionPayload?.operations?.push(
storeSalesEvent.message?.body?.JSON?.addConversionPayload?.operations,
);
batchEventResponse.metadatas.push(storeSalesEvent.metadata);
diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js
index 6131b5dde70..c69c5a436f1 100644
--- a/src/v0/destinations/google_adwords_offline_conversions/utils.js
+++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js
@@ -1,6 +1,10 @@
const sha256 = require('sha256');
const { get, set, cloneDeep } = require('lodash');
-const moment = require('moment');
+const {
+ AbortedError,
+ ConfigurationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const {
isHttpStatusSuccess,
@@ -11,8 +15,9 @@ const {
getFieldValueFromMessage,
isDefinedAndNotNullAndNotEmpty,
isDefinedAndNotNull,
+ getAuthErrCategoryFromStCode,
+ getAccessToken,
} = require('../../util');
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
const {
SEARCH_STREAM,
CONVERSION_ACTION_ID_CACHE_TTL,
@@ -24,12 +29,7 @@ const {
} = require('./config');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
const Cache = require('../../util/cache');
-const {
- AbortedError,
- OAuthSecretError,
- ConfigurationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
+const helper = require('./helper');
const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL);
@@ -43,34 +43,6 @@ const validateDestinationConfig = ({ Config }) => {
}
};
-/**
- * for OAuth destination
- * get access_token from metadata.secret{ ... }
- * @param {*} param0
- * @returns
- */
-const getAccessToken = ({ secret }) => {
- if (!secret) {
- throw new OAuthSecretError('OAuth - access token not found');
- }
- return secret.access_token;
-};
-
-/**
- * This function helps to determine the type of error occured. We set the authErrorCategory
- * as per the destination response that is received and take the decision whether
- * to refresh the access_token or disable the destination.
- * @param {*} status
- * @returns
- */
-const getAuthErrCategory = (status) => {
- if (status === 401) {
- // UNAUTHORIZED
- return REFRESH_TOKEN;
- }
- return '';
-};
-
/**
* get conversionAction using the conversion name using searchStream endpoint
* @param {*} customerId
@@ -100,7 +72,7 @@ const getConversionActionId = async (headers, params) => {
)} during google_ads_offline_conversions response transformation`,
searchStreamResponse.status,
searchStreamResponse.response,
- getAuthErrCategory(get(searchStreamResponse, 'status')),
+ getAuthErrCategoryFromStCode(get(searchStreamResponse, 'status')),
);
}
const conversionAction = get(
@@ -108,7 +80,9 @@ const getConversionActionId = async (headers, params) => {
'response.0.results.0.conversionAction.resourceName',
);
if (!conversionAction) {
- throw new AbortedError(`Unable to find conversionActionId for conversion:${params.event}`);
+ throw new AbortedError(
+ `Unable to find conversionActionId for conversion:${params.event}. Most probably the conversion name in Google dashboard and Rudderstack dashboard are not same.`,
+ );
}
return conversionAction;
});
@@ -194,7 +168,7 @@ const requestBuilder = (
}
response.body.JSON = payload;
response.headers = {
- Authorization: `Bearer ${getAccessToken(metadata)}`,
+ Authorization: `Bearer ${getAccessToken(metadata, 'access_token')}`,
'Content-Type': 'application/json',
'developer-token': get(metadata, 'secret.developer_token'),
};
@@ -204,7 +178,7 @@ const requestBuilder = (
const filteredLoginCustomerId = removeHyphens(loginCustomerId);
response.headers['login-customer-id'] = filteredLoginCustomerId;
} else {
- throw new ConfigurationError(`loginCustomerId is required as subAccount is enabled`);
+ throw new ConfigurationError(`"Login Customer ID" is required as "Sub Account" is enabled`);
}
}
return response;
@@ -254,9 +228,7 @@ const getAddConversionPayload = (message, Config) => {
// transform originalTimestamp to format (yyyy-mm-dd hh:mm:ss+|-hh:mm)
// e.g 2019-10-14T11:15:18.299Z -> 2019-10-14 16:10:29+0530
const timestamp = payload.operations.create.transaction_attribute.transaction_date_time;
- const convertedDateTime = moment(timestamp)
- .utcOffset(moment(timestamp).utcOffset())
- .format('YYYY-MM-DD HH:mm:ssZ');
+ const convertedDateTime = helper.formatTimestamp(timestamp);
payload.operations.create.transaction_attribute.transaction_date_time = convertedDateTime;
// mapping custom_key that should be predefined in google Ui and mentioned when new job is created
if (properties.custom_key && properties[properties.custom_key]) {
@@ -390,7 +362,6 @@ const getClickConversionPayloadAndEndpoint = (message, Config, filteredCustomerI
module.exports = {
validateDestinationConfig,
generateItemListFromProducts,
- getAccessToken,
getConversionActionId,
removeHashToSha256TypeFromMappingJson,
getStoreConversionPayload,
diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js
index 775e123cfee..8deaa3ab0a5 100644
--- a/src/v0/destinations/google_adwords_offline_conversions/utils.test.js
+++ b/src/v0/destinations/google_adwords_offline_conversions/utils.test.js
@@ -161,7 +161,7 @@ describe('getExisitingUserIdentifier util tests', () => {
describe('getClickConversionPayloadAndEndpoint util tests', () => {
it('getClickConversionPayloadAndEndpoint flow check when default field identifier is present', () => {
let expectedOutput = {
- endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions',
+ endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions',
payload: {
conversions: [
{
@@ -187,7 +187,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => {
delete fittingPayload.traits.email;
delete fittingPayload.properties.email;
let expectedOutput = {
- endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions',
+ endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions',
payload: {
conversions: [
{
@@ -215,7 +215,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => {
delete fittingPayload.traits.phone;
delete fittingPayload.properties.email;
let expectedOutput = {
- endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions',
+ endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions',
payload: {
conversions: [
{
@@ -251,7 +251,7 @@ describe('getClickConversionPayloadAndEndpoint util tests', () => {
},
];
let expectedOutput = {
- endpoint: 'https://googleads.googleapis.com/v13/customers/9625812972:uploadClickConversions',
+ endpoint: 'https://googleads.googleapis.com/v14/customers/9625812972:uploadClickConversions',
payload: {
conversions: [
{
diff --git a/src/v0/destinations/google_adwords_remarketing_lists/config.js b/src/v0/destinations/google_adwords_remarketing_lists/config.js
index 902ac1cbff7..94059c69f1f 100644
--- a/src/v0/destinations/google_adwords_remarketing_lists/config.js
+++ b/src/v0/destinations/google_adwords_remarketing_lists/config.js
@@ -1,6 +1,6 @@
const { getMappingConfig } = require('../../util');
-const BASE_ENDPOINT = 'https://googleads.googleapis.com/v13/customers';
+const BASE_ENDPOINT = 'https://googleads.googleapis.com/v14/customers';
const CONFIG_CATEGORIES = {
AUDIENCE_LIST: { type: 'audienceList', name: 'offlineDataJobs' },
ADDRESSINFO: { type: 'addressInfo', name: 'addressInfo' },
diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js
index ceea51f6a28..5be8597bdb2 100644
--- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js
+++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js
@@ -1,13 +1,11 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { httpSend, prepareProxyRequest } = require('../../../adapters/network');
-const { isHttpStatusSuccess } = require('../../util/index');
-
-const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
+const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
/**
* This function helps to create a offlineUserDataJobs
@@ -98,38 +96,39 @@ const gaAudienceProxyRequest = async (request) => {
// step1: offlineUserDataJobs creation
const firstResponse = await createJob(endpoint, customerId, listId, headers, method);
- if (!firstResponse.success && !isHttpStatusSuccess(firstResponse?.response?.response?.status)) {
+ if (!firstResponse.success && !isHttpStatusSuccess(firstResponse?.response?.status)) {
return firstResponse;
}
+ if (isHttpStatusSuccess(firstResponse?.response?.status)) {
+ const { partialFailureError } = firstResponse.response.data;
+ if (partialFailureError && partialFailureError.code !== 0) {
+ return firstResponse;
+ }
+ }
+
// step2: putting users into the job
let jobId;
if (firstResponse?.response?.data?.resourceName)
// eslint-disable-next-line prefer-destructuring
jobId = firstResponse.response.data.resourceName.split('/')[3];
const secondResponse = await addUserToJob(endpoint, headers, method, jobId, body);
- if (!secondResponse.success && !isHttpStatusSuccess(secondResponse?.response?.response?.status)) {
+ if (!secondResponse.success && !isHttpStatusSuccess(secondResponse?.response?.status)) {
return secondResponse;
}
+ if (isHttpStatusSuccess(secondResponse?.response?.status)) {
+ const { partialFailureError } = secondResponse.response.data;
+ if (partialFailureError && partialFailureError.code !== 0) {
+ return secondResponse;
+ }
+ }
+
// step3: running the job
const thirdResponse = await runTheJob(endpoint, headers, method, jobId);
return thirdResponse;
};
-/**
- * This function helps to detarmine type of error occured. According to the response
- * we set authErrorCategory to take decision if we need to refresh the access_token
- * or need to disable the destination.
- * @param {*} code
- * @param {*} response
- * @returns
- */
-const getAuthErrCategory = (code, response) => {
- if (code === 401 && !response.error.details) return REFRESH_TOKEN;
- return '';
-};
-
const gaAudienceRespHandler = (destResponse, stageMsg) => {
const { status, response } = destResponse;
// const respAttributes = response["@attributes"] || null;
@@ -142,14 +141,31 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => {
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
},
response,
- getAuthErrCategory(status, response),
+ getAuthErrCategoryFromStCode(status),
);
};
const responseHandler = (destinationResponse) => {
const message = `Request Processed Successfully`;
- const { status } = destinationResponse;
+ const { status, response } = destinationResponse;
if (isHttpStatusSuccess(status)) {
+ // for google ads offline conversions the partialFailureError returns with status 200
+ const { partialFailureError } = response;
+ // non-zero code signifies partialFailure
+ // Ref - https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
+ if (partialFailureError && partialFailureError.code !== 0) {
+ throw new NetworkError(
+ `[Google Ads Re-marketing Lists]:: partialFailureError - ${JSON.stringify(
+ partialFailureError,
+ )}`,
+ 400,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(400),
+ },
+ partialFailureError,
+ );
+ }
+
// Mostly any error will not have a status of 2xx
return {
status,
diff --git a/src/v0/destinations/google_adwords_remarketing_lists/transform.js b/src/v0/destinations/google_adwords_remarketing_lists/transform.js
index 9aaae3dbe3e..884fcd71f68 100644
--- a/src/v0/destinations/google_adwords_remarketing_lists/transform.js
+++ b/src/v0/destinations/google_adwords_remarketing_lists/transform.js
@@ -1,4 +1,6 @@
const sha256 = require('sha256');
+const get = require('get-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const logger = require('../../../logger');
const {
isDefinedAndNotNullAndNotEmpty,
@@ -9,13 +11,10 @@ const {
removeUndefinedAndNullValues,
removeHyphens,
simpleProcessRouterDest,
+ getDestinationExternalIDInfoForRetl,
+ getAccessToken,
} = require('../../util');
-const {
- InstrumentationError,
- ConfigurationError,
- OAuthSecretError,
-} = require('../../util/errorTypes');
const {
offlineDataJobsMapping,
addressInfoMapping,
@@ -25,6 +24,7 @@ const {
TYPEOFLIST,
} = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
+const { MappedToDestinationKey } = require('../../../constants');
const hashEncrypt = (object) => {
Object.keys(object).forEach((key) => {
@@ -35,27 +35,6 @@ const hashEncrypt = (object) => {
});
};
-/**
- * Get access token to be bound to the event req headers
- *
- * Note:
- * This method needs to be implemented particular to the destination
- * As the schema that we'd get in `metadata.secret` can be different
- * for different destinations
- *
- * @param {Object} metadata
- * @returns
- */
-const getAccessToken = (metadata) => {
- // OAuth for this destination
- const { secret } = metadata;
- // we would need to verify if secret is present and also if the access token field is present in secret
- if (!secret || !secret.access_token) {
- throw new OAuthSecretError('Empty/Invalid access token');
- }
- return secret.access_token;
-};
-
/**
* This function is used for building the response. It create a default rudder response
* and populate headers, params and body.JSON
@@ -64,14 +43,26 @@ const getAccessToken = (metadata) => {
* @param {*} param2
* @returns
*/
-const responseBuilder = (metadata, body, { Config }) => {
+const responseBuilder = (metadata, body, { Config }, message) => {
const payload = body;
const response = defaultRequestConfig();
const filteredCustomerId = removeHyphens(Config.customerId);
response.endpoint = `${BASE_ENDPOINT}/${filteredCustomerId}/offlineUserDataJobs`;
response.body.JSON = removeUndefinedAndNullValues(payload);
- const accessToken = getAccessToken(metadata);
- response.params = { listId: Config.listId, customerId: filteredCustomerId };
+ const accessToken = getAccessToken(metadata, 'access_token');
+ let operationAudienceId = Config.audienceId || Config.listId;
+ const mappedToDestination = get(message, MappedToDestinationKey);
+ if (!operationAudienceId && mappedToDestination) {
+ const { objectType } = getDestinationExternalIDInfoForRetl(
+ message,
+ 'GOOGLE_ADWORDS_REMARKETING_LISTS',
+ );
+ operationAudienceId = objectType;
+ }
+ if (!isDefinedAndNotNullAndNotEmpty(operationAudienceId)) {
+ throw new ConfigurationError('List ID is a mandatory field');
+ }
+ response.params = { listId: operationAudienceId, customerId: filteredCustomerId };
response.headers = {
Authorization: `Bearer ${accessToken}`,
'Content-Type': JSON_MIME_TYPE,
@@ -221,7 +212,7 @@ const processEvent = async (metadata, message, destination) => {
}
Object.values(createdPayload).forEach((data) => {
- response.push(responseBuilder(metadata, data, destination));
+ response.push(responseBuilder(metadata, data, destination, message));
});
return response;
}
diff --git a/src/v0/destinations/google_cloud_function/config.js b/src/v0/destinations/google_cloud_function/config.js
deleted file mode 100644
index 40efc2c04c1..00000000000
--- a/src/v0/destinations/google_cloud_function/config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const TRIGGERTYPE = {
- HTTP: 'http',
- HTTPS: 'https',
-};
-module.exports = {
- TRIGGERTYPE,
-};
diff --git a/src/v0/destinations/google_cloud_function/transform.js b/src/v0/destinations/google_cloud_function/transform.js
index e2c01cd8bc2..b218615b44d 100644
--- a/src/v0/destinations/google_cloud_function/transform.js
+++ b/src/v0/destinations/google_cloud_function/transform.js
@@ -1,29 +1,19 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const {
- defaultRequestConfig,
- defaultPostRequestConfig,
getSuccessRespEvents,
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
} = require('../../util');
-const { generateBatchedPayload, validateDestinationConfig, addHeader } = require('./util');
+const { generateBatchedPayload, validateDestinationConfig } = require('./util');
// Main process Function to handle transformation
function process(event) {
const { message, destination } = event;
- const { googleCloudFunctionUrl } = destination.Config;
-
// Config Validation
validateDestinationConfig(destination);
- const response = defaultRequestConfig();
- // adding header
- addHeader(response, destination.Config);
- response.method = defaultPostRequestConfig.requestMethod;
- response.body.JSON = message;
- response.endpoint = googleCloudFunctionUrl;
-
+ const response = message;
return response;
}
@@ -32,12 +22,12 @@ function batchEvents(successRespList, maxBatchSize = 10) {
const batchedResponseList = [];
// arrayChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const arrayChunks = _.chunk(successRespList, maxBatchSize);
+ const arrayChunks = lodash.chunk(successRespList, maxBatchSize);
arrayChunks.forEach((chunk) => {
const batchEventResponse = generateBatchedPayload(chunk);
batchedResponseList.push(
getSuccessRespEvents(
- batchEventResponse.batchedRequest,
+ batchEventResponse.message,
batchEventResponse.metadata,
batchEventResponse.destination,
true,
diff --git a/src/v0/destinations/google_cloud_function/util.js b/src/v0/destinations/google_cloud_function/util.js
index 10c4365b774..8f85460902c 100644
--- a/src/v0/destinations/google_cloud_function/util.js
+++ b/src/v0/destinations/google_cloud_function/util.js
@@ -1,77 +1,47 @@
-const { defaultBatchRequestConfig } = require('../../util');
-const { JSON_MIME_TYPE } = require('../../util/constant');
-const { ConfigurationError } = require('../../util/errorTypes');
-
-const { TRIGGERTYPE } = require('./config');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
/**
* validate destination config
* @param {*} param0
*/
const validateDestinationConfig = ({ Config }) => {
- // throw error if google Cloud Function is not provided
+ // throw error if google Cloud Function URL is not provided
if (!Config.googleCloudFunctionUrl) {
throw new ConfigurationError('[GCF]:: Url not found. Aborting');
}
- if (
- Config.triggerType === 'https' && // for triggerType https gcloud Authorization is mandatory
- !Config.gcloudAuthorization
- ) {
- throw new ConfigurationError('[GCF]:: Access Token not found. Aborting');
+ if (Config.requireAuthentication && !Config.credentials) {
+ throw new ConfigurationError(
+ '[GCF]:: Service Account credentials are required if your function required authentication. Aborting',
+ );
}
};
-/**
- * add headers in the payload that is provided in destination config
- * @param {*} response
- * @param {*} Config
- */
-function addHeader(response, Config) {
- const { triggerType, apiKeyId, gcloudAuthorization } = Config;
-
- response.headers = { 'content-type': JSON_MIME_TYPE };
- if (apiKeyId) {
- const basicAuth = Buffer.from(`apiKey:${apiKeyId}`).toString('base64');
- response.headers.ApiKey = `Basic ${basicAuth}`;
- }
- if (TRIGGERTYPE.HTTPS === triggerType.toLowerCase()) {
- response.headers.Authorization = `bearer ${gcloudAuthorization}`;
- }
-}
-
/**
* Create GoogleCloudFunction Batch payload based on the passed events
* @param {*} events
* @returns
*/
+
function generateBatchedPayload(events) {
- const batchResponseList = [];
const metadata = [];
// extracting destination
// from the first event in a batch
const { destination } = events[0];
- const { googleCloudFunctionUrl } = destination.Config;
- let batchEventResponse = defaultBatchRequestConfig();
+ let batchEventResponse = events.map((event) => event.message);
// Batch event into dest batch structure
events.forEach((ev) => {
- batchResponseList.push(ev.message.body.JSON);
+ // batchResponseList.push(ev.message.body.JSON);
metadata.push(ev.metadata);
});
- batchEventResponse.batchedRequest.body.JSON_ARRAY = {
- batch: JSON.stringify(batchResponseList),
- };
- batchEventResponse.batchedRequest.endpoint = googleCloudFunctionUrl;
- addHeader(batchEventResponse.batchedRequest, destination.Config);
batchEventResponse = {
- ...batchEventResponse,
- metadata,
+ message: batchEventResponse,
destination,
+ metadata,
};
return batchEventResponse;
}
module.exports = {
validateDestinationConfig,
- addHeader,
generateBatchedPayload,
};
diff --git a/src/v0/destinations/googlepubsub/transform.js b/src/v0/destinations/googlepubsub/transform.js
index 44208735e07..7a022d6c29f 100644
--- a/src/v0/destinations/googlepubsub/transform.js
+++ b/src/v0/destinations/googlepubsub/transform.js
@@ -1,5 +1,5 @@
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const { simpleProcessRouterDest } = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
const { getTopic, createAttributesMetadata } = require('./util');
diff --git a/src/v0/destinations/googlesheets/transform.js b/src/v0/destinations/googlesheets/transform.js
index 6cfb3f1d1e7..6e27f6192c1 100644
--- a/src/v0/destinations/googlesheets/transform.js
+++ b/src/v0/destinations/googlesheets/transform.js
@@ -1,12 +1,12 @@
/* eslint-disable no-nested-ternary */
const get = require('get-value');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const {
getValueFromMessage,
getSuccessRespEvents,
handleRtTfSingleEventError,
checkInvalidRtTfEvents,
} = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
const SOURCE_KEYS = ['properties', 'traits', 'context.traits'];
diff --git a/src/v0/destinations/heap/transform.js b/src/v0/destinations/heap/transform.js
index 32196eb7bee..42563241657 100644
--- a/src/v0/destinations/heap/transform.js
+++ b/src/v0/destinations/heap/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const { EventType } = require('../../../constants');
const {
@@ -8,7 +9,6 @@ const {
flattenJson,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilderSimple(message, category, destination) {
diff --git a/src/v0/destinations/hs/HSTransform-v1.js b/src/v0/destinations/hs/HSTransform-v1.js
index 13eeabbc455..51feebea74a 100644
--- a/src/v0/destinations/hs/HSTransform-v1.js
+++ b/src/v0/destinations/hs/HSTransform-v1.js
@@ -1,5 +1,10 @@
const get = require('get-value');
-const _ = require('lodash');
+const lodash = require('lodash');
+const {
+ InstrumentationError,
+ ConfigurationError,
+ TransformationError,
+} = require('@rudderstack/integrations-lib');
const { MappedToDestinationKey, GENERIC_TRUE_VALUES } = require('../../../constants');
const {
defaultGetRequestConfig,
@@ -14,11 +19,6 @@ const {
getDestinationExternalID,
getDestinationExternalIDInfoForRetl,
} = require('../../util');
-const {
- InstrumentationError,
- ConfigurationError,
- TransformationError,
-} = require('../../util/errorTypes');
const {
BATCH_CONTACT_ENDPOINT,
MAX_BATCH_SIZE,
@@ -34,6 +34,7 @@ const {
getEmailAndUpdatedProps,
formatPropertyValueForIdentify,
getHsSearchId,
+ populateTraits,
} = require('./util');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -52,7 +53,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant');
*/
const processLegacyIdentify = async (message, destination, propertyMap) => {
const { Config } = destination;
- const traits = getFieldValueFromMessage(message, 'traits');
+ let traits = getFieldValueFromMessage(message, 'traits');
const mappedToDestination = get(message, MappedToDestinationKey);
const operation = get(message, 'context.hubspotOperation');
// if mappedToDestination is set true, then add externalId to traits
@@ -80,6 +81,8 @@ const processLegacyIdentify = async (message, destination, propertyMap) => {
)}/${hsSearchId}`;
response.method = defaultPatchRequestConfig.requestMethod;
}
+
+ traits = await populateTraits(propertyMap, traits, destination);
response.body.JSON = removeUndefinedAndNullValues({ properties: traits });
response.source = 'rETL';
response.operation = operation;
@@ -286,9 +289,9 @@ const legacyBatchEvents = (destEvents) => {
eventsChunk.push(event);
}
});
- const arrayChunksIdentifyCreateObjects = _.chunk(createAllObjectsEventChunk, maxBatchSize);
+ const arrayChunksIdentifyCreateObjects = lodash.chunk(createAllObjectsEventChunk, maxBatchSize);
- const arrayChunksIdentifyUpdateObjects = _.chunk(updateAllObjectsEventChunk, maxBatchSize);
+ const arrayChunksIdentifyUpdateObjects = lodash.chunk(updateAllObjectsEventChunk, maxBatchSize);
// batching up 'create' all objects endpoint chunks
if (arrayChunksIdentifyCreateObjects.length > 0) {
batchedResponseList = batchIdentifyForrETL(
@@ -308,7 +311,7 @@ const legacyBatchEvents = (destEvents) => {
}
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const arrayChunksIdentify = _.chunk(eventsChunk, MAX_BATCH_SIZE);
+ const arrayChunksIdentify = lodash.chunk(eventsChunk, MAX_BATCH_SIZE);
// list of chunks [ [..], [..] ]
arrayChunksIdentify.forEach((chunk) => {
diff --git a/src/v0/destinations/hs/HSTransform-v2.js b/src/v0/destinations/hs/HSTransform-v2.js
index 8cea4611e55..2acdd82152a 100644
--- a/src/v0/destinations/hs/HSTransform-v2.js
+++ b/src/v0/destinations/hs/HSTransform-v2.js
@@ -1,5 +1,10 @@
const get = require('get-value');
-const _ = require('lodash');
+const lodash = require('lodash');
+const {
+ TransformationError,
+ ConfigurationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { MappedToDestinationKey, GENERIC_TRUE_VALUES } = require('../../../constants');
const {
defaultPostRequestConfig,
@@ -16,11 +21,6 @@ const {
getDestinationExternalIDInfoForRetl,
getDestinationExternalIDObjectForRetl,
} = require('../../util');
-const {
- TransformationError,
- ConfigurationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const {
IDENTIFY_CRM_UPDATE_CONTACT,
IDENTIFY_CRM_CREATE_NEW_CONTACT,
@@ -41,6 +41,7 @@ const {
searchContacts,
getEventAndPropertiesFromConfig,
getHsSearchId,
+ populateTraits,
} = require('./util');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -69,7 +70,7 @@ const addHsAuthentication = (response, Config) => {
*/
const processIdentify = async (message, destination, propertyMap) => {
const { Config } = destination;
- const traits = getFieldValueFromMessage(message, 'traits');
+ let traits = getFieldValueFromMessage(message, 'traits');
const mappedToDestination = get(message, MappedToDestinationKey);
const operation = get(message, 'context.hubspotOperation');
const externalIdObj = getDestinationExternalIDObjectForRetl(message, 'HS');
@@ -124,6 +125,7 @@ const processIdentify = async (message, destination, propertyMap) => {
response.method = defaultPatchRequestConfig.requestMethod;
}
+ traits = await populateTraits(propertyMap, traits, destination);
response.body.JSON = removeUndefinedAndNullValues({ properties: traits });
response.source = 'rETL';
response.operation = operation;
@@ -417,23 +419,23 @@ const batchEvents = (destEvents) => {
}
});
- const arrayChunksIdentifyCreateObjects = _.chunk(createAllObjectsEventChunk, maxBatchSize);
+ const arrayChunksIdentifyCreateObjects = lodash.chunk(createAllObjectsEventChunk, maxBatchSize);
- const arrayChunksIdentifyUpdateObjects = _.chunk(updateAllObjectsEventChunk, maxBatchSize);
+ const arrayChunksIdentifyUpdateObjects = lodash.chunk(updateAllObjectsEventChunk, maxBatchSize);
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
// CRM create contact endpoint chunks
- const arrayChunksIdentifyCreateContact = _.chunk(
+ const arrayChunksIdentifyCreateContact = lodash.chunk(
createContactEventsChunk,
MAX_BATCH_SIZE_CRM_CONTACT,
);
// CRM update contact endpoint chunks
- const arrayChunksIdentifyUpdateContact = _.chunk(
+ const arrayChunksIdentifyUpdateContact = lodash.chunk(
updateContactEventsChunk,
MAX_BATCH_SIZE_CRM_CONTACT,
);
- const arrayChunksIdentifyCreateAssociations = _.chunk(
+ const arrayChunksIdentifyCreateAssociations = lodash.chunk(
associationObjectsEventChunk,
MAX_BATCH_SIZE_CRM_OBJECT,
);
diff --git a/src/v0/destinations/hs/transform.js b/src/v0/destinations/hs/transform.js
index 3f8010ff492..c26e024a6c5 100644
--- a/src/v0/destinations/hs/transform.js
+++ b/src/v0/destinations/hs/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
checkInvalidRtTfEvents,
@@ -19,7 +20,6 @@ const {
getProperties,
validateDestinationConfig,
} = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const processSingleMessage = async (message, destination, propertyMap) => {
if (!message.type) {
@@ -88,6 +88,7 @@ const processRouterDest = async (inputs, reqMetadata) => {
if (mappedToDestination && GENERIC_TRUE_VALUES.includes(mappedToDestination?.toString())) {
// skip splitting the batches to inserts and updates if object it is an association
if (objectType.toLowerCase() !== 'association') {
+ propertyMap = await getProperties(destination);
// get info about existing objects and splitting accordingly.
tempInputs = await splitEventsForCreateUpdate(tempInputs, destination);
}
diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js
index 71ed97b7500..f83ce0b6de7 100644
--- a/src/v0/destinations/hs/util.js
+++ b/src/v0/destinations/hs/util.js
@@ -1,4 +1,10 @@
const get = require('get-value');
+const {
+ NetworkInstrumentationError,
+ InstrumentationError,
+ ConfigurationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const { httpGET, httpPOST } = require('../../../adapters/network');
const {
processAxiosResponse,
@@ -12,12 +18,6 @@ const {
getDestinationExternalIDInfoForRetl,
getValueFromMessage,
} = require('../../util');
-const {
- NetworkInstrumentationError,
- InstrumentationError,
- ConfigurationError,
- NetworkError,
-} = require('../../util/errorTypes');
const {
CONTACT_PROPERTY_MAP_ENDPOINT,
IDENTIFY_CRM_SEARCH_CONTACT,
@@ -175,6 +175,18 @@ const validatePayloadDataTypes = (propertyMap, hsSupportedKey, value, traitsKey)
return propValue;
};
+/**
+ * Converts date to UTC Midnight TimeStamp
+ * @param {*} propValue
+ * @returns
+ */
+const getUTCMidnightTimeStampValue = (propValue) => {
+ const time = propValue;
+ const date = new Date(time);
+ date.setUTCHours(0, 0, 0, 0);
+ return date.getTime();
+};
+
/**
* add addtional properties in the payload that is provided in traits
* only when it matches with HS properties (pre-defined/created from dashboard)
@@ -204,10 +216,7 @@ const getTransformedJSON = async (message, destination, propertyMap) => {
if (!rawPayload[traitsKey] && propertyMap[hsSupportedKey]) {
let propValue = traits[traitsKey];
if (propertyMap[hsSupportedKey] === 'date') {
- const time = propValue;
- const date = new Date(time);
- date.setUTCHours(0, 0, 0, 0);
- propValue = date.getTime();
+ propValue = getUTCMidnightTimeStampValue(propValue);
}
rawPayload[hsSupportedKey] = validatePayloadDataTypes(
@@ -334,6 +343,7 @@ const searchContacts = async (message, destination) => {
after: 0,
};
+ const endpointPath = '/contacts/search';
if (Config.authorizationType === 'newPrivateAppApi') {
// Private Apps
const requestOptions = {
@@ -349,6 +359,7 @@ const searchContacts = async (message, destination) => {
{
destType: 'hs',
feature: 'transformation',
+ endpointPath,
},
);
searchContactsResponse = processAxiosResponse(searchContactsResponse);
@@ -358,6 +369,7 @@ const searchContacts = async (message, destination) => {
searchContactsResponse = await httpPOST(url, requestData, {
destType: 'hs',
feature: 'transformation',
+ endpointPath,
});
searchContactsResponse = processAxiosResponse(searchContactsResponse);
}
@@ -404,6 +416,9 @@ const getEventAndPropertiesFromConfig = (message, destination, payload) => {
if (!event) {
throw new InstrumentationError('event name is required for track call');
}
+ if (!hubspotEvents) {
+ throw new InstrumentationError('Event and property mappings are required for track call');
+ }
event = event.trim().toLowerCase();
let eventName;
let eventProperties;
@@ -426,7 +441,9 @@ const getEventAndPropertiesFromConfig = (message, destination, payload) => {
});
if (!hubspotEventFound) {
- throw new ConfigurationError(`'${event}' event name not found`);
+ throw new ConfigurationError(
+ `Event name '${event}' mappings are not configured in the destination`,
+ );
}
// 2. fetch event properties from webapp config
@@ -451,7 +468,7 @@ const getEventAndPropertiesFromConfig = (message, destination, payload) => {
*/
const getExistingData = async (inputs, destination) => {
const { Config } = destination;
- const values = [];
+ let values = [];
let searchResponse;
let updateHubspotIds = [];
const firstMessage = inputs[0].message;
@@ -470,8 +487,10 @@ const getExistingData = async (inputs, destination) => {
inputs.map(async (input) => {
const { message } = input;
const { destinationExternalId } = getDestinationExternalIDInfoForRetl(message, DESTINATION);
- values.push(destinationExternalId);
+ values.push(destinationExternalId.toString().toLowerCase());
});
+
+ values = Array.from(new Set(values));
const requestData = {
filterGroups: [
{
@@ -506,6 +525,7 @@ const getExistingData = async (inputs, destination) => {
while (checkAfter) {
const endpoint = IDENTIFY_CRM_SEARCH_ALL_OBJECTS.replace(':objectType', objectType);
+ const endpointPath = `objects/:objectType/search`;
const url =
Config.authorizationType === 'newPrivateAppApi'
@@ -516,10 +536,12 @@ const getExistingData = async (inputs, destination) => {
? await httpPOST(url, requestData, requestOptions, {
destType: 'hs',
feature: 'transformation',
+ endpointPath,
})
: await httpPOST(url, requestData, {
destType: 'hs',
feature: 'transformation',
+ endpointPath,
});
searchResponse = processAxiosResponse(searchResponse);
@@ -585,7 +607,8 @@ const splitEventsForCreateUpdate = async (inputs, destination) => {
const { destinationExternalId } = getDestinationExternalIDInfoForRetl(message, DESTINATION);
const filteredInfo = updateHubspotIds.filter(
- (update) => update.property.toString() === destinationExternalId.toString(),
+ (update) =>
+ update.property.toString().toLowerCase() === destinationExternalId.toString().toLowerCase(),
);
if (filteredInfo.length > 0) {
@@ -615,6 +638,31 @@ const getHsSearchId = (message) => {
return { hsSearchId };
};
+/**
+ * returns updated traits
+ * @param {*} propertyMap
+ * @param {*} traits
+ * @param {*} destination
+ */
+const populateTraits = async (propertyMap, traits, destination) => {
+ const populatedTraits = traits;
+ let propertyToTypeMap = propertyMap;
+ if (!propertyToTypeMap) {
+ // fetch HS properties
+ propertyToTypeMap = await getProperties(destination);
+ }
+
+ const keys = Object.keys(populatedTraits);
+ keys.forEach((key) => {
+ const value = populatedTraits[key];
+ if (propertyToTypeMap[key] === 'date') {
+ populatedTraits[key] = getUTCMidnightTimeStampValue(value);
+ }
+ });
+
+ return populatedTraits;
+};
+
module.exports = {
validateDestinationConfig,
formatKey,
@@ -628,4 +676,6 @@ module.exports = {
splitEventsForCreateUpdate,
getHsSearchId,
validatePayloadDataTypes,
+ getUTCMidnightTimeStampValue,
+ populateTraits,
};
diff --git a/src/v0/destinations/impact/transform.js b/src/v0/destinations/impact/transform.js
index 026318cec73..2eefdf7992d 100644
--- a/src/v0/destinations/impact/transform.js
+++ b/src/v0/destinations/impact/transform.js
@@ -1,5 +1,10 @@
const sha1 = require('js-sha1');
const btoa = require('btoa');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
@@ -17,11 +22,6 @@ const {
removeUndefinedAndNullValues,
isDefinedAndNotNullAndNotEmpty,
} = require('../../util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
/**
* This function takes the transformed payload, endpoint and destination Config as input and returns the prepared response.
diff --git a/src/v0/destinations/indicative/transform.js b/src/v0/destinations/indicative/transform.js
index 81eb19f320e..000998c3b86 100644
--- a/src/v0/destinations/indicative/transform.js
+++ b/src/v0/destinations/indicative/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
@@ -9,7 +10,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { getUAInfo } = require('./utils');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const handleProperties = (properties) => {
diff --git a/src/v0/destinations/intercom/deleteUsers.js b/src/v0/destinations/intercom/deleteUsers.js
index 9241a229069..e11d3521178 100644
--- a/src/v0/destinations/intercom/deleteUsers.js
+++ b/src/v0/destinations/intercom/deleteUsers.js
@@ -1,8 +1,8 @@
+const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
const { isHttpStatusSuccess } = require('../../util');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
-const { NetworkError, ConfigurationError } = require('../../util/errorTypes');
const { executeCommonValidations } = require('../../util/regulation-api');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js
new file mode 100644
index 00000000000..a4106257b38
--- /dev/null
+++ b/src/v0/destinations/intercom/networkHandler.js
@@ -0,0 +1,37 @@
+const { RetryableError } = require('@rudderstack/integrations-lib');
+const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
+const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+
+const errorResponseHandler = (destinationResponse, dest) => {
+ const { status } = destinationResponse;
+ if (status === 408) {
+ throw new RetryableError(
+ `[Intercom Response Handler] Request failed for destination ${dest} with status: ${status}`,
+ 500,
+ destinationResponse,
+ );
+ }
+};
+
+const destResponseHandler = (destinationResponse, dest) => {
+ errorResponseHandler(destinationResponse, dest);
+ return {
+ destinationResponse: destinationResponse.response,
+ message: 'Request Processed Successfully',
+ status: destinationResponse.status,
+ };
+};
+
+// eslint-disable-next-line @typescript-eslint/naming-convention
+class networkHandler {
+ constructor() {
+ this.responseHandler = destResponseHandler;
+ this.proxy = proxyRequest;
+ this.prepareProxy = prepareProxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+ }
+}
+
+module.exports = {
+ networkHandler,
+};
diff --git a/src/v0/destinations/intercom/transform.js b/src/v0/destinations/intercom/transform.js
index 9616b242200..212eaba13b5 100644
--- a/src/v0/destinations/intercom/transform.js
+++ b/src/v0/destinations/intercom/transform.js
@@ -1,5 +1,6 @@
const md5 = require('md5');
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const {
ConfigCategory,
@@ -18,7 +19,6 @@ const {
flattenJson,
} = require('../../util');
const { separateReservedAndRestMetadata } = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function getCompanyAttribute(company) {
@@ -76,12 +76,12 @@ function validateIdentify(message, payload, config) {
return finalPayload;
}
- throw new InstrumentationError('Email or userId is mandatory');
+ throw new InstrumentationError('Either of `email` or `userId` is required for Identify call');
}
function validateTrack(payload) {
if (!payload.user_id && !payload.email) {
- throw new InstrumentationError('Email or userId is mandatory');
+ throw new InstrumentationError('Either of `email` or `userId` is required for Track call');
}
// pass only string, number, boolean properties
if (payload.metadata) {
@@ -94,16 +94,17 @@ function validateTrack(payload) {
}
const checkIfEmailOrUserIdPresent = (message, Config) => {
- let user_id = message.userId;
- if (Config.sendAnonymousId && !user_id) {
- user_id = message.anonymousId;
+ const { context, anonymousId } = message;
+ let { userId } = message;
+ if (Config.sendAnonymousId && !userId) {
+ userId = anonymousId;
}
- return !!(user_id || message.context?.traits?.email);
+ return !!(userId || context.traits?.email);
};
function attachUserAndCompany(message, Config) {
const email = message.context?.traits?.email;
- const { userId, anonymousId } = message;
+ const { userId, anonymousId, traits, groupId } = message;
const requestBody = {};
if (userId) {
requestBody.user_id = userId;
@@ -115,10 +116,10 @@ function attachUserAndCompany(message, Config) {
requestBody.email = email;
}
const companyObj = {
- company_id: message.groupId,
+ company_id: groupId,
};
- if (message.traits?.name) {
- companyObj.name = message.traits.name;
+ if (traits?.name) {
+ companyObj.name = traits.name;
}
requestBody.companies = [companyObj];
const response = defaultRequestConfig();
diff --git a/src/v0/destinations/iterable/data/IterableTrackConfig.json b/src/v0/destinations/iterable/data/IterableTrackConfig.json
index 1a751e2fe45..5de4856b336 100644
--- a/src/v0/destinations/iterable/data/IterableTrackConfig.json
+++ b/src/v0/destinations/iterable/data/IterableTrackConfig.json
@@ -21,6 +21,14 @@
],
"required": false
},
+ {
+ "destKey": "id",
+ "sourceKeys": "properties.event_id",
+ "required": false,
+ "metadata": {
+ "type": "toString"
+ }
+ },
{
"destKey": "eventName",
"sourceKeys": "event",
diff --git a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json
index 08014dec3f6..aa15d76a709 100644
--- a/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json
+++ b/src/v0/destinations/iterable/data/IterableTrackPurchaseConfig.json
@@ -6,8 +6,11 @@
},
{
"destKey": "id",
- "sourceKeys": "properties.orderId",
- "required": false
+ "sourceKeys": ["properties.order_id", "properties.orderId", "properties.event_id"],
+ "required": false,
+ "metadata": {
+ "type": "toString"
+ }
},
{
"destKey": "createdAt",
diff --git a/src/v0/destinations/iterable/deleteUsers.js b/src/v0/destinations/iterable/deleteUsers.js
new file mode 100644
index 00000000000..a179a8930f0
--- /dev/null
+++ b/src/v0/destinations/iterable/deleteUsers.js
@@ -0,0 +1,80 @@
+const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib');
+const { httpDELETE } = require('../../../adapters/network');
+const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+const { isHttpStatusSuccess } = require('../../util');
+const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
+const { executeCommonValidations } = require('../../util/regulation-api');
+const tags = require('../../util/tags');
+const { JSON_MIME_TYPE } = require('../../util/constant');
+
+// Ref-> https://developers.intercom.com/intercom-api-reference/v1.3/reference/permanently-delete-a-user
+const userDeletionHandler = async (userAttributes, config) => {
+ if (!config) {
+ throw new ConfigurationError('Config for deletion not present');
+ }
+ const { apiKey } = config;
+ if (!apiKey) {
+ throw new ConfigurationError('api key for deletion not present');
+ }
+ const validUserIds = [];
+ userAttributes.forEach((userAttribute) => {
+ // Dropping the user if userId is not present
+ if (userAttribute.userId) {
+ validUserIds.push(userAttribute.userId);
+ }
+ });
+ const failedUserDeletions = [];
+ await Promise.all(
+ validUserIds.map(async (uId) => {
+ const url = `https://api.iterable.com/api/users/byUserId/${uId}`;
+ const requestOptions = {
+ headers: {
+ 'Content-Type': JSON_MIME_TYPE,
+ api_key: apiKey,
+ },
+ };
+ const resp = await httpDELETE(url, requestOptions, {
+ destType: 'iterable',
+ feature: 'deleteUsers',
+ });
+ const handledDelResponse = processAxiosResponse(resp);
+ if (!isHttpStatusSuccess(handledDelResponse.status) && handledDelResponse.status !== 404) {
+ if (handledDelResponse.status !== 400) {
+ // Generic errors such as invalid api key
+ throw new NetworkError(
+ `User deletion request failed : ${handledDelResponse.response.msg}`,
+ handledDelResponse.status,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(handledDelResponse.status),
+ },
+ handledDelResponse,
+ );
+ } else {
+ // Specific errors such as user is not found
+ failedUserDeletions.push({ userId: uId, Reason: handledDelResponse.response.msg });
+ }
+ }
+ }),
+ );
+
+ if (failedUserDeletions.length > 0) {
+ throw new NetworkError(
+ `User deletion request failed for userIds : ${JSON.stringify(failedUserDeletions)}`,
+ 400,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(400),
+ },
+ failedUserDeletions,
+ );
+ }
+
+ return { statusCode: 200, status: 'successful' };
+};
+const processDeleteUsers = async (event) => {
+ const { userAttributes, config } = event;
+ executeCommonValidations(userAttributes);
+ const resp = await userDeletionHandler(userAttributes, config);
+ return resp;
+};
+
+module.exports = { processDeleteUsers };
diff --git a/src/v0/destinations/iterable/transform.js b/src/v0/destinations/iterable/transform.js
index 907030db9f6..64bdcfcfa46 100644
--- a/src/v0/destinations/iterable/transform.js
+++ b/src/v0/destinations/iterable/transform.js
@@ -1,7 +1,7 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
- batchEvents,
getCatalogEndpoint,
hasMultipleResponses,
pageEventPayloadBuilder,
@@ -23,10 +23,10 @@ const {
handleRtTfSingleEventError,
removeUndefinedAndNullValues,
getDestinationExternalIDInfoForRetl,
+ groupEventsByType: batchEvents,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
const { mappingConfig, ConfigCategory } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
const { EventType, MappedToDestinationKey } = require('../../../constants');
/**
@@ -213,10 +213,10 @@ const processRouterDest = async (inputs, reqMetadata) => {
* ]
*/
- const responses = process(event);
- const transformedPayloads = Array.isArray(responses) ? responses : [responses];
- return transformedPayloads.map((response) => ({
- message: response,
+ const responsesFn = process(event);
+ const transformedPayloadsArr = Array.isArray(responsesFn) ? responsesFn : [responsesFn];
+ return transformedPayloadsArr.map((res) => ({
+ message: res,
metadata: event.metadata,
destination: event.destination,
}));
@@ -230,13 +230,13 @@ const processRouterDest = async (inputs, reqMetadata) => {
* Before flat map : transformedPayloads = [{e1}, {e2}, [{e3}, {e4}, {e5}], {e6}]
* After flat map : transformedPayloads = [{e1}, {e2}, {e3}, {e4}, {e5}, {e6}]
*/
- transformedPayloads = _.flatMap(transformedPayloads);
+ transformedPayloads = lodash.flatMap(transformedPayloads);
return filterEventsAndPrepareBatchRequests(transformedPayloads);
}),
);
// Flatten the response array containing batched events from multiple groups
- const allBatchedEvents = _.flatMap(response);
+ const allBatchedEvents = lodash.flatMap(response);
return allBatchedEvents;
};
diff --git a/src/v0/destinations/iterable/util.js b/src/v0/destinations/iterable/util.js
index 64adbc6c2e5..7c1509c2b79 100644
--- a/src/v0/destinations/iterable/util.js
+++ b/src/v0/destinations/iterable/util.js
@@ -1,6 +1,7 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const get = require('get-value');
const jsonSize = require('json-size');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const {
isAppleFamily,
constructPayload,
@@ -20,12 +21,13 @@ const {
} = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
const { EventType, MappedToDestinationKey } = require('../../../constants');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
+
+const MESSAGE_JSON_PATH = 'message.body.JSON';
/**
* Returns preferUserId param
- * @param {*} config
- * @returns
+ * @param {*} config
+ * @returns
*/
const getPreferUserId = (config) => {
if (config.preferUserId !== undefined) {
@@ -36,8 +38,8 @@ const getPreferUserId = (config) => {
/**
* Returns mergeNestedObjects param
- * @param {*} config
- * @returns
+ * @param {*} config
+ * @returns
*/
const getMergeNestedObjects = (config) => {
if (config.mergeNestedObjects !== undefined) {
@@ -70,10 +72,10 @@ const validateMandatoryField = (payload) => {
/**
* Check for register device and register browser events
- * @param {*} message
- * @param {*} category
- * @param {*} config
- * @returns
+ * @param {*} message
+ * @param {*} category
+ * @param {*} config
+ * @returns
*/
const hasMultipleResponses = (message, category, config) => {
const { context } = message;
@@ -92,7 +94,10 @@ const hasMultipleResponses = (message, category, config) => {
* @returns
*/
const getCategoryUsingEventName = (message) => {
- const event = message.event?.toLowerCase();
+ let { event } = message;
+ if (typeof event === 'string') {
+ event = event.toLowerCase();
+ }
switch (event) {
case 'order completed':
@@ -165,7 +170,8 @@ const pageOrScreenEventPayloadBuilder = (message, destination, category) => {
let rawPayload = {};
const eventType = message.type.toLowerCase();
- const { trackAllPages, trackCategorisedPages, trackNamedPages } = destination.Config;
+ const { trackAllPages, trackCategorisedPages, trackNamedPages, mapToSingleEvent } =
+ destination.Config;
if (trackAllPages) {
rawPayload = constructPayload(message, mappingConfig[category.name]);
} else if (trackCategorisedPages && (message.properties?.category || message.category)) {
@@ -182,7 +188,7 @@ const pageOrScreenEventPayloadBuilder = (message, destination, category) => {
rawPayload.campaignId = rawPayload.campaignId ? parseInt(rawPayload.campaignId, 10) : undefined;
rawPayload.templateId = rawPayload.templateId ? parseInt(rawPayload.templateId, 10) : undefined;
rawPayload.eventName =
- destination.Config.mapToSingleEvent === true
+ mapToSingleEvent === true
? `Loaded a ${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`
: `${rawPayload.eventName} ${eventType}`;
@@ -262,9 +268,9 @@ const purchaseEventPayloadBuilder = (message, category, config) => {
user: {
...constructPayload(message, mappingConfig[ConfigCategory.IDENTIFY.name]),
preferUserId: getPreferUserId(config),
- mergeNestedObjects: getMergeNestedObjects(config)
- }
- }
+ mergeNestedObjects: getMergeNestedObjects(config),
+ },
+ };
validateMandatoryField(rawPayload.user);
@@ -288,8 +294,8 @@ const updateCartEventPayloadBuilder = (message, config) => {
user: {
...constructPayload(message, mappingConfig[ConfigCategory.IDENTIFY.name]),
preferUserId: getPreferUserId(config),
- mergeNestedObjects: getMergeNestedObjects(config)
- }
+ mergeNestedObjects: getMergeNestedObjects(config),
+ },
};
validateMandatoryField(rawPayload.user);
@@ -365,7 +371,7 @@ const prepareAndSplitUpdateUserBatchesBasedOnPayloadSize = (
let nonBatchedRequests = [];
chunk.forEach((event) => {
- size += jsonSize(get(event, 'message.body.JSON'));
+ size += jsonSize(get(event, `${MESSAGE_JSON_PATH}`));
if (size > IDENTIFY_MAX_BODY_SIZE_IN_BYTES) {
batches.push({
users: usersChunk,
@@ -377,7 +383,7 @@ const prepareAndSplitUpdateUserBatchesBasedOnPayloadSize = (
usersChunk = [];
metadataChunk = [];
nonBatchedRequests = [];
- size = jsonSize(get(event, 'message.body.JSON'));
+ size = jsonSize(get(event, `${MESSAGE_JSON_PATH}`));
}
if (registerDeviceOrBrowserTokenEvents[event.metadata.jobId]) {
@@ -386,7 +392,7 @@ const prepareAndSplitUpdateUserBatchesBasedOnPayloadSize = (
}
metadataChunk.push(event.metadata);
- usersChunk.push(get(event, 'message.body.JSON'));
+ usersChunk.push(get(event, `${MESSAGE_JSON_PATH}`));
});
if (usersChunk.length > 0) {
@@ -464,7 +470,7 @@ const processUpdateUserBatch = (chunk, registerDeviceOrBrowserTokenEvents) => {
const batchUpdateUserEvents = (updateUserEvents, registerDeviceOrBrowserTokenEvents) => {
// Batching update user events
// arrayChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const updateUserEventsChunks = _.chunk(updateUserEvents, IDENTIFY_MAX_BATCH_SIZE);
+ const updateUserEventsChunks = lodash.chunk(updateUserEvents, IDENTIFY_MAX_BATCH_SIZE);
return updateUserEventsChunks.reduce((batchedResponseList, chunk) => {
const batchedResponse = processUpdateUserBatch(chunk, registerDeviceOrBrowserTokenEvents);
return batchedResponseList.concat(batchedResponse);
@@ -529,7 +535,7 @@ const processCatalogBatch = (chunk) => {
const batchCatalogEvents = (catalogEvents) => {
// Batching catalog events
// arrayChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const catalogEventsChunks = _.chunk(catalogEvents, IDENTIFY_MAX_BATCH_SIZE);
+ const catalogEventsChunks = lodash.chunk(catalogEvents, IDENTIFY_MAX_BATCH_SIZE);
return catalogEventsChunks.reduce((batchedResponseList, chunk) => {
const batchedResponse = processCatalogBatch(chunk);
return batchedResponseList.concat(batchedResponse);
@@ -550,7 +556,7 @@ const processTrackBatch = (chunk) => {
chunk.forEach((event) => {
metadata.push(event.metadata);
- events.push(get(event, 'message.body.JSON'));
+ events.push(get(event, `${MESSAGE_JSON_PATH}`));
});
const batchEventResponse = defaultBatchRequestConfig();
@@ -576,7 +582,7 @@ const processTrackBatch = (chunk) => {
const batchTrackEvents = (trackEvents) => {
// Batching track events
// arrayChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const trackEventsChunks = _.chunk(trackEvents, TRACK_MAX_BATCH_SIZE);
+ const trackEventsChunks = lodash.chunk(trackEvents, TRACK_MAX_BATCH_SIZE);
return trackEventsChunks.reduce((batchedResponseList, chunk) => {
const batchedResponse = processTrackBatch(chunk);
return batchedResponseList.concat(batchedResponse);
@@ -646,9 +652,9 @@ const mapRegisterDeviceOrBrowserTokenEventsWithJobId = (events) => {
* @returns
*/
const categorizeEvent = (event) => {
- const { message, metadata, destination } = event;
+ const { message, metadata, destination, error } = event;
- if (event?.error) {
+ if (error) {
return { type: 'error', data: event };
}
@@ -733,41 +739,7 @@ const filterEventsAndPrepareBatchRequests = (transformedEvents) => {
return prepareBatchRequests(filteredEvents);
};
-/**
- * Groups events with the same message type together in batches.
- * Each batch contains events that have the same message type and are from different users.
- *
- * @param {Array} inputs - An array of events
- * @returns {Array} - An array of batches
- */
-const batchEvents = (inputs) => {
- const batches = [];
- let currentInputsArray = inputs;
- while (currentInputsArray.length > 0) {
- const remainingInputsArray = [];
- const userOrderTracker = {};
- const event = currentInputsArray.shift();
- const messageType = event.message.type;
- const batch = [event];
- currentInputsArray.forEach((currentInput) => {
- const currentMessageType = currentInput.message.type;
- const currentUser = currentInput.metadata.userId;
- if (currentMessageType === messageType && !userOrderTracker[currentUser]) {
- batch.push(currentInput);
- } else {
- remainingInputsArray.push(currentInput);
- userOrderTracker[currentUser] = true;
- }
- })
- batches.push(batch);
- currentInputsArray = remainingInputsArray;
- }
-
- return batches;
-}
-
module.exports = {
- batchEvents,
getCatalogEndpoint,
hasMultipleResponses,
pageEventPayloadBuilder,
diff --git a/src/v0/destinations/iterable/util.test.js b/src/v0/destinations/iterable/util.test.js
index e7a1ea5862d..098960ac775 100644
--- a/src/v0/destinations/iterable/util.test.js
+++ b/src/v0/destinations/iterable/util.test.js
@@ -1,5 +1,4 @@
const {
- batchEvents,
pageEventPayloadBuilder,
trackEventPayloadBuilder,
screenEventPayloadBuilder,
@@ -108,103 +107,6 @@ const getTestEcommMessage = () => {
return message;
};
-const orderEventsFuncData = [
- {
- inputs: [
- { message: { type: 'identify' }, metadata: { userId: '1' } },
- { message: { type: 'track' }, metadata: { userId: '1' } },
- { message: { type: 'identify' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'identify' }, metadata: { userId: '3' } },
- { message: { type: 'track' }, metadata: { userId: '3' } },
- { message: { type: 'identify' }, metadata: { userId: '4' } },
- { message: { type: 'track' }, metadata: { userId: '4' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'track' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- ],
- output: [
- [
- { message: { type: 'identify' }, metadata: { userId: '1' } },
- { message: { type: 'identify' }, metadata: { userId: '2' } },
- { message: { type: 'identify' }, metadata: { userId: '3' } },
- { message: { type: 'identify' }, metadata: { userId: '4' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- ],
- [
- { message: { type: 'track' }, metadata: { userId: '1' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '3' } },
- { message: { type: 'track' }, metadata: { userId: '4' } },
- { message: { type: 'track' }, metadata: { userId: '5' } },
- ],
- [
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- ]
- ]
- },
- {
- inputs: [
- { message: { type: 'track' }, metadata: { userId: '3' } },
- { message: { type: 'identify' }, metadata: { userId: '3' } },
- { message: { type: 'identify' }, metadata: { userId: '1' } },
- { message: { type: 'track' }, metadata: { userId: '1' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'track' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '4' } },
- { message: { type: 'identify' }, metadata: { userId: '4' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- ],
- output: [
- [
- { message: { type: 'track' }, metadata: { userId: '3' } },
- { message: { type: 'track' }, metadata: { userId: '4' } },
- ],
- [
- { message: { type: 'identify' }, metadata: { userId: '3' } },
- { message: { type: 'identify' }, metadata: { userId: '1' } },
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- { message: { type: 'identify' }, metadata: { userId: '2' } },
- { message: { type: 'identify' }, metadata: { userId: '4' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- { message: { type: 'identify' }, metadata: { userId: '6' } },
- ],
- [
- { message: { type: 'track' }, metadata: { userId: '1' } },
- { message: { type: 'track' }, metadata: { userId: '5' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- { message: { type: 'track' }, metadata: { userId: '2' } },
- ],
- [
- { message: { type: 'identify' }, metadata: { userId: '5' } },
- ]
- ]
- }
-]
-
-describe('Order Event Tests', () => {
- it('Order Event func tests', () => {
- orderEventsFuncData.forEach((data) => {
- expect(batchEvents(data.inputs)).toEqual(data.output);
- })
- });
-});
-
describe('iterable utils test', () => {
describe('Unit test cases for iterable registerDeviceTokenEventPayloadBuilder', () => {
it('for no device type', async () => {
diff --git a/src/v0/destinations/june/config.js b/src/v0/destinations/june/config.js
index 86503a39264..ba5030dbada 100644
--- a/src/v0/destinations/june/config.js
+++ b/src/v0/destinations/june/config.js
@@ -22,7 +22,7 @@ const CONFIG_CATEGORIES = {
name: 'JunePageConfig',
type: 'page',
endpoint: `${BASE_ENDPOINT}/page`,
- }
+ },
};
const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
diff --git a/src/v0/destinations/june/data/JuneGroupConfig.json b/src/v0/destinations/june/data/JuneGroupConfig.json
index dabd16a8e5c..90051321694 100644
--- a/src/v0/destinations/june/data/JuneGroupConfig.json
+++ b/src/v0/destinations/june/data/JuneGroupConfig.json
@@ -28,9 +28,7 @@
"sourceFromGenericMap": true,
"required": false,
"metadata": {
- "excludes": [
- "groupId"
- ]
+ "excludes": ["groupId"]
}
},
{
@@ -38,13 +36,7 @@
"sourceKeys": "context",
"required": false,
"metadata": {
- "excludes": [
- "page",
- "traits",
- "sessionId",
- "sessionStart",
- "consentManagement"
- ]
+ "excludes": ["page", "traits", "sessionId", "sessionStart", "consentManagement"]
}
}
-]
\ No newline at end of file
+]
diff --git a/src/v0/destinations/june/data/JuneIdentifyConfig.json b/src/v0/destinations/june/data/JuneIdentifyConfig.json
index 62ffff6ff64..d49406a5edc 100644
--- a/src/v0/destinations/june/data/JuneIdentifyConfig.json
+++ b/src/v0/destinations/june/data/JuneIdentifyConfig.json
@@ -18,10 +18,7 @@
},
{
"destKey": "traits",
- "sourceKeys": [
- "context.traits",
- "traits"
- ],
+ "sourceKeys": ["context.traits", "traits"],
"required": false
},
{
@@ -29,13 +26,7 @@
"sourceKeys": "context",
"required": false,
"metadata": {
- "excludes": [
- "page",
- "traits",
- "sessionId",
- "sessionStart",
- "consentManagement"
- ]
+ "excludes": ["page", "traits", "sessionId", "sessionStart", "consentManagement"]
}
}
-]
\ No newline at end of file
+]
diff --git a/src/v0/destinations/june/data/JunePageConfig.json b/src/v0/destinations/june/data/JunePageConfig.json
index 0f2982e8d63..96791ef09f0 100644
--- a/src/v0/destinations/june/data/JunePageConfig.json
+++ b/src/v0/destinations/june/data/JunePageConfig.json
@@ -1,49 +1,41 @@
[
- {
- "destKey": "userId",
- "sourceKeys": "userIdOnly",
- "sourceFromGenericMap": true,
- "required": false
- },
- {
- "destKey": "anonymousId",
- "sourceKeys": "anonymousId",
- "required": false
- },
- {
- "destKey": "timestamp",
- "sourceKeys": "timestamp",
- "sourceFromGenericMap": true,
- "required": false
- },
- {
- "destKey": "properties",
- "sourceKeys": "properties",
- "required": true,
- "metadata": {
- "excludes": [
- "groupId"
- ]
- }
- },
- {
- "destKey": "context",
- "sourceKeys": "context",
- "required": false,
- "metadata": {
- "excludes": [
- "page",
- "traits",
- "sessionId",
- "sessionStart",
- "consentManagement"
- ]
- }
- },
- {
- "destKey": "context.groupId",
- "sourceKeys": "groupId",
- "sourceFromGenericMap": true,
- "required": false
+ {
+ "destKey": "userId",
+ "sourceKeys": "userIdOnly",
+ "sourceFromGenericMap": true,
+ "required": false
+ },
+ {
+ "destKey": "anonymousId",
+ "sourceKeys": "anonymousId",
+ "required": false
+ },
+ {
+ "destKey": "timestamp",
+ "sourceKeys": "timestamp",
+ "sourceFromGenericMap": true,
+ "required": false
+ },
+ {
+ "destKey": "properties",
+ "sourceKeys": "properties",
+ "required": true,
+ "metadata": {
+ "excludes": ["groupId"]
}
-]
\ No newline at end of file
+ },
+ {
+ "destKey": "context",
+ "sourceKeys": "context",
+ "required": false,
+ "metadata": {
+ "excludes": ["page", "traits", "sessionId", "sessionStart", "consentManagement"]
+ }
+ },
+ {
+ "destKey": "context.groupId",
+ "sourceKeys": "groupId",
+ "sourceFromGenericMap": true,
+ "required": false
+ }
+]
diff --git a/src/v0/destinations/june/data/JuneTrackConfig.json b/src/v0/destinations/june/data/JuneTrackConfig.json
index 6f873363ad6..839c331ae2f 100644
--- a/src/v0/destinations/june/data/JuneTrackConfig.json
+++ b/src/v0/destinations/june/data/JuneTrackConfig.json
@@ -34,13 +34,7 @@
"sourceKeys": "context",
"required": false,
"metadata": {
- "excludes": [
- "page",
- "traits",
- "sessionId",
- "sessionStart",
- "consentManagement"
- ]
+ "excludes": ["page", "traits", "sessionId", "sessionStart", "consentManagement"]
}
}
]
diff --git a/src/v0/destinations/june/transform.js b/src/v0/destinations/june/transform.js
index 14216b5d146..c8f3206903c 100644
--- a/src/v0/destinations/june/transform.js
+++ b/src/v0/destinations/june/transform.js
@@ -1,3 +1,4 @@
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
isEmptyObject,
constructPayload,
@@ -10,7 +11,6 @@ const {
const { EventType } = require('../../../constants');
const { JSON_MIME_TYPE } = require('../../util/constant');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = (payload, endpoint, destination) => {
const destPayload = payload;
@@ -50,7 +50,7 @@ const genericResponseBuilder = (message, destination, category) => {
const { endpoint, name } = CONFIG_CATEGORIES[category];
const payload = constructPayload(message, MAPPING_CONFIG[name]);
return responseBuilder(payload, endpoint, destination);
-}
+};
const processEvent = (message, destination) => {
if (!message.type) {
@@ -85,4 +85,4 @@ const processRouterDest = async (inputs, reqMetadata) => {
return respList;
};
-module.exports = { process, processRouterDest };
\ No newline at end of file
+module.exports = { process, processRouterDest };
diff --git a/src/v0/destinations/kafka/transform.js b/src/v0/destinations/kafka/transform.js
index 210469b9e50..b08c7174753 100644
--- a/src/v0/destinations/kafka/transform.js
+++ b/src/v0/destinations/kafka/transform.js
@@ -5,8 +5,9 @@ const {
getIntegrationsObj,
getHashFromArray,
removeUndefinedAndNullValues,
+ getSuccessRespEvents,
+ getErrorRespEvents,
} = require('../../util');
-// const { InstrumentationError } = require("../../util/errorTypes");
const filterConfigTopics = (message, destination) => {
const { Config } = destination;
@@ -37,6 +38,10 @@ const filterConfigTopics = (message, destination) => {
const batch = (destEvents) => {
const respList = [];
+ if (!Array.isArray(destEvents) || destEvents.length <= 0) {
+ const respEvents = getErrorRespEvents(null, 400, 'Invalid event array');
+ return [respEvents];
+ }
// Grouping the events by topic
const groupedEvents = groupBy(destEvents, (event) => event.message.topic);
@@ -52,9 +57,10 @@ const batch = (destEvents) => {
metadata: events.map((event) => event.metadata),
destination: events[0].destination,
};
- respList.push(response);
+ respList.push(
+ getSuccessRespEvents(response.batchedRequest, response.metadata, response.destination, true),
+ );
}
-
return respList;
};
diff --git a/src/v0/destinations/keen/transform.js b/src/v0/destinations/keen/transform.js
index 6d99c90dcc5..b68b5e5e1dd 100644
--- a/src/v0/destinations/keen/transform.js
+++ b/src/v0/destinations/keen/transform.js
@@ -2,6 +2,7 @@
/* eslint-disable no-nested-ternary */
const isIp = require('is-ip');
const validUrl = require('valid-url');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultPostRequestConfig,
@@ -10,7 +11,6 @@ const {
getFieldValueFromMessage,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { ENDPOINT } = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/kissmetrics/transform.js b/src/v0/destinations/kissmetrics/transform.js
index 3e2c5593de9..b24395076c9 100644
--- a/src/v0/destinations/kissmetrics/transform.js
+++ b/src/v0/destinations/kissmetrics/transform.js
@@ -9,6 +9,7 @@
const is = require('is');
const extend = require('@ndhoule/extend');
const each = require('component-each');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultGetRequestConfig,
@@ -17,7 +18,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { ENDPOINT } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
// source : https://github.com/segment-integrations/analytics.js-integration-kissmetrics/blob/master/lib/index.js
function toUnixTimestamp(date) {
diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js
index d7170ce789b..9273b6a0481 100644
--- a/src/v0/destinations/klaviyo/transform.js
+++ b/src/v0/destinations/klaviyo/transform.js
@@ -2,6 +2,7 @@
/* eslint-disable no-underscore-dangle */
/* eslint-disable array-callback-return */
const get = require('get-value');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType, WhiteListedTraits, MappedToDestinationKey } = require('../../../constants');
const {
CONFIG_CATEGORIES,
@@ -34,25 +35,26 @@ const {
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
flattenJson,
+ isNewStatusCodesAccepted,
} = require('../../util');
-
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
-const { JSON_MIME_TYPE } = require('../../util/constant');
+const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant');
/**
* Main Identify request handler func
* The function is used to create/update new users and also for adding/subscribing
- * members to the list depending on conditons.If listId is there member is added to that list &
- * if subscribe is true member is subscribed to that list else not.
- * DOCS: https://www.klaviyo.com/docs/http-api
+ * users to the list.
+ * DOCS: 1. https://developers.klaviyo.com/en/v2023-02-22/reference/create_profile
+ * 2. https://developers.klaviyo.com/en/v2023-02-22/reference/update_profile
+ * 3. https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles
* @param {*} message
* @param {*} category
* @param {*} destination
+ * @param {*} reqMetadata
* @returns
*/
-const identifyRequestHandler = async (message, category, destination) => {
+const identifyRequestHandler = async (message, category, destination, reqMetadata) => {
// If listId property is present try to subscribe/member user in list
- const { privateApiKey, enforceEmailAsPrimary, flattenProperties } = destination.Config;
+ const { privateApiKey, enforceEmailAsPrimary, listId, flattenProperties } = destination.Config;
const mappedToDestination = get(message, MappedToDestinationKey);
if (mappedToDestination) {
addExternalIdToTraits(message);
@@ -91,6 +93,10 @@ const identifyRequestHandler = async (message, category, destination) => {
data.attributes.properties = flattenProperties
? flattenJson(data.attributes.properties, '.', 'normal', false)
: data.attributes.properties;
+
+ if (isEmptyObject(data.attributes.properties)) {
+ delete data.attributes.properties;
+ }
const payload = {
data: removeUndefinedAndNullValues(data),
};
@@ -104,26 +110,46 @@ const identifyRequestHandler = async (message, category, destination) => {
},
};
- const profileId = await getIdFromNewOrExistingProfile(endpoint, payload, requestOptions);
+ const { profileId, response, statusCode } = await getIdFromNewOrExistingProfile(
+ endpoint,
+ payload,
+ requestOptions,
+ );
- // Update Profile
- const responseArray = [profileUpdateResponseBuilder(payload, profileId, category, privateApiKey)];
+ const responseMap = {
+ profileUpdateResponse: profileUpdateResponseBuilder(
+ payload,
+ profileId,
+ category,
+ privateApiKey,
+ ),
+ };
// check if user wants to subscribe profile or not and listId is present or not
- if (
- traitsInfo?.properties?.subscribe &&
- (traitsInfo.properties?.listId || destination.Config?.listId)
- ) {
- responseArray.push(subscribeUserToList(message, traitsInfo, destination));
- return responseArray;
+ if (traitsInfo?.properties?.subscribe && (traitsInfo.properties?.listId || listId)) {
+ responseMap.subscribeUserToListResponse = subscribeUserToList(message, traitsInfo, destination);
}
- return responseArray[0];
+
+ if (isNewStatusCodesAccepted(reqMetadata) && statusCode === HTTP_STATUS_CODES.CREATED) {
+ responseMap.suppressEventResponse = {
+ ...responseMap.profileUpdateResponse,
+ statusCode: HTTP_STATUS_CODES.SUPPRESS_EVENTS,
+ error: JSON.stringify(response),
+ };
+ return responseMap.subscribeUserToListResponse
+ ? [responseMap.subscribeUserToListResponse]
+ : responseMap.suppressEventResponse;
+ }
+
+ return responseMap.subscribeUserToListResponse
+ ? [responseMap.profileUpdateResponse, responseMap.subscribeUserToListResponse]
+ : responseMap.profileUpdateResponse;
};
// ----------------------
// Main handler func for track request/screen request
// User info needs to be mapped to a track event (mandatory)
-// DOCS: https://www.klaviyo.com/docs/http-api
+// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/create_event
// ----------------------
const trackRequestHandler = (message, category, destination) => {
@@ -138,10 +164,6 @@ const trackRequestHandler = (message, category, destination) => {
attributes.metric = { name: eventName };
const categ = CONFIG_CATEGORIES[eventMap];
attributes.properties = constructPayload(message.properties, MAPPING_CONFIG[categ.name]);
- attributes.properties = {
- ...attributes.properties,
- ...populateCustomFieldsFromTraits(message),
- };
// products mapping using Items.json
// mapping properties.items to payload.properties.items and using properties.products as a fallback to properties.items
@@ -191,17 +213,21 @@ const trackRequestHandler = (message, category, destination) => {
if (value) {
attributes.value = value;
}
- attributes.properties = {
- ...attributes.properties,
- ...populateCustomFieldsFromTraits(message),
- };
}
// if flattenProperties is enabled from UI, flatten the event properties
attributes.properties = flattenProperties
? flattenJson(attributes.properties, '.', 'normal', false)
: attributes.properties;
// Map user properties to profile object
- attributes.profile = createCustomerProperties(message, destination.Config);
+ attributes.profile = {
+ ...createCustomerProperties(message, destination.Config),
+ ...populateCustomFieldsFromTraits(message),
+ };
+
+ attributes.profile = flattenProperties
+ ? flattenJson(attributes.profile, '.', 'normal', false)
+ : attributes.profile;
+
if (message.timestamp) {
attributes.time = message.timestamp;
}
@@ -222,9 +248,9 @@ const trackRequestHandler = (message, category, destination) => {
// ----------------------
// Main handlerfunc for group request
-// we will map user to list (subscribe and/or member)
+// we will add/subscribe users to the list
// based on property sent
-// DOCS: https://www.klaviyo.com/docs/api/v2/lists
+// DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles
// ----------------------
const groupRequestHandler = (message, category, destination) => {
if (!message.groupId) {
@@ -243,7 +269,7 @@ const groupRequestHandler = (message, category, destination) => {
};
// Main event processor using specific handler funcs
-const processEvent = async (message, destination) => {
+const processEvent = async (message, destination, reqMetadata) => {
if (!message.type) {
throw new InstrumentationError('Event type is required');
}
@@ -257,7 +283,7 @@ const processEvent = async (message, destination) => {
switch (messageType) {
case EventType.IDENTIFY:
category = CONFIG_CATEGORIES.IDENTIFY;
- response = await identifyRequestHandler(message, category, destination);
+ response = await identifyRequestHandler(message, category, destination, reqMetadata);
break;
case EventType.SCREEN:
case EventType.TRACK:
@@ -274,8 +300,8 @@ const processEvent = async (message, destination) => {
return response;
};
-const process = async (event) => {
- const result = await processEvent(event.message, event.destination);
+const process = async (event, reqMetadata) => {
+ const result = await processEvent(event.message, event.destination, reqMetadata);
return result;
};
@@ -314,7 +340,7 @@ const processRouterDest = async (inputs, reqMetadata) => {
// if not transformed
getEventChunks(
{
- message: await process(event),
+ message: await process(event, reqMetadata),
metadata: event.metadata,
destination,
},
@@ -328,13 +354,36 @@ const processRouterDest = async (inputs, reqMetadata) => {
}
}),
);
- let batchedSubscribeResponseList = [];
+ const batchedSubscribeResponseList = [];
if (subscribeRespList.length > 0) {
- batchedSubscribeResponseList = batchSubscribeEvents(subscribeRespList);
+ const batchedResponseList = batchSubscribeEvents(subscribeRespList);
+ batchedSubscribeResponseList.push(...batchedResponseList);
}
- const nonSubscribeSuccessList = nonSubscribeRespList.map((resp) =>
- getSuccessRespEvents(resp.message, [resp.metadata], resp.destination),
- );
+ const nonSubscribeSuccessList = nonSubscribeRespList.map((resp) => {
+ const response = resp;
+ const { message, metadata, destination: eventDestination } = response;
+ if (
+ isNewStatusCodesAccepted(reqMetadata) &&
+ message?.statusCode &&
+ message.statusCode === HTTP_STATUS_CODES.SUPPRESS_EVENTS
+ ) {
+ const { error } = message;
+ delete message.error;
+ delete message.statusCode;
+ return {
+ ...getSuccessRespEvents(
+ message,
+ [metadata],
+ eventDestination,
+ false,
+ HTTP_STATUS_CODES.SUPPRESS_EVENTS,
+ ),
+ error,
+ };
+ }
+ return getSuccessRespEvents(message, [metadata], eventDestination);
+ });
+
batchResponseList = [...batchedSubscribeResponseList, ...nonSubscribeSuccessList];
return [...batchResponseList, ...batchErrorRespList];
diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js
index 319d60c8c96..60b334f3a2f 100644
--- a/src/v0/destinations/klaviyo/util.js
+++ b/src/v0/destinations/klaviyo/util.js
@@ -1,5 +1,6 @@
const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils');
-const _ = require('lodash');
+const lodash = require('lodash');
+const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { WhiteListedTraits } = require('../../../constants');
const {
@@ -12,14 +13,13 @@ const {
getSuccessRespEvents,
defaultPatchRequestConfig,
} = require('../../util');
-
-const { BASE_ENDPOINT, MAPPING_CONFIG, CONFIG_CATEGORIES, MAX_BATCH_SIZE } = require('./config');
-const { JSON_MIME_TYPE } = require('../../util/constant');
-const { NetworkError, InstrumentationError } = require('../../util/errorTypes');
-const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
const { handleHttpRequest } = require('../../../adapters/network');
-const { client: errNotificationClient } = require("../../../util/errorNotifier");
+const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant');
+const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
+const { BASE_ENDPOINT, MAPPING_CONFIG, CONFIG_CATEGORIES, MAX_BATCH_SIZE } = require('./config');
+
+const REVISION_CONSTANT = '2023-02-22';
/**
* This function calls the create user endpoint ref: https://developers.klaviyo.com/en/reference/create_profile
@@ -33,7 +33,9 @@ const { client: errNotificationClient } = require("../../../util/errorNotifier")
* @returns
*/
const getIdFromNewOrExistingProfile = async (endpoint, payload, requestOptions) => {
+ let response;
let profileId;
+ const endpointPath = '/api/profiles';
const { processedResponse: resp } = await handleHttpRequest(
'post',
endpoint,
@@ -42,23 +44,30 @@ const getIdFromNewOrExistingProfile = async (endpoint, payload, requestOptions)
{
destType: 'klaviyo',
feature: 'transformation',
+ endpointPath,
},
);
- if (resp.status === 201) {
+
+ /**
+ * 201 - profile is created with updated payload no need to update it again (suppress event with 299 status code)
+ * 409 - profile is already exist, it needs to get updated
+ */
+ if (resp.status === HTTP_STATUS_CODES.CREATED) {
profileId = resp.response?.data?.id;
- } else if (resp.status === 409) {
+ const { data } = resp.response;
+ response = { id: data.id, attributes: data.attributes };
+ } else if (resp.status === HTTP_STATUS_CODES.CONFLICT) {
const { errors } = resp.response;
profileId = errors?.[0]?.meta?.duplicate_profile_id;
}
if (profileId) {
- return profileId;
+ return { profileId, response, statusCode: resp.status };
}
let statusCode = resp.status;
if (resp.status === 201 || resp.status === 409) {
// retryable error if the profile id is not found in the response
- errNotificationClient.notify(new Error("Klaviyo: ProfileId not found"), "Profile Id not Found in the response", JSON.stringify(resp.response))
statusCode = 500;
}
@@ -72,6 +81,14 @@ const getIdFromNewOrExistingProfile = async (endpoint, payload, requestOptions)
);
};
+/**
+ * Update profile response builder
+ * @param {*} payload
+ * @param {*} profileId
+ * @param {*} category
+ * @param {*} privateApiKey
+ * @returns
+ */
const profileUpdateResponseBuilder = (payload, profileId, category, privateApiKey) => {
const updatedPayload = payload;
const identifyResponse = defaultRequestConfig();
@@ -82,7 +99,7 @@ const profileUpdateResponseBuilder = (payload, profileId, category, privateApiKe
Authorization: `Klaviyo-API-Key ${privateApiKey}`,
'Content-Type': JSON_MIME_TYPE,
Accept: JSON_MIME_TYPE,
- revision: '2023-02-22',
+ revision: REVISION_CONSTANT,
};
identifyResponse.body.JSON = removeUndefinedAndNullValues(payload);
return identifyResponse;
@@ -90,7 +107,7 @@ const profileUpdateResponseBuilder = (payload, profileId, category, privateApiKe
/**
* This function is used for creating response for subscribing users to a particular list.
- * DOCS: https://www.klaviyo.com/docs/api/v2/lists
+ * DOCS: https://developers.klaviyo.com/en/v2023-02-22/reference/subscribe_profiles
*/
const subscribeUserToList = (message, traitsInfo, destination) => {
// listId from message properties are preferred over Config listId
@@ -142,7 +159,7 @@ const subscribeUserToList = (message, traitsInfo, destination) => {
Authorization: `Klaviyo-API-Key ${privateApiKey}`,
'Content-Type': JSON_MIME_TYPE,
Accept: JSON_MIME_TYPE,
- revision: '2023-02-22',
+ revision: REVISION_CONSTANT,
};
response.body.JSON = removeUndefinedAndNullValues(payload);
@@ -214,7 +231,7 @@ const generateBatchedPaylaodForArray = (events) => {
Authorization: `Klaviyo-API-Key ${destination.Config.privateApiKey}`,
'Content-Type': JSON_MIME_TYPE,
Accept: JSON_MIME_TYPE,
- revision: '2023-02-22',
+ revision: REVISION_CONSTANT,
};
batchEventResponse = {
@@ -230,8 +247,8 @@ const generateBatchedPaylaodForArray = (events) => {
* @param {*} subscribeResponseList
* @returns
*/
-const groupSubsribeResponsesUsingListId = (subscribeResponseList) => {
- const subscribeEventGroups = _.groupBy(
+const groupSubscribeResponsesUsingListId = (subscribeResponseList) => {
+ const subscribeEventGroups = lodash.groupBy(
subscribeResponseList,
(event) => event.message.body.JSON.data.attributes.list_id,
);
@@ -242,7 +259,7 @@ const getBatchedResponseList = (subscribeEventGroups, identifyResponseList) => {
let batchedResponseList = [];
Object.keys(subscribeEventGroups).forEach((listId) => {
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const eventChunks = _.chunk(subscribeEventGroups[listId], MAX_BATCH_SIZE);
+ const eventChunks = lodash.chunk(subscribeEventGroups[listId], MAX_BATCH_SIZE);
const batchedResponse = eventChunks.map((chunk) => {
const batchEventResponse = generateBatchedPaylaodForArray(chunk);
return getSuccessRespEvents(
@@ -254,9 +271,13 @@ const getBatchedResponseList = (subscribeEventGroups, identifyResponseList) => {
});
batchedResponseList = [...batchedResponseList, ...batchedResponse];
});
- identifyResponseList.forEach((response) => {
- batchedResponseList[0].batchedRequest.push(response);
- });
+
+ if (identifyResponseList.length > 0) {
+ identifyResponseList.forEach((response) => {
+ batchedResponseList[0].batchedRequest.push(response);
+ });
+ }
+
return batchedResponseList;
};
@@ -264,6 +285,7 @@ const batchSubscribeEvents = (subscribeRespList) => {
const identifyResponseList = [];
subscribeRespList.forEach((event) => {
const processedEvent = event;
+ // for group and identify events (it will contain only subscribe response)
if (processedEvent.message.length === 2) {
// the array will contain one update profile reponse and one subscribe reponse
identifyResponseList.push(event.message[0]);
@@ -274,7 +296,7 @@ const batchSubscribeEvents = (subscribeRespList) => {
}
});
- const subscribeEventGroups = groupSubsribeResponsesUsingListId(subscribeRespList);
+ const subscribeEventGroups = groupSubscribeResponsesUsingListId(subscribeRespList);
const batchedResponseList = getBatchedResponseList(subscribeEventGroups, identifyResponseList);
@@ -287,6 +309,6 @@ module.exports = {
populateCustomFieldsFromTraits,
generateBatchedPaylaodForArray,
batchSubscribeEvents,
- getIdFromNewOrExistingProfile,
profileUpdateResponseBuilder,
+ getIdFromNewOrExistingProfile,
};
diff --git a/src/v0/destinations/kochava/transform.js b/src/v0/destinations/kochava/transform.js
index c5a4fec81f7..e9cf2eb1a08 100644
--- a/src/v0/destinations/kochava/transform.js
+++ b/src/v0/destinations/kochava/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
KOCHAVA_ENDPOINT,
@@ -11,7 +12,6 @@ const {
formatTimeStamp,
isAppleFamily,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
// build final response
// --------------------
diff --git a/src/v0/destinations/kustomer/config.js b/src/v0/destinations/kustomer/config.js
index d90c1b837b4..19e1e52c60e 100644
--- a/src/v0/destinations/kustomer/config.js
+++ b/src/v0/destinations/kustomer/config.js
@@ -1,6 +1,6 @@
const { getMappingConfig } = require('../../util');
-const BASE_ENDPOINT = 'https://api.kustomerapp.com';
+const DEFAULT_BASE_ENDPOINT = 'https://api.kustomerapp.com';
const CONFIG_CATEGORIES = {
IDENTIFY: { name: 'KustomerIdentify' },
@@ -12,7 +12,7 @@ const CONFIG_CATEGORIES = {
const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname);
module.exports = {
- BASE_ENDPOINT,
+ DEFAULT_BASE_ENDPOINT,
CONFIG_CATEGORIES,
MAPPING_CONFIG,
};
diff --git a/src/v0/destinations/kustomer/transform.js b/src/v0/destinations/kustomer/transform.js
index 1d326758dce..e5010f55e02 100644
--- a/src/v0/destinations/kustomer/transform.js
+++ b/src/v0/destinations/kustomer/transform.js
@@ -1,7 +1,8 @@
/* eslint-disable no-nested-ternary */
const get = require('get-value');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
-const { CONFIG_CATEGORIES, MAPPING_CONFIG, BASE_ENDPOINT } = require('./config');
+const { CONFIG_CATEGORIES, MAPPING_CONFIG, DEFAULT_BASE_ENDPOINT } = require('./config');
const {
defaultRequestConfig,
getFieldValueFromMessage,
@@ -13,7 +14,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { fetchKustomer, handleAdvancedtransformations } = require('./util');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
// Function responsible for constructing the Kustomer (User) Payload for identify
@@ -85,6 +85,11 @@ const constructKustomerPayload = (message, category, email) => {
// type of events.
const responseBuilderSimple = async (message, category, destination) => {
let payload = {};
+
+ // Reference for base endpoint
+ // https://developer.kustomer.com/kustomer-api-docs/reference/getting-started-with-kustomer-api#using-the-kustomer-api
+ // There are two instance choices, US: https://api.kustomerapp.com and EU: https://api.prod2.kustomerapp.com
+ const BASE_ENDPOINT = destination.Config.baseEndpoint || DEFAULT_BASE_ENDPOINT;
let targetUrl;
let storedState = {
userExists: false,
diff --git a/src/v0/destinations/kustomer/util.js b/src/v0/destinations/kustomer/util.js
index c40f6faf84d..571a03f1399 100644
--- a/src/v0/destinations/kustomer/util.js
+++ b/src/v0/destinations/kustomer/util.js
@@ -1,12 +1,12 @@
/* eslint-disable eqeqeq */
-const _ = require('lodash');
+const lodash = require('lodash');
const set = require('set-value');
const get = require('get-value');
+const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
-const { BASE_ENDPOINT } = require('./config');
+const { DEFAULT_BASE_ENDPOINT } = require('./config');
const { getType, isDefinedAndNotNull, isObject } = require('../../util');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
-const { NetworkError, AbortedError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
/**
@@ -26,7 +26,7 @@ const ISO_8601 = /^\d{4}(-\d\d(-\d\d(t\d\d:\d\d(:\d\d)?(\.\d+)?(([+-]\d\d:\d\d)|
const transformNumberField = (fieldName) => {
const typeDelim = '';
const transformedFieldName = fieldName.trim().replace(/\s+/g, '-');
- if (_.endsWith(transformedFieldName, 'Num')) {
+ if (lodash.endsWith(transformedFieldName, 'Num')) {
return transformedFieldName;
}
return `${transformedFieldName}${typeDelim}Num`;
@@ -35,7 +35,7 @@ const transformNumberField = (fieldName) => {
const transformDateField = (fieldName) => {
const typeDelim = '';
const transformedFieldName = fieldName.trim().replace(/\s+/g, '-');
- if (_.endsWith(transformedFieldName, 'At')) {
+ if (lodash.endsWith(transformedFieldName, 'At')) {
return transformedFieldName;
}
return `${transformedFieldName}${typeDelim}At`;
@@ -62,7 +62,7 @@ const transformField = (fieldName) => {
};
const handleAdvancedtransformations = (event) => {
- let cloneEvent = _.cloneDeep(event);
+ let cloneEvent = lodash.cloneDeep(event);
const transformedMeta = {};
let eventName = get(cloneEvent, 'name');
const { meta } = cloneEvent;
@@ -104,7 +104,7 @@ const handleResponse = (response) => {
if (data && data.data && data.data.id) {
return {
userExists: true,
- targetUrl: `${BASE_ENDPOINT}/v1/customers/${data.data.id}?replace=false`,
+ targetUrl: `${DEFAULT_BASE_ENDPOINT}/v1/customers/${data.data.id}?replace=false`,
};
}
throw new NetworkError(
diff --git a/src/v0/destinations/lambda/transform.js b/src/v0/destinations/lambda/transform.js
index 221ef181865..1570a69ec31 100644
--- a/src/v0/destinations/lambda/transform.js
+++ b/src/v0/destinations/lambda/transform.js
@@ -1,6 +1,6 @@
const _ = require('lodash');
const { getErrorRespEvents, getSuccessRespEvents } = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const DEFAULT_INVOCATION_TYPE = 'Event'; // asynchronous invocation
const MAX_PAYLOAD_SIZE_IN_KB = 256; // only for asynchronous invocation
diff --git a/src/v0/destinations/leanplum/transform.js b/src/v0/destinations/leanplum/transform.js
index 9a5462f2e55..df075dd6313 100644
--- a/src/v0/destinations/leanplum/transform.js
+++ b/src/v0/destinations/leanplum/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ConfigCategory, mappingConfig, ENDPOINT, API_VERSION } = require('./config');
const {
@@ -7,7 +8,6 @@ const {
constructPayload,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function preparePayload(message, name, destination) {
diff --git a/src/v0/destinations/lemnisk/transform.js b/src/v0/destinations/lemnisk/transform.js
index 1d6d9a89fb5..905199079b2 100644
--- a/src/v0/destinations/lemnisk/transform.js
+++ b/src/v0/destinations/lemnisk/transform.js
@@ -1,3 +1,8 @@
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
CONFIG_CATEGORIES,
@@ -14,11 +19,6 @@ const {
isDefinedAndNotNullAndNotEmpty,
} = require('../../util');
const { fetchPlatform } = require('./utils');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (message, category, destination, platform) => {
diff --git a/src/v0/destinations/lemnisk/utils.js b/src/v0/destinations/lemnisk/utils.js
index 207122153dd..28de9ab354f 100644
--- a/src/v0/destinations/lemnisk/utils.js
+++ b/src/v0/destinations/lemnisk/utils.js
@@ -1,4 +1,4 @@
-const { ConfigurationError } = require('../../util/errorTypes');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
/**
* Fetches the platform type from the destination Config
diff --git a/src/v0/destinations/lytics/transform.js b/src/v0/destinations/lytics/transform.js
index a8d489fa5f8..c3a971adba9 100644
--- a/src/v0/destinations/lytics/transform.js
+++ b/src/v0/destinations/lytics/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
CONFIG_CATEGORIES,
@@ -14,7 +15,6 @@ const {
flattenJson,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilderSimple = (message, category, destination) => {
diff --git a/src/v0/destinations/mailchimp/transform.js b/src/v0/destinations/mailchimp/transform.js
index 3ceb669da1c..894f70672a5 100644
--- a/src/v0/destinations/mailchimp/transform.js
+++ b/src/v0/destinations/mailchimp/transform.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const {
defaultPutRequestConfig,
handleRtTfSingleEventError,
@@ -23,7 +24,6 @@ const {
stringifyPropertiesValues,
} = require('./utils');
const { MAX_BATCH_SIZE, VALID_STATUSES, TRACK_CONFIG } = require('./config');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilderSimple = (finalPayload, endpoint, Config, audienceId) => {
@@ -62,7 +62,10 @@ const trackResponseBuilder = (message, { Config }) => {
if (processedPayload?.properties) {
processedPayload.properties = stringifyPropertiesValues(processedPayload.properties);
}
- if (processedPayload.name && !(processedPayload.name.length >= 2 && processedPayload.name.length <= 30)) {
+ if (
+ processedPayload.name &&
+ !(processedPayload.name.length >= 2 && processedPayload.name.length <= 30)
+ ) {
throw new InstrumentationError('Event name should be between 2 and 30 characters');
}
processedPayload.name = processedPayload.name.trim().replace(/\s+/g, '_');
@@ -130,10 +133,10 @@ const batchEvents = (successRespList) => {
// audienceId1: [...events]
// audienceId2: [...events]
// }
- const audienceEventGroups = _.groupBy(successRespList, (event) => event.message.audienceId);
+ const audienceEventGroups = lodash.groupBy(successRespList, (event) => event.message.audienceId);
Object.keys(audienceEventGroups).forEach((audienceId) => {
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
- const eventChunks = _.chunk(audienceEventGroups[audienceId], MAX_BATCH_SIZE);
+ const eventChunks = lodash.chunk(audienceEventGroups[audienceId], MAX_BATCH_SIZE);
eventChunks.forEach((chunk) => {
const batchEventResponse = generateBatchedPaylaodForArray(audienceId, chunk);
batchedResponseList.push(
diff --git a/src/v0/destinations/mailchimp/utils.js b/src/v0/destinations/mailchimp/utils.js
index 5a6d62c72ce..e1e2e9883b7 100644
--- a/src/v0/destinations/mailchimp/utils.js
+++ b/src/v0/destinations/mailchimp/utils.js
@@ -1,5 +1,6 @@
const get = require('get-value');
const md5 = require('md5');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { MappedToDestinationKey } = require('../../../constants');
const logger = require('../../../logger');
@@ -15,7 +16,6 @@ const {
defaultBatchRequestConfig,
constructPayload,
} = require('../../util');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const { MERGE_CONFIG, MERGE_ADDRESS, SUBSCRIPTION_STATUS, VALID_STATUSES } = require('./config');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
diff --git a/src/v0/destinations/mailjet/transform.js b/src/v0/destinations/mailjet/transform.js
index fa87b3ed2a6..9156bf45e95 100644
--- a/src/v0/destinations/mailjet/transform.js
+++ b/src/v0/destinations/mailjet/transform.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
getErrorRespEvents,
getSuccessRespEvents,
@@ -12,7 +13,6 @@ const {
const { MAX_BATCH_SIZE } = require('./config');
const { EventType } = require('../../../constants');
const { createOrUpdateContactResponseBuilder } = require('./utils');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload) => {
@@ -98,12 +98,12 @@ const batchEvents = (successRespList) => {
"listId2&&Action2": [{message : {}, metadata : {}, destination: {}}],
"listId2&&Action1": [{message : {}, metadata : {}, destination: {}}]
*/
- const eventGroups = _.groupBy(successRespList, (event) => {
+ const eventGroups = lodash.groupBy(successRespList, (event) => {
const { listId, action } = event.message;
return `${listId}&&${action}`;
});
Object.keys(eventGroups).forEach((combination) => {
- const eventChunks = _.chunk(eventGroups[combination], MAX_BATCH_SIZE);
+ const eventChunks = lodash.chunk(eventGroups[combination], MAX_BATCH_SIZE);
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
eventChunks.forEach((chunk) => {
const batchEventResponse = generateBatchedPaylaodForArray(chunk, combination);
diff --git a/src/v0/destinations/mailmodo/transform.js b/src/v0/destinations/mailmodo/transform.js
index 4f1a3d7e8c2..756522939da 100644
--- a/src/v0/destinations/mailmodo/transform.js
+++ b/src/v0/destinations/mailmodo/transform.js
@@ -1,6 +1,7 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const get = require('get-value');
const { isEmpty } = require('lodash');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ConfigCategory, IDENTIFY_MAX_BATCH_SIZE, mappingConfig, BASE_URL } = require('./config');
const {
@@ -14,7 +15,6 @@ const {
handleRtTfSingleEventError,
} = require('../../util');
const { deduceAddressFields, extractCustomProperties } = require('./utils');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (responseConfgs) => {
@@ -112,7 +112,7 @@ const process = (event) => processEvent(event.message, event.destination);
function batchEvents(eventsChunk) {
const batchedResponseList = [];
- const arrayChunks = _.chunk(eventsChunk, IDENTIFY_MAX_BATCH_SIZE);
+ const arrayChunks = lodash.chunk(eventsChunk, IDENTIFY_MAX_BATCH_SIZE);
// list of chunks [ [..], [..] ]
arrayChunks.forEach((chunk) => {
diff --git a/src/v0/destinations/marketo/config.js b/src/v0/destinations/marketo/config.js
index 5d70cc04250..604be41dc07 100644
--- a/src/v0/destinations/marketo/config.js
+++ b/src/v0/destinations/marketo/config.js
@@ -14,24 +14,18 @@ const DESTINATION = 'marketo';
const formatConfig = (destination) => ({
ID: destination.ID,
...destination.Config,
- customActivityEventMap: getHashFromArray(
- destination.Config.customActivityEventMap,
- 'from',
- 'to',
- false,
- ),
+ customActivityEventMap: destination.Config?.rudderEventsMapping
+ ? getHashFromArray(destination.Config.rudderEventsMapping, 'event', 'marketoActivityId', false)
+ : getHashFromArray(destination.Config.customActivityEventMap, 'from', 'to', false),
customActivityPropertyMap: getHashFromArray(
destination.Config.customActivityPropertyMap,
'from',
'to',
false,
),
- customActivityPrimaryKeyMap: getHashFromArray(
- destination.Config.customActivityPrimaryKeyMap,
- 'from',
- 'to',
- false,
- ),
+ customActivityPrimaryKeyMap: destination.Config?.rudderEventsMapping
+ ? getHashFromArray(destination.Config.rudderEventsMapping, 'event', 'marketoPrimarykey', false)
+ : getHashFromArray(destination.Config.customActivityPrimaryKeyMap, 'from', 'to', false),
leadTraitMapping: getHashFromArray(destination.Config.leadTraitMapping, 'from', 'to', false),
responseRules: destination.DestinationDefinition
? destination.DestinationDefinition.ResponseRules
diff --git a/src/v0/destinations/marketo/networkHandler.js b/src/v0/destinations/marketo/networkHandler.js
index c25a7a246c5..7abcc65c02a 100644
--- a/src/v0/destinations/marketo/networkHandler.js
+++ b/src/v0/destinations/marketo/networkHandler.js
@@ -3,7 +3,6 @@ const { marketoResponseHandler } = require('./util');
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
-// eslint-disable-next-line no-unused-vars
const responseHandler = (destinationResponse, destType) => {
const message = 'Request Processed Successfully';
const { status, rudderJobMetadata } = destinationResponse;
diff --git a/src/v0/destinations/marketo/transform.js b/src/v0/destinations/marketo/transform.js
index b23d992b64b..5000ef506b3 100644
--- a/src/v0/destinations/marketo/transform.js
+++ b/src/v0/destinations/marketo/transform.js
@@ -3,6 +3,11 @@
/* eslint-disable no-use-before-define */
const get = require('get-value');
const cloneDeep = require('lodash/cloneDeep');
+const {
+ InstrumentationError,
+ ConfigurationError,
+ UnauthorizedError,
+} = require('@rudderstack/integrations-lib');
const stats = require('../../../util/stats');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const {
@@ -38,11 +43,6 @@ const {
getResponseHandlerData,
} = require('./util');
const logger = require('../../../logger');
-const {
- InstrumentationError,
- ConfigurationError,
- UnauthorizedError,
-} = require('../../util/errorTypes');
const userIdLeadCache = new Cache(USER_LEAD_CACHE_TTL); // 1 day
const emailLeadCache = new Cache(USER_LEAD_CACHE_TTL); // 1 day
diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js
index 622575bbcd4..203e0bf859e 100644
--- a/src/v0/destinations/marketo/util.js
+++ b/src/v0/destinations/marketo/util.js
@@ -1,9 +1,3 @@
-const { httpGET, httpPOST } = require('../../../adapters/network');
-const {
- getDynamicErrorType,
- processAxiosResponse,
-} = require('../../../adapters/utils/networkUtils');
-const { isHttpStatusSuccess } = require('../../util/index');
const {
NetworkError,
AbortedError,
@@ -11,7 +5,13 @@ const {
RetryableError,
UnhandledStatusCodeError,
InstrumentationError,
-} = require('../../util/errorTypes');
+} = require('@rudderstack/integrations-lib');
+const { httpGET, httpPOST } = require('../../../adapters/network');
+const {
+ getDynamicErrorType,
+ processAxiosResponse,
+} = require('../../../adapters/utils/networkUtils');
+const { isHttpStatusSuccess } = require('../../util/index');
const tags = require('../../util/tags');
/**
@@ -19,6 +19,8 @@ const tags = require('../../util/tags');
* https://developers.marketo.com/rest-api/error-codes/
*/
+const ERROR_CODE_TO_PASS = ['1015'];
+
const MARKETO_RETRYABLE_CODES = ['601', '602', '604', '611'];
const MARKETO_ABORTABLE_CODES = [
'600',
@@ -34,29 +36,28 @@ const MARKETO_ABORTABLE_CODES = [
];
const MARKETO_THROTTLED_CODES = ['502', '606', '607', '608', '615'];
-const RECORD_LEVEL_ABORTBALE_ERRORS = [
- '1001',
- '1002',
- '1003',
- '1004',
- '1005',
- '1006',
- '1007',
- '1008',
- '1011',
- '1013',
- '1014',
- '1015',
- '1016',
- '1017',
- '1018',
- '1021',
- '1026',
- '1027',
- '1028',
- '1036',
- '1049',
-];
+// Keeping here for reference const RECORD_LEVEL_ABORTBALE_ERRORS = [
+// '1001',
+// '1002',
+// '1003',
+// '1004',
+// '1005',
+// '1006',
+// '1007',
+// '1008',
+// '1011',
+// '1013',
+// '1014',
+// '1016',
+// '1017',
+// '1018',
+// '1021',
+// '1026',
+// '1027',
+// '1028',
+// '1036',
+// '1049',
+// ];
const { DESTINATION } = require('./config');
const logger = require('../../../logger');
@@ -86,7 +87,7 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat
};
/**
* this function checks the status of individual responses and throws error if any
- * response ststus does not match the expected status
+ * response status does not match the expected status
* doc1: https://developers.marketo.com/rest-api/lead-database/custom-objects/#create_and_update
* doc2: https://developers.marketo.com/rest-api/lead-database/#create_and_update
* Structure of marketoResponse: {
@@ -122,20 +123,32 @@ const marketoApplicationErrorHandler = (marketoResponse, sourceMessage, destinat
const nestedResponseHandler = (marketoResponse, sourceMessage) => {
const checkStatus = (res) => {
const { status } = res;
- if (status && status !== 'updated' && status !== 'created' && status !== 'added') {
+ const allowedStatus = ['updated', 'added', 'removed', 'created'];
+ if (
+ status &&
+ !allowedStatus.includes(status)
+ // we need to check the case where the id are not in list
+ ) {
const { reasons } = res;
let statusCode = 400;
- if (reasons && RECORD_LEVEL_ABORTBALE_ERRORS.includes(reasons[0].code)) {
- statusCode = 400;
- } else if (reasons && MARKETO_ABORTABLE_CODES.includes(reasons[0].code)) {
- statusCode = 400;
- } else if (reasons && MARKETO_THROTTLED_CODES.includes(reasons[0].code)) {
- statusCode = 429;
- } else if (reasons && MARKETO_RETRYABLE_CODES.includes(reasons[0].code)) {
- statusCode = 500;
+ if (reasons) {
+ const errorCodesFromDest = reasons.map((reason) => reason.code);
+ const filteredErrorCode = errorCodesFromDest.find(
+ (errorCode) => !ERROR_CODE_TO_PASS.includes(errorCode),
+ );
+ if (!filteredErrorCode) {
+ return;
+ }
+ if (MARKETO_THROTTLED_CODES.includes(filteredErrorCode)) {
+ statusCode = 429;
+ } else if (MARKETO_RETRYABLE_CODES.includes(filteredErrorCode)) {
+ statusCode = 500;
+ }
}
throw new InstrumentationError(
- `Request failed during: ${sourceMessage}, error: ${JSON.stringify(reasons)}`,
+ `Request failed during: ${sourceMessage}, error: ${
+ JSON.stringify(reasons) || 'Reason(s) not Found'
+ }`,
statusCode,
{
[tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(statusCode),
@@ -176,17 +189,17 @@ const marketoResponseHandler = (
if (isHttpStatusSuccess(status)) {
// for authentication requests
if (response && response.access_token) {
- /* This scenario will handle the case when we get the foloowing response
- status: 200
- respnse: {"access_token":"86e6c440-1c2e-4a67-8b0d-53496bfaa510:sj","token_type":"bearer","expires_in":0,"scope":"CDP@cvent.com"}
- wherein "expires_in":0 denotes that we should refresh the accessToken but its not expired yet.
+ /* This scenario will handle the case when we get the foloowing response
+ status: 200
+ respnse: {"access_token":"86e6c440-1c2e-4a67-8b0d-53496bfaa510:sj","token_type":"bearer","expires_in":0,"scope":"a@b.com"}
+ wherein "expires_in":0 denotes that we should refresh the accessToken but its not expired yet.
*/
- if(response.expires_in === 0) {
- throw new RetryableError(
- `Request Failed for ${destination}, Access Token Expired (Retryable).${sourceMessage}`,
- 500,
- response,
- );
+ if (response.expires_in === 0) {
+ throw new RetryableError(
+ `Request Failed for ${destination}, Access Token Expired (Retryable).${sourceMessage}`,
+ 500,
+ response,
+ );
}
return response;
}
diff --git a/src/v0/destinations/marketo_bulk_upload/config.js b/src/v0/destinations/marketo_bulk_upload/config.js
new file mode 100644
index 00000000000..487e11fe240
--- /dev/null
+++ b/src/v0/destinations/marketo_bulk_upload/config.js
@@ -0,0 +1,36 @@
+const ABORTABLE_CODES = ['601', '603', '605', '609', '610'];
+const RETRYABLE_CODES = ['713', '602', '604', '611'];
+const THROTTLED_CODES = ['502', '606', '607', '608', '615'];
+
+const MARKETO_FILE_SIZE = 10485760;
+const MARKETO_FILE_PATH = `${__dirname}/uploadFile/marketo_bulkupload.csv`;
+
+const FETCH_ACCESS_TOKEN = 'marketo_bulk_upload_access_token_fetching';
+
+const POLL_ACTIVITY = 'marketo_bulk_upload_polling';
+const POLL_STATUS_ERR_MSG = 'Could not poll status';
+
+const UPLOAD_FILE = 'marketo_bulk_upload_upload_file';
+const FILE_UPLOAD_ERR_MSG = 'Could not upload file';
+
+const JOB_STATUS_ACTIVITY = 'marketo_bulk_upload_get_job_status';
+const FETCH_FAILURE_JOB_STATUS_ERR_MSG = 'Could not fetch failure job status';
+const FETCH_WARNING_JOB_STATUS_ERR_MSG = 'Could not fetch warning job status';
+const ACCESS_TOKEN_FETCH_ERR_MSG = 'Error during fetching access token';
+
+module.exports = {
+ ABORTABLE_CODES,
+ RETRYABLE_CODES,
+ THROTTLED_CODES,
+ MARKETO_FILE_SIZE,
+ POLL_ACTIVITY,
+ UPLOAD_FILE,
+ JOB_STATUS_ACTIVITY,
+ MARKETO_FILE_PATH,
+ FETCH_ACCESS_TOKEN,
+ POLL_STATUS_ERR_MSG,
+ FILE_UPLOAD_ERR_MSG,
+ FETCH_FAILURE_JOB_STATUS_ERR_MSG,
+ FETCH_WARNING_JOB_STATUS_ERR_MSG,
+ ACCESS_TOKEN_FETCH_ERR_MSG,
+};
diff --git a/src/v0/destinations/marketo_bulk_upload/fetchJobStatus.js b/src/v0/destinations/marketo_bulk_upload/fetchJobStatus.js
index 7e7474c2a4b..e6f56620003 100644
--- a/src/v0/destinations/marketo_bulk_upload/fetchJobStatus.js
+++ b/src/v0/destinations/marketo_bulk_upload/fetchJobStatus.js
@@ -1,31 +1,21 @@
/* eslint-disable no-restricted-syntax */
/* eslint-disable no-prototype-builtins */
-const {
- getAccessToken,
- ABORTABLE_CODES,
- THROTTLED_CODES,
- RETRYABLE_CODES,
- JOB_STATUS_ACTIVITY,
-} = require('./util');
-const { httpGET } = require('../../../adapters/network');
-const {
- AbortedError,
- RetryableError,
- ThrottledError,
- PlatformError,
-} = require('../../util/errorTypes');
+const { PlatformError } = require('@rudderstack/integrations-lib');
+const { getAccessToken } = require('./util');
+const { handleHttpRequest } = require('../../../adapters/network');
const stats = require('../../../util/stats');
const { JSON_MIME_TYPE } = require('../../util/constant');
+const {
+ handleFetchJobStatusResponse,
+ getFieldSchemaMap,
+ checkEventStatusViaSchemaMatching,
+} = require('./util');
+const { removeUndefinedValues } = require('../../util');
-const FETCH_FAILURE_JOB_STATUS_ERR_MSG = 'Could not fetch failure job status';
-const FAILURE_JOB_STATUS_ERR_MSG = 'Error during fetching failure job status';
-const FETCH_WARNING_JOB_STATUS_ERR_MSG = 'Could not fetch warning job status';
-const WARNING_JOB_STATUS_ERR_MSG = 'Error during fetching warning job status';
-
-const getFailedJobStatus = async (event) => {
+const getJobsStatus = async (event, type, accessToken) => {
const { config, importId } = event;
- const accessToken = await getAccessToken(config);
const { munchkinId } = config;
+ let url;
// Get status of each lead for failed leads
// DOC: https://developers.marketo.com/rest-api/bulk-import/bulk-lead-import/#failures
const requestOptions = {
@@ -34,270 +24,123 @@ const getFailedJobStatus = async (event) => {
Authorization: `Bearer ${accessToken}`,
},
};
- const failedLeadUrl = `https://${munchkinId}.mktorest.com/bulk/v1/leads/batch/${importId}/failures.json`;
- const startTime = Date.now();
- const resp = await httpGET(failedLeadUrl, requestOptions, {
- destType: 'marketo_bulk_upload',
- feature: 'transformation',
- });
- const endTime = Date.now();
- const requestTime = endTime - startTime;
-
- stats.gauge('marketo_bulk_upload_fetch_job_time', requestTime);
- if (resp.success) {
- if (resp.response && resp.response.data) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 200,
- state: 'Success',
- });
- return resp.response;
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_FAILURE_JOB_STATUS_ERR_MSG, 400, resp);
- }
- if (resp.response) {
- if (
- ABORTABLE_CODES.includes(resp.response.code) ||
- (resp.response.code >= 400 && resp.response.code <= 499)
- ) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(resp.response.code, 400, resp);
- } else if (RETRYABLE_CODES.includes(resp.response.code)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(resp.response.code, 500, resp);
- } else if (resp.response.response) {
- if (ABORTABLE_CODES.includes(resp.response.response.status)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(
- resp.response.response.statusText || FAILURE_JOB_STATUS_ERR_MSG,
- 400,
- resp,
- );
- } else if (THROTTLED_CODES.includes(resp.response.response.status)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new ThrottledError(
- resp.response.response.statusText || FAILURE_JOB_STATUS_ERR_MSG,
- resp,
- );
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(
- resp.response.response.statusText || FAILURE_JOB_STATUS_ERR_MSG,
- 500,
- resp,
- );
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_FAILURE_JOB_STATUS_ERR_MSG, 400, resp);
+ if (type === 'fail') {
+ url = `https://${munchkinId}.mktorest.com/bulk/v1/leads/batch/${importId}/failures.json`;
+ } else {
+ url = `https://${munchkinId}.mktorest.com/bulk/v1/leads/batch/${importId}/warnings.json`;
}
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_FAILURE_JOB_STATUS_ERR_MSG, 400, resp);
-};
-
-const getWarningJobStatus = async (event) => {
- const { config, importId } = event;
- const accessToken = await getAccessToken(config);
- const { munchkinId } = config;
- // Get status of each lead for warning leads
- // DOC: https://developers.marketo.com/rest-api/bulk-import/bulk-lead-import/#warnings
- const requestOptions = {
- headers: {
- 'Content-Type': JSON_MIME_TYPE,
- Authorization: `Bearer ${accessToken}`,
- },
- };
const startTime = Date.now();
- const warningJobStatusUrl = `https://${munchkinId}.mktorest.com/bulk/v1/leads/batch/${importId}/warnings.json`;
- const resp = await httpGET(warningJobStatusUrl, requestOptions, {
+ const { processedResponse: resp } = await handleHttpRequest('get', url, requestOptions, {
destType: 'marketo_bulk_upload',
feature: 'transformation',
});
const endTime = Date.now();
const requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_fetch_job_time', requestTime);
- if (resp.success) {
- if (resp.response && resp.response.data) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 200,
- state: 'Success',
- });
- return resp.response;
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_WARNING_JOB_STATUS_ERR_MSG, 400, resp);
- }
- if (resp.response) {
- if (
- ABORTABLE_CODES.includes(resp.response.code) ||
- (resp.response.code >= 400 && resp.response.code <= 499)
- ) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(resp.response.code, 400, resp);
- } else if (RETRYABLE_CODES.includes(resp.response.code)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(resp.response.code, 500, resp);
- } else if (resp.response.response) {
- if (ABORTABLE_CODES.includes(resp.response.response.status)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(
- resp.response.response.statusText || WARNING_JOB_STATUS_ERR_MSG,
- 400,
- resp,
- );
- } else if (THROTTLED_CODES.includes(resp.response.response.status)) {
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new ThrottledError(
- resp.response.response.statusText || WARNING_JOB_STATUS_ERR_MSG,
- resp,
- );
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(
- resp.response.response.statusText || WARNING_JOB_STATUS_ERR_MSG,
- 500,
- resp,
- );
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_WARNING_JOB_STATUS_ERR_MSG, 400, resp);
- }
- stats.increment(JOB_STATUS_ACTIVITY, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(FETCH_WARNING_JOB_STATUS_ERR_MSG, 400, resp);
+ stats.histogram('marketo_bulk_upload_fetch_job_time', requestTime);
+
+ return handleFetchJobStatusResponse(resp, type);
};
+/**
+ * Handles the response from the server based on the provided type.
+ * Retrieves the job status using the getJobsStatus function and processes the response data.
+ * Matches the response data with the data received from the server.
+ * Returns a response object containing the failed keys, failed reasons, warning keys, warning reasons, and succeeded keys.
+ * @param {Object} event - An object containing the input data and metadata.
+ * @param {string} type - A string indicating the type of job status to retrieve ("fail" or "warn").
+ * @returns {Object} - A response object with the failed keys, failed reasons, warning keys, warning reasons, and succeeded keys.
+ */
const responseHandler = async (event, type) => {
- let failedKeys = [];
- let failedReasons = {};
- let warningKeys = [];
- let warningReasons = {};
+ let FailedKeys = [];
+ const unsuccessfulJobIdsArr = [];
+ let successfulJobIdsArr = [];
+ let reasons = {};
+
+ const { config } = event;
+ const accessToken = await getAccessToken(config);
/**
* {
- "failedKeys" : [jobID1,jobID3],
- "failedReasons" : {
+ "FailedKeys" : [jobID1,jobID3],
+ "FailedReasons" : {
"jobID1" : "failure-reason-1",
"jobID3" : "failure-reason-2",
},
- "warningKeys" : [jobID2,jobID4],
- "warningReasons" : {
+ "WarningKeys" : [jobID2,jobID4],
+ "WarningReasons" : {
"jobID2" : "warning-reason-1",
"jobID4" : "warning-reason-2",
},
- "succeededKeys" : [jobID5]
+ "SucceededKeys" : [jobID5]
}
*/
- const responseStatus =
- type === 'fail' ? await getFailedJobStatus(event) : await getWarningJobStatus(event);
- const responseArr = responseStatus.data.split('\n');
+ const jobStatus =
+ type === 'fail'
+ ? await getJobsStatus(event, 'fail', accessToken)
+ : await getJobsStatus(event, 'warn', accessToken);
+ const jobStatusArr = jobStatus.toString().split('\n'); // responseArr = ['field1,field2,Import Failure Reason', 'val1,val2,reason',...]
const { input, metadata } = event;
let headerArr;
- if (metadata && metadata.csvHeader) {
+ if (metadata?.csvHeader) {
headerArr = metadata.csvHeader.split(',');
} else {
throw new PlatformError('No csvHeader in metadata');
}
+ const startTime = Date.now();
const data = {};
- input.forEach((i) => {
+ const fieldSchemaMapping = await getFieldSchemaMap(accessToken, config.munchkinId);
+ const unsuccessfulJobInfo = checkEventStatusViaSchemaMatching(event, fieldSchemaMapping);
+ const mismatchJobIdArray = Object.keys(unsuccessfulJobInfo);
+ const dataTypeMismatchKeys = mismatchJobIdArray.map((strJobId) => parseInt(strJobId, 10));
+ reasons = { ...unsuccessfulJobInfo };
+
+ const filteredEvents = input.filter(
+ (item) => !dataTypeMismatchKeys.includes(item.metadata.job_id),
+ );
+ // create a map of job_id and data sent from server
+ // {: ','}
+ filteredEvents.forEach((i) => {
const response = headerArr.map((fieldName) => Object.values(i)[0][fieldName]).join(',');
data[i.metadata.job_id] = response;
});
- const unsuccessfulJobIdsArr = [];
- const reasons = {};
- const startTime = Date.now();
- for (const element of responseArr) {
+
+ // match marketo response data with received data from server
+ for (const element of jobStatusArr) {
// split response by comma but ignore commas inside double quotes
const elemArr = element.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
- const reasonMessage = elemArr.pop();
- // match response data with received data from server
- for (const key in data) {
- if (data.hasOwnProperty(key)) {
- const val = data[key];
- if (val === `${elemArr.join()}`) {
- // add job keys if warning/failure
-
- if (!unsuccessfulJobIdsArr.includes(key)) {
- unsuccessfulJobIdsArr.push(key);
- }
- reasons[key] = reasonMessage;
+ // ref :
+ // https://developers.marketo.com/rest-api/bulk-import/bulk-custom-object-import/#:~:text=Now%20we%E2%80%99ll%20make%20Get%20Import%20Custom%20Object%20Failures%20endpoint%20call%20to%20get%20additional%20failure%20detail%3A
+ const reasonMessage = elemArr.pop(); // get the column named "Import Failure Reason"
+ for (const [key, val] of Object.entries(data)) {
+ // joining the parameter values sent from marketo match it with received data from server
+ if (val === `${elemArr.map((item) => item.replace(/"/g, '')).join(',')}`) {
+ // add job keys if warning/failure
+ if (!unsuccessfulJobIdsArr.includes(key)) {
+ unsuccessfulJobIdsArr.push(key);
}
+ reasons[key] = reasonMessage;
}
}
}
- const successfulJobIdsArr = Object.keys(data).filter((x) => !unsuccessfulJobIdsArr.includes(x));
+ FailedKeys = unsuccessfulJobIdsArr.map((strJobId) => parseInt(strJobId, 10));
+ successfulJobIdsArr = Object.keys(data).filter((x) => !unsuccessfulJobIdsArr.includes(x));
- if (type === 'fail') {
- failedKeys = unsuccessfulJobIdsArr;
- failedReasons = reasons;
- } else if (type === 'warn') {
- warningKeys = unsuccessfulJobIdsArr;
- warningReasons = reasons;
- }
- const succeededKeys = successfulJobIdsArr;
+ const SucceededKeys = successfulJobIdsArr.map((strJobId) => parseInt(strJobId, 10));
const endTime = Date.now();
const requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_fetch_job_create_response_time', requestTime);
+ stats.histogram('marketo_bulk_upload_fetch_job_create_response_time', requestTime);
const response = {
statusCode: 200,
metadata: {
- failedKeys,
- failedReasons,
- warningKeys,
- warningReasons,
- succeededKeys,
+ FailedKeys: [...dataTypeMismatchKeys, ...FailedKeys],
+ FailedReasons: reasons,
+ SucceededKeys,
},
};
- return response;
+ return removeUndefinedValues(response);
};
const processJobStatus = async (event, type) => {
diff --git a/src/v0/destinations/marketo_bulk_upload/fileUpload.js b/src/v0/destinations/marketo_bulk_upload/fileUpload.js
index b9519186780..c7212ff9cb6 100644
--- a/src/v0/destinations/marketo_bulk_upload/fileUpload.js
+++ b/src/v0/destinations/marketo_bulk_upload/fileUpload.js
@@ -1,97 +1,63 @@
/* eslint-disable no-plusplus */
const FormData = require('form-data');
const fs = require('fs');
+const {
+ NetworkError,
+ ConfigurationError,
+ RetryableError,
+ TransformationError,
+} = require('@rudderstack/integrations-lib');
const {
getAccessToken,
- ABORTABLE_CODES,
- THROTTLED_CODES,
- MARKETO_FILE_SIZE,
getMarketoFilePath,
- UPLOAD_FILE,
+ handleFileUploadResponse,
+ getFieldSchemaMap,
+ hydrateStatusForServer,
} = require('./util');
+const { isHttpStatusSuccess } = require('../../util');
+const { MARKETO_FILE_SIZE, UPLOAD_FILE } = require('./config');
const {
getHashFromArray,
removeUndefinedAndNullValues,
isDefinedAndNotNullAndNotEmpty,
} = require('../../util');
-const { httpPOST, httpGET } = require('../../../adapters/network');
-const {
- RetryableError,
- AbortedError,
- ThrottledError,
- NetworkError,
- ConfigurationError,
-} = require('../../util/errorTypes');
-const tags = require('../../util/tags');
-const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
+const { handleHttpRequest } = require('../../../adapters/network');
+const { client } = require('../../../util/errorNotifier');
const stats = require('../../../util/stats');
-const fetchFieldSchema = async (config) => {
- let fieldArr = [];
- const fieldSchemaNames = [];
- const accessToken = await getAccessToken(config);
- const fieldSchemaMapping = await httpGET(
- `https://${config.munchkinId}.mktorest.com/rest/v1/leads/describe2.json`,
- {
- params: {
- access_token: accessToken,
- },
- },
- {
- destType: 'marketo_bulk_upload',
- feature: 'transformation',
- },
- );
- if (
- fieldSchemaMapping &&
- fieldSchemaMapping.success &&
- fieldSchemaMapping.response.data &&
- fieldSchemaMapping.response.data.result.length > 0 &&
- fieldSchemaMapping.response.data.result[0]
- ) {
- fieldArr =
- fieldSchemaMapping.response.data.result &&
- Array.isArray(fieldSchemaMapping.response.data.result)
- ? fieldSchemaMapping.response.data.result[0].fields
- : [];
- fieldArr.forEach((field) => {
- fieldSchemaNames.push(field.name);
- });
- } else if (fieldSchemaMapping.response.error) {
- const status = fieldSchemaMapping?.response?.status || 400;
- throw new NetworkError(
- `${fieldSchemaMapping.response.error}`,
- status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
- },
- fieldSchemaMapping,
- );
- } else {
- throw new AbortedError('Failed to fetch Marketo Field Schema', 400, fieldSchemaMapping);
+const fetchFieldSchemaNames = async (config, accessToken) => {
+ const fieldSchemaMapping = await getFieldSchemaMap(accessToken, config.munchkinId);
+ if (Object.keys(fieldSchemaMapping).length > 0) {
+ const fieldSchemaNames = Object.keys(fieldSchemaMapping);
+ return { fieldSchemaNames };
}
- return { fieldSchemaNames, accessToken };
+ throw new RetryableError('Failed to fetch Marketo Field Schema', 500, fieldSchemaMapping);
};
const getHeaderFields = (config, fieldSchemaNames) => {
const { columnFieldsMapping } = config;
columnFieldsMapping.forEach((colField) => {
- if (fieldSchemaNames) {
- if (!fieldSchemaNames.includes(colField.to)) {
- throw new ConfigurationError(
- `The field ${colField.to} is not present in Marketo Field Schema. Aborting`,
- );
- }
- } else {
- throw new ConfigurationError('Marketo Field Schema is Empty. Aborting');
+ if (!fieldSchemaNames.includes(colField.to)) {
+ throw new ConfigurationError(
+ `The field ${colField.to} is not present in Marketo Field Schema. Aborting`,
+ );
}
});
const columnField = getHashFromArray(columnFieldsMapping, 'to', 'from', false);
return Object.keys(columnField);
};
-
-const getFileData = async (inputEvents, config, fieldSchemaNames) => {
+/**
+ * Processes input data to create a CSV file and returns the file data along with successful and unsuccessful job IDs.
+ * The file name is made unique with combination of UUID and current timestamp to avoid any overrides. It also has a
+ * maximum size limit of 10MB . The events that could be accomodated inside the file is marked as successful and the
+ * rest are marked as unsuccessful. Also the file is deleted when reading is complete.
+ * @param {Array} inputEvents - An array of input events.
+ * @param {Object} config - destination config
+ * @param {Array} headerArr - An array of header fields.
+ * @returns {Object} - An object containing the file stream, successful job IDs, and unsuccessful job IDs.
+ */
+const getFileData = async (inputEvents, config, headerArr) => {
const input = inputEvents;
const messageArr = [];
let startTime;
@@ -107,8 +73,6 @@ const getFileData = async (inputEvents, config, fieldSchemaNames) => {
messageArr.push(data);
});
- const headerArr = getHeaderFields(config, fieldSchemaNames);
-
if (isDefinedAndNotNullAndNotEmpty(config.deDuplicationField)) {
// dedup starts
// Time Complexity = O(n2)
@@ -120,7 +84,7 @@ const getFileData = async (inputEvents, config, fieldSchemaNames) => {
// user@email [4,7,9]
// user2@email [2,3]
// user3@email [1]
- input.map((element, index) => {
+ input.forEach((element, index) => {
const indexAr = dedupMap.get(element.message[config.deDuplicationField]) || [];
indexAr.push(index);
dedupMap.set(element.message[config.deDuplicationField], indexAr);
@@ -145,19 +109,16 @@ const getFileData = async (inputEvents, config, fieldSchemaNames) => {
// dedup ends
}
- if (Object.keys(headerArr).length === 0) {
- throw new ConfigurationError('Header fields not present');
- }
const csv = [];
csv.push(headerArr.toString());
endTime = Date.now();
requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_create_header_time', requestTime);
+ stats.histogram('marketo_bulk_upload_create_header_time', requestTime);
const unsuccessfulJobs = [];
const successfulJobs = [];
const MARKETO_FILE_PATH = getMarketoFilePath();
startTime = Date.now();
- messageArr.map((row) => {
+ messageArr.forEach((row) => {
const csvSize = JSON.stringify(csv); // stringify and remove all "stringification" extra data
const response = headerArr
.map((fieldName) => JSON.stringify(Object.values(row)[0][fieldName], ''))
@@ -168,215 +129,140 @@ const getFileData = async (inputEvents, config, fieldSchemaNames) => {
} else {
unsuccessfulJobs.push(Object.keys(row)[0]);
}
- return response;
});
endTime = Date.now();
requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_create_csvloop_time', requestTime);
+ stats.histogram('marketo_bulk_upload_create_csvloop_time', requestTime);
const fileSize = Buffer.from(csv.join('\n')).length;
if (csv.length > 1) {
startTime = Date.now();
fs.writeFileSync(MARKETO_FILE_PATH, csv.join('\n'));
- const readStream = fs.createReadStream(MARKETO_FILE_PATH);
+ const readStream = fs.readFileSync(MARKETO_FILE_PATH);
fs.unlinkSync(MARKETO_FILE_PATH);
endTime = Date.now();
requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_create_file_time', requestTime);
- stats.gauge('marketo_bulk_upload_upload_file_size', fileSize);
+ stats.histogram('marketo_bulk_upload_create_file_time', requestTime);
+ stats.histogram('marketo_bulk_upload_upload_file_size', fileSize);
return { readStream, successfulJobs, unsuccessfulJobs };
}
return { successfulJobs, unsuccessfulJobs };
};
-const getImportID = async (input, config, fieldSchemaNames, accessToken) => {
- const { readStream, successfulJobs, unsuccessfulJobs } = await getFileData(
- input,
- config,
- fieldSchemaNames,
- );
- const FILE_UPLOAD_ERR_MSG = 'Could not upload file';
+const getImportID = async (input, config, accessToken, csvHeader) => {
+ let readStream;
+ let successfulJobs;
+ let unsuccessfulJobs;
try {
- const formReq = new FormData();
- const { munchkinId, deDuplicationField } = config;
- // create file for multipart form
- if (readStream) {
- formReq.append('format', 'csv');
- formReq.append('file', readStream, 'marketo_bulk_upload.csv');
- formReq.append('access_token', accessToken);
- // Upload data received from server as files to marketo
- // DOC: https://developers.marketo.com/rest-api/bulk-import/bulk-lead-import/#import_file
- const requestOptions = {
- headers: {
- ...formReq.getHeaders(),
- },
- };
- if (isDefinedAndNotNullAndNotEmpty(deDuplicationField)) {
- requestOptions.params = {
- lookupField: deDuplicationField,
- };
- }
- const startTime = Date.now();
- const resp = await httpPOST(
- `https://${munchkinId}.mktorest.com/bulk/v1/leads.json`,
- formReq,
- requestOptions,
- {
- destType: 'marketo_bulk_upload',
- feature: 'transformation',
- },
- );
- const endTime = Date.now();
- const requestTime = endTime - startTime;
- stats.gauge('marketo_bulk_upload_upload_file_succJobs', successfulJobs.length);
- stats.gauge('marketo_bulk_upload_upload_file_unsuccJobs', unsuccessfulJobs.length);
- if (resp.success) {
- /**
- *
- {
- "requestId": "d01f#15d672f8560",
- "result": [
- {
- "batchId": 3404,
- "importId": "3404",
- "status": "Queued"
- }
- ],
- "success": true
- }
- */
- if (
- resp.response &&
- resp.response.data.success &&
- resp.response.data.result.length > 0 &&
- resp.response.data.result[0] &&
- resp.response.data.result[0].importId
- ) {
- const { importId } = await resp.response.data.result[0];
- stats.gauge('marketo_bulk_upload_upload_file_time', requestTime);
-
- stats.increment(UPLOAD_FILE, {
- status: 200,
- state: 'Success',
- });
- return { importId, successfulJobs, unsuccessfulJobs };
- }
- if (resp.response && resp.response.data) {
- if (
- resp.response.data.errors[0] &&
- resp.response.data.errors[0].message ===
- 'There are 10 imports currently being processed. Please try again later'
- ) {
- stats.increment(UPLOAD_FILE, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(
- resp.response.data.errors[0].message || FILE_UPLOAD_ERR_MSG,
- 500,
- { successfulJobs, unsuccessfulJobs },
- );
- }
- if (
- resp.response.data.errors[0] &&
- ((resp.response.data.errors[0].code >= 1000 &&
- resp.response.data.errors[0].code <= 1077) ||
- ABORTABLE_CODES.indexOf(resp.response.data.errors[0].code))
- ) {
- if (resp.response.data.errors[0].message === 'Empty file') {
- stats.increment(UPLOAD_FILE, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(
- resp.response.data.errors[0].message || FILE_UPLOAD_ERR_MSG,
- 500,
- { successfulJobs, unsuccessfulJobs },
- );
- }
-
- stats.increment(UPLOAD_FILE, {
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(
- resp.response.data.errors[0].message || FILE_UPLOAD_ERR_MSG,
- 400,
- { successfulJobs, unsuccessfulJobs },
- );
- } else if (THROTTLED_CODES.indexOf(resp.response.data.errors[0].code)) {
- stats.increment(UPLOAD_FILE, {
- status: 500,
- state: 'Retryable',
- });
- throw new ThrottledError(resp.response.response.statusText || FILE_UPLOAD_ERR_MSG, {
- successfulJobs,
- unsuccessfulJobs,
- });
- }
- stats.increment(UPLOAD_FILE, {
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(resp.response.response.statusText || FILE_UPLOAD_ERR_MSG, 500, {
- successfulJobs,
- unsuccessfulJobs,
- });
- }
- }
- }
- return { successfulJobs, unsuccessfulJobs };
+ ({ readStream, successfulJobs, unsuccessfulJobs } = await getFileData(
+ input,
+ config,
+ csvHeader,
+ ));
} catch (err) {
- // TODO check the tags
- stats.increment(UPLOAD_FILE, {
- status: err.response?.status || 400,
- errorMessage: err.message || FILE_UPLOAD_ERR_MSG,
+ client.notify(err, `Marketo File Upload: Error while creating file: ${err.message}`, {
+ config,
+ csvHeader,
});
- const status = err.response?.status || 400;
- throw new NetworkError(
- err.message || FILE_UPLOAD_ERR_MSG,
- status,
+ throw new TransformationError(
+ `Marketo File Upload: Error while creating file: ${err.message}`,
+ 500,
+ );
+ }
+
+ const formReq = new FormData();
+ const { munchkinId, deDuplicationField } = config;
+ // create file for multipart form
+ if (readStream) {
+ formReq.append('format', 'csv');
+ formReq.append('file', readStream, 'marketo_bulk_upload.csv');
+ formReq.append('access_token', accessToken);
+ // Upload data received from server as files to marketo
+ // DOC: https://developers.marketo.com/rest-api/bulk-import/bulk-lead-import/#import_file
+ const requestOptions = {
+ headers: {
+ ...formReq.getHeaders(),
+ },
+ };
+ if (isDefinedAndNotNullAndNotEmpty(deDuplicationField)) {
+ requestOptions.params = {
+ lookupField: deDuplicationField,
+ };
+ }
+ const startTime = Date.now();
+ const { processedResponse: resp } = await handleHttpRequest(
+ 'post',
+ `https://${munchkinId}.mktorest.com/bulk/v1/leads.json`,
+ formReq,
+ requestOptions,
{
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
+ destType: 'marketo_bulk_upload',
+ feature: 'transformation',
},
- { successfulJobs, unsuccessfulJobs },
);
+ const endTime = Date.now();
+ const requestTime = endTime - startTime;
+ stats.counter('marketo_bulk_upload_upload_file_succJobs', successfulJobs.length);
+ stats.counter('marketo_bulk_upload_upload_file_unsuccJobs', unsuccessfulJobs.length);
+ if (!isHttpStatusSuccess(resp.status)) {
+ throw new NetworkError(
+ 'Unable to upload file',
+ hydrateStatusForServer(resp.status, 'During fetching poll status'),
+ );
+ }
+ return handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime, config);
}
+ return { importId: null, successfulJobs, unsuccessfulJobs };
};
+/**
+ *
+ * @param {*} input
+ * @param {*} config
+ * @returns returns the final response of fileUpload.js
+ */
const responseHandler = async (input, config) => {
+ const accessToken = await getAccessToken(config);
/**
{
"importId" : ,
"pollURL" : ,
}
*/
- const { fieldSchemaNames, accessToken } = await fetchFieldSchema(config);
+ const { fieldSchemaNames } = await fetchFieldSchemaNames(config, accessToken);
+ const headerForCsv = getHeaderFields(config, fieldSchemaNames);
+ if (Object.keys(headerForCsv).length === 0) {
+ throw new ConfigurationError(
+ 'Faulty configuration. Please map your traits to Marketo column fields',
+ );
+ }
const { importId, successfulJobs, unsuccessfulJobs } = await getImportID(
input,
config,
- fieldSchemaNames,
accessToken,
+ headerForCsv,
);
+
+ // if upload is successful
if (importId) {
+ const csvHeader = headerForCsv.toString();
+ const metadata = { successfulJobs, unsuccessfulJobs, csvHeader };
const response = {
statusCode: 200,
importId,
- pollURL: '/pollStatus',
+ metadata,
};
- const csvHeader = getHeaderFields(config, fieldSchemaNames).toString();
- response.metadata = { successfulJobs, unsuccessfulJobs, csvHeader };
return response;
}
-
+ // if importId is returned null
stats.increment(UPLOAD_FILE, {
status: 500,
state: 'Retryable',
});
- throw new RetryableError('No import id received', 500, {
- successfulJobs,
- unsuccessfulJobs,
- });
+ return {
+ statusCode: 500,
+ FailedReason: '[Marketo File upload]: No import id received',
+ };
};
const processFileData = async (event) => {
const { input, config } = event;
diff --git a/src/v0/destinations/marketo_bulk_upload/marketo_bulk_upload.util.test.js b/src/v0/destinations/marketo_bulk_upload/marketo_bulk_upload.util.test.js
new file mode 100644
index 00000000000..78ac7c9e485
--- /dev/null
+++ b/src/v0/destinations/marketo_bulk_upload/marketo_bulk_upload.util.test.js
@@ -0,0 +1,230 @@
+const {
+ handleCommonErrorResponse,
+ handlePollResponse,
+ handleFileUploadResponse,
+} = require('./util');
+
+const { AbortedError, RetryableError } = require('@rudderstack/integrations-lib');
+
+describe('handleCommonErrorResponse', () => {
+ test('should throw AbortedError for abortable error codes', () => {
+ const resp = {
+ response: {
+ errors: [{ code: 1003, message: 'Aborted' }],
+ },
+ };
+ expect(() => handleCommonErrorResponse(resp, 'OpErrorMessage', 'OpActivity')).toThrow(
+ AbortedError,
+ );
+ });
+
+ test('should throw ThrottledError for throttled error codes', () => {
+ const resp = {
+ response: {
+ errors: [{ code: 615, message: 'Throttled' }],
+ },
+ };
+ expect(() => handleCommonErrorResponse(resp, 'OpErrorMessage', 'OpActivity')).toThrow(
+ RetryableError,
+ );
+ });
+
+ test('should throw RetryableError for other error codes', () => {
+ const resp = {
+ response: {
+ errors: [{ code: 2000, message: 'Retryable' }],
+ },
+ };
+ expect(() => handleCommonErrorResponse(resp, 'OpErrorMessage', 'OpActivity')).toThrow(
+ RetryableError,
+ );
+ });
+
+ test('should throw RetryableError by default', () => {
+ const resp = {
+ response: {
+ errors: [],
+ },
+ };
+ expect(() => handleCommonErrorResponse(resp, 'OpErrorMessage', 'OpActivity')).toThrow(
+ RetryableError,
+ );
+ });
+});
+
+describe('handlePollResponse', () => {
+ // Tests that the function returns the response object if the polling operation was successful
+ it('should return the response object when the polling operation was successful', () => {
+ const pollStatus = {
+ response: {
+ success: true,
+ result: [
+ {
+ batchId: '123',
+ status: 'Complete',
+ numOfLeadsProcessed: 2,
+ numOfRowsFailed: 1,
+ numOfRowsWithWarning: 0,
+ message: 'Import completed with errors, 2 records imported (2 members), 1 failed',
+ },
+ ],
+ },
+ };
+
+ const result = handlePollResponse(pollStatus);
+
+ expect(result).toEqual(pollStatus.response);
+ });
+
+ // Tests that the function throws an AbortedError if the response contains an abortable error code
+ it('should throw an AbortedError when the response contains an abortable error code', () => {
+ const pollStatus = {
+ response: {
+ errors: [
+ {
+ code: 1003,
+ message: 'Empty file',
+ },
+ ],
+ },
+ };
+
+ expect(() => handlePollResponse(pollStatus)).toThrow(AbortedError);
+ });
+
+ // Tests that the function throws a ThrottledError if the response contains a throttled error code
+ it('should throw a ThrottledError when the response contains a throttled error code', () => {
+ const pollStatus = {
+ response: {
+ errors: [
+ {
+ code: 615,
+ message: 'Exceeded concurrent usage limit',
+ },
+ ],
+ },
+ };
+
+ expect(() => handlePollResponse(pollStatus)).toThrow(RetryableError);
+ });
+
+ // Tests that the function throws a RetryableError if the response contains an error code that is not abortable or throttled
+ it('should throw a RetryableError when the response contains an error code that is not abortable or throttled', () => {
+ const pollStatus = {
+ response: {
+ errors: [
+ {
+ code: 601,
+ message: 'Unauthorized',
+ },
+ ],
+ },
+ };
+
+ expect(() => handlePollResponse(pollStatus)).toThrow(RetryableError);
+ });
+
+ // Tests that the function returns null if the polling operation was not successful
+ it('should return null when the polling operation was not successful', () => {
+ const pollStatus = {
+ response: {
+ success: false,
+ },
+ };
+
+ const result = handlePollResponse(pollStatus);
+
+ expect(result).toBeNull();
+ });
+});
+
+describe('handleFileUploadResponse', () => {
+ // Tests that the function returns an object with importId, successfulJobs, and unsuccessfulJobs when the response indicates a successful upload.
+ it('should return an object with importId, successfulJobs, and unsuccessfulJobs when the response indicates a successful upload', () => {
+ const resp = {
+ response: {
+ success: true,
+ result: [
+ {
+ importId: '3404',
+ status: 'Queued',
+ },
+ ],
+ },
+ };
+ const successfulJobs = [];
+ const unsuccessfulJobs = [];
+ const requestTime = 100;
+
+ const result = handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime);
+
+ expect(result).toEqual({
+ importId: '3404',
+ successfulJobs: [],
+ unsuccessfulJobs: [],
+ });
+ });
+
+ // Tests that the function throws a RetryableError when the response indicates an empty file.
+ it('should throw a RetryableError when the response indicates an empty file', () => {
+ const resp = {
+ response: {
+ errors: [
+ {
+ code: '1003',
+ message: 'Empty File',
+ },
+ ],
+ },
+ };
+ const successfulJobs = [];
+ const unsuccessfulJobs = [];
+ const requestTime = 100;
+
+ expect(() => {
+ handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime);
+ }).toThrow(RetryableError);
+ });
+
+ // Tests that the function throws a RetryableError when the response indicates more than 10 concurrent uses.
+ it('should throw a RetryableError when the response indicates more than 10 concurrent uses', () => {
+ const resp = {
+ response: {
+ errors: [
+ {
+ code: '615',
+ message: 'Concurrent Use Limit Exceeded',
+ },
+ ],
+ },
+ };
+ const successfulJobs = [];
+ const unsuccessfulJobs = [];
+ const requestTime = 100;
+
+ expect(() => {
+ handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime);
+ }).toThrow(RetryableError);
+ });
+
+ // Tests that the function throws a RetryableError when the response contains an error code between 1000 and 1077.
+ it('should throw a Aborted when the response contains an error code between 1000 and 1077', () => {
+ const resp = {
+ response: {
+ errors: [
+ {
+ code: 1001,
+ message: 'Some Error',
+ },
+ ],
+ },
+ };
+ const successfulJobs = [];
+ const unsuccessfulJobs = [];
+ const requestTime = 100;
+
+ expect(() => {
+ handleFileUploadResponse(resp, successfulJobs, unsuccessfulJobs, requestTime);
+ }).toThrow(AbortedError);
+ });
+});
diff --git a/src/v0/destinations/marketo_bulk_upload/poll.js b/src/v0/destinations/marketo_bulk_upload/poll.js
index 7978f2d8762..3ad458c5455 100644
--- a/src/v0/destinations/marketo_bulk_upload/poll.js
+++ b/src/v0/destinations/marketo_bulk_upload/poll.js
@@ -1,9 +1,10 @@
-const { removeUndefinedValues } = require('../../util');
-const { getAccessToken, ABORTABLE_CODES, THROTTLED_CODES, POLL_ACTIVITY } = require('./util');
-const { httpGET } = require('../../../adapters/network');
+const { NetworkError } = require('@rudderstack/integrations-lib');
+const { removeUndefinedValues, isHttpStatusSuccess } = require('../../util');
+const { getAccessToken, handlePollResponse, hydrateStatusForServer } = require('./util');
+const { handleHttpRequest } = require('../../../adapters/network');
const stats = require('../../../util/stats');
-const { AbortedError, ThrottledError, RetryableError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
+const { POLL_ACTIVITY } = require('./config');
const getPollStatus = async (event) => {
const accessToken = await getAccessToken(event.config);
@@ -18,106 +19,41 @@ const getPollStatus = async (event) => {
},
};
const pollUrl = `https://${munchkinId}.mktorest.com/bulk/v1/leads/batch/${event.importId}.json`;
- const startTime = Date.now();
- const pollStatus = await httpGET(pollUrl, requestOptions, {
- destType: 'marketo_bulk_upload',
- feature: 'transformation',
- });
- const endTime = Date.now();
- const requestTime = endTime - startTime;
- const POLL_STATUS_ERR_MSG = 'Could not poll status';
- if (pollStatus.success) {
- if (pollStatus.response && pollStatus.response.data.success) {
- stats.increment(POLL_ACTIVITY, {
- requestTime,
- status: 200,
- state: 'Success',
- });
- return pollStatus.response;
- }
- // DOC: https://developers.marketo.com/rest-api/error-codes/
- if (pollStatus.response && pollStatus.response.data) {
- // Abortable jobs
- // Errors from polling come as
- /**
- * {
- "requestId": "e42b#14272d07d78",
- "success": false,
- "errors": [
- {
- "code": "601",
- "message": "Unauthorized"
- }
- ]
-}
- */
- if (
- pollStatus.response.data.errors[0] &&
- ((pollStatus.response.data.errors[0].code >= 1000 &&
- pollStatus.response.data.errors[0].code <= 1077) ||
- ABORTABLE_CODES.includes(pollStatus.response.data.errors[0].code))
- ) {
- stats.increment(POLL_ACTIVITY, {
- requestTime,
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(
- pollStatus.response.data.errors[0].message || POLL_STATUS_ERR_MSG,
- 400,
- pollStatus,
- );
- } else if (THROTTLED_CODES.includes(pollStatus.response.data.errors[0].code)) {
- stats.increment(POLL_ACTIVITY, {
- requestTime,
- status: 500,
- state: 'Retryable',
- });
- throw new ThrottledError(
- pollStatus.response.data.errors[0].message || POLL_STATUS_ERR_MSG,
- pollStatus,
- );
- }
- stats.increment(POLL_ACTIVITY, {
- requestTime,
- status: 500,
- state: 'Retryable',
- });
- throw new RetryableError(
- pollStatus.response.response.statusText || 'Error during polling status',
- 500,
- pollStatus,
- );
- }
+ const { processedResponse: pollStatus } = await handleHttpRequest(
+ 'get',
+ pollUrl,
+ requestOptions,
+ {
+ destType: 'marketo_bulk_upload',
+ feature: 'transformation',
+ },
+ );
+ if (!isHttpStatusSuccess(pollStatus.status)) {
+ stats.counter(POLL_ACTIVITY, 1, {
+ status: pollStatus.status,
+ state: 'Retryable',
+ });
+ throw new NetworkError(
+ 'Could not poll status',
+ hydrateStatusForServer(pollStatus.status, 'During fetching poll status'),
+ );
}
- stats.increment(POLL_ACTIVITY, {
- requestTime,
- status: 400,
- state: 'Abortable',
- });
- throw new AbortedError(POLL_STATUS_ERR_MSG, 400, pollStatus);
+ return handlePollResponse(pollStatus, event.config);
};
const responseHandler = async (event) => {
const pollResp = await getPollStatus(event);
- let pollSuccess;
- let success;
- let statusCode;
- let hasFailed;
- let failedJobsURL;
- let hasWarnings;
- let warningJobsURL;
- let errorResponse;
// Server expects :
/**
*
* {
- "success": true,
+ "Complete": true,
"statusCode": 200,
"hasFailed": true,
- "failedJobsURL": "", // transformer URL
- "hasWarnings": false,
- "warningJobsURL": "", // transformer URL
+ "InProgress": false,
+ "FailedJobURLs": "", // transformer URL
+ "HasWarning": false,
+ "WarningJobURLs": "", // transformer URL
} // Succesful Upload
{
"success": false,
@@ -126,41 +62,57 @@ const responseHandler = async (event) => {
} // Failed Upload
{
"success": false,
+ "Inprogress": true,
+ statusCode: 500,
} // Importing or Queue
*/
- if (pollResp && pollResp.data) {
- pollSuccess = pollResp.data.success;
- if (pollSuccess) {
- const { status, numOfRowsFailed, numOfRowsWithWarning } = pollResp.data.result[0];
- if (status === 'Complete') {
- success = true;
- statusCode = 200;
- hasFailed = numOfRowsFailed > 0;
- failedJobsURL = '/getFailedJobs';
- warningJobsURL = '/getWarningJobs';
- hasWarnings = numOfRowsWithWarning > 0;
- } else if (status === 'Importing' || status === 'Queued') {
- success = false;
- }
- } else {
- success = false;
- statusCode = 400;
- errorResponse = pollResp.data.errors
- ? pollResp.data.errors[0].message
- : 'Error in importing jobs';
+ if (pollResp) {
+ // As marketo lead import API or bulk API does not support record level error response we are considering
+ // file level errors only.
+ // ref: https://nation.marketo.com/t5/ideas/support-error-code-in-record-level-in-lead-bulk-api/idi-p/262191
+ const { status, numOfRowsFailed, numOfRowsWithWarning, message } = pollResp.result[0];
+ if (status === 'Complete') {
+ const response = {
+ Complete: true,
+ statusCode: 200,
+ InProgress: false,
+ hasFailed: numOfRowsFailed > 0,
+ FailedJobURLs: numOfRowsFailed > 0 ? '/getFailedJobs' : undefined,
+ HasWarning: numOfRowsWithWarning > 0,
+ WarningJobURLs: numOfRowsWithWarning > 0 ? '/getWarningJobs' : undefined,
+ };
+ return removeUndefinedValues(response);
+ }
+ if (status === 'Importing' || status === 'Queued') {
+ return {
+ Complete: false,
+ statusCode: 500,
+ hasFailed: false,
+ InProgress: true,
+ HasWarning: false,
+ };
+ }
+ if (status === 'Failed') {
+ return {
+ Complete: false,
+ statusCode: 500,
+ hasFailed: false,
+ InProgress: false,
+ HasWarning: false,
+ Error: message || 'Marketo Poll Status Failed',
+ };
}
}
- const response = {
- success,
- statusCode,
- hasFailed,
- failedJobsURL,
- hasWarnings,
- warningJobsURL,
- errorResponse,
+ // when pollResp is null
+ return {
+ Complete: false,
+ statusCode: 500,
+ hasFailed: false,
+ InProgress: false,
+ HasWarning: false,
+ Error: 'No poll response received from Marketo',
};
- return removeUndefinedValues(response);
};
const processPolling = async (event) => {
diff --git a/src/v0/destinations/marketo_bulk_upload/transform.js b/src/v0/destinations/marketo_bulk_upload/transform.js
index d5764ee6c39..5431e67d38a 100644
--- a/src/v0/destinations/marketo_bulk_upload/transform.js
+++ b/src/v0/destinations/marketo_bulk_upload/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
getHashFromArray,
getFieldValueFromMessage,
@@ -5,7 +6,6 @@ const {
defaultRequestConfig,
} = require('../../util');
const { EventType } = require('../../../constants');
-const { InstrumentationError } = require('../../util/errorTypes');
function responseBuilderSimple(message, destination) {
const payload = {};
diff --git a/src/v0/destinations/marketo_bulk_upload/util.js b/src/v0/destinations/marketo_bulk_upload/util.js
index 38bda6c3a4a..7b329a3441b 100644
--- a/src/v0/destinations/marketo_bulk_upload/util.js
+++ b/src/v0/destinations/marketo_bulk_upload/util.js
@@ -1,98 +1,445 @@
-const { httpGET } = require('../../../adapters/network');
const {
- ThrottledError,
AbortedError,
RetryableError,
NetworkError,
-} = require('../../util/errorTypes');
+ TransformationError,
+} = require('@rudderstack/integrations-lib');
+const { handleHttpRequest } = require('../../../adapters/network');
const tags = require('../../util/tags');
+const { isHttpStatusSuccess, generateUUID } = require('../../util');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
+const stats = require('../../../util/stats');
+const {
+ ABORTABLE_CODES,
+ THROTTLED_CODES,
+ POLL_ACTIVITY,
+ UPLOAD_FILE,
+ FETCH_ACCESS_TOKEN,
+ POLL_STATUS_ERR_MSG,
+ FILE_UPLOAD_ERR_MSG,
+ ACCESS_TOKEN_FETCH_ERR_MSG,
+} = require('./config');
+const Cache = require('../../util/cache');
+const logger = require('../../../logger');
-const ABORTABLE_CODES = ['ENOTFOUND', 'ECONNREFUSED', 603, 605, 609, 610];
-const RETRYABLE_CODES = ['EADDRINUSE', 'ECONNRESET', 'ETIMEDOUT', 713, 601, 602, 604, 611];
-const THROTTLED_CODES = [502, 606, 607, 608, 615];
+const { AUTH_CACHE_TTL } = require('../../util/constant');
-const MARKETO_FILE_SIZE = 10485760;
-const MARKETO_FILE_PATH = `${__dirname}/uploadFile/marketo_bulkupload.csv`;
+const authCache = new Cache(AUTH_CACHE_TTL);
-const POLL_ACTIVITY = 'marketo_bulk_upload_polling';
-const UPLOAD_FILE = 'marketo_bulk_upload_upload_file';
-const JOB_STATUS_ACTIVITY = 'marketo_bulk_upload_get_job_status';
+const getMarketoFilePath = () =>
+ `${__dirname}/uploadFile/${Date.now()}_marketo_bulk_upload_${generateUUID()}.csv`;
-const getMarketoFilePath = () => MARKETO_FILE_PATH;
-// Fetch access token from client id and client secret
-// DOC: https://developers.marketo.com/rest-api/authentication/
-const getAccessToken = async (config) => {
+// Server only aborts when status code is 400
+const hydrateStatusForServer = (statusCode, context) => {
+ const status = Number(statusCode);
+ if (Number.isNaN(status)) {
+ throw new TransformationError(`${context}: Couldn't parse status code ${statusCode}`);
+ }
+ if (status >= 400 && status <= 499) {
+ return 400;
+ }
+ return status;
+};
+
+const getAccessTokenCacheKey = (config = {}) => {
+ const { munchkinId, clientId, clientSecret } = config;
+ return `${munchkinId}-${clientId}-${clientSecret}`;
+};
+
+/**
+ * Handles common error responses returned from API calls.
+ * Checks the error code and throws the appropriate error object based on the code.
+ *
+ * @param {object} resp - The response object containing the error information.
+ * @param {string} OpErrorMessage - The error message to be used if the error code is not recognized.
+ * @param {string} OpActivity - The activity name for tracking purposes.
+ * @throws {AbortedError} - If the error code is abortable.
+ * @throws {ThrottledError} - If the error code is within the range of throttled codes.
+ * @throws {RetryableError} - If the error code is neither abortable nor throttled.
+ *
+ * @example
+ * const resp = {
+ * response: {
+ * errors: [
+ * {
+ * code: "1003",
+ * message: "Empty File"
+ * }
+ * ]
+ * }
+ * };
+ *
+ * try {
+ * handleCommonErrorResponse(resp, "Error message", "Activity");
+ * } catch (error) {
+ * console.log(error);
+ * }
+ */
+const handleCommonErrorResponse = (apiCallResult, OpErrorMessage, OpActivity, config) => {
+ // checking for invalid/expired token errors and evicting cache in that case
+ // rudderJobMetadata contains some destination info which is being used to evict the cache
+ if (
+ authCache &&
+ apiCallResult.response?.errors &&
+ apiCallResult.response?.errors?.length > 0 &&
+ apiCallResult.response?.errors.some(
+ (errorObj) => errorObj.code === '601' || errorObj.code === '602',
+ )
+ ) {
+ // Special handling for 601 and 602 error codes for access token
+ authCache.del(getAccessTokenCacheKey(config));
+ if (apiCallResult.response?.errors.some((errorObj) => errorObj.code === '601')) {
+ throw new AbortedError(
+ `[${OpErrorMessage}]Error message: ${apiCallResult.response?.errors[0]?.message}`,
+ );
+ }
+ if (apiCallResult.response?.errors.some((errorObj) => errorObj.code === '602')) {
+ throw new RetryableError(
+ `[${OpErrorMessage}]Error message: ${apiCallResult.response?.errors[0]?.message}`,
+ );
+ }
+ }
+ if (
+ apiCallResult.response?.errors?.length > 0 &&
+ apiCallResult.response?.errors[0] &&
+ ((apiCallResult.response?.errors[0]?.code >= 1000 &&
+ apiCallResult.response?.errors[0]?.code <= 1077) ||
+ ABORTABLE_CODES.includes(apiCallResult.response?.errors[0]?.code))
+ ) {
+ // for empty file the code is 1003 and that should be retried
+ stats.increment(OpActivity, {
+ status: 400,
+ state: 'Abortable',
+ });
+ throw new AbortedError(apiCallResult.response?.errors[0]?.message || OpErrorMessage, 400);
+ } else if (THROTTLED_CODES.includes(apiCallResult.response?.errors[0]?.code)) {
+ // for more than 10 concurrent uses the code is 615 and that should be retried
+ stats.increment(OpActivity, {
+ status: 429,
+ state: 'Retryable',
+ });
+ throw new RetryableError(
+ `[${OpErrorMessage}]Error message: ${apiCallResult.response?.errors[0]?.message}`,
+ 500,
+ );
+ }
+ // by default every thing will be retried
+ stats.increment(OpActivity, {
+ status: 500,
+ state: 'Retryable',
+ });
+ throw new RetryableError(
+ `[${OpErrorMessage}]Error message: ${apiCallResult.response?.errors[0]?.message}`,
+ 500,
+ );
+};
+
+const getAccessTokenURL = (config) => {
const { clientId, clientSecret, munchkinId } = config;
const url = `https://${munchkinId}.mktorest.com/identity/oauth/token?client_id=${clientId}&client_secret=${clientSecret}&grant_type=client_credentials`;
- const resp = await httpGET(
- url,
- {},
- {
+ return url;
+};
+
+// Fetch access token from client id and client secret
+// DOC: https://developers.marketo.com/rest-api/authentication/
+const getAccessToken = async (config) =>
+ authCache.get(getAccessTokenCacheKey(config), async () => {
+ const url = getAccessTokenURL(config);
+ const { processedResponse: accessTokenResponse } = await handleHttpRequest('get', url, {
destType: 'marketo_bulk_upload',
feature: 'transformation',
- },
- );
- const ACCESS_TOKEN_FETCH_ERR_MSG = 'Error during fetching access token';
- if (resp.success) {
- if (resp.response && resp.response.data && resp.response.data.access_token) {
- return resp.response.data.access_token;
+ });
+
+ // sample response : {response: '[ENOTFOUND] :: DNS lookup failed', status: 400}
+ if (!isHttpStatusSuccess(accessTokenResponse.status)) {
+ throw new NetworkError(
+ 'Could not retrieve authorisation token',
+ hydrateStatusForServer(accessTokenResponse.status, FETCH_ACCESS_TOKEN),
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(accessTokenResponse.status),
+ },
+ accessTokenResponse,
+ );
+ }
+ if (accessTokenResponse.response?.success === false) {
+ handleCommonErrorResponse(
+ accessTokenResponse,
+ ACCESS_TOKEN_FETCH_ERR_MSG,
+ FETCH_ACCESS_TOKEN,
+ config,
+ );
+ }
+
+ // when access token is present
+ if (accessTokenResponse.response.access_token) {
+ /* This scenario will handle the case when we get the foloowing response
+ status: 200
+ respnse: {"access_token":"","token_type":"bearer","expires_in":0,"scope":"dummy@scope.com"}
+ wherein "expires_in":0 denotes that we should refresh the accessToken but its not expired yet.
+ */
+ if (accessTokenResponse.response?.expires_in === 0) {
+ throw new RetryableError(
+ `Request Failed for marketo_bulk_upload, Access Token Expired (Retryable).`,
+ 500,
+ );
+ }
+ return accessTokenResponse.response.access_token;
+ }
+ throw new AbortedError('Could not retrieve authorisation token', 400);
+ });
+
+/**
+ * Handles the response of a polling operation.
+ * Checks for any errors in the response and calls the `handleCommonErrorResponse` function to handle them.
+ * If the response is successful, increments the stats and returns the response.
+ * Otherwise, returns null.
+ *
+ * @param {object} pollStatus - The response object from the polling operation.
+ * @returns {object|null} - The response object if the polling operation was successful, otherwise null.
+ */
+const handlePollResponse = (pollStatus, config) => {
+ // DOC: https://developers.marketo.com/rest-api/error-codes/
+ if (pollStatus.response.errors) {
+ /* Sample error response for poll is:
+
+ {
+ "requestId": "e42b#14272d07d78",
+ "success": false,
+ "errors": [
+ {
+ "code": "601",
+ "message": "Unauthorized"
+ }
+ ]
+ }
+ */
+ handleCommonErrorResponse(pollStatus, POLL_STATUS_ERR_MSG, POLL_ACTIVITY, config);
+ }
+
+ /*
+ Sample Successful Poll response structure:
+ {
+ "requestId":"8136#146daebc2ed",
+ "success":true,
+ "result":[
+ {
+ "batchId":,
+ "status":"Complete",
+ "numOfLeadsProcessed":2,
+ "numOfRowsFailed":1,
+ "numOfRowsWithWarning":0,
+ "message":"Import completed with errors, 2 records imported (2 members), 1 failed"
+ }
+ ]
+ }
+ */
+ if (pollStatus.response?.success) {
+ stats.counter(POLL_ACTIVITY, 1, {
+ status: 200,
+ state: 'Success',
+ });
+
+ if (pollStatus.response?.result?.length > 0) {
+ return pollStatus.response;
}
- const status = resp?.response?.status || 400;
+ }
+
+ return null;
+};
+
+const handleFetchJobStatusResponse = (resp, type) => {
+ const marketoResponse = resp.response;
+ const marketoReposnseStatus = resp.status;
+
+ if (!isHttpStatusSuccess(marketoReposnseStatus)) {
+ logger.info('[Network Error]:Failed during fetching job status', { marketoResponse, type });
throw new NetworkError(
- 'Could not retrieve authorisation token',
- status,
- {
- [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
- },
- resp,
+ 'Unable to fetch job status',
+ hydrateStatusForServer(marketoReposnseStatus, 'During fetching job status'),
);
}
- if (resp.response) {
- // handle for abortable codes
- if (
- ABORTABLE_CODES.includes(resp.response.code) ||
- (resp.response.code >= 400 && resp.response.code <= 499)
- ) {
- throw new AbortedError(resp.response.code, 400, resp);
- } // handle for retryable codes
- else if (RETRYABLE_CODES.includes(resp.response.code)) {
- throw new RetryableError(resp.response.code, 500, resp);
- } // handle for abortable codes
- else if (resp.response.response) {
- if (ABORTABLE_CODES.includes(resp.response.response.status)) {
- throw new AbortedError(
- resp.response.response.statusText || ACCESS_TOKEN_FETCH_ERR_MSG,
- 400,
- resp,
- );
- } // handle for throttled codes
- else if (THROTTLED_CODES.includes(resp.response.response.status)) {
- throw new ThrottledError(
- resp.response.response.statusText || ACCESS_TOKEN_FETCH_ERR_MSG,
- resp,
- );
- }
- // Assuming none we should retry the remaining errors
+
+ if (marketoResponse?.success === false) {
+ logger.info('[Application Error]Failed during fetching job status', { marketoResponse, type });
+ throw new RetryableError('Failure during fetching job status', 500, resp);
+ }
+
+ /*
+ successful response :
+ {
+ response: 'city, email,Import Failure ReasonChennai,s…a,Value for lookup field 'email' not found',
+ status: 200
+ }
+
+ */
+
+ return marketoResponse;
+};
+
+/**
+ * Handles the response received after a file upload request.
+ * Checks for errors in the response and throws appropriate error objects based on the error codes.
+ * If the response indicates a successful upload, extracts the importId and returns it along with other job details.
+ *
+ * @param {object} resp - The response object received after a file upload request.
+ * @param {array} successfulJobs - An array to store details of successful jobs.
+ * @param {array} unsuccessfulJobs - An array to store details of unsuccessful jobs.
+ * @param {number} requestTime - The time taken for the request in milliseconds.
+ * @returns {object} - An object containing the importId, successfulJobs, and unsuccessfulJobs.
+ */
+const handleFileUploadResponse = (resp, successfulJobs, unsuccessfulJobs, requestTime, config) => {
+ /*
+ For unsuccessful response
+ {
+ "requestId": "e42b#14272d07d78",
+ "success": false,
+ "errors": [
+ {
+ "code": "1003",
+ "message": "Empty File"
+ }
+ ]
+ }
+ */
+ if (resp.response?.errors) {
+ if (resp.response?.errors[0]?.code === '1003') {
+ stats.increment(UPLOAD_FILE, {
+ status: 500,
+ state: 'Retryable',
+ });
throw new RetryableError(
- resp.response.response.statusText || ACCESS_TOKEN_FETCH_ERR_MSG,
+ `[${FILE_UPLOAD_ERR_MSG}]:Error Message ${resp.response.errors[0]?.message}`,
500,
- resp,
);
+ } else {
+ handleCommonErrorResponse(resp, FILE_UPLOAD_ERR_MSG, UPLOAD_FILE, config);
+ }
+ }
+
+ /**
+ * SuccessFul Upload Response :
+ {
+ "requestId": "d01f#15d672f8560",
+ "result": [
+ {
+ "batchId": 3404,
+ "importId": "3404",
+ "status": "Queued"
+ }
+ ],
+ "success": true
}
- throw new NetworkError('Could not retrieve authorization token');
+ */
+ if (
+ resp.response?.success &&
+ resp.response?.result?.length > 0 &&
+ resp.response?.result[0]?.importId
+ ) {
+ const { importId } = resp.response.result[0];
+ stats.histogram('marketo_bulk_upload_upload_file_time', requestTime);
+
+ stats.increment(UPLOAD_FILE, {
+ status: 200,
+ state: 'Success',
+ });
+ return { importId, successfulJobs, unsuccessfulJobs };
+ }
+ // if neither successful, nor the error message is appropriate sending importId as default null
+ return { importId: null, successfulJobs, unsuccessfulJobs };
+};
+
+/**
+ * Retrieves the field schema mapping for a given access token and munchkin ID from the Marketo API.
+ *
+ * @param {string} accessToken - The access token used to authenticate the API request.
+ * @param {string} munchkinId - The munchkin ID of the Marketo instance.
+ * @returns {object} - The field schema mapping retrieved from the Marketo API.
+ */
+const getFieldSchemaMap = async (accessToken, munchkinId) => {
+ let fieldArr = [];
+ const fieldMap = {}; // map to store field name and data type
+ // ref: https://developers.marketo.com/rest-api/endpoint-reference/endpoint-index/#:~:text=Describe%20Lead2,leads/describe2.json
+ const { processedResponse: fieldSchemaMapping } = await handleHttpRequest(
+ 'get',
+ `https://${munchkinId}.mktorest.com/rest/v1/leads/describe2.json`,
+ {
+ params: {
+ access_token: accessToken,
+ },
+ },
+ {
+ destType: 'marketo_bulk_upload',
+ feature: 'transformation',
+ },
+ );
+
+ if (fieldSchemaMapping.response.errors) {
+ handleCommonErrorResponse(
+ fieldSchemaMapping,
+ 'Error while fetching Marketo Field Schema',
+ 'FieldSchemaMapping',
+ );
+ }
+ if (
+ fieldSchemaMapping.response?.success &&
+ fieldSchemaMapping.response?.result.length > 0 &&
+ fieldSchemaMapping.response?.result[0]
+ ) {
+ fieldArr =
+ fieldSchemaMapping.response.result && Array.isArray(fieldSchemaMapping.response.result)
+ ? fieldSchemaMapping.response.result[0]?.fields
+ : [];
+
+ fieldArr.forEach((field) => {
+ fieldMap[field?.name] = field?.dataType;
+ });
+ } else {
+ throw new RetryableError('Failed to fetch Marketo Field Schema', 500, fieldSchemaMapping);
}
- throw new NetworkError('Could not retrieve authorization token');
+ return fieldMap;
+};
+
+/**
+ * Compares the data types of the fields in an event message with the expected data types defined in the field schema mapping.
+ * Identifies any mismatched fields and returns them as a map of job IDs and the corresponding invalid fields.
+ *
+ * @param {object} event - An object containing an `input` array of events. Each event has a `message` object with field-value pairs and a `metadata` object with a `job_id` property.
+ * @param {object} fieldSchemaMapping - An object containing the field schema mapping, which includes the expected data types for each field.
+ * @returns {object} - An object containing the job IDs as keys and the corresponding invalid fields as values.
+ */
+const checkEventStatusViaSchemaMatching = (event, fieldMap) => {
+ const mismatchedFields = {};
+ const events = event.input;
+ events.forEach((ev) => {
+ const { message, metadata } = ev;
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { job_id } = metadata;
+
+ Object.entries(message).forEach(([paramName, paramValue]) => {
+ let expectedDataType = fieldMap[paramName];
+ const actualDataType = typeof paramValue;
+
+ // If expectedDataType is not one of the primitive data types, treat it as a string
+ if (!['string', 'number', 'boolean', 'undefined'].includes(expectedDataType)) {
+ expectedDataType = 'string';
+ }
+
+ if (!mismatchedFields[job_id] && actualDataType !== expectedDataType) {
+ mismatchedFields[job_id] = `invalid ${paramName}`;
+ }
+ });
+ });
+ return mismatchedFields;
};
module.exports = {
+ checkEventStatusViaSchemaMatching,
+ handlePollResponse,
+ handleFetchJobStatusResponse,
+ handleFileUploadResponse,
+ handleCommonErrorResponse,
+ hydrateStatusForServer,
getAccessToken,
- ABORTABLE_CODES,
- RETRYABLE_CODES,
- THROTTLED_CODES,
- MARKETO_FILE_SIZE,
getMarketoFilePath,
- POLL_ACTIVITY,
- UPLOAD_FILE,
- JOB_STATUS_ACTIVITY,
+ getFieldSchemaMap,
};
diff --git a/src/v0/destinations/marketo_static_list/networkHandler.js b/src/v0/destinations/marketo_static_list/networkHandler.js
index 5a783086b82..30b053b9d3e 100644
--- a/src/v0/destinations/marketo_static_list/networkHandler.js
+++ b/src/v0/destinations/marketo_static_list/networkHandler.js
@@ -4,7 +4,6 @@ const v0Utils = require('../../util');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
const { DESTINATION } = require('./config');
-// eslint-disable-next-line no-unused-vars
const responseHandler = (destinationResponse, destType) => {
const message = 'Request Processed Successfully';
const { status, rudderJobMetadata } = destinationResponse;
@@ -25,6 +24,7 @@ const responseHandler = (destinationResponse, destType) => {
};
};
+// eslint-disable-next-line @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.responseHandler = responseHandler;
diff --git a/src/v0/destinations/marketo_static_list/testData/constants.js b/src/v0/destinations/marketo_static_list/testData/constants.js
new file mode 100644
index 00000000000..2c420c6bc2a
--- /dev/null
+++ b/src/v0/destinations/marketo_static_list/testData/constants.js
@@ -0,0 +1,45 @@
+const EXTERNAL_ID = 'marketoStaticListId';
+const TOKEN = 'Bearer access_token_success';
+const CONTENT_TYPE = 'application/json';
+const DEST_CONFIG = {
+ clientId: 'marketo_client_id_success',
+ clientSecret: 'marketo_client_secret_success',
+ accountId: 'marketo_acct_id_success',
+ staticListId: 1234,
+};
+const DEST_DEFINITION = {
+ ID: '1iVQvTRMsPPyJzwol0ifH93QTQ6',
+ Name: 'MARKETO',
+ DisplayName: 'Marketo',
+ transformAt: 'processor',
+ transformAtV1: 'processor',
+};
+const DEST_OBJECT = {
+ ID: '1zwa1wKshSt81YksKmUdJnr4IOK',
+ Name: 'test_marketo_rc',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: {
+ clientId: 'marketo_client_id_success',
+ clientSecret: 'marketo_client_secret_success',
+ accountId: 'marketo_acct_id_success',
+ staticListId: 1122,
+ },
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+};
+const MESSAGE_SOURCES_CONTEXT = {
+ job_id: '2VsZs4hyPpq7f1p8igrpmHsibHl',
+ job_run_id: 'ck99nbd2kqiljdihhkh0',
+ task_run_id: 'ck99nbd2kqiljdihhkhg',
+};
+
+module.exports = {
+ EXTERNAL_ID,
+ TOKEN,
+ CONTENT_TYPE,
+ DEST_OBJECT,
+ DEST_DEFINITION,
+ MESSAGE_SOURCES_CONTEXT,
+ DEST_CONFIG,
+};
diff --git a/src/v0/destinations/marketo_static_list/testData/testData.js b/src/v0/destinations/marketo_static_list/testData/testData.js
new file mode 100644
index 00000000000..45328436ce7
--- /dev/null
+++ b/src/v0/destinations/marketo_static_list/testData/testData.js
@@ -0,0 +1,3085 @@
+const {
+ EXTERNAL_ID,
+ TOKEN,
+ CONTENT_TYPE,
+ DEST_OBJECT,
+ DEST_DEFINITION,
+ MESSAGE_SOURCES_CONTEXT,
+ DEST_CONFIG,
+} = require('./constants');
+
+const recordInputs = [
+ {
+ destination: DEST_OBJECT,
+ message: {
+ type: 'record',
+ action: 'insert',
+ fields: {
+ id: 1001,
+ },
+ channel: 'sources',
+ context: {
+ sources: MESSAGE_SOURCES_CONTEXT,
+ externalId: [
+ {
+ type: EXTERNAL_ID,
+ id: 'id001',
+ },
+ ],
+ destinationFields: 'id',
+ mappedToDestination: 'true',
+ },
+ recordId: '3',
+ },
+ metadata: {
+ jobId: 1,
+ },
+ },
+ {
+ destination: DEST_OBJECT,
+ message: {
+ type: 'record',
+ action: 'insert',
+ fields: {
+ id: 1002,
+ },
+ channel: 'sources',
+ context: {
+ sources: MESSAGE_SOURCES_CONTEXT,
+ externalId: [
+ {
+ type: EXTERNAL_ID,
+ id: 'id002',
+ },
+ ],
+ destinationFields: 'id',
+ mappedToDestination: 'true',
+ },
+ recordId: '3',
+ },
+ metadata: {
+ jobId: 2,
+ },
+ },
+ {
+ destination: DEST_OBJECT,
+ message: {
+ type: 'record',
+ action: 'insert',
+ fields: {
+ id: 1003,
+ },
+ channel: 'sources',
+ context: {
+ sources: MESSAGE_SOURCES_CONTEXT,
+ externalId: [
+ {
+ type: EXTERNAL_ID,
+ id: 'id001',
+ },
+ ],
+ destinationFields: 'id',
+ mappedToDestination: 'true',
+ },
+ recordId: '3',
+ },
+ metadata: {
+ jobId: 3,
+ },
+ },
+ {
+ destination: DEST_OBJECT,
+ message: {
+ action: 'delete',
+ context: {
+ destinationFields: 'id',
+ externalId: [
+ {
+ id: 'id002',
+ type: EXTERNAL_ID,
+ },
+ ],
+ mappedToDestination: 'true',
+ sources: {
+ job_id: 'sf',
+ job_run_id: 'ck985bve58cvnti48120',
+ task_run_id: 'ck985bve58cvnti4812g',
+ version: '',
+ },
+ },
+ recordId: '2',
+ rudderId: '2',
+ fields: {
+ id: '2001',
+ },
+ type: 'record',
+ },
+ metadata: {
+ jobId: 4,
+ },
+ },
+];
+
+const recordOutput = [
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id001/leads.json?id=1001&id=1003',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 1,
+ },
+ {
+ jobId: 3,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'DELETE',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id002/leads.json?id=2001',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 4,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id002/leads.json?id=1002',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 2,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+];
+
+const audiencelistInputs = [
+ {
+ destination: {
+ ID: '1zia9wKshXt80YksLmUdJnr7IHI',
+ Name: 'test_marketo',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: DEST_CONFIG,
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+ },
+ message: {
+ userId: 'user 1',
+ anonymousId: 'anon-id-new',
+ event: 'event1',
+ type: 'audiencelist',
+ properties: {
+ listData: {
+ add: [
+ {
+ id: 501,
+ },
+ {
+ id: 502,
+ },
+ {
+ id: 503,
+ },
+ ],
+ remove: [
+ {
+ id: 704,
+ },
+ {
+ id: 705,
+ },
+ {
+ id: 706,
+ },
+ ],
+ },
+ enablePartialFailure: true,
+ },
+ context: {
+ library: {
+ name: 'http',
+ },
+ },
+ timestamp: '2020-02-02T00:23:09.544Z',
+ },
+ metadata: {
+ jobId: 1,
+ },
+ },
+ {
+ destination: {
+ ID: '1zia9wKshXt80YksLmUdJnr7IHI',
+ Name: 'test_marketo',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: DEST_CONFIG,
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+ },
+ message: {
+ userId: 'user 1',
+ anonymousId: 'anon-id-new',
+ event: 'event1',
+ type: 'audiencelist',
+ properties: {
+ listData: {
+ add: [
+ {
+ id: 0,
+ },
+ {
+ id: 1,
+ },
+ {
+ id: 2,
+ },
+ {
+ id: 3,
+ },
+ {
+ id: 4,
+ },
+ {
+ id: 5,
+ },
+ {
+ id: 6,
+ },
+ {
+ id: 7,
+ },
+ {
+ id: 8,
+ },
+ {
+ id: 9,
+ },
+ {
+ id: 10,
+ },
+ {
+ id: 11,
+ },
+ {
+ id: 12,
+ },
+ {
+ id: 13,
+ },
+ {
+ id: 14,
+ },
+ {
+ id: 15,
+ },
+ {
+ id: 16,
+ },
+ {
+ id: 17,
+ },
+ {
+ id: 18,
+ },
+ {
+ id: 19,
+ },
+ {
+ id: 20,
+ },
+ {
+ id: 21,
+ },
+ {
+ id: 22,
+ },
+ {
+ id: 23,
+ },
+ {
+ id: 24,
+ },
+ {
+ id: 25,
+ },
+ {
+ id: 26,
+ },
+ {
+ id: 27,
+ },
+ {
+ id: 28,
+ },
+ {
+ id: 29,
+ },
+ {
+ id: 30,
+ },
+ {
+ id: 31,
+ },
+ {
+ id: 32,
+ },
+ {
+ id: 33,
+ },
+ {
+ id: 34,
+ },
+ {
+ id: 35,
+ },
+ {
+ id: 36,
+ },
+ {
+ id: 37,
+ },
+ {
+ id: 38,
+ },
+ {
+ id: 39,
+ },
+ {
+ id: 40,
+ },
+ {
+ id: 41,
+ },
+ {
+ id: 42,
+ },
+ {
+ id: 43,
+ },
+ {
+ id: 44,
+ },
+ {
+ id: 45,
+ },
+ {
+ id: 46,
+ },
+ {
+ id: 47,
+ },
+ {
+ id: 48,
+ },
+ {
+ id: 49,
+ },
+ {
+ id: 50,
+ },
+ {
+ id: 51,
+ },
+ {
+ id: 52,
+ },
+ {
+ id: 53,
+ },
+ {
+ id: 54,
+ },
+ {
+ id: 55,
+ },
+ {
+ id: 56,
+ },
+ {
+ id: 57,
+ },
+ {
+ id: 58,
+ },
+ {
+ id: 59,
+ },
+ {
+ id: 60,
+ },
+ {
+ id: 61,
+ },
+ {
+ id: 62,
+ },
+ {
+ id: 63,
+ },
+ {
+ id: 64,
+ },
+ {
+ id: 65,
+ },
+ {
+ id: 66,
+ },
+ {
+ id: 67,
+ },
+ {
+ id: 68,
+ },
+ {
+ id: 69,
+ },
+ {
+ id: 70,
+ },
+ {
+ id: 71,
+ },
+ {
+ id: 72,
+ },
+ {
+ id: 73,
+ },
+ {
+ id: 74,
+ },
+ {
+ id: 75,
+ },
+ {
+ id: 76,
+ },
+ {
+ id: 77,
+ },
+ {
+ id: 78,
+ },
+ {
+ id: 79,
+ },
+ {
+ id: 80,
+ },
+ {
+ id: 81,
+ },
+ {
+ id: 82,
+ },
+ {
+ id: 83,
+ },
+ {
+ id: 84,
+ },
+ {
+ id: 85,
+ },
+ {
+ id: 86,
+ },
+ {
+ id: 87,
+ },
+ {
+ id: 88,
+ },
+ {
+ id: 89,
+ },
+ {
+ id: 90,
+ },
+ {
+ id: 91,
+ },
+ {
+ id: 92,
+ },
+ {
+ id: 93,
+ },
+ {
+ id: 94,
+ },
+ {
+ id: 95,
+ },
+ {
+ id: 96,
+ },
+ {
+ id: 97,
+ },
+ {
+ id: 98,
+ },
+ {
+ id: 99,
+ },
+ {
+ id: 100,
+ },
+ {
+ id: 101,
+ },
+ {
+ id: 102,
+ },
+ {
+ id: 103,
+ },
+ {
+ id: 104,
+ },
+ {
+ id: 105,
+ },
+ {
+ id: 106,
+ },
+ {
+ id: 107,
+ },
+ {
+ id: 108,
+ },
+ {
+ id: 109,
+ },
+ {
+ id: 110,
+ },
+ {
+ id: 111,
+ },
+ {
+ id: 112,
+ },
+ {
+ id: 113,
+ },
+ {
+ id: 114,
+ },
+ {
+ id: 115,
+ },
+ {
+ id: 116,
+ },
+ {
+ id: 117,
+ },
+ {
+ id: 118,
+ },
+ {
+ id: 119,
+ },
+ {
+ id: 120,
+ },
+ {
+ id: 121,
+ },
+ {
+ id: 122,
+ },
+ {
+ id: 123,
+ },
+ {
+ id: 124,
+ },
+ {
+ id: 125,
+ },
+ {
+ id: 126,
+ },
+ {
+ id: 127,
+ },
+ {
+ id: 128,
+ },
+ {
+ id: 129,
+ },
+ {
+ id: 130,
+ },
+ {
+ id: 131,
+ },
+ {
+ id: 132,
+ },
+ {
+ id: 133,
+ },
+ {
+ id: 134,
+ },
+ {
+ id: 135,
+ },
+ {
+ id: 136,
+ },
+ {
+ id: 137,
+ },
+ {
+ id: 138,
+ },
+ {
+ id: 139,
+ },
+ {
+ id: 140,
+ },
+ {
+ id: 141,
+ },
+ {
+ id: 142,
+ },
+ {
+ id: 143,
+ },
+ {
+ id: 144,
+ },
+ {
+ id: 145,
+ },
+ {
+ id: 146,
+ },
+ {
+ id: 147,
+ },
+ {
+ id: 148,
+ },
+ {
+ id: 149,
+ },
+ {
+ id: 150,
+ },
+ {
+ id: 151,
+ },
+ {
+ id: 152,
+ },
+ {
+ id: 153,
+ },
+ {
+ id: 154,
+ },
+ {
+ id: 155,
+ },
+ {
+ id: 156,
+ },
+ {
+ id: 157,
+ },
+ {
+ id: 158,
+ },
+ {
+ id: 159,
+ },
+ {
+ id: 160,
+ },
+ {
+ id: 161,
+ },
+ {
+ id: 162,
+ },
+ {
+ id: 163,
+ },
+ {
+ id: 164,
+ },
+ {
+ id: 165,
+ },
+ {
+ id: 166,
+ },
+ {
+ id: 167,
+ },
+ {
+ id: 168,
+ },
+ {
+ id: 169,
+ },
+ {
+ id: 170,
+ },
+ {
+ id: 171,
+ },
+ {
+ id: 172,
+ },
+ {
+ id: 173,
+ },
+ {
+ id: 174,
+ },
+ {
+ id: 175,
+ },
+ {
+ id: 176,
+ },
+ {
+ id: 177,
+ },
+ {
+ id: 178,
+ },
+ {
+ id: 179,
+ },
+ {
+ id: 180,
+ },
+ {
+ id: 181,
+ },
+ {
+ id: 182,
+ },
+ {
+ id: 183,
+ },
+ {
+ id: 184,
+ },
+ {
+ id: 185,
+ },
+ {
+ id: 186,
+ },
+ {
+ id: 187,
+ },
+ {
+ id: 188,
+ },
+ {
+ id: 189,
+ },
+ {
+ id: 190,
+ },
+ {
+ id: 191,
+ },
+ {
+ id: 192,
+ },
+ {
+ id: 193,
+ },
+ {
+ id: 194,
+ },
+ {
+ id: 195,
+ },
+ {
+ id: 196,
+ },
+ {
+ id: 197,
+ },
+ {
+ id: 198,
+ },
+ {
+ id: 199,
+ },
+ {
+ id: 200,
+ },
+ {
+ id: 201,
+ },
+ {
+ id: 202,
+ },
+ {
+ id: 203,
+ },
+ {
+ id: 204,
+ },
+ {
+ id: 205,
+ },
+ {
+ id: 206,
+ },
+ {
+ id: 207,
+ },
+ {
+ id: 208,
+ },
+ {
+ id: 209,
+ },
+ {
+ id: 210,
+ },
+ {
+ id: 211,
+ },
+ {
+ id: 212,
+ },
+ {
+ id: 213,
+ },
+ {
+ id: 214,
+ },
+ {
+ id: 215,
+ },
+ {
+ id: 216,
+ },
+ {
+ id: 217,
+ },
+ {
+ id: 218,
+ },
+ {
+ id: 219,
+ },
+ {
+ id: 220,
+ },
+ {
+ id: 221,
+ },
+ {
+ id: 222,
+ },
+ {
+ id: 223,
+ },
+ {
+ id: 224,
+ },
+ {
+ id: 225,
+ },
+ {
+ id: 226,
+ },
+ {
+ id: 227,
+ },
+ {
+ id: 228,
+ },
+ {
+ id: 229,
+ },
+ {
+ id: 230,
+ },
+ {
+ id: 231,
+ },
+ {
+ id: 232,
+ },
+ {
+ id: 233,
+ },
+ {
+ id: 234,
+ },
+ {
+ id: 235,
+ },
+ {
+ id: 236,
+ },
+ {
+ id: 237,
+ },
+ {
+ id: 238,
+ },
+ {
+ id: 239,
+ },
+ {
+ id: 240,
+ },
+ {
+ id: 241,
+ },
+ {
+ id: 242,
+ },
+ {
+ id: 243,
+ },
+ {
+ id: 244,
+ },
+ {
+ id: 245,
+ },
+ {
+ id: 246,
+ },
+ {
+ id: 247,
+ },
+ {
+ id: 248,
+ },
+ {
+ id: 249,
+ },
+ {
+ id: 250,
+ },
+ {
+ id: 251,
+ },
+ {
+ id: 252,
+ },
+ {
+ id: 253,
+ },
+ {
+ id: 254,
+ },
+ {
+ id: 255,
+ },
+ {
+ id: 256,
+ },
+ {
+ id: 257,
+ },
+ {
+ id: 258,
+ },
+ {
+ id: 259,
+ },
+ {
+ id: 260,
+ },
+ {
+ id: 261,
+ },
+ {
+ id: 262,
+ },
+ {
+ id: 263,
+ },
+ {
+ id: 264,
+ },
+ {
+ id: 265,
+ },
+ {
+ id: 266,
+ },
+ {
+ id: 267,
+ },
+ {
+ id: 268,
+ },
+ {
+ id: 269,
+ },
+ {
+ id: 270,
+ },
+ {
+ id: 271,
+ },
+ {
+ id: 272,
+ },
+ {
+ id: 273,
+ },
+ {
+ id: 274,
+ },
+ {
+ id: 275,
+ },
+ {
+ id: 276,
+ },
+ {
+ id: 277,
+ },
+ {
+ id: 278,
+ },
+ {
+ id: 279,
+ },
+ {
+ id: 280,
+ },
+ {
+ id: 281,
+ },
+ {
+ id: 282,
+ },
+ {
+ id: 283,
+ },
+ {
+ id: 284,
+ },
+ {
+ id: 285,
+ },
+ {
+ id: 286,
+ },
+ {
+ id: 287,
+ },
+ {
+ id: 288,
+ },
+ {
+ id: 289,
+ },
+ {
+ id: 290,
+ },
+ {
+ id: 291,
+ },
+ {
+ id: 292,
+ },
+ {
+ id: 293,
+ },
+ {
+ id: 294,
+ },
+ {
+ id: 295,
+ },
+ {
+ id: 296,
+ },
+ {
+ id: 297,
+ },
+ {
+ id: 298,
+ },
+ {
+ id: 299,
+ },
+ {
+ id: 300,
+ },
+ {
+ id: 301,
+ },
+ {
+ id: 302,
+ },
+ {
+ id: 303,
+ },
+ {
+ id: 304,
+ },
+ {
+ id: 305,
+ },
+ {
+ id: 306,
+ },
+ {
+ id: 307,
+ },
+ {
+ id: 308,
+ },
+ {
+ id: 309,
+ },
+ {
+ id: 310,
+ },
+ {
+ id: 311,
+ },
+ {
+ id: 312,
+ },
+ {
+ id: 313,
+ },
+ {
+ id: 314,
+ },
+ {
+ id: 315,
+ },
+ {
+ id: 316,
+ },
+ {
+ id: 317,
+ },
+ {
+ id: 318,
+ },
+ {
+ id: 319,
+ },
+ {
+ id: 320,
+ },
+ {
+ id: 321,
+ },
+ {
+ id: 322,
+ },
+ {
+ id: 323,
+ },
+ {
+ id: 324,
+ },
+ {
+ id: 325,
+ },
+ {
+ id: 326,
+ },
+ {
+ id: 327,
+ },
+ {
+ id: 328,
+ },
+ {
+ id: 329,
+ },
+ {
+ id: 330,
+ },
+ {
+ id: 331,
+ },
+ {
+ id: 332,
+ },
+ {
+ id: 333,
+ },
+ {
+ id: 334,
+ },
+ {
+ id: 335,
+ },
+ {
+ id: 336,
+ },
+ {
+ id: 337,
+ },
+ {
+ id: 338,
+ },
+ {
+ id: 339,
+ },
+ {
+ id: 340,
+ },
+ {
+ id: 341,
+ },
+ {
+ id: 342,
+ },
+ {
+ id: 343,
+ },
+ {
+ id: 344,
+ },
+ {
+ id: 345,
+ },
+ {
+ id: 346,
+ },
+ {
+ id: 347,
+ },
+ {
+ id: 348,
+ },
+ {
+ id: 349,
+ },
+ {
+ id: 350,
+ },
+ ],
+ },
+ enablePartialFailure: true,
+ },
+ context: {
+ library: {
+ name: 'http',
+ },
+ },
+ timestamp: '2020-02-02T00:23:09.544Z',
+ },
+ metadata: {
+ jobId: 2,
+ },
+ },
+];
+
+const reqMetadata = {
+ namespace: 'Unknown',
+ cluster: 'Unknown',
+ features: {},
+};
+
+const largeRecordOutput = [
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'DELETE',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=351&id=352&id=353&id=354&id=355&id=356&id=357&id=358&id=359&id=360&id=361&id=362&id=363&id=364&id=365&id=366&id=367&id=368&id=369&id=370&id=371&id=372&id=373&id=374&id=375&id=376&id=377&id=378&id=379&id=380&id=381&id=382&id=383&id=384&id=385&id=386&id=387&id=388&id=389&id=390&id=391&id=392&id=393&id=394&id=395&id=396&id=397&id=398&id=399&id=400&id=401&id=402&id=403&id=404&id=405&id=406&id=407&id=408&id=409&id=410&id=411&id=412&id=413&id=414&id=415&id=416&id=417&id=418&id=419&id=420&id=421&id=422&id=423&id=424&id=425&id=426&id=427&id=428&id=429&id=430&id=431&id=432&id=433&id=434&id=435&id=436&id=437&id=438&id=439&id=440&id=441&id=442&id=443&id=444&id=445&id=446&id=447&id=448&id=449&id=450',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 351,
+ },
+ {
+ jobId: 352,
+ },
+ {
+ jobId: 353,
+ },
+ {
+ jobId: 354,
+ },
+ {
+ jobId: 355,
+ },
+ {
+ jobId: 356,
+ },
+ {
+ jobId: 357,
+ },
+ {
+ jobId: 358,
+ },
+ {
+ jobId: 359,
+ },
+ {
+ jobId: 360,
+ },
+ {
+ jobId: 361,
+ },
+ {
+ jobId: 362,
+ },
+ {
+ jobId: 363,
+ },
+ {
+ jobId: 364,
+ },
+ {
+ jobId: 365,
+ },
+ {
+ jobId: 366,
+ },
+ {
+ jobId: 367,
+ },
+ {
+ jobId: 368,
+ },
+ {
+ jobId: 369,
+ },
+ {
+ jobId: 370,
+ },
+ {
+ jobId: 371,
+ },
+ {
+ jobId: 372,
+ },
+ {
+ jobId: 373,
+ },
+ {
+ jobId: 374,
+ },
+ {
+ jobId: 375,
+ },
+ {
+ jobId: 376,
+ },
+ {
+ jobId: 377,
+ },
+ {
+ jobId: 378,
+ },
+ {
+ jobId: 379,
+ },
+ {
+ jobId: 380,
+ },
+ {
+ jobId: 381,
+ },
+ {
+ jobId: 382,
+ },
+ {
+ jobId: 383,
+ },
+ {
+ jobId: 384,
+ },
+ {
+ jobId: 385,
+ },
+ {
+ jobId: 386,
+ },
+ {
+ jobId: 387,
+ },
+ {
+ jobId: 388,
+ },
+ {
+ jobId: 389,
+ },
+ {
+ jobId: 390,
+ },
+ {
+ jobId: 391,
+ },
+ {
+ jobId: 392,
+ },
+ {
+ jobId: 393,
+ },
+ {
+ jobId: 394,
+ },
+ {
+ jobId: 395,
+ },
+ {
+ jobId: 396,
+ },
+ {
+ jobId: 397,
+ },
+ {
+ jobId: 398,
+ },
+ {
+ jobId: 399,
+ },
+ {
+ jobId: 400,
+ },
+ {
+ jobId: 401,
+ },
+ {
+ jobId: 402,
+ },
+ {
+ jobId: 403,
+ },
+ {
+ jobId: 404,
+ },
+ {
+ jobId: 405,
+ },
+ {
+ jobId: 406,
+ },
+ {
+ jobId: 407,
+ },
+ {
+ jobId: 408,
+ },
+ {
+ jobId: 409,
+ },
+ {
+ jobId: 410,
+ },
+ {
+ jobId: 411,
+ },
+ {
+ jobId: 412,
+ },
+ {
+ jobId: 413,
+ },
+ {
+ jobId: 414,
+ },
+ {
+ jobId: 415,
+ },
+ {
+ jobId: 416,
+ },
+ {
+ jobId: 417,
+ },
+ {
+ jobId: 418,
+ },
+ {
+ jobId: 419,
+ },
+ {
+ jobId: 420,
+ },
+ {
+ jobId: 421,
+ },
+ {
+ jobId: 422,
+ },
+ {
+ jobId: 423,
+ },
+ {
+ jobId: 424,
+ },
+ {
+ jobId: 425,
+ },
+ {
+ jobId: 426,
+ },
+ {
+ jobId: 427,
+ },
+ {
+ jobId: 428,
+ },
+ {
+ jobId: 429,
+ },
+ {
+ jobId: 430,
+ },
+ {
+ jobId: 431,
+ },
+ {
+ jobId: 432,
+ },
+ {
+ jobId: 433,
+ },
+ {
+ jobId: 434,
+ },
+ {
+ jobId: 435,
+ },
+ {
+ jobId: 436,
+ },
+ {
+ jobId: 437,
+ },
+ {
+ jobId: 438,
+ },
+ {
+ jobId: 439,
+ },
+ {
+ jobId: 440,
+ },
+ {
+ jobId: 441,
+ },
+ {
+ jobId: 442,
+ },
+ {
+ jobId: 443,
+ },
+ {
+ jobId: 444,
+ },
+ {
+ jobId: 445,
+ },
+ {
+ jobId: 446,
+ },
+ {
+ jobId: 447,
+ },
+ {
+ jobId: 448,
+ },
+ {
+ jobId: 449,
+ },
+ {
+ jobId: 450,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299&id=300',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 1,
+ },
+ {
+ jobId: 2,
+ },
+ {
+ jobId: 3,
+ },
+ {
+ jobId: 4,
+ },
+ {
+ jobId: 5,
+ },
+ {
+ jobId: 6,
+ },
+ {
+ jobId: 7,
+ },
+ {
+ jobId: 8,
+ },
+ {
+ jobId: 9,
+ },
+ {
+ jobId: 10,
+ },
+ {
+ jobId: 11,
+ },
+ {
+ jobId: 12,
+ },
+ {
+ jobId: 13,
+ },
+ {
+ jobId: 14,
+ },
+ {
+ jobId: 15,
+ },
+ {
+ jobId: 16,
+ },
+ {
+ jobId: 17,
+ },
+ {
+ jobId: 18,
+ },
+ {
+ jobId: 19,
+ },
+ {
+ jobId: 20,
+ },
+ {
+ jobId: 21,
+ },
+ {
+ jobId: 22,
+ },
+ {
+ jobId: 23,
+ },
+ {
+ jobId: 24,
+ },
+ {
+ jobId: 25,
+ },
+ {
+ jobId: 26,
+ },
+ {
+ jobId: 27,
+ },
+ {
+ jobId: 28,
+ },
+ {
+ jobId: 29,
+ },
+ {
+ jobId: 30,
+ },
+ {
+ jobId: 31,
+ },
+ {
+ jobId: 32,
+ },
+ {
+ jobId: 33,
+ },
+ {
+ jobId: 34,
+ },
+ {
+ jobId: 35,
+ },
+ {
+ jobId: 36,
+ },
+ {
+ jobId: 37,
+ },
+ {
+ jobId: 38,
+ },
+ {
+ jobId: 39,
+ },
+ {
+ jobId: 40,
+ },
+ {
+ jobId: 41,
+ },
+ {
+ jobId: 42,
+ },
+ {
+ jobId: 43,
+ },
+ {
+ jobId: 44,
+ },
+ {
+ jobId: 45,
+ },
+ {
+ jobId: 46,
+ },
+ {
+ jobId: 47,
+ },
+ {
+ jobId: 48,
+ },
+ {
+ jobId: 49,
+ },
+ {
+ jobId: 50,
+ },
+ {
+ jobId: 51,
+ },
+ {
+ jobId: 52,
+ },
+ {
+ jobId: 53,
+ },
+ {
+ jobId: 54,
+ },
+ {
+ jobId: 55,
+ },
+ {
+ jobId: 56,
+ },
+ {
+ jobId: 57,
+ },
+ {
+ jobId: 58,
+ },
+ {
+ jobId: 59,
+ },
+ {
+ jobId: 60,
+ },
+ {
+ jobId: 61,
+ },
+ {
+ jobId: 62,
+ },
+ {
+ jobId: 63,
+ },
+ {
+ jobId: 64,
+ },
+ {
+ jobId: 65,
+ },
+ {
+ jobId: 66,
+ },
+ {
+ jobId: 67,
+ },
+ {
+ jobId: 68,
+ },
+ {
+ jobId: 69,
+ },
+ {
+ jobId: 70,
+ },
+ {
+ jobId: 71,
+ },
+ {
+ jobId: 72,
+ },
+ {
+ jobId: 73,
+ },
+ {
+ jobId: 74,
+ },
+ {
+ jobId: 75,
+ },
+ {
+ jobId: 76,
+ },
+ {
+ jobId: 77,
+ },
+ {
+ jobId: 78,
+ },
+ {
+ jobId: 79,
+ },
+ {
+ jobId: 80,
+ },
+ {
+ jobId: 81,
+ },
+ {
+ jobId: 82,
+ },
+ {
+ jobId: 83,
+ },
+ {
+ jobId: 84,
+ },
+ {
+ jobId: 85,
+ },
+ {
+ jobId: 86,
+ },
+ {
+ jobId: 87,
+ },
+ {
+ jobId: 88,
+ },
+ {
+ jobId: 89,
+ },
+ {
+ jobId: 90,
+ },
+ {
+ jobId: 91,
+ },
+ {
+ jobId: 92,
+ },
+ {
+ jobId: 93,
+ },
+ {
+ jobId: 94,
+ },
+ {
+ jobId: 95,
+ },
+ {
+ jobId: 96,
+ },
+ {
+ jobId: 97,
+ },
+ {
+ jobId: 98,
+ },
+ {
+ jobId: 99,
+ },
+ {
+ jobId: 100,
+ },
+ {
+ jobId: 101,
+ },
+ {
+ jobId: 102,
+ },
+ {
+ jobId: 103,
+ },
+ {
+ jobId: 104,
+ },
+ {
+ jobId: 105,
+ },
+ {
+ jobId: 106,
+ },
+ {
+ jobId: 107,
+ },
+ {
+ jobId: 108,
+ },
+ {
+ jobId: 109,
+ },
+ {
+ jobId: 110,
+ },
+ {
+ jobId: 111,
+ },
+ {
+ jobId: 112,
+ },
+ {
+ jobId: 113,
+ },
+ {
+ jobId: 114,
+ },
+ {
+ jobId: 115,
+ },
+ {
+ jobId: 116,
+ },
+ {
+ jobId: 117,
+ },
+ {
+ jobId: 118,
+ },
+ {
+ jobId: 119,
+ },
+ {
+ jobId: 120,
+ },
+ {
+ jobId: 121,
+ },
+ {
+ jobId: 122,
+ },
+ {
+ jobId: 123,
+ },
+ {
+ jobId: 124,
+ },
+ {
+ jobId: 125,
+ },
+ {
+ jobId: 126,
+ },
+ {
+ jobId: 127,
+ },
+ {
+ jobId: 128,
+ },
+ {
+ jobId: 129,
+ },
+ {
+ jobId: 130,
+ },
+ {
+ jobId: 131,
+ },
+ {
+ jobId: 132,
+ },
+ {
+ jobId: 133,
+ },
+ {
+ jobId: 134,
+ },
+ {
+ jobId: 135,
+ },
+ {
+ jobId: 136,
+ },
+ {
+ jobId: 137,
+ },
+ {
+ jobId: 138,
+ },
+ {
+ jobId: 139,
+ },
+ {
+ jobId: 140,
+ },
+ {
+ jobId: 141,
+ },
+ {
+ jobId: 142,
+ },
+ {
+ jobId: 143,
+ },
+ {
+ jobId: 144,
+ },
+ {
+ jobId: 145,
+ },
+ {
+ jobId: 146,
+ },
+ {
+ jobId: 147,
+ },
+ {
+ jobId: 148,
+ },
+ {
+ jobId: 149,
+ },
+ {
+ jobId: 150,
+ },
+ {
+ jobId: 151,
+ },
+ {
+ jobId: 152,
+ },
+ {
+ jobId: 153,
+ },
+ {
+ jobId: 154,
+ },
+ {
+ jobId: 155,
+ },
+ {
+ jobId: 156,
+ },
+ {
+ jobId: 157,
+ },
+ {
+ jobId: 158,
+ },
+ {
+ jobId: 159,
+ },
+ {
+ jobId: 160,
+ },
+ {
+ jobId: 161,
+ },
+ {
+ jobId: 162,
+ },
+ {
+ jobId: 163,
+ },
+ {
+ jobId: 164,
+ },
+ {
+ jobId: 165,
+ },
+ {
+ jobId: 166,
+ },
+ {
+ jobId: 167,
+ },
+ {
+ jobId: 168,
+ },
+ {
+ jobId: 169,
+ },
+ {
+ jobId: 170,
+ },
+ {
+ jobId: 171,
+ },
+ {
+ jobId: 172,
+ },
+ {
+ jobId: 173,
+ },
+ {
+ jobId: 174,
+ },
+ {
+ jobId: 175,
+ },
+ {
+ jobId: 176,
+ },
+ {
+ jobId: 177,
+ },
+ {
+ jobId: 178,
+ },
+ {
+ jobId: 179,
+ },
+ {
+ jobId: 180,
+ },
+ {
+ jobId: 181,
+ },
+ {
+ jobId: 182,
+ },
+ {
+ jobId: 183,
+ },
+ {
+ jobId: 184,
+ },
+ {
+ jobId: 185,
+ },
+ {
+ jobId: 186,
+ },
+ {
+ jobId: 187,
+ },
+ {
+ jobId: 188,
+ },
+ {
+ jobId: 189,
+ },
+ {
+ jobId: 190,
+ },
+ {
+ jobId: 191,
+ },
+ {
+ jobId: 192,
+ },
+ {
+ jobId: 193,
+ },
+ {
+ jobId: 194,
+ },
+ {
+ jobId: 195,
+ },
+ {
+ jobId: 196,
+ },
+ {
+ jobId: 197,
+ },
+ {
+ jobId: 198,
+ },
+ {
+ jobId: 199,
+ },
+ {
+ jobId: 200,
+ },
+ {
+ jobId: 201,
+ },
+ {
+ jobId: 202,
+ },
+ {
+ jobId: 203,
+ },
+ {
+ jobId: 204,
+ },
+ {
+ jobId: 205,
+ },
+ {
+ jobId: 206,
+ },
+ {
+ jobId: 207,
+ },
+ {
+ jobId: 208,
+ },
+ {
+ jobId: 209,
+ },
+ {
+ jobId: 210,
+ },
+ {
+ jobId: 211,
+ },
+ {
+ jobId: 212,
+ },
+ {
+ jobId: 213,
+ },
+ {
+ jobId: 214,
+ },
+ {
+ jobId: 215,
+ },
+ {
+ jobId: 216,
+ },
+ {
+ jobId: 217,
+ },
+ {
+ jobId: 218,
+ },
+ {
+ jobId: 219,
+ },
+ {
+ jobId: 220,
+ },
+ {
+ jobId: 221,
+ },
+ {
+ jobId: 222,
+ },
+ {
+ jobId: 223,
+ },
+ {
+ jobId: 224,
+ },
+ {
+ jobId: 225,
+ },
+ {
+ jobId: 226,
+ },
+ {
+ jobId: 227,
+ },
+ {
+ jobId: 228,
+ },
+ {
+ jobId: 229,
+ },
+ {
+ jobId: 230,
+ },
+ {
+ jobId: 231,
+ },
+ {
+ jobId: 232,
+ },
+ {
+ jobId: 233,
+ },
+ {
+ jobId: 234,
+ },
+ {
+ jobId: 235,
+ },
+ {
+ jobId: 236,
+ },
+ {
+ jobId: 237,
+ },
+ {
+ jobId: 238,
+ },
+ {
+ jobId: 239,
+ },
+ {
+ jobId: 240,
+ },
+ {
+ jobId: 241,
+ },
+ {
+ jobId: 242,
+ },
+ {
+ jobId: 243,
+ },
+ {
+ jobId: 244,
+ },
+ {
+ jobId: 245,
+ },
+ {
+ jobId: 246,
+ },
+ {
+ jobId: 247,
+ },
+ {
+ jobId: 248,
+ },
+ {
+ jobId: 249,
+ },
+ {
+ jobId: 250,
+ },
+ {
+ jobId: 251,
+ },
+ {
+ jobId: 252,
+ },
+ {
+ jobId: 253,
+ },
+ {
+ jobId: 254,
+ },
+ {
+ jobId: 255,
+ },
+ {
+ jobId: 256,
+ },
+ {
+ jobId: 257,
+ },
+ {
+ jobId: 258,
+ },
+ {
+ jobId: 259,
+ },
+ {
+ jobId: 260,
+ },
+ {
+ jobId: 261,
+ },
+ {
+ jobId: 262,
+ },
+ {
+ jobId: 263,
+ },
+ {
+ jobId: 264,
+ },
+ {
+ jobId: 265,
+ },
+ {
+ jobId: 266,
+ },
+ {
+ jobId: 267,
+ },
+ {
+ jobId: 268,
+ },
+ {
+ jobId: 269,
+ },
+ {
+ jobId: 270,
+ },
+ {
+ jobId: 271,
+ },
+ {
+ jobId: 272,
+ },
+ {
+ jobId: 273,
+ },
+ {
+ jobId: 274,
+ },
+ {
+ jobId: 275,
+ },
+ {
+ jobId: 276,
+ },
+ {
+ jobId: 277,
+ },
+ {
+ jobId: 278,
+ },
+ {
+ jobId: 279,
+ },
+ {
+ jobId: 280,
+ },
+ {
+ jobId: 281,
+ },
+ {
+ jobId: 282,
+ },
+ {
+ jobId: 283,
+ },
+ {
+ jobId: 284,
+ },
+ {
+ jobId: 285,
+ },
+ {
+ jobId: 286,
+ },
+ {
+ jobId: 287,
+ },
+ {
+ jobId: 288,
+ },
+ {
+ jobId: 289,
+ },
+ {
+ jobId: 290,
+ },
+ {
+ jobId: 291,
+ },
+ {
+ jobId: 292,
+ },
+ {
+ jobId: 293,
+ },
+ {
+ jobId: 294,
+ },
+ {
+ jobId: 295,
+ },
+ {
+ jobId: 296,
+ },
+ {
+ jobId: 297,
+ },
+ {
+ jobId: 298,
+ },
+ {
+ jobId: 299,
+ },
+ {
+ jobId: 300,
+ },
+ {
+ jobId: 301,
+ },
+ {
+ jobId: 302,
+ },
+ {
+ jobId: 303,
+ },
+ {
+ jobId: 304,
+ },
+ {
+ jobId: 305,
+ },
+ {
+ jobId: 306,
+ },
+ {
+ jobId: 307,
+ },
+ {
+ jobId: 308,
+ },
+ {
+ jobId: 309,
+ },
+ {
+ jobId: 310,
+ },
+ {
+ jobId: 311,
+ },
+ {
+ jobId: 312,
+ },
+ {
+ jobId: 313,
+ },
+ {
+ jobId: 314,
+ },
+ {
+ jobId: 315,
+ },
+ {
+ jobId: 316,
+ },
+ {
+ jobId: 317,
+ },
+ {
+ jobId: 318,
+ },
+ {
+ jobId: 319,
+ },
+ {
+ jobId: 320,
+ },
+ {
+ jobId: 321,
+ },
+ {
+ jobId: 322,
+ },
+ {
+ jobId: 323,
+ },
+ {
+ jobId: 324,
+ },
+ {
+ jobId: 325,
+ },
+ {
+ jobId: 326,
+ },
+ {
+ jobId: 327,
+ },
+ {
+ jobId: 328,
+ },
+ {
+ jobId: 329,
+ },
+ {
+ jobId: 330,
+ },
+ {
+ jobId: 331,
+ },
+ {
+ jobId: 332,
+ },
+ {
+ jobId: 333,
+ },
+ {
+ jobId: 334,
+ },
+ {
+ jobId: 335,
+ },
+ {
+ jobId: 336,
+ },
+ {
+ jobId: 337,
+ },
+ {
+ jobId: 338,
+ },
+ {
+ jobId: 339,
+ },
+ {
+ jobId: 340,
+ },
+ {
+ jobId: 341,
+ },
+ {
+ jobId: 342,
+ },
+ {
+ jobId: 343,
+ },
+ {
+ jobId: 344,
+ },
+ {
+ jobId: 345,
+ },
+ {
+ jobId: 346,
+ },
+ {
+ jobId: 347,
+ },
+ {
+ jobId: 348,
+ },
+ {
+ jobId: 349,
+ },
+ {
+ jobId: 350,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+];
+
+const mixedBatchOutput = [
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'DELETE',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=911&id=912&id=913&id=914&id=915&id=916&id=917&id=918&id=919&id=920',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 911,
+ },
+ {
+ jobId: 912,
+ },
+ {
+ jobId: 913,
+ },
+ {
+ jobId: 914,
+ },
+ {
+ jobId: 915,
+ },
+ {
+ jobId: 916,
+ },
+ {
+ jobId: 917,
+ },
+ {
+ jobId: 918,
+ },
+ {
+ jobId: 919,
+ },
+ {
+ jobId: 920,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=901&id=902&id=903&id=904&id=905&id=906&id=907&id=908&id=909&id=910',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 901,
+ },
+ {
+ jobId: 902,
+ },
+ {
+ jobId: 903,
+ },
+ {
+ jobId: 904,
+ },
+ {
+ jobId: 905,
+ },
+ {
+ jobId: 906,
+ },
+ {
+ jobId: 907,
+ },
+ {
+ jobId: 908,
+ },
+ {
+ jobId: 909,
+ },
+ {
+ jobId: 910,
+ },
+ ],
+ batched: true,
+ statusCode: 200,
+ destination: DEST_OBJECT,
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'DELETE',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=704&id=705&id=706',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=501&id=502&id=503',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 1,
+ },
+ ],
+ batched: false,
+ statusCode: 200,
+ destination: {
+ ID: '1zia9wKshXt80YksLmUdJnr7IHI',
+ Name: 'test_marketo',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: DEST_CONFIG,
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+ },
+ },
+ {
+ batchedRequest: [
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ {
+ version: '1',
+ type: 'REST',
+ method: 'POST',
+ endpoint:
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=300&id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350',
+ headers: {
+ Authorization: TOKEN,
+ 'Content-Type': CONTENT_TYPE,
+ },
+ params: {},
+ body: {
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ FORM: {},
+ },
+ files: {},
+ },
+ ],
+ metadata: [
+ {
+ jobId: 2,
+ },
+ ],
+ batched: false,
+ statusCode: 200,
+ destination: {
+ ID: '1zia9wKshXt80YksLmUdJnr7IHI',
+ Name: 'test_marketo',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: DEST_CONFIG,
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+ },
+ },
+];
+
+const recordEventGenerator = (id, action, externalId) => {
+ // this function is used to generate record events for testing
+ const testRecordEvent = {
+ destination: {
+ ID: '1zwa1wKshSt81YksKmUdJnr4IOK',
+ Name: 'test_marketo_rc',
+ DestinationDefinition: DEST_DEFINITION,
+ Config: {
+ clientId: 'marketo_client_id_success',
+ clientSecret: 'marketo_client_secret_success',
+ accountId: 'marketo_acct_id_success',
+ staticListId: 1122,
+ },
+ Enabled: true,
+ Transformations: [],
+ IsProcessorEnabled: true,
+ },
+ message: {
+ type: 'record',
+ action,
+ fields: {
+ id,
+ },
+ channel: 'sources',
+ context: {
+ sources: MESSAGE_SOURCES_CONTEXT,
+ externalId: [
+ {
+ type: EXTERNAL_ID,
+ id: externalId,
+ },
+ ],
+ destinationFields: 'id',
+ mappedToDestination: 'true',
+ },
+ recordId: '3',
+ },
+ metadata: {
+ jobId: id,
+ },
+ };
+ return testRecordEvent;
+};
+
+module.exports = {
+ recordInputs,
+ audiencelistInputs,
+ reqMetadata,
+ recordOutput,
+ largeRecordOutput,
+ mixedBatchOutput,
+ recordEventGenerator,
+};
diff --git a/src/v0/destinations/marketo_static_list/transform.js b/src/v0/destinations/marketo_static_list/transform.js
index 7175b5241fb..294e34f91bc 100644
--- a/src/v0/destinations/marketo_static_list/transform.js
+++ b/src/v0/destinations/marketo_static_list/transform.js
@@ -1,9 +1,11 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const cloneDeep = require('lodash/cloneDeep');
+const { InstrumentationError, UnauthorizedError } = require('@rudderstack/integrations-lib');
const {
defaultPostRequestConfig,
defaultDeleteRequestConfig,
generateErrorObject,
+ simpleProcessRouterDest,
} = require('../../util');
const { AUTH_CACHE_TTL, JSON_MIME_TYPE } = require('../../util/constant');
const { getIds, validateMessageType } = require('./util');
@@ -11,12 +13,11 @@ const {
getDestinationExternalID,
defaultRequestConfig,
getErrorRespEvents,
- simpleProcessRouterDest,
} = require('../../util');
const { formatConfig, MAX_LEAD_IDS_SIZE } = require('./config');
const Cache = require('../../util/cache');
const { getAuthToken } = require('../marketo/transform');
-const { InstrumentationError, UnauthorizedError } = require('../../util/errorTypes');
+const { processRecordInputs } = require('./transformV2');
const authCache = new Cache(AUTH_CACHE_TTL); // 1 hr
@@ -50,15 +51,15 @@ const batchResponseBuilder = (message, Config, token, leadIds, operation) => {
throw new InstrumentationError('No static listId is provided');
}
const response = [];
- const leadIdsChunks = _.chunk(leadIds, MAX_LEAD_IDS_SIZE);
+ const leadIdsChunks = lodash.chunk(leadIds, MAX_LEAD_IDS_SIZE);
leadIdsChunks.forEach((ids) => {
response.push(responseBuilder(endpoint, ids, operation, token));
});
return response;
};
-const processEvent = (input) => {
- const { token, message, destination } = input;
+const processEvent = (event) => {
+ const { token, message, destination } = event;
const { Config } = destination;
validateMessageType(message, ['audiencelist']);
const response = [];
@@ -70,77 +71,92 @@ const processEvent = (input) => {
if (message.properties?.listData?.remove) {
toRemove = getIds(message.properties.listData.remove);
}
- if (
- (Array.isArray(toAdd) && toAdd.length > 0) ||
- (Array.isArray(toRemove) && toRemove.length > 0)
- ) {
- if (Array.isArray(toAdd) && toAdd.length > 0) {
- const payload = batchResponseBuilder(message, Config, token, toAdd, 'add');
- if (payload) {
- response.push(...payload);
- }
+ if (Array.isArray(toRemove) && toRemove.length > 0) {
+ const payload = batchResponseBuilder(message, Config, token, toRemove, 'remove');
+ if (payload) {
+ response.push(...payload);
}
- if (Array.isArray(toRemove) && toRemove.length > 0) {
- const payload = batchResponseBuilder(message, Config, token, toRemove, 'remove');
- if (payload) {
- response.push(...payload);
- }
+ }
+ if (Array.isArray(toAdd) && toAdd.length > 0) {
+ const payload = batchResponseBuilder(message, Config, token, toAdd, 'add');
+ if (payload) {
+ response.push(...payload);
}
- } else {
+ }
+ if (response.length === 0) {
throw new InstrumentationError(
'Invalid leadIds format or no leadIds found neither to add nor to remove',
);
}
return response;
};
-const process = async (event) => {
- const token = await getAuthToken(formatConfig(event.destination));
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+const process = async (event, _processParams) => {
+ const token = await getAuthToken(formatConfig(event.destination));
if (!token) {
throw new UnauthorizedError('Authorization failed');
}
- const response = processEvent({ ...event, token });
+ const updatedEvent = { ...event, token };
+ const response = processEvent(updatedEvent);
return response;
};
const processRouterDest = async (inputs, reqMetadata) => {
// Token needs to be generated for marketo which will be done on input level.
// If destination information is not present Error should be thrown
- let token;
+
+ const { destination } = inputs[0];
try {
- token = await getAuthToken(formatConfig(inputs[0].destination));
+ const token = await getAuthToken(formatConfig(destination));
if (!token) {
- const errResp = {
- status: 400,
- message: 'Authorisation failed',
- responseTransformFailure: true,
- statTags: {},
- };
- const respEvents = getErrorRespEvents(
- inputs.map((input) => input.metadata),
- errResp.status,
- errResp.message,
- errResp.statTags,
- );
- return [{ ...respEvents, destination: inputs?.[0]?.destination }];
+ throw new UnauthorizedError('Could not retrieve authorisation token');
}
} catch (error) {
- // Not using handleRtTfSingleEventError here as this is for multiple events
- const errObj = generateErrorObject(error);
- const respEvents = getErrorRespEvents(
- inputs.map((input) => input.metadata),
- errObj.status,
- errObj.message,
- errObj.statTags,
+ const errorObj = generateErrorObject(error);
+ const errResponses = inputs.map((input) =>
+ getErrorRespEvents(input.metadata, errorObj.status, errorObj.message, errorObj.statTags),
);
- return [{ ...respEvents, destination: inputs?.[0]?.destination }];
+
+ return errResponses;
}
- // Checking previous status Code. Initially setting to false.
- // If true then previous status is 500 and every subsequent event output should be
- // sent with status code 500 to the router to be retried.
- const tokenisedInputs = inputs.map((input) => ({ ...input, token }));
- const respList = await simpleProcessRouterDest(tokenisedInputs, processEvent, reqMetadata);
+ // use lodash.groupby to group the inputs based on message type
+ const transformedRecordEvent = [];
+ let transformedAudienceEvent = [];
+ const groupedInputs = lodash.groupBy(inputs, (input) => input.message.type?.toLowerCase());
+
+ const respList = [];
+ // process record events
+ if (groupedInputs.record) {
+ const groupedRecordInputs = groupedInputs.record;
+ const { staticListId } = destination.Config;
+ const externalIdGroupedRecordInputs = lodash.groupBy(
+ groupedRecordInputs,
+ (input) => getDestinationExternalID(input.message, 'marketoStaticListId') || staticListId,
+ );
+ const alltransformedGroupedRecordEvent = await Promise.all(
+ Object.keys(externalIdGroupedRecordInputs).map(async (key) => {
+ const transformedGroupedRecordEvent = await processRecordInputs(
+ externalIdGroupedRecordInputs[key],
+ destination,
+ key,
+ );
+ return transformedGroupedRecordEvent;
+ }),
+ );
+
+ transformedRecordEvent.push(...alltransformedGroupedRecordEvent.flat());
+ }
+ // process audiencelist events
+ if (groupedInputs.audiencelist) {
+ transformedAudienceEvent = await simpleProcessRouterDest(
+ groupedInputs.audiencelist,
+ process,
+ reqMetadata,
+ );
+ }
+ respList.push(...transformedRecordEvent, ...transformedAudienceEvent);
return respList;
};
@@ -152,16 +168,20 @@ const processRouterDest = async (inputs, reqMetadata) => {
function processMetadataForRouter(output) {
const { metadata, destination } = output;
const clonedMetadata = cloneDeep(metadata);
- clonedMetadata.forEach((metadataElement) => {
- // eslint-disable-next-line no-param-reassign
- metadataElement.destInfo = { authKey: destination.ID };
- });
+ if (Array.isArray(clonedMetadata)) {
+ clonedMetadata.forEach((metadataElement) => {
+ // eslint-disable-next-line no-param-reassign
+ metadataElement.destInfo = { authKey: destination?.ID };
+ });
+ }
return clonedMetadata;
}
module.exports = {
process,
+ processEvent,
processRouterDest,
processMetadataForRouter,
authCache,
+ batchResponseBuilder,
};
diff --git a/src/v0/destinations/marketo_static_list/transform.test.js b/src/v0/destinations/marketo_static_list/transform.test.js
new file mode 100644
index 00000000000..3c387c42957
--- /dev/null
+++ b/src/v0/destinations/marketo_static_list/transform.test.js
@@ -0,0 +1,138 @@
+const { processRouterDest } = require('./transform');
+const axios = require('axios');
+const MockAxiosAdapter = require('axios-mock-adapter');
+const {
+ recordInputs,
+ audiencelistInputs,
+ reqMetadata,
+ recordOutput,
+ largeRecordOutput,
+ mixedBatchOutput,
+ recordEventGenerator,
+} = require('./testData/testData');
+
+const mockAdapter = new MockAxiosAdapter(axios, { onNoMatch: 'throwException' });
+beforeAll(() => {
+ mockAdapter
+ .onGet('https://marketo_acct_id_success.mktorest.com/identity/oauth/token')
+ .reply(200, { access_token: 'access_token_success' });
+});
+describe('Unit cases covering the router flow for both record and audiencelist event types', () => {
+ it('Sending a small batch of only record events (4 events)', async () => {
+ const inputs = recordInputs;
+ const result = await processRouterDest(inputs, reqMetadata);
+
+ // assert that the result is as expected
+ expect(result.length).toEqual(3);
+ expect(result[0].batchedRequest.length).toEqual(1); // 1 batched request for 2 record events
+ expect(result[1].batchedRequest.length).toEqual(1); // 1 batched request for 1 record events
+ expect(result[2].batchedRequest.length).toEqual(1); // 1 batched request for 1 record events
+ expect(result[0].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id001/leads.json?id=1001&id=1003',
+ ); // 1 api call for 2 leadIds
+ expect(result[1].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id002/leads.json?id=2001',
+ ); // 1 api call for 1 leadId
+ expect(result[2].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/id002/leads.json?id=1002',
+ ); // 1 api call for 1 leadId
+ expect(result[1].batchedRequest[0].method).toEqual('DELETE'); // DELETE requests are sent first
+ expect(result[0].metadata.length).toEqual(2); // 2 metadata objects for 2 record events
+ expect(result[1].metadata.length).toEqual(1); // 1 metadata object for 1 record event
+ expect(result[2].metadata.length).toEqual(1); // 1 metadata object for 1 record event
+ expect(result).toEqual(recordOutput); // overall result should be equal to the expected output
+ });
+
+ it('Sending a large batch of only record events (450 events: 350 inserts | 100 deletes )', async () => {
+ const largeRecordInputs = [];
+ for (let index = 0; index < 350; index++) {
+ largeRecordInputs.push(recordEventGenerator(index + 1, 'insert', 1122));
+ }
+ for (let index = 350; index < 450; index++) {
+ largeRecordInputs.push(recordEventGenerator(index + 1, 'delete', 1122));
+ }
+ const result = await processRouterDest(largeRecordInputs, reqMetadata);
+
+ // assert that the result is as expected
+ /*
+ Total 3 API calls
+ 1. 1 API call for 100 DELETE requests
+ 2. 1 API call for 100 POST requests = limit reached for Marketo, leads split to next API call
+ 3. 1 API call for 50 POST requests
+ */
+ expect(result.length).toEqual(2);
+ expect(result[0].batchedRequest.length).toEqual(1); // 1 batched request for 1 record event
+ expect(result[1].batchedRequest.length).toEqual(2); // 1 batched request for 2 record events
+ expect(result[0].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=351&id=352&id=353&id=354&id=355&id=356&id=357&id=358&id=359&id=360&id=361&id=362&id=363&id=364&id=365&id=366&id=367&id=368&id=369&id=370&id=371&id=372&id=373&id=374&id=375&id=376&id=377&id=378&id=379&id=380&id=381&id=382&id=383&id=384&id=385&id=386&id=387&id=388&id=389&id=390&id=391&id=392&id=393&id=394&id=395&id=396&id=397&id=398&id=399&id=400&id=401&id=402&id=403&id=404&id=405&id=406&id=407&id=408&id=409&id=410&id=411&id=412&id=413&id=414&id=415&id=416&id=417&id=418&id=419&id=420&id=421&id=422&id=423&id=424&id=425&id=426&id=427&id=428&id=429&id=430&id=431&id=432&id=433&id=434&id=435&id=436&id=437&id=438&id=439&id=440&id=441&id=442&id=443&id=444&id=445&id=446&id=447&id=448&id=449&id=450',
+ );
+ expect(result[1].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299&id=300',
+ );
+ expect(result[1].batchedRequest[1].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=301&id=302&id=303&id=304&id=305&id=306&id=307&id=308&id=309&id=310&id=311&id=312&id=313&id=314&id=315&id=316&id=317&id=318&id=319&id=320&id=321&id=322&id=323&id=324&id=325&id=326&id=327&id=328&id=329&id=330&id=331&id=332&id=333&id=334&id=335&id=336&id=337&id=338&id=339&id=340&id=341&id=342&id=343&id=344&id=345&id=346&id=347&id=348&id=349&id=350',
+ );
+ expect(result[0].batchedRequest[0].method).toEqual('DELETE'); // DELETE requests are sent first
+ expect(result[1].batchedRequest[0].method).toEqual('POST');
+ expect(result[1].batchedRequest[1].method).toEqual('POST');
+ expect(result[0].metadata.length).toEqual(100); // 100 metadata objects for 100 record events
+ expect(result[1].metadata.length).toEqual(350); // 350 metadata objects for 350 record events
+ expect(result).toEqual(largeRecordOutput); // overall result should be equal to the expected output
+ });
+
+ it('Sending a mixed batch of record and audiencelist events (22 events: 10 inserts | 10 deletes | 2 audiencelist (⌐■_■) )', async () => {
+ const mixedBatchInputs = [];
+ for (let index = 900; index < 910; index++) {
+ mixedBatchInputs.push(recordEventGenerator(index + 1, 'insert', 1122));
+ }
+ for (let index = 910; index < 920; index++) {
+ mixedBatchInputs.push(recordEventGenerator(index + 1, 'delete', 1122));
+ }
+ mixedBatchInputs.push(...audiencelistInputs);
+ const result = await processRouterDest(mixedBatchInputs, reqMetadata);
+
+ // assert that the result is as expected
+ /*
+ Total 4 API calls
+ 1. 1 API call for 10 DELETE requests
+ 2. 1 API call for 10 POST requests = limit reached for Marketo, leads split to next API call
+ 3. 1 API call for 2 POST requests
+ 4. 1 API call for 2 POST requests
+ */
+ expect(result.length).toEqual(4);
+ expect(result[0].batchedRequest.length).toEqual(1); // 1 batched request for 1 record event
+ expect(result[1].batchedRequest.length).toEqual(1); // 1 batched request for 1 record event
+ expect(result[2].batchedRequest.length).toEqual(2); // 1 batched request for 2 audiencelist events
+ expect(result[3].batchedRequest.length).toEqual(2); // 1 batched request for 2 audiencelist events
+ expect(result[0].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=911&id=912&id=913&id=914&id=915&id=916&id=917&id=918&id=919&id=920',
+ );
+ expect(result[1].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1122/leads.json?id=901&id=902&id=903&id=904&id=905&id=906&id=907&id=908&id=909&id=910',
+ );
+ expect(result[2].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=704&id=705&id=706',
+ );
+ expect(result[2].batchedRequest[1].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=501&id=502&id=503',
+ );
+ expect(result[3].batchedRequest[0].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=0&id=1&id=2&id=3&id=4&id=5&id=6&id=7&id=8&id=9&id=10&id=11&id=12&id=13&id=14&id=15&id=16&id=17&id=18&id=19&id=20&id=21&id=22&id=23&id=24&id=25&id=26&id=27&id=28&id=29&id=30&id=31&id=32&id=33&id=34&id=35&id=36&id=37&id=38&id=39&id=40&id=41&id=42&id=43&id=44&id=45&id=46&id=47&id=48&id=49&id=50&id=51&id=52&id=53&id=54&id=55&id=56&id=57&id=58&id=59&id=60&id=61&id=62&id=63&id=64&id=65&id=66&id=67&id=68&id=69&id=70&id=71&id=72&id=73&id=74&id=75&id=76&id=77&id=78&id=79&id=80&id=81&id=82&id=83&id=84&id=85&id=86&id=87&id=88&id=89&id=90&id=91&id=92&id=93&id=94&id=95&id=96&id=97&id=98&id=99&id=100&id=101&id=102&id=103&id=104&id=105&id=106&id=107&id=108&id=109&id=110&id=111&id=112&id=113&id=114&id=115&id=116&id=117&id=118&id=119&id=120&id=121&id=122&id=123&id=124&id=125&id=126&id=127&id=128&id=129&id=130&id=131&id=132&id=133&id=134&id=135&id=136&id=137&id=138&id=139&id=140&id=141&id=142&id=143&id=144&id=145&id=146&id=147&id=148&id=149&id=150&id=151&id=152&id=153&id=154&id=155&id=156&id=157&id=158&id=159&id=160&id=161&id=162&id=163&id=164&id=165&id=166&id=167&id=168&id=169&id=170&id=171&id=172&id=173&id=174&id=175&id=176&id=177&id=178&id=179&id=180&id=181&id=182&id=183&id=184&id=185&id=186&id=187&id=188&id=189&id=190&id=191&id=192&id=193&id=194&id=195&id=196&id=197&id=198&id=199&id=200&id=201&id=202&id=203&id=204&id=205&id=206&id=207&id=208&id=209&id=210&id=211&id=212&id=213&id=214&id=215&id=216&id=217&id=218&id=219&id=220&id=221&id=222&id=223&id=224&id=225&id=226&id=227&id=228&id=229&id=230&id=231&id=232&id=233&id=234&id=235&id=236&id=237&id=238&id=239&id=240&id=241&id=242&id=243&id=244&id=245&id=246&id=247&id=248&id=249&id=250&id=251&id=252&id=253&id=254&id=255&id=256&id=257&id=258&id=259&id=260&id=261&id=262&id=263&id=264&id=265&id=266&id=267&id=268&id=269&id=270&id=271&id=272&id=273&id=274&id=275&id=276&id=277&id=278&id=279&id=280&id=281&id=282&id=283&id=284&id=285&id=286&id=287&id=288&id=289&id=290&id=291&id=292&id=293&id=294&id=295&id=296&id=297&id=298&id=299',
+ );
+ expect(result[2].batchedRequest[1].endpoint).toEqual(
+ 'https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=501&id=502&id=503',
+ );
+ expect(result[0].batchedRequest[0].method).toEqual('DELETE'); // DELETE requests are sent first
+ expect(result[1].batchedRequest[0].method).toEqual('POST');
+ expect(result[1].batchedRequest[0].method).toEqual('POST');
+ expect(result[2].batchedRequest[0].method).toEqual('DELETE');
+ expect(result[0].metadata.length).toEqual(10);
+ expect(result[1].metadata.length).toEqual(10);
+ expect(result[2].metadata.length).toEqual(1);
+ expect(result[3].metadata.length).toEqual(1);
+ expect(result).toEqual(mixedBatchOutput); // overall result should be equal to the expected output
+ });
+});
+afterAll(() => {
+ mockAdapter.restore();
+});
diff --git a/src/v0/destinations/marketo_static_list/transformV2.js b/src/v0/destinations/marketo_static_list/transformV2.js
new file mode 100644
index 00000000000..912d548d098
--- /dev/null
+++ b/src/v0/destinations/marketo_static_list/transformV2.js
@@ -0,0 +1,143 @@
+const lodash = require('lodash');
+const { InstrumentationError, UnauthorizedError } = require('@rudderstack/integrations-lib');
+const {
+ defaultPostRequestConfig,
+ defaultDeleteRequestConfig,
+ defaultRequestConfig,
+ getSuccessRespEvents,
+ isDefinedAndNotNull,
+ generateErrorObject,
+ getErrorRespEvents,
+} = require('../../util');
+const { JSON_MIME_TYPE } = require('../../util/constant');
+const { MAX_LEAD_IDS_SIZE } = require('./config');
+const { getAuthToken } = require('../marketo/transform');
+const { formatConfig } = require('../marketo/config');
+
+/**
+ * Generates the final response structure to be sent to the destination
+ * @param {*} endPoint
+ * @param {*} leadIds
+ * @param {*} operation
+ * @param {*} token
+ * @returns batched response
+ */
+const responseBuilder = (endPoint, leadIds, operation, token) => {
+ let updatedEndpoint = endPoint;
+ if (leadIds.length > 0) {
+ leadIds.forEach((id) => {
+ updatedEndpoint = `${updatedEndpoint}id=${id}&`;
+ });
+ }
+ updatedEndpoint = updatedEndpoint.slice(0, -1);
+ const response = defaultRequestConfig();
+ response.endpoint = updatedEndpoint;
+ if (operation === 'insert') {
+ response.method = defaultPostRequestConfig.requestMethod;
+ } else {
+ response.method = defaultDeleteRequestConfig.requestMethod;
+ }
+ response.headers = {
+ Authorization: `Bearer ${token}`,
+ 'Content-Type': JSON_MIME_TYPE,
+ };
+ return response;
+};
+
+/**
+ * The function is responsible for building the batched response for a given set of record inputs.
+ * @param {*} groupedRecordInputs
+ * @param {*} Config
+ * @param {*} token
+ * @param {*} leadIds
+ * @param {*} operation
+ * @returns an array of response objects, where each object represents a batched response for a chunk of lead IDs.
+ */
+const batchResponseBuilder = (listId, Config, token, leadIds, operation) => {
+ const { accountId } = Config;
+ const endpoint = `https://${accountId}.mktorest.com/rest/v1/lists/${listId}/leads.json?`;
+ const response = [];
+ const leadIdsChunks = lodash.chunk(leadIds, MAX_LEAD_IDS_SIZE);
+ leadIdsChunks.forEach((ids) => {
+ response.push(responseBuilder(endpoint, ids, operation, token));
+ });
+ return response;
+};
+
+/**
+ * A function that processes a list of grouped record inputs.
+ * It iterates through each input and groups the field IDs based on the action.
+ * @param {*} groupedRecordInputs
+ * @param {*} destination
+ * @param {*} listId
+ * @returns An array containing the batched responses for the insert and delete actions along with the metadata.
+ */
+async function processRecordInputs(groupedRecordInputs, destination, listId) {
+ const token = await getAuthToken(formatConfig(destination));
+ if (!token) {
+ throw new UnauthorizedError('Authorization failed');
+ }
+ const { Config } = destination;
+
+ // iterate through each input and group field id based on action
+ const insertFields = [];
+ const deleteFields = [];
+ const successMetadataForInsert = [];
+ const successMetadataForDelete = [];
+ const errorMetadata = [];
+
+ groupedRecordInputs.forEach((input) => {
+ const { fields, action } = input.message;
+ const fieldId = fields?.id;
+ if (action === 'insert' && isDefinedAndNotNull(fieldId)) {
+ insertFields.push(fieldId);
+ successMetadataForInsert.push(input.metadata);
+ } else if (action === 'delete' && isDefinedAndNotNull(fieldId)) {
+ deleteFields.push(fieldId);
+ successMetadataForDelete.push(input.metadata);
+ } else {
+ errorMetadata.push(input.metadata);
+ }
+ });
+ const deletePayloads = batchResponseBuilder(listId, Config, token, deleteFields, 'delete');
+
+ const deleteResponse = getSuccessRespEvents(
+ deletePayloads,
+ successMetadataForDelete,
+ destination,
+ true,
+ );
+
+ const insertPayloads = batchResponseBuilder(listId, Config, token, insertFields, 'insert');
+
+ const insertResponse = getSuccessRespEvents(
+ insertPayloads,
+ successMetadataForInsert,
+ destination,
+ true,
+ );
+
+ const error = new InstrumentationError(
+ 'Invalid action type or no leadIds found neither to add nor to remove',
+ );
+ const errorObj = generateErrorObject(error);
+ const errorResponseList = errorMetadata.map((metadata) =>
+ getErrorRespEvents(metadata, errorObj.status, errorObj.message, errorObj.statTags),
+ );
+ const finalResponse = [];
+ if (deleteResponse.batchedRequest.length > 0) {
+ finalResponse.push(deleteResponse);
+ }
+ if (insertResponse.batchedRequest.length > 0) {
+ finalResponse.push(insertResponse);
+ }
+ if (errorResponseList.length > 0) {
+ finalResponse.push(...errorResponseList);
+ }
+ return finalResponse;
+ // return [deleteResponse, insertResponse, ...errorResponseList];
+}
+
+module.exports = {
+ processRecordInputs,
+};
diff --git a/src/v0/destinations/marketo_static_list/util.js b/src/v0/destinations/marketo_static_list/util.js
index 2d4fe493a0c..c6959cb2564 100644
--- a/src/v0/destinations/marketo_static_list/util.js
+++ b/src/v0/destinations/marketo_static_list/util.js
@@ -1,4 +1,5 @@
-const { InstrumentationError } = require('../../util/errorTypes');
+/* eslint-disable unicorn/consistent-destructuring */
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
/**
* Fetches the ids from the array of objects
diff --git a/src/v0/destinations/mautic/transform.js b/src/v0/destinations/mautic/transform.js
index 12b0d06b6ff..13808f6e3c0 100644
--- a/src/v0/destinations/mautic/transform.js
+++ b/src/v0/destinations/mautic/transform.js
@@ -1,3 +1,8 @@
+const {
+ TransformationError,
+ InstrumentationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
constructPayload,
@@ -20,11 +25,6 @@ const {
const { EventType } = require('../../../constants');
const { mappingConfig, ConfigCategories } = require('./config');
-const {
- TransformationError,
- InstrumentationError,
- ConfigurationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = async (payload, endpoint, method, messageType, Config) => {
diff --git a/src/v0/destinations/mautic/utils.js b/src/v0/destinations/mautic/utils.js
index f9dd787d9d1..d8ad8dbffcd 100644
--- a/src/v0/destinations/mautic/utils.js
+++ b/src/v0/destinations/mautic/utils.js
@@ -1,5 +1,10 @@
/* eslint-disable no-return-assign, no-param-reassign, no-restricted-syntax */
const get = require('get-value');
+const {
+ NetworkError,
+ InstrumentationError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const { getFieldValueFromMessage } = require('../../util');
const { BASE_URL, lookupFieldMap } = require('./config');
const { httpGET } = require('../../../adapters/network');
@@ -7,7 +12,6 @@ const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/moengage/transform.js b/src/v0/destinations/moengage/transform.js
index d87d931817a..8a16d9c7a71 100644
--- a/src/v0/destinations/moengage/transform.js
+++ b/src/v0/destinations/moengage/transform.js
@@ -1,4 +1,9 @@
const btoa = require('btoa');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
CONFIG_CATEGORIES,
@@ -16,11 +21,6 @@ const {
simpleProcessRouterDest,
isAppleFamily,
} = require('../../util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilderSimple(message, category, destination) {
@@ -119,7 +119,7 @@ const processEvent = (message, destination) => {
response = responseBuilderSimple(message, category, destination);
// only if device information is present device info will be added/updated
// with an identify call otherwise only user info will be added/updated
- if (message.context.device && message.context.device.type && message.context.device.token) {
+ if (message?.context?.device?.type && message?.context?.device?.token) {
// build the response
response = [
// user api payload (output for identify)
diff --git a/src/v0/destinations/monday/transform.js b/src/v0/destinations/monday/transform.js
index a702f266029..152b42f8d02 100644
--- a/src/v0/destinations/monday/transform.js
+++ b/src/v0/destinations/monday/transform.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ENDPOINT } = require('./config');
const { populatePayload, getBoardDetails, checkAllowedEventNameFromUI } = require('./util');
@@ -8,12 +13,8 @@ const {
removeUndefinedAndNullValues,
simpleProcessRouterDest,
getDestinationExternalID,
+ validateEventName,
} = require('../../util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, endpoint, apiToken) => {
@@ -40,18 +41,14 @@ const responseBuilder = (payload, endpoint, apiToken) => {
const trackResponseBuilder = async (message, { Config }) => {
const { apiToken } = Config;
let boardId = getDestinationExternalID(message, 'boardId');
+ const event = get(message, 'event');
+ validateEventName(event);
if (!boardId) {
boardId = Config.boardId;
}
if (!boardId) {
throw new ConfigurationError('boardId is a required field');
}
- const event = get(message, 'event');
-
- if (!event) {
- throw new InstrumentationError('event is not present in the input payloads');
- }
-
if (!checkAllowedEventNameFromUI(event, Config)) {
throw new ConfigurationError('Event Discarded. To allow this event, add this in Allowlist');
}
diff --git a/src/v0/destinations/monday/util.js b/src/v0/destinations/monday/util.js
index dbd7b149d93..a66dd63dffa 100644
--- a/src/v0/destinations/monday/util.js
+++ b/src/v0/destinations/monday/util.js
@@ -1,8 +1,12 @@
const { isNumber } = require('lodash');
+const {
+ NetworkError,
+ ConfigurationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { httpPOST } = require('../../../adapters/network');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
const { getDestinationExternalID, isDefinedAndNotNull } = require('../../util');
-const { NetworkError, ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -253,7 +257,7 @@ const checkAllowedEventNameFromUI = (event, Config) => {
let allowEvent;
if (whitelistedEvents && whitelistedEvents.length > 0) {
allowEvent = whitelistedEvents.some(
- (whiteListedEvent) => whiteListedEvent.eventName.toLowerCase() === event.toLowerCase(),
+ (whiteListedEvent) => whiteListedEvent?.eventName?.toLowerCase() === event.toLowerCase(),
);
}
return !!allowEvent;
diff --git a/src/v0/destinations/monetate/transform.js b/src/v0/destinations/monetate/transform.js
index e4d1f28b613..26a88e686b0 100644
--- a/src/v0/destinations/monetate/transform.js
+++ b/src/v0/destinations/monetate/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { removeUndefinedValues, simpleProcessRouterDest } = require('../../util');
const {
handleProductViewed,
@@ -11,7 +12,6 @@ const {
} = require('./utils');
const { EventType } = require('../../../constants');
const { mappingConfig } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
function track(message, destination) {
const rawPayload = constructPayload(message, mappingConfig.MONETATETrack);
diff --git a/src/v0/destinations/monetate/utils.js b/src/v0/destinations/monetate/utils.js
index 7facc2617d7..1fe899f120e 100644
--- a/src/v0/destinations/monetate/utils.js
+++ b/src/v0/destinations/monetate/utils.js
@@ -1,6 +1,6 @@
const set = require('set-value');
const get = require('get-value');
-const { InstrumentationError } = require('../../util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { isDefinedAndNotNull, defaultRequestConfig, getValueFromMessage } = require('../../util');
const { ENDPOINT } = require('./config');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/mp/config.js b/src/v0/destinations/mp/config.js
index 41a801e9da1..35b40294f55 100644
--- a/src/v0/destinations/mp/config.js
+++ b/src/v0/destinations/mp/config.js
@@ -11,6 +11,9 @@ const ConfigCategory = {
IDENTIFY: {
name: 'MPIdentifyConfig',
},
+ SET_ONCE: {
+ name: 'MPSetOnceConfig',
+ },
PROFILE_ANDROID: {
name: 'MPProfilePropertiesAndroid',
},
diff --git a/src/v0/destinations/mp/data/MPEventPropertiesConfig.json b/src/v0/destinations/mp/data/MPEventPropertiesConfig.json
index 680daccb387..956b60248eb 100644
--- a/src/v0/destinations/mp/data/MPEventPropertiesConfig.json
+++ b/src/v0/destinations/mp/data/MPEventPropertiesConfig.json
@@ -35,30 +35,6 @@
"sourceKeys": "context.screen.density",
"destKey": "$screen_dpi"
},
- {
- "sourceKeys": "context.campaign.name",
- "destKey": "utm_campaign"
- },
- {
- "sourceKeys": "context.campaign.source",
- "destKey": "utm_source"
- },
- {
- "sourceKeys": "context.campaign.medium",
- "destKey": "utm_medium"
- },
- {
- "sourceKeys": "context.campaign.term",
- "destKey": "utm_term"
- },
- {
- "sourceKeys": "context.campaign.content",
- "destKey": "utm_content"
- },
- {
- "sourceKeys": "context.campaign.test",
- "destKey": "utm_test"
- },
{
"sourceKeys": "context.network.carrier",
"destKey": "$carrier"
diff --git a/src/v0/destinations/mp/data/MPSetOnceConfig.json b/src/v0/destinations/mp/data/MPSetOnceConfig.json
new file mode 100644
index 00000000000..e5aaf851a33
--- /dev/null
+++ b/src/v0/destinations/mp/data/MPSetOnceConfig.json
@@ -0,0 +1,122 @@
+[
+ {
+ "destKey": "$created",
+ "sourceKeys": "createdAt",
+ "required": false
+ },
+ {
+ "destKey": "$email",
+ "sourceKeys": "email",
+ "required": false
+ },
+ {
+ "destKey": "$first_name",
+ "sourceKeys": ["firstName", "firstname", "first_name"],
+ "required": false
+ },
+ {
+ "destKey": "$last_name",
+ "sourceKeys": ["lastName", "lastname", "last_name"],
+ "required": false
+ },
+ {
+ "destKey": "$name",
+ "sourceKeys": "name",
+ "required": false
+ },
+ {
+ "destKey": "$username",
+ "sourceKeys": ["username", "userName"],
+ "required": false
+ },
+ {
+ "destKey": "$phone",
+ "sourceKeys": "phone",
+ "required": false
+ },
+ {
+ "destKey": "$avatar",
+ "sourceKeys": "avatar",
+ "required": false
+ },
+ {
+ "destKey": "$country_code",
+ "sourceKeys": ["country", "address.country"],
+ "required": false
+ },
+ {
+ "destKey": "$city",
+ "sourceKeys": ["city", "address.city"],
+ "required": false
+ },
+ {
+ "destKey": "$region",
+ "sourceKeys": ["state", "address.state", "location.region"],
+ "required": false
+ },
+ {
+ "destKey": "$unsubscribed",
+ "sourceKeys": "unsubscribed",
+ "required": false
+ },
+ {
+ "destKey": "$geo_source",
+ "sourceKeys": "location.geoSource",
+ "required": false
+ },
+ {
+ "destKey": "$timezone",
+ "sourceKeys": "location.timezone",
+ "required": false
+ },
+ {
+ "destKey": "$latitude",
+ "sourceKeys": "location.latitude",
+ "required": false
+ },
+ {
+ "destKey": "$longitude",
+ "sourceKeys": "location.longitude",
+ "required": false
+ },
+ {
+ "destKey": "$carrier",
+ "sourceKeys": "network.carrier",
+ "required": false
+ },
+ {
+ "destKey": "$manufacturer",
+ "sourceKeys": "device.manufacturer",
+ "required": false
+ },
+ {
+ "destKey": "$model",
+ "sourceKeys": "device.model",
+ "required": false
+ },
+ {
+ "destKey": "$screen_height",
+ "sourceKeys": "screen.height",
+ "required": false
+ },
+ {
+ "destKey": "$screen_width",
+ "sourceKeys": "screen.width",
+ "required": false
+ },
+ {
+ "destKey": "$wifi",
+ "sourceKeys": "network.wifi",
+ "required": false
+ },
+ {
+ "destKey": "$initial_referrer",
+ "sourceKeys": "page.initial_referrer",
+ "required": false
+ },
+ {
+ "destKey": "$initial_referring_domain",
+ "sourceKeys": ["page.initial_referring_domain", "page.initialReferringDomain"],
+ "required": false
+ }
+]
diff --git a/src/v0/destinations/mp/deleteUsers.js b/src/v0/destinations/mp/deleteUsers.js
index d35a7316900..f01475ef2b8 100644
--- a/src/v0/destinations/mp/deleteUsers.js
+++ b/src/v0/destinations/mp/deleteUsers.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { ConfigurationError, NetworkError } = require('@rudderstack/integrations-lib');
const { handleHttpRequest } = require('../../../adapters/network');
const { isHttpStatusSuccess } = require('../../util');
const {
@@ -7,7 +8,6 @@ const {
DISTINCT_ID_MAX_BATCH_SIZE,
} = require('./config');
const { executeCommonValidations } = require('../../util/regulation-api');
-const { ConfigurationError, NetworkError } = require('../../util/errorTypes');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -18,6 +18,7 @@ const deleteProfile = async (userAttributes, config) => {
config.dataResidency === 'eu'
? 'https://api-eu.mixpanel.com/engage'
: 'https://api.mixpanel.com/engage';
+ const endpointPath = '/engage';
const defaultValues = {
$token: `${config.token}`,
$delete: null,
@@ -36,7 +37,7 @@ const deleteProfile = async (userAttributes, config) => {
// batchEvents = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
// ref : https://developer.mixpanel.com/reference/delete-profile
- const batchEvents = _.chunk(data, DEL_MAX_BATCH_SIZE);
+ const batchEvents = lodash.chunk(data, DEL_MAX_BATCH_SIZE);
await Promise.all(
batchEvents.map(async (batchEvent) => {
const { processedResponse: handledDelResponse } = await handleHttpRequest(
@@ -47,6 +48,7 @@ const deleteProfile = async (userAttributes, config) => {
{
destType: 'mp',
feature: 'deleteUsers',
+ endpointPath,
},
);
if (!isHttpStatusSuccess(handledDelResponse.status)) {
@@ -68,7 +70,7 @@ const deleteProfile = async (userAttributes, config) => {
};
const createDeletionTask = async (userAttributes, config) => {
- const { token, gdprApiToken } = config;
+ const { token, gdprApiToken, dataResidency } = config;
if (!gdprApiToken) {
throw new ConfigurationError(
@@ -77,11 +79,12 @@ const createDeletionTask = async (userAttributes, config) => {
}
const endpoint = getCreateDeletionTaskEndpoint(token);
+ const endpointPath = '/api/app/data-deletions/v3.0/';
const headers = {
'Content-Type': JSON_MIME_TYPE,
Authorization: `Bearer ${gdprApiToken}`,
};
- const complianceType = config?.dataResidency === 'eu' ? 'GDPR' : 'CCPA';
+ const complianceType = dataResidency === 'eu' ? 'GDPR' : 'CCPA';
// batchEvents = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
// ref : https://developer.mixpanel.com/docs/privacy-security#create-a-deletion-task
@@ -100,6 +103,7 @@ const createDeletionTask = async (userAttributes, config) => {
{
destType: 'mp',
feature: 'deleteUsers',
+ endpointPath,
},
);
if (!isHttpStatusSuccess(handledDelResponse.status)) {
diff --git a/src/v0/destinations/mp/transform.js b/src/v0/destinations/mp/transform.js
index 80c656c9ab1..3d0aaa7c4c6 100644
--- a/src/v0/destinations/mp/transform.js
+++ b/src/v0/destinations/mp/transform.js
@@ -1,4 +1,6 @@
+const lodash = require('lodash');
const get = require('get-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
base64Convertor,
@@ -14,9 +16,8 @@ const {
getFieldValueFromMessage,
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
- batchMultiplexedEvents,
- getSuccessRespEvents,
- defaultBatchRequestConfig,
+ groupEventsByType,
+ parseConfigArray,
} = require('../../util');
const {
ConfigCategory,
@@ -31,9 +32,12 @@ const {
const {
createIdentifyResponse,
isImportAuthCredentialsAvailable,
+ buildUtmParams,
combineBatchRequestsWithSameJobIds,
+ groupEventsByEndpoint,
+ batchEvents,
+ trimTraits,
} = require('./util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { CommonUtils } = require('../../../util/common');
// ref: https://help.mixpanel.com/hc/en-us/articles/115004613766-Default-Properties-Collected-by-Mixpanel
@@ -54,7 +58,7 @@ const setImportCredentials = (destConfig) => {
params.projectId = projectId;
} else {
throw new InstrumentationError(
- 'Event timestamp is older than 5 days and no apisecret or service account credentials (i.e. username, secret and projectId) is provided in destination config',
+ 'Event timestamp is older than 5 days and no API secret or service account credentials (i.e. username, secret and projectId) are provided in destination configuration',
);
}
return { endpoint, headers, params };
@@ -130,6 +134,39 @@ const processRevenueEvents = (message, destination, revenueValue) => {
return responseBuilderSimple(payload, message, 'revenue', destination.Config);
};
+/**
+ * This function is used to process the incremental properties
+ * ref :- https://developer.mixpanel.com/reference/profile-numerical-add
+ * @param {*} message
+ * @param {*} destination
+ * @param {*} propIncrements
+ * @returns
+ */
+const processIncrementalProperties = (message, destination, propIncrements) => {
+ const payload = {
+ $add: {},
+ $token: destination.Config.token,
+ $distinct_id: message.userId || message.anonymousId,
+ };
+
+ if (destination?.Config.identityMergeApi === 'simplified') {
+ payload.$distinct_id = message.userId || `$device:${message.anonymousId}`;
+ }
+
+ if (message.properties) {
+ Object.keys(message.properties).forEach((prop) => {
+ const value = message.properties[prop];
+ if (value && propIncrements.includes(prop)) {
+ payload.$add[prop] = value;
+ }
+ });
+ }
+
+ return Object.keys(payload.$add).length > 0
+ ? responseBuilderSimple(payload, message, 'incremental_properties', destination.Config)
+ : null;
+};
+
const getEventValueForTrackEvent = (message, destination) => {
const mappedProperties = constructPayload(message, mPEventPropertiesConfigJson);
// This is to conform with SDKs sending timestamp component with messageId
@@ -145,6 +182,7 @@ const getEventValueForTrackEvent = (message, destination) => {
token: destination.Config.token,
distinct_id: message.userId || message.anonymousId,
time: unixTimestamp,
+ ...buildUtmParams(message.context?.campaign),
};
if (destination.Config?.identityMergeApi === 'simplified') {
@@ -178,21 +216,63 @@ const processTrack = (message, destination) => {
if (revenue) {
returnValue.push(processRevenueEvents(message, destination, revenue));
}
+
+ if (Array.isArray(destination.Config.propIncrements)) {
+ const propIncrements = destination.Config.propIncrements.map((item) => item.property);
+ const response = processIncrementalProperties(message, destination, propIncrements);
+ if (response) {
+ returnValue.push(response);
+ }
+ }
returnValue.push(getEventValueForTrackEvent(message, destination));
return returnValue;
};
+const createSetOnceResponse = (message, type, destination, setOnce) => {
+ const payload = {
+ $set_once: setOnce,
+ $token: destination.Config.token,
+ $distinct_id: message.userId || message.anonymousId,
+ };
+
+ if (destination?.Config.identityMergeApi === 'simplified') {
+ payload.$distinct_id = message.userId || `$device:${message.anonymousId}`;
+ }
+
+ return responseBuilderSimple(payload, message, type, destination.Config);
+};
+
const processIdentifyEvents = async (message, type, destination) => {
+ const messageClone = { ...message };
+ let seggregatedTraits = {};
const returnValue = [];
+ let setOnceProperties = [];
+
+ // making payload for set_once properties
+ if (destination.Config.setOnceProperties && destination.Config.setOnceProperties.length > 0) {
+ setOnceProperties = parseConfigArray(destination.Config.setOnceProperties, 'property');
+ seggregatedTraits = trimTraits(
+ messageClone.traits,
+ messageClone.context.traits,
+ setOnceProperties,
+ );
+ messageClone.traits = seggregatedTraits.traits;
+ messageClone.context.traits = seggregatedTraits.contextTraits;
+ if (Object.keys(seggregatedTraits.setOnce).length > 0) {
+ returnValue.push(
+ createSetOnceResponse(messageClone, type, destination, seggregatedTraits.setOnce),
+ );
+ }
+ }
// Creating the user profile
// https://developer.mixpanel.com/reference/profile-set
- returnValue.push(createIdentifyResponse(message, type, destination, responseBuilderSimple));
+ returnValue.push(createIdentifyResponse(messageClone, type, destination, responseBuilderSimple));
if (
destination.Config?.identityMergeApi !== 'simplified' &&
- message.userId &&
- message.anonymousId &&
+ messageClone.userId &&
+ messageClone.anonymousId &&
isImportAuthCredentialsAvailable(destination)
) {
// If userId and anonymousId both are present and required credentials for /import
@@ -201,13 +281,13 @@ const processIdentifyEvents = async (message, type, destination) => {
const trackPayload = {
event: '$merge',
properties: {
- $distinct_ids: [message.userId, message.anonymousId],
+ $distinct_ids: [messageClone.userId, messageClone.anonymousId],
token: destination.Config.token,
},
};
const identifyTrackResponse = responseBuilderSimple(
trackPayload,
- message,
+ messageClone,
'merge',
destination.Config,
);
@@ -225,6 +305,7 @@ const processPageOrScreenEvents = (message, type, destination) => {
token: destination.Config.token,
distinct_id: message.userId || message.anonymousId,
time: toUnixTimestamp(message.timestamp),
+ ...buildUtmParams(message.context?.campaign),
};
if (destination.Config?.identityMergeApi === 'simplified') {
properties = {
@@ -257,12 +338,14 @@ const processAliasEvents = (message, type, destination) => {
const aliasId = message.previousId || message.anonymousId;
if (!aliasId) {
throw new InstrumentationError(
- 'Either previous id or anonymous id should be present in alias payload',
+ 'Either `previousId` or `anonymousId` should be present in alias payload',
);
}
if (aliasId === message.userId) {
- throw new InstrumentationError('One of previousId/anonymousId is same as userId');
+ throw new InstrumentationError(
+ 'One of `previousId` or `anonymousId` is same as `userId`. Aborting',
+ );
}
const payload = {
@@ -327,37 +410,17 @@ const processGroupEvents = (message, type, destination) => {
}
});
} else {
- throw new ConfigurationError('Group Key Settings is not configured');
+ throw new ConfigurationError('`Group Key Settings` is not configured in destination');
}
if (returnValue.length === 0) {
- throw new InstrumentationError('Group Key is not present. Aborting message');
+ throw new InstrumentationError(
+ 'Group Key is not present. Please ensure that the group key is included in the payload as configured in the `Group Key Settings` in destination',
+ );
}
return returnValue;
};
-const generateBatchedPayloadForArray = (events) => {
- const { batchedRequest } = defaultBatchRequestConfig();
- const batchResponseList = events.flatMap((event) => JSON.parse(event.body.JSON_ARRAY.batch));
- batchedRequest.body.JSON_ARRAY = { batch: JSON.stringify(batchResponseList) };
- batchedRequest.endpoint = events[0].endpoint;
- batchedRequest.headers = events[0].headers;
- batchedRequest.params = events[0].params;
- return batchedRequest;
-};
-
-const batchEvents = (successRespList, maxBatchSize) => {
- const batchResponseList = [];
- const batchedEvents = batchMultiplexedEvents(successRespList, maxBatchSize);
- batchedEvents.forEach((batch) => {
- const batchedRequest = generateBatchedPayloadForArray(batch.events);
- batchResponseList.push(
- getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, true),
- );
- });
- return batchResponseList;
-};
-
-const processSingleMessage = async (message, destination) => {
+const processSingleMessage = (message, destination) => {
const clonedMessage = { ...message };
if (clonedMessage.userId) {
clonedMessage.userId = String(clonedMessage.userId);
@@ -378,86 +441,17 @@ const processSingleMessage = async (message, destination) => {
return processIdentifyEvents(clonedMessage, clonedMessage.type, destination);
case EventType.ALIAS:
if (destination.Config?.identityMergeApi === 'simplified') {
- throw new InstrumentationError(
- `Event type '${EventType.ALIAS}' is not supported when 'Simplified ID merge' api is selected in webapp`,
- );
+ throw new InstrumentationError('Alias call is deprecated in `Simplified ID merge`');
}
return processAliasEvents(message, message.type, destination);
case EventType.GROUP:
return processGroupEvents(clonedMessage, clonedMessage.type, destination);
default:
- throw new InstrumentationError(`Event type ${clonedMessage.type} is not supported`);
+ throw new InstrumentationError(`Event type '${clonedMessage.type}' is not supported`);
}
};
-const process = async (event) => processSingleMessage(event.message, event.destination);
-
-const processEvents = async (inputs, reqMetadata) =>
- await Promise.all(
- inputs.map(async (event) => {
- try {
- if (event.message.statusCode) {
- // already transformed event
- return { output: event };
- }
-
- // if not transformed
- return {
- output: {
- message: await process(event),
- metadata: event.metadata,
- destination: event.destination,
- },
- };
- } catch (error) {
- const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata);
- return { error: errRespEvent };
- }
- }),
- );
-
-const processAndChunkEvents = async (inputs, reqMetadata) => {
- const processedEvents = await processEvents(inputs, reqMetadata);
- const engageEventChunks = [];
- const groupsEventChunks = [];
- const trackEventChunks = [];
- const importEventChunks = [];
- const batchErrorRespList = [];
- processedEvents.forEach((result) => {
- if (result.output) {
- const event = result.output;
- const { destination, metadata } = event;
- let { message } = event;
- message = CommonUtils.toArray(message);
- message.forEach((msg) => {
- // eslint-disable-next-line default-case
- switch (true) {
- case msg.endpoint.includes('engage'):
- engageEventChunks.push({ message: msg, destination, metadata });
- break;
- case msg.endpoint.includes('groups'):
- groupsEventChunks.push({ message: msg, destination, metadata });
- break;
- case msg.endpoint.includes('track'):
- trackEventChunks.push({ message: msg, destination, metadata });
- break;
- case msg.endpoint.includes('import'):
- importEventChunks.push({ message: msg, destination, metadata });
- break;
- }
- });
- } else if (result.error) {
- batchErrorRespList.push(result.error);
- }
- });
- return {
- engageEventChunks,
- groupsEventChunks,
- trackEventChunks,
- importEventChunks,
- batchErrorRespList,
- };
-};
+const process = (event) => processSingleMessage(event.message, event.destination);
// Documentation about how Mixpanel handles the utm parameters
// Ref: https://help.mixpanel.com/hc/en-us/articles/115004613766-Default-Properties-Collected-by-Mixpanel
@@ -468,28 +462,55 @@ const processRouterDest = async (inputs, reqMetadata) => {
return errorRespEvents;
}
- const {
- engageEventChunks,
- groupsEventChunks,
- trackEventChunks,
- importEventChunks,
- batchErrorRespList,
- } = await processAndChunkEvents(inputs, reqMetadata);
-
- const engageRespList = batchEvents(engageEventChunks, ENGAGE_MAX_BATCH_SIZE);
- const groupsRespList = batchEvents(groupsEventChunks, GROUPS_MAX_BATCH_SIZE);
- const trackRespList = batchEvents(trackEventChunks, TRACK_MAX_BATCH_SIZE);
- const importRespList = batchEvents(importEventChunks, IMPORT_MAX_BATCH_SIZE);
-
- let batchSuccessRespList = [
- ...engageRespList,
- ...groupsRespList,
- ...trackRespList,
- ...importRespList,
- ];
- batchSuccessRespList = combineBatchRequestsWithSameJobIds(batchSuccessRespList);
-
- return [...batchSuccessRespList, ...batchErrorRespList];
+ const groupedEvents = groupEventsByType(inputs);
+ const response = await Promise.all(
+ groupedEvents.map(async (listOfEvents) => {
+ let transformedPayloads = await Promise.all(
+ listOfEvents.map(async (event) => {
+ try {
+ if (event.message.statusCode) {
+ // already transformed event
+ return {
+ message: event.message,
+ metadata: event.metadata,
+ destination: event.destination,
+ };
+ }
+ let processedEvents = await process(event);
+ processedEvents = CommonUtils.toArray(processedEvents);
+ return processedEvents.map((res) => ({
+ message: res,
+ metadata: event.metadata,
+ destination: event.destination,
+ }));
+ } catch (error) {
+ return handleRtTfSingleEventError(event, error, reqMetadata);
+ }
+ }),
+ );
+
+ transformedPayloads = lodash.flatMap(transformedPayloads);
+ const { engageEvents, groupsEvents, trackEvents, importEvents, batchErrorRespList } =
+ groupEventsByEndpoint(transformedPayloads);
+
+ const engageRespList = batchEvents(engageEvents, ENGAGE_MAX_BATCH_SIZE, reqMetadata);
+ const groupsRespList = batchEvents(groupsEvents, GROUPS_MAX_BATCH_SIZE, reqMetadata);
+ const trackRespList = batchEvents(trackEvents, TRACK_MAX_BATCH_SIZE, reqMetadata);
+ const importRespList = batchEvents(importEvents, IMPORT_MAX_BATCH_SIZE, reqMetadata);
+ const batchSuccessRespList = [
+ ...engageRespList,
+ ...groupsRespList,
+ ...trackRespList,
+ ...importRespList,
+ ];
+
+ return [...batchSuccessRespList, ...batchErrorRespList];
+ }),
+ );
+
+ // Flatten the response array containing batched events from multiple groups
+ const allBatchedEvents = lodash.flatMap(response);
+ return combineBatchRequestsWithSameJobIds(allBatchedEvents);
};
module.exports = { process, processRouterDest };
diff --git a/src/v0/destinations/mp/util.js b/src/v0/destinations/mp/util.js
index 5a96c8d64bf..bb8f36fdbe3 100644
--- a/src/v0/destinations/mp/util.js
+++ b/src/v0/destinations/mp/util.js
@@ -1,5 +1,7 @@
+const lodash = require('lodash');
const set = require('set-value');
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
isDefined,
constructPayload,
@@ -8,6 +10,12 @@ const {
isAppleFamily,
getBrowserInfo,
toUnixTimestamp,
+ batchMultiplexedEvents,
+ getSuccessRespEvents,
+ defaultBatchRequestConfig,
+ IsGzipSupported,
+ isObject,
+ isDefinedAndNotNullAndNotEmpty,
} = require('../../util');
const {
ConfigCategory,
@@ -15,11 +23,12 @@ const {
GEO_SOURCE_ALLOWED_VALUES,
mappingConfig,
} = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
+const { CommonUtils } = require('../../../util/common');
const mPIdentifyConfigJson = mappingConfig[ConfigCategory.IDENTIFY.name];
const mPProfileAndroidConfigJson = mappingConfig[ConfigCategory.PROFILE_ANDROID.name];
const mPProfileIosConfigJson = mappingConfig[ConfigCategory.PROFILE_IOS.name];
+const mPSetOnceConfigJson = mappingConfig[ConfigCategory.SET_ONCE.name];
/**
* this function has been used to create
@@ -139,6 +148,7 @@ const isImportAuthCredentialsAvailable = (destination) =>
const findExistingBatch = (batch, metadataMap) => {
let existingBatch = null;
+ // eslint-disable-next-line no-restricted-syntax
for (const metadataItem of batch.metadata) {
if (metadataMap.has(metadataItem.jobId)) {
existingBatch = metadataMap.get(metadataItem.jobId);
@@ -154,8 +164,9 @@ const findExistingBatch = (batch, metadataMap) => {
* @param {*} mergedBatches An array of merged batch objects.
*/
const removeDuplicateMetadata = (mergedBatches) => {
- for (const batch of mergedBatches) {
+ mergedBatches.forEach((batch) => {
const metadataSet = new Set();
+ // eslint-disable-next-line no-param-reassign
batch.metadata = batch.metadata.filter((metadataItem) => {
if (!metadataSet.has(metadataItem.jobId)) {
metadataSet.add(metadataItem.jobId);
@@ -163,7 +174,103 @@ const removeDuplicateMetadata = (mergedBatches) => {
}
return false;
});
+ });
+};
+
+/**
+ * Builds UTM parameters from a campaign object.
+ *
+ * @param {Object} campaign - The campaign object containing the campaign details.
+ * @returns {Object} - The object containing the UTM parameters extracted from the campaign object.
+ *
+ * @example
+ * const campaign = {
+ * name: 'summer_sale',
+ * source: 'newsletter',
+ * medium: 'email'
+ * };
+ * { utm_campaign: 'summer_sale', utm_source: 'newsletter', utm_medium: 'email' }
+ */
+const buildUtmParams = (campaign) => {
+ const utmParams = {};
+ if (isObject(campaign)) {
+ Object.keys(campaign).forEach((key) => {
+ if (key === 'name') {
+ utmParams.utm_campaign = campaign[key];
+ } else {
+ utmParams[`utm_${key}`] = campaign[key];
+ }
+ });
}
+
+ return utmParams;
+};
+
+/**
+ * Group events with the same endpoint together in batches
+ * @param {*} events - An array of events
+ * @returns
+ */
+const groupEventsByEndpoint = (events) => {
+ const eventMap = {
+ engage: [],
+ groups: [],
+ track: [],
+ import: [],
+ };
+ const batchErrorRespList = [];
+
+ events.forEach((result) => {
+ if (result.message) {
+ const { destination, metadata } = result;
+ const message = CommonUtils.toArray(result.message);
+
+ message.forEach((msg) => {
+ const endpoint = Object.keys(eventMap).find((key) => msg.endpoint.includes(key));
+
+ if (endpoint) {
+ eventMap[endpoint].push({ message: msg, destination, metadata });
+ }
+ });
+ } else if (result.error) {
+ batchErrorRespList.push(result);
+ }
+ });
+
+ return {
+ engageEvents: eventMap.engage,
+ groupsEvents: eventMap.groups,
+ trackEvents: eventMap.track,
+ importEvents: eventMap.import,
+ batchErrorRespList,
+ };
+};
+
+const generateBatchedPayloadForArray = (events, reqMetadata) => {
+ const { batchedRequest } = defaultBatchRequestConfig();
+ const firstEvent = events[0];
+ batchedRequest.endpoint = firstEvent.endpoint;
+ batchedRequest.headers = firstEvent.headers;
+ batchedRequest.params = firstEvent.params;
+
+ const batchResponseList = events.flatMap((event) => JSON.parse(event.body.JSON_ARRAY.batch));
+
+ if (IsGzipSupported(reqMetadata) && firstEvent.endpoint.includes('import')) {
+ // Gzipping the payload for /import endpoint
+ batchedRequest.body.GZIP = { payload: JSON.stringify(batchResponseList) };
+ } else {
+ batchedRequest.body.JSON_ARRAY = { batch: JSON.stringify(batchResponseList) };
+ }
+
+ return batchedRequest;
+};
+
+const batchEvents = (successRespList, maxBatchSize, reqMetadata) => {
+ const batchedEvents = batchMultiplexedEvents(successRespList, maxBatchSize);
+ return batchedEvents.map((batch) => {
+ const batchedRequest = generateBatchedPayloadForArray(batch.events, reqMetadata);
+ return getSuccessRespEvents(batchedRequest, batch.metadata, batch.destination, true);
+ });
};
/**
@@ -218,8 +325,79 @@ const combineBatchRequestsWithSameJobIds = (inputBatches) => {
return combineBatches(combineBatches(inputBatches));
};
+/**
+ * Trims the traits and contextTraits objects based on the setOnceProperties array and returns an object containing the modified traits, contextTraits, and setOnce properties.
+ *
+ * @param {object} traits - An object representing the traits.
+ * @param {object} contextTraits - An object representing the context traits.
+ * @param {string[]} setOnceProperties - An array of property paths to be considered for the setOnce transformation.
+ * @returns {object} - An object containing the modified traits, contextTraits, and setOnce properties.
+ *
+ * @example
+ * const traits = { name: 'John', age: 30 };
+ * const contextTraits = { country: 'USA', language: 'English', address: { city: 'New York', state: 'NY' }}};
+ * const setOnceProperties = ['name', 'country', 'address.city'];
+ *
+ * const result = trimTraits(traits, contextTraits, setOnceProperties);
+ * // Output: { traits: { age: 30 }, contextTraits: { language: 'English' }, setOnce: { $name: 'John', $country_code: 'USA', city: 'New York'} }
+ */
+function trimTraits(traits, contextTraits, setOnceProperties) {
+ let sentOnceTransformedPayload;
+ // Create a copy of the original traits object
+ const traitsCopy = { ...traits };
+ const contextTraitsCopy = { ...contextTraits };
+
+ // Initialize setOnce object
+ const setOnceEligible = {};
+
+ // Step 1: find the k-v pairs of setOnceProperties in traits and contextTraits
+
+ setOnceProperties.forEach((propertyPath) => {
+ const propName = lodash.last(propertyPath.split('.'));
+
+ const traitsValue = get(traitsCopy, propertyPath);
+ const contextTraitsValue = get(contextTraitsCopy, propertyPath);
+
+ if (isDefinedAndNotNullAndNotEmpty(traitsValue)) {
+ setOnceEligible[propName] = traitsValue;
+ lodash.unset(traitsCopy, propertyPath);
+ }
+ if (isDefinedAndNotNullAndNotEmpty(contextTraitsValue)) {
+ if (!setOnceEligible.hasOwnProperty(propName)) {
+ setOnceEligible[propName] = contextTraitsValue;
+ }
+ lodash.unset(contextTraitsCopy, propertyPath);
+ }
+ });
+
+ if (setOnceEligible && Object.keys(setOnceEligible).length > 0) {
+ // Step 2: transform properties eligible as per rudderstack declared identify event mapping
+ // setOnce should have all traits from message.traits and message.context.traits by now
+ sentOnceTransformedPayload = constructPayload(setOnceEligible, mPSetOnceConfigJson);
+
+ // Step 3: combine the transformed and custom setOnce traits
+ sentOnceTransformedPayload = extractCustomFields(
+ setOnceEligible,
+ sentOnceTransformedPayload,
+ 'root',
+ MP_IDENTIFY_EXCLUSION_LIST,
+ );
+ }
+
+ return {
+ traits: traitsCopy,
+ contextTraits: contextTraitsCopy,
+ setOnce: sentOnceTransformedPayload || {},
+ };
+}
+
module.exports = {
createIdentifyResponse,
isImportAuthCredentialsAvailable,
+ buildUtmParams,
+ groupEventsByEndpoint,
+ generateBatchedPayloadForArray,
+ batchEvents,
combineBatchRequestsWithSameJobIds,
+ trimTraits,
};
diff --git a/src/v0/destinations/mp/util.test.js b/src/v0/destinations/mp/util.test.js
index 24345646995..fbaa6f9b9ff 100644
--- a/src/v0/destinations/mp/util.test.js
+++ b/src/v0/destinations/mp/util.test.js
@@ -1,7 +1,12 @@
const {
combineBatchRequestsWithSameJobIds,
- combineBatchRequestsWithSameJobIds2,
+ groupEventsByEndpoint,
+ batchEvents,
+ generateBatchedPayloadForArray,
+ buildUtmParams,
+ trimTraits,
} = require('./util');
+const { FEATURE_GZIP_SUPPORT } = require('../../util/constant');
const destinationMock = {
Config: {
@@ -21,7 +26,243 @@ const destinationMock = {
Transformations: [],
};
+const maxBatchSizeMock = 2;
+
describe('Mixpanel utils test', () => {
+ describe('Unit test cases for groupEventsByEndpoint', () => {
+ it('should return an object with empty arrays for all properties when the events array is empty', () => {
+ const events = [];
+ const result = groupEventsByEndpoint(events);
+ expect(result).toEqual({
+ engageEvents: [],
+ groupsEvents: [],
+ trackEvents: [],
+ importEvents: [],
+ batchErrorRespList: [],
+ });
+ });
+
+ it('should return an object with all properties containing their respective events when the events array contains events of all types', () => {
+ const events = [
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:1}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:2}]',
+ },
+ },
+ userId: 'user2',
+ },
+ },
+ {
+ message: {
+ endpoint: '/groups',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:3}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ {
+ message: {
+ endpoint: '/track',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:4}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ {
+ message: {
+ endpoint: '/import',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:5}]',
+ },
+ },
+ userId: 'user2',
+ },
+ },
+ { error: 'Message type abc not supported' },
+ ];
+ const result = groupEventsByEndpoint(events);
+ expect(result).toEqual({
+ engageEvents: [
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:1}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:2}]',
+ },
+ },
+ userId: 'user2',
+ },
+ },
+ ],
+ groupsEvents: [
+ {
+ message: {
+ endpoint: '/groups',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:3}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ ],
+ trackEvents: [
+ {
+ message: {
+ endpoint: '/track',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:4}]',
+ },
+ },
+ userId: 'user1',
+ },
+ },
+ ],
+ importEvents: [
+ {
+ message: {
+ endpoint: '/import',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{prop:5}]',
+ },
+ },
+ userId: 'user2',
+ },
+ },
+ ],
+ batchErrorRespList: [{ error: 'Message type abc not supported' }],
+ });
+ });
+ });
+
+ describe('Unit test cases for batchEvents', () => {
+ it('should return an array of batched events with correct payload and metadata', () => {
+ const successRespList = [
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{"prop":1}]',
+ },
+ },
+ headers: {},
+ params: {},
+ userId: 'user1',
+ },
+ metadata: { jobId: 3 },
+ },
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{"prop":2}]',
+ },
+ },
+ headers: {},
+ params: {},
+ userId: 'user2',
+ },
+ metadata: { jobId: 4 },
+ },
+ {
+ message: {
+ endpoint: '/engage',
+ body: {
+ JSON_ARRAY: {
+ batch: '[{"prop":3}]',
+ },
+ },
+ headers: {},
+ params: {},
+ userId: 'user2',
+ },
+ metadata: { jobId: 6 },
+ },
+ ];
+
+ const result = batchEvents(successRespList, maxBatchSizeMock);
+
+ expect(result).toEqual([
+ {
+ batched: true,
+ batchedRequest: {
+ body: { FORM: {}, JSON: {}, JSON_ARRAY: { batch: '[{"prop":1},{"prop":2}]' }, XML: {} },
+ endpoint: '/engage',
+ files: {},
+ headers: {},
+ method: 'POST',
+ params: {},
+ type: 'REST',
+ version: '1',
+ },
+ destination: undefined,
+ metadata: [{ jobId: 3 }, { jobId: 4 }],
+ statusCode: 200,
+ },
+ {
+ batched: true,
+ batchedRequest: {
+ body: { FORM: {}, JSON: {}, JSON_ARRAY: { batch: '[{"prop":3}]' }, XML: {} },
+ endpoint: '/engage',
+ files: {},
+ headers: {},
+ method: 'POST',
+ params: {},
+ type: 'REST',
+ version: '1',
+ },
+ destination: undefined,
+ metadata: [{ jobId: 6 }],
+ statusCode: 200,
+ },
+ ]);
+ });
+
+ it('should return an empty array when successRespList is empty', () => {
+ const successRespList = [];
+ const result = batchEvents(successRespList, maxBatchSizeMock);
+ expect(result).toEqual([]);
+ });
+ });
+
describe('Unit test cases for combineBatchRequestsWithSameJobIds', () => {
it('Combine batch request with same jobIds', async () => {
const input = [
@@ -250,4 +491,209 @@ describe('Mixpanel utils test', () => {
expect(combineBatchRequestsWithSameJobIds(input)).toEqual(expectedOutput);
});
});
+
+ describe('Unit test cases for generateBatchedPayloadForArray', () => {
+ it('should generate a batched payload with GZIP payload for /import endpoint when given an array of events', () => {
+ const events = [
+ {
+ body: { JSON_ARRAY: { batch: '[{"event": "event1"}]' } },
+ endpoint: '/import',
+ headers: { 'Content-Type': 'application/json' },
+ params: {},
+ },
+ {
+ body: { JSON_ARRAY: { batch: '[{"event": "event2"}]' } },
+ endpoint: '/import',
+ headers: { 'Content-Type': 'application/json' },
+ params: {},
+ },
+ ];
+ const expectedBatchedRequest = {
+ body: {
+ FORM: {},
+ JSON: {},
+ JSON_ARRAY: {},
+ XML: {},
+ GZIP: {
+ payload: '[{"event":"event1"},{"event":"event2"}]',
+ },
+ },
+ endpoint: '/import',
+ files: {},
+ headers: { 'Content-Type': 'application/json' },
+ method: 'POST',
+ params: {},
+ type: 'REST',
+ version: '1',
+ };
+
+ const result = generateBatchedPayloadForArray(events, {
+ features: { [FEATURE_GZIP_SUPPORT]: true },
+ });
+
+ expect(result).toEqual(expectedBatchedRequest);
+ });
+
+ it('should generate a batched payload with JSON_ARRAY body when given an array of events', () => {
+ const events = [
+ {
+ body: { JSON_ARRAY: { batch: '[{"event": "event1"}]' } },
+ endpoint: '/endpoint',
+ headers: { 'Content-Type': 'application/json' },
+ params: {},
+ },
+ {
+ body: { JSON_ARRAY: { batch: '[{"event": "event2"}]' } },
+ endpoint: '/endpoint',
+ headers: { 'Content-Type': 'application/json' },
+ params: {},
+ },
+ ];
+ const expectedBatchedRequest = {
+ body: {
+ FORM: {},
+ JSON: {},
+ JSON_ARRAY: { batch: '[{"event":"event1"},{"event":"event2"}]' },
+ XML: {},
+ },
+ endpoint: '/endpoint',
+ files: {},
+ headers: { 'Content-Type': 'application/json' },
+ method: 'POST',
+ params: {},
+ type: 'REST',
+ version: '1',
+ };
+
+ const result = generateBatchedPayloadForArray(events, {
+ features: { [FEATURE_GZIP_SUPPORT]: true },
+ });
+
+ expect(result).toEqual(expectedBatchedRequest);
+ });
+ });
+
+ describe('Unit test cases for buildUtmParams', () => {
+ it('should return an empty object when campaign is undefined', () => {
+ const campaign = undefined;
+ const result = buildUtmParams(campaign);
+ expect(result).toEqual({});
+ });
+
+ it('should return an empty object when campaign is an empty object', () => {
+ const campaign = {};
+ const result = buildUtmParams(campaign);
+ expect(result).toEqual({});
+ });
+
+ it('should return an empty object when campaign is not an object', () => {
+ const campaign = [{ name: 'test' }];
+ const result = buildUtmParams(campaign);
+ expect(result).toEqual({});
+ });
+
+ it('should handle campaign object with null/undefined values', () => {
+ const campaign = { name: null, source: 'rudder', medium: 'rudder', test: undefined };
+ const result = buildUtmParams(campaign);
+ expect(result).toEqual({
+ utm_campaign: null,
+ utm_source: 'rudder',
+ utm_medium: 'rudder',
+ test: undefined,
+ });
+ });
+ });
+ describe('Unit test cases for trimTraits', () => {
+ // Given a valid traits object and contextTraits object, and a valid setOnceProperties array, the function should return an object containing traits, contextTraits, and setOnce properties.
+ it('should return an object containing traits, contextTraits, and setOnce properties when given valid inputs', () => {
+ const traits = { name: 'John', age: 30 };
+ const contextTraits = { email: 'john@example.com' };
+ const setOnceProperties = ['name', 'email'];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+ console.log(result);
+
+ expect(result).toEqual({
+ traits: {
+ age: 30,
+ },
+ contextTraits: {},
+ setOnce: { $name: 'John', $email: 'john@example.com' },
+ });
+ });
+
+ // Given an empty traits object and contextTraits object, and a valid setOnceProperties array, the function should return an object containing empty traits and contextTraits, and an empty setOnce property.
+ it('should return an object containing empty traits and contextTraits, and an empty setOnce property when given empty traits and contextTraits objects', () => {
+ const traits = {};
+ const contextTraits = {};
+ const setOnceProperties = ['name', 'email'];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+
+ expect(result).toEqual({
+ traits: {},
+ contextTraits: {},
+ setOnce: {},
+ });
+ });
+
+ // Given an empty setOnceProperties array, the function should return an object containing the original traits and contextTraits objects, and an empty setOnce property.
+ it('should return an object containing the original traits and contextTraits objects, and an empty setOnce property when given an empty setOnceProperties array', () => {
+ const traits = { name: 'John', age: 30 };
+ const contextTraits = { email: 'john@example.com' };
+ const setOnceProperties = [];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+
+ expect(result).toEqual({
+ traits: { name: 'John', age: 30 },
+ contextTraits: { email: 'john@example.com' },
+ setOnce: {},
+ });
+ });
+
+ // Given a setOnceProperties array containing properties that do not exist in either traits or contextTraits objects, the function should not add the property to the setOnce property.
+ it('should not add properties to the setOnce property when given setOnceProperties array with non-existent properties', () => {
+ const traits = { name: 'John', age: 30 };
+ const contextTraits = { email: 'john@example.com' };
+ const setOnceProperties = ['name', 'email', 'address'];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+
+ expect(result).toEqual({
+ traits: { age: 30 },
+ contextTraits: {},
+ setOnce: { $name: 'John', $email: 'john@example.com' },
+ });
+ });
+
+ // Given a setOnceProperties array containing properties with nested paths that do not exist in either traits or contextTraits objects, the function should not add the property to the setOnce property.
+ it('should not add properties to the setOnce property when given setOnceProperties array with non-existent nested properties', () => {
+ const traits = { name: 'John', age: 30, address: 'kolkata' };
+ const contextTraits = { email: 'john@example.com' };
+ const setOnceProperties = ['name', 'email', 'address.city'];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+
+ expect(result).toEqual({
+ traits: { age: 30, address: 'kolkata' },
+ contextTraits: {},
+ setOnce: { $name: 'John', $email: 'john@example.com' },
+ });
+ });
+
+ it('should add properties to the setOnce property when given setOnceProperties array with existent nested properties', () => {
+ const traits = { name: 'John', age: 30, address: { city: 'kolkata' }, isAdult: false };
+ const contextTraits = { email: 'john@example.com' };
+ const setOnceProperties = ['name', 'email', 'address.city'];
+
+ const result = trimTraits(traits, contextTraits, setOnceProperties);
+
+ expect(result).toEqual({
+ traits: { age: 30, address: {}, isAdult: false },
+ contextTraits: {},
+ setOnce: { $name: 'John', $email: 'john@example.com', $city: 'kolkata' },
+ });
+ });
+ });
});
diff --git a/src/v0/destinations/mssql/transform.test.js b/src/v0/destinations/mssql/transform.test.js
new file mode 100644
index 00000000000..0892651b21e
--- /dev/null
+++ b/src/v0/destinations/mssql/transform.test.js
@@ -0,0 +1,48 @@
+const { getDataType } = require('../../../../src/warehouse/index');
+const { getDataTypeOverride } = require('./transform');
+
+const testCases = [
+ {
+ name: 'normalInt',
+ data: 1,
+ type: 'int',
+ },
+ {
+ name: 'normalFloat',
+ data: 2.01,
+ type: 'float',
+ },
+ {
+ name: 'normalBoolean',
+ data: true,
+ type: 'boolean',
+ },
+ {
+ name: 'normalString',
+ data: 'mssql transformation[*007}',
+ type: 'string',
+ },
+ {
+ name: 'violationErrors',
+ data: [
+ {
+ message:
+ 'no schema for eventName : Product Purchased new, eventType : track in trackingPlanID : tp_20dfXJDpotQWHe7hMxfQfgWMZDv::1',
+ meta: {},
+ type: 'Unplanned-Event',
+ },
+ ],
+ type: 'string',
+ },
+];
+
+describe('MSSQL data types testing', () => {
+ const options = {};
+ options.getDataTypeOverride = getDataTypeOverride;
+ testCases.forEach((testCase) => {
+ it(`should return data type ${testCase.type} for this input data ${testCase.data} everytime`, () => {
+ const dataType = getDataType(testCase.name, testCase.data, options);
+ expect(dataType).toEqual(testCase.type);
+ });
+ });
+});
diff --git a/src/v0/destinations/ometria/networkResponseHandler.js b/src/v0/destinations/ometria/networkResponseHandler.js
index 2020ab03438..501b67f1760 100644
--- a/src/v0/destinations/ometria/networkResponseHandler.js
+++ b/src/v0/destinations/ometria/networkResponseHandler.js
@@ -1,8 +1,8 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { getDynamicErrorType, trimResponse } = require('../../../adapters/utils/networkUtils');
const { isDefinedAndNotNull } = require('../../util');
const { isEmpty } = require('../../util/index');
const tags = require('../../util/tags');
-const { NetworkError } = require('../../util/errorTypes');
const responseTransform = (destResponse) => {
let respBody;
diff --git a/src/v0/destinations/ometria/transform.js b/src/v0/destinations/ometria/transform.js
index d3a4d717535..55038e10b83 100644
--- a/src/v0/destinations/ometria/transform.js
+++ b/src/v0/destinations/ometria/transform.js
@@ -1,7 +1,7 @@
-/* eslint-disable one-var */
+/* eslint-disable one-var, @typescript-eslint/naming-convention */
/* eslint-disable camelcase */
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const {
constructPayload,
extractCustomFields,
diff --git a/src/v0/destinations/one_signal/transform.js b/src/v0/destinations/one_signal/transform.js
index db699935f4d..a072aef0e4f 100644
--- a/src/v0/destinations/one_signal/transform.js
+++ b/src/v0/destinations/one_signal/transform.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { ConfigCategory, mappingConfig, BASE_URL, ENDPOINTS } = require('./config');
const {
@@ -13,11 +18,6 @@ const {
defaultPutRequestConfig,
} = require('../../util');
const { populateDeviceType, populateTags } = require('./util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, endpoint, eventType) => {
diff --git a/src/v0/destinations/one_signal/util.js b/src/v0/destinations/one_signal/util.js
index 4b53949e55c..2de57de1b41 100644
--- a/src/v0/destinations/one_signal/util.js
+++ b/src/v0/destinations/one_signal/util.js
@@ -1,5 +1,5 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { getIntegrationsObj, getFieldValueFromMessage, getBrowserInfo } = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
// For mapping device_type value
const deviceTypeMapping = {
diff --git a/src/v0/destinations/pagerduty/transform.js b/src/v0/destinations/pagerduty/transform.js
index d7a8848ace4..fb862d2553c 100644
--- a/src/v0/destinations/pagerduty/transform.js
+++ b/src/v0/destinations/pagerduty/transform.js
@@ -1,3 +1,8 @@
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -6,11 +11,6 @@ const {
removeUndefinedAndNullValues,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { trackEventPayloadBuilder } = require('./util');
const responseBuilder = (payload, endpoint) => {
diff --git a/src/v0/destinations/pagerduty/util.js b/src/v0/destinations/pagerduty/util.js
index 42030aa2e78..5b768704edc 100644
--- a/src/v0/destinations/pagerduty/util.js
+++ b/src/v0/destinations/pagerduty/util.js
@@ -1,5 +1,6 @@
const get = require('get-value');
const moment = require('moment');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
SEVERITIES,
EVENT_ACTIONS,
@@ -9,7 +10,6 @@ const {
DEFAULT_EVENT_ACTION,
} = require('./config');
const { constructPayload, getIntegrationsObj } = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
/**
* Validates the timestamp
diff --git a/src/v0/destinations/pardot/networkHandler.js b/src/v0/destinations/pardot/networkHandler.js
index 4cec03ebf80..12b4abbc530 100644
--- a/src/v0/destinations/pardot/networkHandler.js
+++ b/src/v0/destinations/pardot/networkHandler.js
@@ -1,3 +1,4 @@
+const { NetworkError } = require('@rudderstack/integrations-lib');
const { removeUndefinedValues } = require('../../util');
const { prepareProxyRequest, getPayloadData, httpSend } = require('../../../adapters/network');
const {
@@ -7,7 +8,6 @@ const {
const { isHttpStatusSuccess } = require('../../util/index');
const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
const tags = require('../../util/tags');
-const { NetworkError } = require('../../util/errorTypes');
/**
* Example Response from pardot
diff --git a/src/v0/destinations/pardot/transform.js b/src/v0/destinations/pardot/transform.js
index 128d72cb148..b32b8967bd2 100644
--- a/src/v0/destinations/pardot/transform.js
+++ b/src/v0/destinations/pardot/transform.js
@@ -34,6 +34,7 @@
*/
const get = require('get-value');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { identifyConfig, DESTINATION } = require('./config');
const logger = require('../../../logger');
const {
@@ -45,33 +46,9 @@ const {
getSuccessRespEvents,
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
+ getAccessToken,
} = require('../../util');
const { CONFIG_CATEGORIES } = require('./config');
-const {
- OAuthSecretError,
- ConfigurationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
-
-/**
- * Get access token to be bound to the event req headers
- *
- * Note:
- * This method needs to be implemented particular to the destination
- * As the schema that we'd get in `metadata.secret` can be different
- * for different destinations
- *
- * @param {Object} metadata
- * @returns
- */
-const getAccessToken = (metadata) => {
- // OAuth for this destination
- const { secret } = metadata;
- if (!secret) {
- throw new OAuthSecretError('Empty/Invalid access token');
- }
- return secret.access_token;
-};
const buildResponse = (payload, url, destination, token) => {
const responseBody = removeUndefinedValues(payload);
@@ -122,7 +99,7 @@ const getUrl = (urlParams) => {
const processIdentify = ({ message, metadata }, destination, category) => {
const { campaignId } = destination.Config;
- const accessToken = getAccessToken(metadata);
+ const accessToken = getAccessToken(metadata, 'access_token');
let extId = get(message, 'context.externalId');
extId = extId && extId.length > 0 ? extId[0] : null;
diff --git a/src/v0/destinations/persistiq/transform.js b/src/v0/destinations/persistiq/transform.js
index 195f8d6567b..3b4fd6cadc0 100644
--- a/src/v0/destinations/persistiq/transform.js
+++ b/src/v0/destinations/persistiq/transform.js
@@ -1,4 +1,5 @@
const { set } = require('lodash');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
removeUndefinedAndNullValues,
@@ -8,7 +9,6 @@ const {
const { configCategories } = require('./config');
const { buildLeadPayload, getIdentifyTraits } = require('./util');
const { EventType } = require('../../../constants');
-const { InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = (payload, endpoint, method, Config) => {
const { apiKey } = Config;
diff --git a/src/v0/destinations/persistiq/util.js b/src/v0/destinations/persistiq/util.js
index 7e1986e9b37..f37a9d1886c 100644
--- a/src/v0/destinations/persistiq/util.js
+++ b/src/v0/destinations/persistiq/util.js
@@ -1,4 +1,5 @@
const { get } = require('lodash');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
getFieldValueFromMessage,
getHashFromArray,
@@ -6,7 +7,6 @@ const {
flattenMultilevelPayload,
} = require('../../util');
const { identifySourceKeys, fileConfigCategories, mappingConfig } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
/**
* Returns the remaining keys from traits
diff --git a/src/v0/destinations/personalize/scripts/create-trackingid.js b/src/v0/destinations/personalize/scripts/create-trackingid.js
index d2a513635ab..efd8eaa2f97 100644
--- a/src/v0/destinations/personalize/scripts/create-trackingid.js
+++ b/src/v0/destinations/personalize/scripts/create-trackingid.js
@@ -10,60 +10,64 @@ const {
const { fromEnv } = require('@aws-sdk/credential-providers');
const readline = require('readline');
-let rl = readline.createInterface(process.stdin, process.stdout);
-function promtForInput(questionText, envName) {
- if (!process.env[envName]) {
- rl.question(questionText, (input) => (process.env[envName] = input));
+require('dotenv').config();
+
+async function promtForInput(rl, questionText) {
+ return new Promise((resolve) => {
+ rl.question(questionText, (input) => {
+ resolve(input);
+ });
+ });
+}
+
+async function checkEnvAndpromtForInput(rl, questionText, envVar) {
+ if (process.env[envVar]) {
+ return;
}
+ process.env[envVar] = await promtForInput(rl, questionText);
}
-// get inputs from user
-promtForInput('AWS Access Key ID: ', 'AWS_ACCESS_KEY_ID');
-promtForInput('AWS Secret Access Key: ', 'AWS_SECRET_ACCESS_KEY');
-promtForInput('AWS REGION: ', 'AWS_REGION');
-promtForInput('Name of Dataset Group:', 'DATASET_GROUP_NAME');
-promtForInput(
- 'Number of fields in Schema in addition to USER_ID, TIMESTAMP, ITEM_ID: ',
- 'NUMBER_OF_FIELDS',
-);
-rl.close();
-const datasetGroup = process.env.DATASET_GROUP_NAME;
-const columns = [];
-const type = [];
-
-// eslint-disable-next-line radix
-const noOfFields = parseInt(process.env.NUMBER_OF_FIELDS);
-columns[0] = 'USER_ID';
-columns[1] = 'ITEM_ID';
-columns[2] = 'TIMESTAMP';
-type[0] = 'string';
-type[1] = 'string';
-type[2] = 'long';
-
-for (let i = 4; i <= noOfFields + 3; i += 1) {
- columns[i - 1] = readline.question(`Name of field no. ${i}: `);
- type[i - 1] = readline.question(`Type of field ${columns[i - 1]}: `);
+
+async function collectInputs(rl) {
+ await checkEnvAndpromtForInput(rl, 'AWS Access Key ID: ', 'AWS_ACCESS_KEY_ID');
+ await checkEnvAndpromtForInput(rl, 'AWS Secret Access Key: ', 'AWS_SECRET_ACCESS_KEY');
+ await checkEnvAndpromtForInput(rl, 'AWS REGION: ', 'AWS_REGION');
+ await checkEnvAndpromtForInput(rl, 'Name of Dataset Group: ', 'DATASET_GROUP_NAME');
+ await checkEnvAndpromtForInput(
+ rl,
+ 'Number of fields in Schema in addition to USER_ID, TIMESTAMP, ITEM_ID: ',
+ 'NUMBER_OF_FIELDS',
+ );
}
-let schema = {
- type: 'record',
- name: 'Interactions',
- namespace: 'com.amazonaws.personalize.schema',
- fields: [
- { name: 'USER_ID', type: 'string' },
- { name: 'ITEM_ID', type: 'string' },
- { name: 'TIMESTAMP', type: 'long' },
- ],
- version: '1.0',
-};
-
-if (noOfFields > 0) {
- for (let i = 3; i < noOfFields + 3; i += 1) {
- schema.fields.push({ name: columns[i], type: type[i] });
+async function collectFileds(rl) {
+ const noOfFields = parseInt(process.env.NUMBER_OF_FIELDS);
+ let schema = {
+ type: 'record',
+ name: 'Interactions',
+ namespace: 'com.amazonaws.personalize.schema',
+ fields: [
+ { name: 'USER_ID', type: 'string' },
+ { name: 'ITEM_ID', type: 'string' },
+ { name: 'TIMESTAMP', type: 'long' },
+ ],
+ version: '1.0',
+ };
+
+ for (let i = 4; i <= noOfFields + 3; i += 1) {
+ const fieldName = await promtForInput(rl, `Name of field no. ${i}: `);
+ const typeName = await promtForInput(rl, `Type of field ${fieldName}: `);
+ schema.fields.push({ name: fieldName, type: typeName });
}
+ return schema;
}
(async function () {
+ let rl = readline.createInterface(process.stdin, process.stdout);
+ await collectInputs(rl);
+ const schema = await collectFileds(rl);
+ rl.close();
+ const datasetGroup = process.env.DATASET_GROUP_NAME;
try {
const client = new PersonalizeClient({
region: process.env.AWS_REGION,
diff --git a/src/v0/destinations/personalize/transform.js b/src/v0/destinations/personalize/transform.js
index c8eca2af2ff..dcfaae755ca 100644
--- a/src/v0/destinations/personalize/transform.js
+++ b/src/v0/destinations/personalize/transform.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { KEY_CHECK_LIST, MANDATORY_PROPERTIES } = require('./config');
const { EventType } = require('../../../constants');
const {
@@ -9,7 +10,6 @@ const {
isDefined,
simpleProcessRouterDest,
} = require('../../util');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const putEventsHandler = (message, destination) => {
const { properties, anonymousId, event, messageId, context } = message;
@@ -42,28 +42,30 @@ const putEventsHandler = (message, destination) => {
throw new InstrumentationError(`Mapped property ${keyMap[key]} not found`);
}
if (isDefined(disableStringify) && disableStringify) {
- outputEvent.properties[_.camelCase(key)] = value;
+ outputEvent.properties[lodash.camelCase(key)] = value;
} else {
// users using old config will have stringified property by default
- outputEvent.properties[_.camelCase(key)] = String(value);
+ outputEvent.properties[lodash.camelCase(key)] = String(value);
}
} else if (!MANDATORY_PROPERTIES.includes(key.toUpperCase())) {
if ((!isDefinedAndNotNull(value) || isBlank(value)) && key.toUpperCase() !== 'ITEM_ID') {
throw new InstrumentationError(`Null values cannot be sent for ${keyMap[key]} `);
}
if (!(key.toUpperCase() === 'IMPRESSION' || key.toUpperCase() === 'EVENT_VALUE'))
- outputEvent[_.camelCase(key)] = String(value);
+ outputEvent[lodash.camelCase(key)] = String(value);
else if (key.toUpperCase() === 'IMPRESSION') {
- outputEvent[_.camelCase(key)] = Array.isArray(value) ? value.map(String) : [String(value)];
- outputEvent[_.camelCase(key)] = _.without(
- outputEvent[_.camelCase(key)],
+ outputEvent[lodash.camelCase(key)] = Array.isArray(value)
+ ? value.map(String)
+ : [String(value)];
+ outputEvent[lodash.camelCase(key)] = lodash.without(
+ outputEvent[lodash.camelCase(key)],
undefined,
null,
'',
);
} else if (!Number.isNaN(parseFloat(value))) {
// for eventValue
- outputEvent[_.camelCase(key)] = parseFloat(value);
+ outputEvent[lodash.camelCase(key)] = parseFloat(value);
} else throw new InstrumentationError('EVENT_VALUE should be a float value');
}
});
@@ -115,7 +117,7 @@ const putItemsHandler = (message, destination) => {
// eslint-disable-next-line no-lonely-if
if (!isDefinedAndNotNull(value) || isBlank(value)) {
// itemId cannot be null
- value = String(_.get(message, keyMap[key]));
+ value = String(lodash.get(message, keyMap[key]));
}
}
if (!isDefined(value)) {
@@ -123,7 +125,7 @@ const putItemsHandler = (message, destination) => {
}
if (key.toUpperCase() !== 'ITEM_ID') {
// itemId is not allowed inside properties
- outputItem.properties[_.camelCase(key)] = value;
+ outputItem.properties[lodash.camelCase(key)] = value;
} else {
outputItem.itemId = String(value);
}
@@ -185,7 +187,7 @@ const identifyRequestHandler = (message, destination, eventOperation) => {
}
if (key.toUpperCase() !== 'USER_ID') {
// userId is not allowed inside properties
- outputUser.properties[_.camelCase(key)] = value;
+ outputUser.properties[lodash.camelCase(key)] = value;
}
});
if (!outputUser.userId) {
diff --git a/src/v0/destinations/pinterest_tag/transform.js b/src/v0/destinations/pinterest_tag/transform.js
index 15efd63436d..ee7e2e5b192 100644
--- a/src/v0/destinations/pinterest_tag/transform.js
+++ b/src/v0/destinations/pinterest_tag/transform.js
@@ -1,4 +1,5 @@
const { get } = require('lodash');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -28,7 +29,6 @@ const {
getV5EventsEndpoint,
API_VERSION,
} = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
const responseBuilderSimple = (finalPayload, { Config }) => {
const { apiVersion = API_VERSION.v3, adAccountId, conversionToken, sendAsTestEvent } = Config;
diff --git a/src/v0/destinations/pinterest_tag/utils.js b/src/v0/destinations/pinterest_tag/utils.js
index c8ca8dabad5..c1493e9dbd5 100644
--- a/src/v0/destinations/pinterest_tag/utils.js
+++ b/src/v0/destinations/pinterest_tag/utils.js
@@ -1,5 +1,6 @@
/* eslint-disable no-param-reassign */
const sha256 = require('sha256');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
constructPayload,
@@ -8,7 +9,6 @@ const {
getHashFromArrayWithDuplicate,
removeUndefinedAndNullValues,
} = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { COMMON_CONFIGS, CUSTOM_CONFIGS, API_VERSION } = require('./config');
const VALID_ACTION_SOURCES = ['app_android', 'app_ios', 'web', 'offline'];
@@ -165,7 +165,7 @@ const convertToSnakeCase = (eventName) =>
const deduceTrackScreenEventName = (message, Config) => {
let eventName;
const { event, name } = message;
- const { apiVersion = API_VERSION.v3, eventsMapping, sendAsCustomEvent } = Config;
+ const { eventsMapping, sendAsCustomEvent } = Config;
const trackEventOrScreenName = event || name;
if (!trackEventOrScreenName) {
throw new InstrumentationError('event_name could not be mapped. Aborting');
@@ -209,17 +209,11 @@ const deduceTrackScreenEventName = (message, Config) => {
return ['custom'];
}
- if (apiVersion === API_VERSION.v3) {
- /*
- Step 4: In case both of the above stated cases fail, will send the event name as it is.
- This is going to be reflected as "unknown" event in conversion API dashboard.
- */
- return [trackEventOrScreenName];
- }
-
- throw new ConfigurationError(
- `${event} is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting`,
- );
+ /*
+ Step 4: In case all of the above stated cases failed, will send the event name as it is.
+ This is going to be reflected as "unknown" event in conversion API dashboard.
+ */
+ return [trackEventOrScreenName];
};
/**
diff --git a/src/v0/destinations/pinterest_tag/utils.test.js b/src/v0/destinations/pinterest_tag/utils.test.js
index 717410f0bff..6b4cef95677 100644
--- a/src/v0/destinations/pinterest_tag/utils.test.js
+++ b/src/v0/destinations/pinterest_tag/utils.test.js
@@ -6,8 +6,8 @@ const userFields = [
ph: '+1234589947',
ge: 'male',
db: '19960314',
- ln: 'Ganguly',
- fn: 'Shrouti',
+ ln: 'Rudderlabs',
+ fn: 'Test',
ct: 'Kolkata',
st: 'WB',
zp: '700114',
@@ -20,10 +20,10 @@ const userFields = [
{
em: ['abc@gmail.com', 'def@gmail.com'],
ph: ['+1234589947', '+1234589948'],
- ln: ['Ganguly', 'Xu'],
+ ln: ['Rudderlabs', 'Xu'],
db: ['19960314', '19960315'],
ge: ['female', 'male'],
- fn: ['Shrouti', 'Alex'],
+ fn: ['Test', 'Alex'],
ct: ['Kolkata', 'Mumbai'],
st: ['WB', 'MH'],
zp: ['700114', '700115'],
@@ -39,8 +39,8 @@ const expectedOutput = [
{
em: ['48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08'],
ph: ['d164bbe036663cb5c96835e9ccc6501e9a521127ea62f6359744928ba932413b'],
- ln: ['b507b6eb07a0166a64a6c06f5c684c732116d2b9c966e1176c3d7fcc1295bcc8'],
- fn: ['d03a692ebd9ab84a8147d666baf05673c8113fa436f92e658a25ee306f383776'],
+ ln: ['dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'],
+ fn: ['9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'],
ct: ['6689106ca7922c30b2fd2c175c85bc7fc2d52cc4941bdd7bb622c6cdc6284a85'],
st: ['3b45022ab36728cdae12e709e945bba267c50ee8a91e6e4388539a8e03a3fdcd'],
zp: ['1a4292e00780e18d00e76fde9850aee5344e939ba593333cd5e4b4aa2cd33b0c'],
@@ -62,7 +62,7 @@ const expectedOutput = [
'22bdde2594851294f2a6f4c34af704e68b398b03129ea9ceb58f0ffe33f6db52',
],
ln: [
- 'b507b6eb07a0166a64a6c06f5c684c732116d2b9c966e1176c3d7fcc1295bcc8',
+ 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251',
'9c2f138690fca4890c3c4a6691610fbbbdf32091cc001f7355cfdf574baa52b9',
],
db: [
@@ -74,7 +74,7 @@ const expectedOutput = [
'0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf',
],
fn: [
- 'd03a692ebd9ab84a8147d666baf05673c8113fa436f92e658a25ee306f383776',
+ '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',
'4135aa9dc1b842a653dea846903ddb95bfb8c5a10c504a7fa16e10bc31d1fdf0',
],
ct: [
diff --git a/src/v0/destinations/postgres/transform.test.js b/src/v0/destinations/postgres/transform.test.js
new file mode 100644
index 00000000000..9256d5bcde3
--- /dev/null
+++ b/src/v0/destinations/postgres/transform.test.js
@@ -0,0 +1,48 @@
+const { getDataType } = require('../../../../src/warehouse/index');
+const { getDataTypeOverride } = require('./transform');
+
+const testCases = [
+ {
+ name: 'normalInt',
+ data: 1,
+ type: 'int',
+ },
+ {
+ name: 'normalFloat',
+ data: 2.01,
+ type: 'float',
+ },
+ {
+ name: 'normalBoolean',
+ data: true,
+ type: 'boolean',
+ },
+ {
+ name: 'normalString',
+ data: 'postgres transformation[*007}',
+ type: 'string',
+ },
+ {
+ name: 'violationErrors',
+ data: [
+ {
+ message:
+ 'no schema for eventName : Product Purchased new, eventType : track in trackingPlanID : tp_20dfXJDpotQWHe7hMxfQfgWMZDv::1',
+ meta: {},
+ type: 'Unplanned-Event',
+ },
+ ],
+ type: 'json',
+ },
+];
+
+describe('Postgres data types testing', () => {
+ const options = {};
+ options.getDataTypeOverride = getDataTypeOverride;
+ testCases.forEach((testCase) => {
+ it(`should return data type ${testCase.type} for this input data ${testCase.data} everytime`, () => {
+ const dataType = getDataType(testCase.name, testCase.data, options);
+ expect(dataType).toEqual(testCase.type);
+ });
+ });
+});
diff --git a/src/v0/destinations/posthog/transform.js b/src/v0/destinations/posthog/transform.js
index 0bdb9e1fea3..62a2f267834 100644
--- a/src/v0/destinations/posthog/transform.js
+++ b/src/v0/destinations/posthog/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { DEFAULT_BASE_ENDPOINT, CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const {
@@ -14,7 +15,6 @@ const {
removeUndefinedAndNullValues,
simpleProcessRouterDest,
} = require('../../util');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
// Logic To match destination Property key that is in Rudder Stack Properties Object.
@@ -83,6 +83,10 @@ const responseBuilderSimple = (message, category, destination) => {
throw new TransformationError(ErrorMessage.FailedToConstructPayload);
}
+ if (!payload.timestamp && isDefinedAndNotNull(payload.properties?.timestamp)) {
+ payload.timestamp = payload.properties.timestamp;
+ }
+
payload.properties = {
...generatePropertyDefination(message),
...payload.properties,
diff --git a/src/v0/destinations/profitwell/transform.js b/src/v0/destinations/profitwell/transform.js
index 70de193fbd2..58449fd9c1a 100644
--- a/src/v0/destinations/profitwell/transform.js
+++ b/src/v0/destinations/profitwell/transform.js
@@ -1,3 +1,8 @@
+const {
+ NetworkError,
+ ConfigurationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
getSubscriptionHistory,
@@ -15,7 +20,6 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { BASE_ENDPOINT, createPayloadMapping } = require('./config');
-const { NetworkError, ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/profitwell/utils.js b/src/v0/destinations/profitwell/utils.js
index d7a3562126c..acc4db20353 100644
--- a/src/v0/destinations/profitwell/utils.js
+++ b/src/v0/destinations/profitwell/utils.js
@@ -1,4 +1,8 @@
const get = require('get-value');
+const {
+ InstrumentationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { httpGET } = require('../../../adapters/network');
const {
toUnixTimestamp,
@@ -11,7 +15,6 @@ const {
constructPayload,
} = require('../../util');
const { BASE_ENDPOINT, createPayloadMapping, updatePayloadMapping } = require('./config');
-const { InstrumentationError, NetworkInstrumentationError } = require('../../util/errorTypes');
const CURRENCY_CODES = [
'aed',
diff --git a/src/v0/destinations/profitwell/utils.test.js b/src/v0/destinations/profitwell/utils.test.js
index 7b954fc02df..d6fa5e7df0f 100644
--- a/src/v0/destinations/profitwell/utils.test.js
+++ b/src/v0/destinations/profitwell/utils.test.js
@@ -65,7 +65,7 @@ describe('profitwell utils test cases', () => {
},
endpoint: 'https://api.profitwell.com/v2/subscriptions/testId/',
files: {},
- headers: { Authorization: 'testApiKey', 'Content-Type': 'application/json' },
+ headers: { Authorization: 'dummyApiKey', 'Content-Type': 'application/json' },
method: 'PUT',
params: {},
type: 'REST',
@@ -73,7 +73,7 @@ describe('profitwell utils test cases', () => {
};
expect(
createResponseForSubscribedUser(getTestMessage(), 'testId', 'testAlias', {
- privateApiKey: 'testApiKey',
+ privateApiKey: 'dummyApiKey',
}),
).toEqual(expectedOutput);
});
@@ -83,7 +83,7 @@ describe('profitwell utils test cases', () => {
fittingPayload.traits.effectiveDate = '2019-10-15T09:35:31.288Z';
expect(() =>
createResponseForSubscribedUser(fittingPayload, 'testId', 'testAlias', {
- privateApiKey: 'testApiKey',
+ privateApiKey: 'dummyApiKey',
}),
).toThrow('Invalid timestamp format for effectiveDate. Aborting');
});
@@ -108,7 +108,7 @@ describe('profitwell utils test cases', () => {
},
endpoint: 'https://api.profitwell.com/v2/subscriptions/',
files: {},
- headers: { Authorization: 'testApiKey', 'Content-Type': 'application/json' },
+ headers: { Authorization: 'dummyApiKey', 'Content-Type': 'application/json' },
method: 'POST',
params: {},
type: 'REST',
@@ -116,7 +116,7 @@ describe('profitwell utils test cases', () => {
};
expect(
createMissingSubscriptionResponse('testId', 'testAlias', null, null, getTestMessage(), {
- privateApiKey: 'testApiKey',
+ privateApiKey: 'dummyApiKey',
}),
).toEqual(expectedOutput);
});
@@ -126,7 +126,7 @@ describe('profitwell utils test cases', () => {
fittingPayload.traits.planInterval = 'test';
expect(() =>
createMissingSubscriptionResponse('testId', 'testAlias', null, null, fittingPayload, {
- privateApiKey: 'testApiKey',
+ privateApiKey: 'dummyApiKey',
}),
).toThrow('invalid format for planInterval. Aborting');
});
@@ -136,7 +136,7 @@ describe('profitwell utils test cases', () => {
fittingPayload.traits.planInterval = 'test';
expect(() =>
createMissingSubscriptionResponse('testId', 'testAlias', 124, fittingPayload, {
- privateApiKey: 'testApiKey',
+ privateApiKey: 'dummyApiKey',
}),
).toThrow('Profitwell subscription_id not found');
});
diff --git a/src/v0/destinations/reddit/networkHandler.js b/src/v0/destinations/reddit/networkHandler.js
new file mode 100644
index 00000000000..836c0158592
--- /dev/null
+++ b/src/v0/destinations/reddit/networkHandler.js
@@ -0,0 +1,50 @@
+const { RetryableError } = require('@rudderstack/integrations-lib');
+const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
+const { isHttpStatusSuccess } = require('../../util/index');
+const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
+
+const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+
+const redditRespHandler = (destResponse) => {
+ const { status, response } = destResponse;
+
+ // to handle the case when authorization-token is invalid
+ if (status === 401 && response.includes('Authorization Required')) {
+ throw new RetryableError(
+ `Request failed due to ${response} 'during reddit response transformation'`,
+ 500,
+ destResponse,
+ REFRESH_TOKEN,
+ );
+ }
+};
+const responseHandler = (destinationResponse) => {
+ const message = `Request Processed Successfully`;
+ const { status } = destinationResponse;
+ if (!isHttpStatusSuccess(status)) {
+ // if error, successfully return status, message and original destination response
+ redditRespHandler(destinationResponse);
+ }
+ const { response } = destinationResponse;
+ const errorMessage =
+ response.invalid_events && Array.isArray(response.invalid_events)
+ ? response?.invalid_events[0]?.error_message
+ : null;
+ const destResp = errorMessage || destinationResponse;
+ // Mostly any error will not have a status of 2xx
+ return {
+ status,
+ message,
+ destResp,
+ };
+};
+// eslint-disable-next-line @typescript-eslint/naming-convention
+class networkHandler {
+ constructor() {
+ this.responseHandler = responseHandler;
+ this.proxy = proxyRequest;
+ this.prepareProxy = prepareProxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+ }
+}
+module.exports = { networkHandler };
diff --git a/src/v0/destinations/redis/transform.js b/src/v0/destinations/redis/transform.js
index d75385bb505..23c73f0ba40 100644
--- a/src/v0/destinations/redis/transform.js
+++ b/src/v0/destinations/redis/transform.js
@@ -1,9 +1,9 @@
-const _ = require('lodash');
+const lodash = require('lodash');
const flatten = require('flat');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { isEmpty, isObject } = require('../../util');
const { EventType } = require('../../../constants');
-const { InstrumentationError } = require('../../util/errorTypes');
// processValues:
// 1. removes keys with empty values or still an object(empty) after flattening
@@ -17,16 +17,41 @@ const processValues = (obj) => {
}
const val = obj[key];
// eslint-disable-next-line no-param-reassign
- obj[key] = _.isArray(val) ? JSON.stringify(val) : _.toString(val);
+ obj[key] = lodash.isArray(val) ? JSON.stringify(val) : lodash.toString(val);
});
};
+const isSubEventTypeProfiles = (message) => {
+ // check if profiles_model, profiles_entity, profiles_id_type are present in message.context.sources
+ const { context } = message;
+ if (!context?.sources) {
+ return false;
+ }
+ const { sources } = context;
+ return sources.profiles_entity && sources.profiles_id_type && sources.profiles_model;
+};
+
+const transformSubEventTypeProfiles = (message, workspaceId, destinationId) => {
+ // form the hash
+ const hash = `${workspaceId}:${destinationId}:${message.context.sources.profiles_entity}:${message.context.sources.profiles_id_type}:${message.userId}`;
+ const key = `${message.context.sources.profiles_model}`;
+ const value = JSON.stringify(message.traits);
+ return {
+ message: {
+ hash,
+ key,
+ value,
+ },
+ userId: message.userId,
+ };
+};
+
const process = (event) => {
- const { message, destination } = event;
+ const { message, destination, metadata } = event;
const messageType = message && message.type && message.type.toLowerCase();
if (messageType !== EventType.IDENTIFY) {
- return [];
+ throw new InstrumentationError('Only Identify calls are supported');
}
if (isEmpty(message.userId)) {
@@ -34,10 +59,16 @@ const process = (event) => {
}
const { prefix } = destination.Config;
+ const destinationId = destination.ID;
const keyPrefix = isEmpty(prefix) ? '' : `${prefix.trim()}:`;
+ if (isSubEventTypeProfiles(message)) {
+ const { workspaceId } = metadata;
+ return transformSubEventTypeProfiles(message, workspaceId, destinationId);
+ }
+
const hmap = {
- key: `${keyPrefix}user:${_.toString(message.userId)}`,
+ key: `${keyPrefix}user:${lodash.toString(message.userId)}`,
fields: {},
};
diff --git a/src/v0/destinations/refiner/transform.js b/src/v0/destinations/refiner/transform.js
index def685b597d..b891945f7fe 100644
--- a/src/v0/destinations/refiner/transform.js
+++ b/src/v0/destinations/refiner/transform.js
@@ -1,3 +1,4 @@
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
ErrorMessage,
defaultRequestConfig,
@@ -13,7 +14,6 @@ const {
identifyUserPayloadBuilder,
} = require('./utils');
const { EventType } = require('../../../constants');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = (payload, endpoint, destination) => {
if (payload) {
diff --git a/src/v0/destinations/refiner/utils.js b/src/v0/destinations/refiner/utils.js
index 109f6ff656e..5e788352ca6 100644
--- a/src/v0/destinations/refiner/utils.js
+++ b/src/v0/destinations/refiner/utils.js
@@ -1,7 +1,7 @@
const get = require('get-value');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { CONFIG_CATEGORIES } = require('./config');
const { getHashFromArray, getFieldValueFromMessage } = require('../../util');
-const { InstrumentationError } = require('../../util/errorTypes');
/**
* Validation for userId and an email
diff --git a/src/v0/destinations/revenue_cat/transform.js b/src/v0/destinations/revenue_cat/transform.js
index 5f165a92789..407cb916087 100644
--- a/src/v0/destinations/revenue_cat/transform.js
+++ b/src/v0/destinations/revenue_cat/transform.js
@@ -1,5 +1,10 @@
const set = require('set-value');
const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
constructPayload,
@@ -15,11 +20,6 @@ const {
REVENUE_CAT_IDENTIFY_EXCLUSION,
BASE_URL,
} = require('./config');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const trackResponseBuilder = async (message, category, { Config }) => {
diff --git a/src/v0/destinations/rockerbox/transform.js b/src/v0/destinations/rockerbox/transform.js
index 5369afa7e5c..3ac806e5ee6 100644
--- a/src/v0/destinations/rockerbox/transform.js
+++ b/src/v0/destinations/rockerbox/transform.js
@@ -1,4 +1,5 @@
const get = require('get-value');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
removeUndefinedAndNullValues,
@@ -9,7 +10,6 @@ const {
} = require('../../util');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG, ROCKERBOX_DEFINED_PROPERTIES } = require('./config');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilderSimple = (message, category, destination) => {
const payload = constructPayload(message, MAPPING_CONFIG[category.name]);
diff --git a/src/v0/destinations/salesforce/config.js b/src/v0/destinations/salesforce/config.js
index 6c0ccde80f7..1425bad51b2 100644
--- a/src/v0/destinations/salesforce/config.js
+++ b/src/v0/destinations/salesforce/config.js
@@ -24,6 +24,8 @@ const SF_TOKEN_REQUEST_URL = 'https://login.salesforce.com/services/oauth2/token
const SF_TOKEN_REQUEST_URL_SANDBOX = 'https://test.salesforce.com/services/oauth2/token';
const DESTINATION = 'Salesforce';
+const OAUTH = 'oauth';
+const LEGACY = 'legacy';
const mappingConfig = getMappingConfig(ConfigCategory, __dirname);
@@ -37,4 +39,6 @@ module.exports = {
ignoredContactTraits: mappingConfig[ConfigCategory.IGNORE_CONTACT.name],
ACCESS_TOKEN_CACHE_TTL,
DESTINATION,
+ OAUTH,
+ LEGACY,
};
diff --git a/src/v0/destinations/salesforce/networkHandler.js b/src/v0/destinations/salesforce/networkHandler.js
index 622d2ae731c..918084cc899 100644
--- a/src/v0/destinations/salesforce/networkHandler.js
+++ b/src/v0/destinations/salesforce/networkHandler.js
@@ -1,5 +1,6 @@
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+const { LEGACY } = require('./config');
const { salesforceResponseHandler } = require('./utils');
const responseHandler = (destinationResponse, destType) => {
@@ -9,6 +10,7 @@ const responseHandler = (destinationResponse, destType) => {
destinationResponse,
'during Salesforce Response Handling',
destinationResponse?.rudderJobMetadata?.destInfo?.authKey,
+ LEGACY,
);
// else successfully return status as 200, message and original destination response
diff --git a/src/v0/destinations/salesforce/transform.js b/src/v0/destinations/salesforce/transform.js
index c09a3b33df2..5ada9dfaa07 100644
--- a/src/v0/destinations/salesforce/transform.js
+++ b/src/v0/destinations/salesforce/transform.js
@@ -1,5 +1,9 @@
const get = require('get-value');
const cloneDeep = require('lodash/cloneDeep');
+const {
+ InstrumentationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType, MappedToDestinationKey } = require('../../../constants');
const {
SF_API_VERSION,
@@ -22,11 +26,10 @@ const {
checkInvalidRtTfEvents,
handleRtTfSingleEventError,
generateErrorObject,
+ isHttpStatusSuccess,
} = require('../../util');
-const { getAccessToken, salesforceResponseHandler } = require('./utils');
+const { salesforceResponseHandler, collectAuthorizationInfo, getAuthHeader } = require('./utils');
const { handleHttpRequest } = require('../../../adapters/network');
-const { InstrumentationError, NetworkInstrumentationError } = require('../../util/errorTypes');
-const logger = require('../../../logger');
const { JSON_MIME_TYPE } = require('../../util/constant');
// Basic response builder
@@ -39,6 +42,7 @@ function responseBuilderSimple(
authorizationData,
mapProperty,
mappedToDestination,
+ authorizationFlow,
) {
const { salesforceType, salesforceId } = salesforceMap;
@@ -85,12 +89,12 @@ function responseBuilderSimple(
}
const response = defaultRequestConfig();
- const header = {
+
+ response.method = defaultPostRequestConfig.requestMethod;
+ response.headers = {
'Content-Type': JSON_MIME_TYPE,
- Authorization: authorizationData.token,
+ ...getAuthHeader({ authorizationFlow, authorizationData }),
};
- response.method = defaultPostRequestConfig.requestMethod;
- response.headers = header;
response.body.JSON = removeUndefinedValues(rawPayload);
response.endpoint = targetEndpoint;
@@ -104,28 +108,30 @@ async function getSaleforceIdForRecord(
identifierType,
identifierValue,
destination,
+ authorizationFlow,
) {
const objSearchUrl = `${authorizationData.instanceUrl}/services/data/v${SF_API_VERSION}/parameterizedSearch/?q=${identifierValue}&sobject=${objectType}&in=${identifierType}&${objectType}.fields=id,${identifierType}`;
const { processedResponse: processedsfSearchResponse } = await handleHttpRequest(
'get',
objSearchUrl,
{
- headers: { Authorization: authorizationData.token },
+ headers: getAuthHeader({ authorizationFlow, authorizationData }),
},
{
destType: 'salesforce',
feature: 'transformation',
},
);
- if (processedsfSearchResponse.status !== 200) {
+ if (!isHttpStatusSuccess(processedsfSearchResponse.status)) {
salesforceResponseHandler(
processedsfSearchResponse,
`:- SALESFORCE SEARCH BY ID`,
destination.ID,
+ authorizationFlow,
);
}
const searchRecord = processedsfSearchResponse.response?.searchRecords?.find(
- (rec) => rec[identifierType] === identifierValue,
+ (rec) => typeof identifierValue !== 'undefined' && rec[identifierType] === `${identifierValue}`,
);
return searchRecord?.Id;
@@ -147,7 +153,12 @@ async function getSaleforceIdForRecord(
// We'll use the Salesforce Object names by removing "Salesforce-" string from the type field
//
// Default Object type will be "Lead" for backward compatibility
-async function getSalesforceIdFromPayload(message, authorizationData, destination) {
+async function getSalesforceIdFromPayload(
+ message,
+ authorizationData,
+ destination,
+ authorizationFlow,
+) {
// define default map
const salesforceMaps = [];
@@ -189,6 +200,7 @@ async function getSalesforceIdFromPayload(message, authorizationData, destinatio
identifierType,
id,
destination,
+ authorizationFlow,
);
}
@@ -210,12 +222,13 @@ async function getSalesforceIdFromPayload(message, authorizationData, destinatio
throw new InstrumentationError('Invalid Email address for Lead Objet');
}
const leadQueryUrl = `${authorizationData.instanceUrl}/services/data/v${SF_API_VERSION}/parameterizedSearch/?q=${email}&sobject=Lead&Lead.fields=id,IsConverted,ConvertedContactId,IsDeleted`;
+
// request configuration will be conditional
const { processedResponse: processedLeadQueryResponse } = await handleHttpRequest(
'get',
leadQueryUrl,
{
- headers: { Authorization: authorizationData.token },
+ headers: getAuthHeader({ authorizationFlow, authorizationData }),
},
{
destType: 'salesforce',
@@ -223,8 +236,13 @@ async function getSalesforceIdFromPayload(message, authorizationData, destinatio
},
);
- if (processedLeadQueryResponse.status !== 200) {
- salesforceResponseHandler(processedLeadQueryResponse, `:- during Lead Query`, destination.ID);
+ if (!isHttpStatusSuccess(processedLeadQueryResponse.status)) {
+ salesforceResponseHandler(
+ processedLeadQueryResponse,
+ `:- during Lead Query`,
+ destination.ID,
+ authorizationFlow,
+ );
}
if (processedLeadQueryResponse.response.searchRecords.length > 0) {
@@ -260,7 +278,7 @@ async function getSalesforceIdFromPayload(message, authorizationData, destinatio
}
// Function for handling identify events
-async function processIdentify(message, authorizationData, destination) {
+async function processIdentify(message, authorizationData, destination, authorizationFlow) {
const mapProperty =
destination.Config.mapProperty === undefined ? true : destination.Config.mapProperty;
// check the traits before hand
@@ -281,7 +299,12 @@ async function processIdentify(message, authorizationData, destination) {
const responseData = [];
// get salesforce object map
- const salesforceMaps = await getSalesforceIdFromPayload(message, authorizationData, destination);
+ const salesforceMaps = await getSalesforceIdFromPayload(
+ message,
+ authorizationData,
+ destination,
+ authorizationFlow,
+ );
// iterate over the object types found
salesforceMaps.forEach((salesforceMap) => {
@@ -293,6 +316,7 @@ async function processIdentify(message, authorizationData, destination) {
authorizationData,
mapProperty,
mappedToDestination,
+ authorizationFlow,
),
);
});
@@ -302,10 +326,10 @@ async function processIdentify(message, authorizationData, destination) {
// Generic process function which invokes specific handler functions depending on message type
// and event type where applicable
-async function processSingleMessage(message, authorizationData, destination) {
+async function processSingleMessage(message, authorizationData, destination, authorizationFlow) {
let response;
if (message.type === EventType.IDENTIFY) {
- response = await processIdentify(message, authorizationData, destination);
+ response = await processIdentify(message, authorizationData, destination, authorizationFlow);
} else {
throw new InstrumentationError(`message type ${message.type} is not supported`);
}
@@ -313,9 +337,13 @@ async function processSingleMessage(message, authorizationData, destination) {
}
async function process(event) {
- // Get the authorization header if not available
- const authorizationData = await getAccessToken(event.destination);
- const response = await processSingleMessage(event.message, authorizationData, event.destination);
+ const authInfo = await collectAuthorizationInfo(event);
+ const response = await processSingleMessage(
+ event.message,
+ authInfo.authorizationData,
+ event.destination,
+ authInfo.authorizationFlow,
+ );
return response;
}
@@ -324,10 +352,9 @@ const processRouterDest = async (inputs, reqMetadata) => {
if (errorRespEvents.length > 0) {
return errorRespEvents;
}
-
- let authorizationData;
+ let authInfo;
try {
- authorizationData = await getAccessToken(inputs[0].destination);
+ authInfo = await collectAuthorizationInfo(inputs[0]);
} catch (error) {
const errObj = generateErrorObject(error);
const respEvents = getErrorRespEvents(
@@ -349,7 +376,12 @@ const processRouterDest = async (inputs, reqMetadata) => {
// unprocessed payload
return getSuccessRespEvents(
- await processSingleMessage(input.message, authorizationData, input.destination),
+ await processSingleMessage(
+ input.message,
+ authInfo.authorizationData,
+ input.destination,
+ authInfo.authorizationFlow,
+ ),
[input.metadata],
input.destination,
);
diff --git a/src/v0/destinations/salesforce/utils.js b/src/v0/destinations/salesforce/utils.js
index 295578c9294..96735ecc174 100644
--- a/src/v0/destinations/salesforce/utils.js
+++ b/src/v0/destinations/salesforce/utils.js
@@ -1,12 +1,18 @@
+const { RetryableError, ThrottledError, AbortedError } = require('@rudderstack/integrations-lib');
const { handleHttpRequest } = require('../../../adapters/network');
-const { isHttpStatusSuccess } = require('../../util');
+const {
+ isHttpStatusSuccess,
+ getAuthErrCategoryFromStCode,
+ isDefinedAndNotNull,
+} = require('../../util');
const Cache = require('../../util/cache');
-const { RetryableError, ThrottledError, AbortedError } = require('../../util/errorTypes');
const {
ACCESS_TOKEN_CACHE_TTL,
SF_TOKEN_REQUEST_URL_SANDBOX,
SF_TOKEN_REQUEST_URL,
DESTINATION,
+ LEGACY,
+ OAUTH,
} = require('./config');
const ACCESS_TOKEN_CACHE = new Cache(ACCESS_TOKEN_CACHE_TTL);
@@ -19,7 +25,7 @@ const ACCESS_TOKEN_CACHE = new Cache(ACCESS_TOKEN_CACHE_TTL);
* @param {*} stage
* @param {String} authKey
*/
-const salesforceResponseHandler = (destResponse, sourceMessage, authKey) => {
+const salesforceResponseHandler = (destResponse, sourceMessage, authKey, authorizationFlow) => {
const { status, response } = destResponse;
// if the response from destination is not a success case build an explicit error
@@ -27,6 +33,14 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey) => {
const matchErrorCode = (errorCode) =>
response && Array.isArray(response) && response.some((resp) => resp?.errorCode === errorCode);
if (status === 401 && authKey && matchErrorCode('INVALID_SESSION_ID')) {
+ if (authorizationFlow === OAUTH) {
+ throw new RetryableError(
+ `${DESTINATION} Request Failed - due to "INVALID_SESSION_ID", (Retryable) ${sourceMessage}`,
+ 500,
+ destResponse,
+ getAuthErrCategoryFromStCode(status),
+ );
+ }
// checking for invalid/expired token errors and evicting cache in that case
// rudderJobMetadata contains some destination info which is being used to evict the cache
ACCESS_TOKEN_CACHE.del(authKey);
@@ -41,6 +55,18 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey) => {
`${DESTINATION} Request Failed - due to "REQUEST_LIMIT_EXCEEDED", (Throttled) ${sourceMessage}`,
destResponse,
);
+ } else if (
+ status === 400 &&
+ matchErrorCode('CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY') &&
+ response?.message?.includes('UNABLE_TO_LOCK_ROW')
+ ) {
+ // handling the error case where the record is locked by another background job
+ // this is a retryable error
+ throw new RetryableError(
+ `${DESTINATION} Request Failed - "Row locked due to another background running on the same object", (Retryable) ${sourceMessage}`,
+ 500,
+ destResponse,
+ );
} else if (status === 503 || status === 500) {
// The salesforce server is unavailable to handle the request. Typically this occurs if the server is down
// for maintenance or is currently overloaded.
@@ -77,6 +103,11 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey) => {
* @param {*} destination
* @returns
*/
+const getAccessTokenOauth = (metadata) => ({
+ token: metadata.secret?.access_token,
+ instanceUrl: metadata.secret?.instance_url,
+});
+
const getAccessToken = async (destination) => {
const accessTokenKey = destination.ID;
@@ -110,6 +141,7 @@ const getAccessToken = async (destination) => {
processedResponse,
`:- authentication failed during fetching access token.`,
accessTokenKey,
+ LEGACY,
);
}
const token = httpResponse.response.data;
@@ -119,6 +151,7 @@ const getAccessToken = async (destination) => {
processedResponse,
`:- authentication failed could not retrieve authorization token.`,
accessTokenKey,
+ LEGACY,
);
}
return {
@@ -128,4 +161,30 @@ const getAccessToken = async (destination) => {
});
};
-module.exports = { getAccessToken, salesforceResponseHandler };
+const collectAuthorizationInfo = async (event) => {
+ let authorizationFlow;
+ let authorizationData;
+ if (isDefinedAndNotNull(event.metadata?.secret)) {
+ authorizationFlow = OAUTH;
+ authorizationData = getAccessTokenOauth(event.metadata);
+ } else {
+ authorizationFlow = LEGACY;
+ authorizationData = await getAccessToken(event.destination);
+ }
+ return { authorizationFlow, authorizationData };
+};
+
+const getAuthHeader = (authInfo) => {
+ const { authorizationFlow, authorizationData } = authInfo;
+ return authorizationFlow === OAUTH
+ ? { Authorization: `Bearer ${authorizationData.token}` }
+ : { Authorization: authorizationData.token };
+};
+
+module.exports = {
+ getAccessTokenOauth,
+ salesforceResponseHandler,
+ getAccessToken,
+ collectAuthorizationInfo,
+ getAuthHeader,
+};
diff --git a/src/v0/destinations/salesforce_oauth/networkHandler.js b/src/v0/destinations/salesforce_oauth/networkHandler.js
new file mode 100644
index 00000000000..2bcace31c9a
--- /dev/null
+++ b/src/v0/destinations/salesforce_oauth/networkHandler.js
@@ -0,0 +1,33 @@
+const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
+const { processAxiosResponse } = require('../../../adapters/utils/networkUtils');
+const { OAUTH } = require('../salesforce/config');
+const { salesforceResponseHandler } = require('../salesforce/utils');
+
+const responseHandler = (destinationResponse, destType) => {
+ const message = `Request for destination: ${destType} Processed Successfully`;
+
+ salesforceResponseHandler(
+ destinationResponse,
+ 'during Salesforce Response Handling',
+ destinationResponse?.rudderJobMetadata?.destInfo?.authKey,
+ OAUTH,
+ );
+
+ // else successfully return status as 200, message and original destination response
+ return {
+ status: 200,
+ message,
+ destinationResponse,
+ };
+};
+
+function networkHandler() {
+ this.responseHandler = responseHandler;
+ this.proxy = proxyRequest;
+ this.prepareProxy = prepareProxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+}
+
+module.exports = {
+ networkHandler,
+};
diff --git a/src/v0/destinations/sendgrid/deleteUsers.js b/src/v0/destinations/sendgrid/deleteUsers.js
index e93fefa59ee..8410f41296f 100644
--- a/src/v0/destinations/sendgrid/deleteUsers.js
+++ b/src/v0/destinations/sendgrid/deleteUsers.js
@@ -1,3 +1,4 @@
+const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { httpDELETE } = require('../../../adapters/network');
const { delIdUrlLimit, DELETE_CONTACTS_ENDPOINT } = require('./config');
const {
@@ -5,7 +6,6 @@ const {
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { isHttpStatusSuccess } = require('../../util');
-const { NetworkError, ConfigurationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { executeCommonValidations } = require('../../util/regulation-api');
diff --git a/src/v0/destinations/sendgrid/transform.js b/src/v0/destinations/sendgrid/transform.js
index 0f944e5f28f..5038fedf7b7 100644
--- a/src/v0/destinations/sendgrid/transform.js
+++ b/src/v0/destinations/sendgrid/transform.js
@@ -1,4 +1,9 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
ErrorMessage,
@@ -34,11 +39,6 @@ const {
generatePayloadFromConfig,
createOrUpdateContactPayloadBuilder,
} = require('./util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, method, endpoint, apiKey) => {
@@ -211,10 +211,13 @@ const batchEvents = (successRespList) => {
"contactListIds3": [{message : {}, metadata : {}, destination: {}}],
"contactListIds4": [{message : {}, metadata : {}, destination: {}}]
*/
- const eventGroups = _.groupBy(identifyCalls, (event) => event.message.body.JSON.contactListIds);
+ const eventGroups = lodash.groupBy(
+ identifyCalls,
+ (event) => event.message.body.JSON.contactListIds,
+ );
Object.keys(eventGroups).forEach((combination) => {
- const eventChunks = _.chunk(eventGroups[combination], MAX_BATCH_SIZE);
+ const eventChunks = lodash.chunk(eventGroups[combination], MAX_BATCH_SIZE);
// eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..]
eventChunks.forEach((chunk) => {
const batchEventResponse = generateBatchedPaylaodForArray(chunk, combination);
diff --git a/src/v0/destinations/sendgrid/util.js b/src/v0/destinations/sendgrid/util.js
index fad227a65be..1df34bfe69d 100644
--- a/src/v0/destinations/sendgrid/util.js
+++ b/src/v0/destinations/sendgrid/util.js
@@ -1,4 +1,9 @@
const get = require('get-value');
+const {
+ NetworkError,
+ ConfigurationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const logger = require('../../../logger');
const {
isEmpty,
@@ -21,7 +26,6 @@ const {
processAxiosResponse,
} = require('../../../adapters/utils/networkUtils');
const { httpGET } = require('../../../adapters/network');
-const { NetworkError, ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { AUTH_CACHE_TTL, JSON_MIME_TYPE } = require('../../util/constant');
const { MAPPING_CONFIG, CONFIG_CATEGORIES } = require('./config');
diff --git a/src/v0/destinations/sendinblue/transform.js b/src/v0/destinations/sendinblue/transform.js
index 8e8645f32fb..7663672f124 100644
--- a/src/v0/destinations/sendinblue/transform.js
+++ b/src/v0/destinations/sendinblue/transform.js
@@ -1,4 +1,6 @@
/* eslint-disable camelcase */
+/* eslint-disable @typescript-eslint/naming-convention */
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -24,7 +26,6 @@ const {
prepareTrackEventData,
getListIds,
} = require('./util');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = (
payload,
diff --git a/src/v0/destinations/sendinblue/util.js b/src/v0/destinations/sendinblue/util.js
index f184ee1ac15..9ad37fc9b79 100644
--- a/src/v0/destinations/sendinblue/util.js
+++ b/src/v0/destinations/sendinblue/util.js
@@ -1,3 +1,4 @@
+const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EMAIL_SUFFIX, getContactDetailsEndpoint } = require('./config');
const {
getHashFromArray,
@@ -12,7 +13,6 @@ const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, InstrumentationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/serenytics/transform.js b/src/v0/destinations/serenytics/transform.js
index ee7279e2889..ee38f7d1a1b 100644
--- a/src/v0/destinations/serenytics/transform.js
+++ b/src/v0/destinations/serenytics/transform.js
@@ -1,14 +1,14 @@
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
ErrorMessage,
simpleProcessRouterDest,
getHashFromArrayWithDuplicate,
} = require('../../util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const {
CONFIG_CATEGORIES,
diff --git a/src/v0/destinations/serenytics/utils.js b/src/v0/destinations/serenytics/utils.js
index bccce2585d0..90ce374d5a0 100644
--- a/src/v0/destinations/serenytics/utils.js
+++ b/src/v0/destinations/serenytics/utils.js
@@ -1,10 +1,10 @@
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const {
constructPayload,
extractCustomFields,
defaultRequestConfig,
defaultPostRequestConfig,
} = require('../../util');
-const { ConfigurationError } = require('../../util/errorTypes');
const { MAPPING_CONFIG } = require('./config');
const checkStorageUrl = (STORAGE_URL, messageType) => {
diff --git a/src/v0/destinations/sfmc/transform.js b/src/v0/destinations/sfmc/transform.js
index 161720b2cc6..7623d751f1a 100644
--- a/src/v0/destinations/sfmc/transform.js
+++ b/src/v0/destinations/sfmc/transform.js
@@ -1,4 +1,11 @@
/* eslint-disable no-nested-ternary */
+const {
+ NetworkError,
+ ConfigurationError,
+ InstrumentationError,
+ isDefinedAndNotNull,
+ isEmpty,
+} = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG, ENDPOINTS } = require('./config');
@@ -12,14 +19,12 @@ const {
flattenJson,
toTitleCase,
getHashFromArray,
- isEmpty,
simpleProcessRouterDest,
} = require('../../util');
const {
getDynamicErrorType,
nodeSysErrorToStatus,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -217,10 +222,22 @@ const responseBuilderSimple = async (message, category, destination) => {
}
if (category.type === 'identify' && createOrUpdateContacts) {
- throw new ConfigurationError('Creating or updating contacts is disabled');
+ throw new ConfigurationError(
+ 'Creating or updating contacts is disabled. To enable this feature set "Do Not Create or Update Contacts" to false',
+ );
}
- if (category.type === 'track' && hashMapExternalKey[message.event.toLowerCase()]) {
+ if (category.type === 'track') {
+ if (isEmpty(message.event)) {
+ throw new ConfigurationError('Event name is required for track events');
+ }
+ if (typeof message.event !== 'string') {
+ throw new ConfigurationError('Event name must be a string');
+ }
+ if (!isDefinedAndNotNull(hashMapExternalKey[message.event.toLowerCase()])) {
+ throw new ConfigurationError('Event not mapped for this track call');
+ }
+
return responseBuilderForInsertData(
message,
hashMapExternalKey[message.event.toLowerCase()],
@@ -233,7 +250,7 @@ const responseBuilderSimple = async (message, category, destination) => {
);
}
- throw new ConfigurationError('Event not mapped for this track call');
+ throw new ConfigurationError(`Event type '${category.type}' not supported`);
};
const processEvent = async (message, destination) => {
@@ -270,4 +287,4 @@ const processRouterDest = async (inputs, reqMetadata) => {
return respList;
};
-module.exports = { process, processRouterDest };
+module.exports = { process, processRouterDest, responseBuilderSimple };
diff --git a/src/v0/destinations/sfmc/transform.test.js b/src/v0/destinations/sfmc/transform.test.js
new file mode 100644
index 00000000000..c49c49017c6
--- /dev/null
+++ b/src/v0/destinations/sfmc/transform.test.js
@@ -0,0 +1,125 @@
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
+const axios = require('axios');
+const MockAxiosAdapter = require('axios-mock-adapter');
+const { responseBuilderSimple } = require('./transform');
+beforeAll(() => {
+ const mock = new MockAxiosAdapter(axios);
+ mock
+ .onPost('https://yourSubDomain.auth.marketingcloudapis.com/v2/token')
+ .reply(200, '{"access_token":"yourAuthToken"}');
+});
+
+describe('responseBuilderSimple', () => {
+ const destination = {
+ Config: {
+ clientId: 'yourClientId',
+ clientSecret: 'yourClientSecret',
+ subDomain: 'yourSubDomain',
+ createOrUpdateContacts: false,
+ externalKey: 'yourExternalKey',
+ eventToExternalKey: [{ from: 'purchase', to: 'purchaseKey' }],
+ eventToPrimaryKey: [{ from: 'purchase', to: 'primaryKey' }],
+ eventToUUID: [{ event: 'purchase', uuid: true }],
+ },
+ };
+ it('should return an array of two payloads for identify calls when createOrUpdateContacts is false', async () => {
+ const message = {
+ type: 'identify',
+ userId: '12345',
+ };
+
+ const category = {
+ type: 'identify',
+ name: 'Identify',
+ };
+
+ const response = await responseBuilderSimple(message, category, destination);
+
+ expect(response).toHaveLength(2);
+ expect(response[0]).toHaveProperty('endpoint');
+ expect(response[0]).toHaveProperty('method');
+ expect(response[0]).toHaveProperty('body.JSON');
+ expect(response[0]).toHaveProperty('headers');
+ expect(response[1]).toHaveProperty('endpoint');
+ expect(response[1]).toHaveProperty('method');
+ expect(response[1]).toHaveProperty('body.JSON');
+ expect(response[1]).toHaveProperty('headers');
+ });
+
+ // Throws an error when event name is not provided for track calls
+ it('should throw an error when event name is not provided for track calls', async () => {
+ const message = {
+ type: 'track',
+ };
+
+ const category = {
+ type: 'track',
+ name: 'Track',
+ };
+
+ try {
+ await responseBuilderSimple(message, category, destination);
+ } catch (e) {
+ expect(e).toBeInstanceOf(ConfigurationError);
+ expect(e.message).toBe('Event name is required for track events');
+ }
+ });
+
+ // Throws an error when event is not mapped for track calls
+ it('should throw an error when event is not mapped for track calls', async () => {
+ const message = {
+ type: 'track',
+ event: 'unmappedEvent',
+ };
+
+ const category = {
+ type: 'track',
+ name: 'Track',
+ };
+ try {
+ await responseBuilderSimple(message, category, destination);
+ } catch (e) {
+ expect(e).toBeInstanceOf(ConfigurationError);
+ expect(e.message).toBe('Event not mapped for this track call');
+ }
+ });
+
+ // Throws an error when event type is not supported
+ it('should throw an error when event type is not supported', async () => {
+ const message = {
+ type: 'unsupported',
+ };
+
+ const category = {
+ type: 'unsupported',
+ name: 'Unsupported',
+ };
+
+ try {
+ await responseBuilderSimple(message, category, destination);
+ } catch (e) {
+ expect(e).toBeInstanceOf(ConfigurationError);
+ expect(e.message).toBe("Event type 'unsupported' not supported");
+ }
+ });
+
+ // Returns a payload for track calls when event is mapped and event name is a string
+ it('should return a payload for track calls when event is mapped and event name is a string', async () => {
+ const message = {
+ type: 'track',
+ event: 'purchase',
+ userId: '12345',
+ };
+
+ const category = {
+ type: 'track',
+ name: 'Track',
+ };
+
+ const response = await responseBuilderSimple(message, category, destination);
+ expect(response).toHaveProperty('endpoint');
+ expect(response).toHaveProperty('method');
+ expect(response).toHaveProperty('body.JSON');
+ expect(response).toHaveProperty('headers');
+ });
+});
diff --git a/src/v0/destinations/shynet/transform.js b/src/v0/destinations/shynet/transform.js
index 833616a11ff..565c0790d52 100644
--- a/src/v0/destinations/shynet/transform.js
+++ b/src/v0/destinations/shynet/transform.js
@@ -1,4 +1,5 @@
/* eslint-disable no-underscore-dangle */
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -9,7 +10,6 @@ const {
generateUUID,
} = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const { InstrumentationError } = require('../../util/errorTypes');
const { ConfigCategory, mappingConfig } = require('./config');
diff --git a/src/v0/destinations/signl4/transform.js b/src/v0/destinations/signl4/transform.js
index 63dc10d73c7..3a8b23b630f 100644
--- a/src/v0/destinations/signl4/transform.js
+++ b/src/v0/destinations/signl4/transform.js
@@ -1,3 +1,8 @@
+const {
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+} = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { BASE_URL } = require('./config');
const { populatePayload } = require('./utils');
@@ -7,11 +12,6 @@ const {
simpleProcessRouterDest,
removeUndefinedAndNullAndEmptyValues,
} = require('../../util');
-const {
- ConfigurationError,
- TransformationError,
- InstrumentationError,
-} = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, endpoint) => {
diff --git a/src/v0/destinations/singular/transform.js b/src/v0/destinations/singular/transform.js
index 749debb0b06..ff5d18db9aa 100644
--- a/src/v0/destinations/singular/transform.js
+++ b/src/v0/destinations/singular/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { BASE_URL } = require('./config');
const {
defaultRequestConfig,
@@ -10,7 +11,6 @@ const {
generateRevenuePayloadArray,
isSessionEvent,
} = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const responseBuilderSimple = (message, { Config }) => {
const eventName = message.event;
diff --git a/src/v0/destinations/singular/util.js b/src/v0/destinations/singular/util.js
index c2a88a9c46e..4c5aeb8964a 100644
--- a/src/v0/destinations/singular/util.js
+++ b/src/v0/destinations/singular/util.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+const lodash = require('lodash');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
CONFIG_CATEGORIES,
MAPPING_CONFIG,
@@ -20,7 +21,6 @@ const {
isDefinedAndNotNull,
isAppleFamily,
} = require('../../util');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
/*
All the fields listed inside properties which are not directly mapped, will be sent to 'e' as custom event attributes
@@ -75,7 +75,7 @@ const exclusionList = {
* @param {*} eventName
*/
const isSessionEvent = (Config, eventName) => {
- const mappedSessionEvents = _.map(Config.sessionEventList, 'sessionEventName');
+ const mappedSessionEvents = lodash.map(Config.sessionEventList, 'sessionEventName');
return mappedSessionEvents.includes(eventName) || SESSIONEVENTS.includes(eventName.toLowerCase());
};
diff --git a/src/v0/destinations/slack/transform.js b/src/v0/destinations/slack/transform.js
index ee58b63dff4..41282c68877 100644
--- a/src/v0/destinations/slack/transform.js
+++ b/src/v0/destinations/slack/transform.js
@@ -1,6 +1,6 @@
-/* eslint-disable no-nested-ternary */
-/* eslint-disable no-prototype-builtins */
+/* eslint-disable no-nested-ternary, no-restricted-syntax, no-prototype-builtins */
const Handlebars = require('handlebars');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
stringifyJSON,
@@ -16,25 +16,37 @@ const {
defaultRequestConfig,
getFieldValueFromMessage,
simpleProcessRouterDest,
+ isDefinedAndNotNull,
} = require('../../util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
// build the response to be sent to backend, url encoded header is required as slack accepts payload in this format
// add the username and image for Rudder
// image currently served from prod CDN
-const buildResponse = (payloadJSON, message, destination) => {
- const endpoint = destination.Config.webhookUrl;
+const buildResponse = (
+ payloadJSON,
+ message,
+ destination,
+ channelWebhook = null,
+ sendAppNameAndIcon = true,
+) => {
+ const endpoint = channelWebhook || destination.Config.webhookUrl;
const response = defaultRequestConfig();
response.endpoint = endpoint;
response.method = defaultPostRequestConfig.requestMethod;
response.headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
response.userId = message.userId ? message.userId : message.anonymousId;
+ const payload =
+ sendAppNameAndIcon === true
+ ? JSON.stringify({
+ ...payloadJSON,
+ username: SLACK_USER_NAME,
+ icon_url: SLACK_RUDDER_IMAGE_URL,
+ })
+ : JSON.stringify({
+ ...payloadJSON,
+ });
response.body.FORM = {
- payload: JSON.stringify({
- ...payloadJSON,
- username: SLACK_USER_NAME,
- icon_url: SLACK_RUDDER_IMAGE_URL,
- }),
+ payload,
};
response.statusCode = 200;
logger.debug(response);
@@ -42,21 +54,15 @@ const buildResponse = (payloadJSON, message, destination) => {
};
const processIdentify = (message, destination) => {
- // debug(JSON.stringify(destination));
const identifyTemplateConfig = destination.Config.identifyTemplate;
const traitsList = getWhiteListedTraits(destination);
const defaultIdentifyTemplate = 'Identified {{name}}';
logger.debug('defaulTraitsList:: ', traitsList);
const uName = getName(message);
- // required traitlist ??
- /* if (!traitsList || traitsList.length == 0) {
- throw Error("traits list in config not present");
- } */
-
const template = Handlebars.compile(
(identifyTemplateConfig
- ? identifyTemplateConfig.trim().length === 0
+ ? identifyTemplateConfig.trim()?.length === 0
? undefined
: identifyTemplateConfig
: undefined) ||
@@ -69,7 +75,7 @@ const processIdentify = (message, destination) => {
logger.debug(
'identifyTemplateConfig: ',
(identifyTemplateConfig
- ? identifyTemplateConfig.trim().length === 0
+ ? identifyTemplateConfig.trim()?.length === 0
? undefined
: identifyTemplateConfig
: undefined) ||
@@ -95,18 +101,40 @@ const processIdentify = (message, destination) => {
return buildResponse({ text: resultText }, message, destination);
};
-function buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName) {
- eventChannelConfig.forEach((channelConfig) => {
- const configEventName = channelConfig.eventName
- ? channelConfig.eventName.trim().length > 0
- ? channelConfig.eventName
- : undefined
- : undefined;
- const configEventChannel = channelConfig.eventChannel
- ? channelConfig.eventChannel.trim().length > 0
- ? channelConfig.eventChannel
- : undefined
- : undefined;
+const isEventNameMatchesRegex = (eventName, regex) => eventName.match(regex)?.length > 0;
+
+const getChannelForEventName = (eventChannelSettings, eventName) => {
+ for (const channelConfig of eventChannelSettings) {
+ const configEventName =
+ channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null;
+ const channelWebhook =
+ channelConfig?.eventChannelWebhook?.length > 0 ? channelConfig.eventChannelWebhook : null;
+
+ if (configEventName && isDefinedAndNotNull(channelWebhook)) {
+ if (channelConfig.eventRegex) {
+ logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`);
+ logger.debug(
+ 'match:: ',
+ configEventName,
+ eventName,
+ eventName.match(new RegExp(configEventName, 'g')),
+ );
+ if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) {
+ return channelWebhook;
+ }
+ } else if (channelConfig.eventName === eventName) {
+ return channelWebhook;
+ }
+ }
+ }
+ return null;
+};
+const getChannelNameForEvent = (eventChannelSettings, eventName) => {
+ for (const channelConfig of eventChannelSettings) {
+ const configEventName =
+ channelConfig?.eventName?.trim()?.length > 0 ? channelConfig.eventName : null;
+ const configEventChannel =
+ channelConfig?.eventChannel?.trim()?.length > 0 ? channelConfig.eventChannel : null;
if (configEventName && configEventChannel) {
if (channelConfig.eventRegex) {
logger.debug('regex: ', `${configEventName} trying to match with ${eventName}`);
@@ -116,37 +144,29 @@ function buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventN
eventName,
eventName.match(new RegExp(configEventName, 'g')),
);
- if (
- eventName.match(new RegExp(configEventName, 'g')) &&
- eventName.match(new RegExp(configEventName, 'g')).length > 0
- ) {
- channelListToSendThisEvent.add(configEventChannel);
+ if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) {
+ return configEventChannel;
}
} else if (configEventName === eventName) {
- channelListToSendThisEvent.add(configEventChannel);
+ return configEventChannel;
}
}
- });
-}
+ }
+ return null;
+};
-function buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName) {
- eventTemplateConfig.forEach((templateConfig) => {
- const configEventName = templateConfig.eventName
- ? templateConfig.eventName.trim().length > 0
- ? templateConfig.eventName
- : undefined
- : undefined;
+const buildtemplateList = (templateListForThisEvent, eventTemplateSettings, eventName) => {
+ eventTemplateSettings.forEach((templateConfig) => {
+ const configEventName =
+ templateConfig?.eventName?.trim()?.length > 0 ? templateConfig.eventName : undefined;
const configEventTemplate = templateConfig.eventTemplate
- ? templateConfig.eventTemplate.trim().length > 0
+ ? templateConfig.eventTemplate.trim()?.length > 0
? templateConfig.eventTemplate
: undefined
: undefined;
if (configEventName && configEventTemplate) {
if (templateConfig.eventRegex) {
- if (
- eventName.match(new RegExp(configEventName, 'g')) &&
- eventName.match(new RegExp(configEventName, 'g')).length > 0
- ) {
+ if (isEventNameMatchesRegex(eventName, new RegExp(configEventName, 'g'))) {
templateListForThisEvent.add(configEventTemplate);
}
} else if (configEventName === eventName) {
@@ -154,32 +174,47 @@ function buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventN
}
}
});
-}
+};
const processTrack = (message, destination) => {
// logger.debug(JSON.stringify(destination));
- const eventChannelConfig = destination.Config.eventChannelSettings;
- const eventTemplateConfig = destination.Config.eventTemplateSettings;
+ const { Config } = destination;
+ const { eventChannelSettings, eventTemplateSettings, incomingWebhooksType, denyListOfEvents } =
+ Config;
+ const eventName = message.event;
- if (!message.event) {
+ if (!eventName) {
throw new InstrumentationError('Event name is required');
}
- const eventName = message.event;
- const channelListToSendThisEvent = new Set();
+ if (denyListOfEvents?.length > 0) {
+ const denyListofEvents = denyListOfEvents.map((item) => item.eventName);
+ if (denyListofEvents.includes(eventName)) {
+ throw new ConfigurationError('Event is denied. Please check configuration.');
+ }
+ }
+
const templateListForThisEvent = new Set();
const traitsList = getWhiteListedTraits(destination);
- // Add global context to regex always
- // build the channel list and templatelist for the event, pick the first in case of multiple
- // using set to filter out
- // document this behaviour
+ /* Add global context to regex always
+ * build the channel list and template list for the event, pick the first in case of multiple
+ * using set to filter out
+ * document this behaviour
+ */
- // building channel list
- buildChannelList(channelListToSendThisEvent, eventChannelConfig, eventName);
- const channelListArray = Array.from(channelListToSendThisEvent);
+ // getting specific channel for event if available
+
+ let channelWebhook;
+ let channelName;
+ if (incomingWebhooksType && incomingWebhooksType === 'modern') {
+ channelWebhook = getChannelForEventName(eventChannelSettings, eventName);
+ } else {
+ // default
+ channelName = getChannelNameForEvent(eventChannelSettings, eventName);
+ }
// building templatelist
- buildtemplateList(templateListForThisEvent, eventTemplateConfig, eventName);
+ buildtemplateList(templateListForThisEvent, eventTemplateSettings, eventName);
const templateListArray = Array.from(templateListForThisEvent);
logger.debug(
@@ -187,8 +222,6 @@ const processTrack = (message, destination) => {
templateListArray,
templateListArray.length > 0 ? templateListArray[0] : undefined,
);
- logger.debug('channelListToSendThisEvent: ', channelListArray);
-
// track event default handlebar expression
const defaultTemplate = '{{name}} did {{event}}';
const template = templateListArray
@@ -219,9 +252,16 @@ const processTrack = (message, destination) => {
} catch (err) {
throw new ConfigurationError(`Something is wrong with the event template: '${template}'`);
}
-
- if (channelListArray && channelListArray.length > 0) {
- return buildResponse({ channel: channelListArray[0], text: resultText }, message, destination);
+ if (incomingWebhooksType === 'modern' && channelWebhook) {
+ return buildResponse({ text: resultText }, message, destination, channelWebhook, false);
+ }
+ if (channelName) {
+ return buildResponse(
+ { channel: channelName, text: resultText },
+ message,
+ destination,
+ channelWebhook,
+ );
}
return buildResponse({ text: resultText }, message, destination);
};
diff --git a/src/v0/destinations/slack/util.js b/src/v0/destinations/slack/util.js
index b327d1d8677..658ffe4d374 100644
--- a/src/v0/destinations/slack/util.js
+++ b/src/v0/destinations/slack/util.js
@@ -72,8 +72,10 @@ const stringifyJSON = (json, whiteListedTraits) => {
return output;
};
-// build default identify template
-// if whitelisted traits are present build on it else build the entire traits object
+/* build default identify template
+ * if whitelisted traits are present build on it
+ * else build the entire traits object
+ */
const buildDefaultTraitTemplate = (traitsList, traits, template) => {
let generatedStringFromTemplate = template;
// build template with whitelisted traits
diff --git a/src/v0/destinations/snapchat_conversion/config.js b/src/v0/destinations/snapchat_conversion/config.js
index 1b36c0463cb..e0126ea3b1a 100644
--- a/src/v0/destinations/snapchat_conversion/config.js
+++ b/src/v0/destinations/snapchat_conversion/config.js
@@ -4,7 +4,8 @@ const ENDPOINT = 'https://tr.snapchat.com/v2/conversion';
const MAX_BATCH_SIZE = 2000;
const ConfigCategory = {
- COMMON: { name: 'SnapchatCommonConfig' },
+ DEFAULT: { name: 'SnapchatTrackDefaultConfig' },
+ TRACK_COMMON: { name: 'TrackEventCommonConfig' },
/* E-Commerce Events */
// Ref - https://www.rudderstack.com/docs/rudderstack-api/api-specification/rudderstack-ecommerce-events-specification/
/* Browsing Section */
@@ -72,7 +73,7 @@ const eventNameMapping = {
custom_event_4: 'CUSTOM_EVENT_4',
custom_event_5: 'CUSTOM_EVENT_5',
};
-
+const pageTypeToTrackEvent = 'page_view';
const mappingConfig = getMappingConfig(ConfigCategory, __dirname);
module.exports = {
@@ -80,6 +81,6 @@ module.exports = {
ConfigCategory,
eventNameMapping,
mappingConfig,
- trackCommonConfig: mappingConfig[ConfigCategory.COMMON.name],
MAX_BATCH_SIZE,
+ pageTypeToTrackEvent,
};
diff --git a/src/v0/destinations/snapchat_conversion/data/OrderCompletedConfig.json b/src/v0/destinations/snapchat_conversion/data/OrderCompletedConfig.json
index dc5696e9a4b..38e85ca2d83 100644
--- a/src/v0/destinations/snapchat_conversion/data/OrderCompletedConfig.json
+++ b/src/v0/destinations/snapchat_conversion/data/OrderCompletedConfig.json
@@ -6,7 +6,7 @@
},
{
"destKey": "item_category",
- "sourceKeys": "properties.item_category",
+ "sourceKeys": ["properties.item_category", "properties.category"],
"required": false
},
{
diff --git a/src/v0/destinations/snapchat_conversion/data/SnapchatCommonConfig.json b/src/v0/destinations/snapchat_conversion/data/SnapchatTrackDefaultConfig.json
similarity index 100%
rename from src/v0/destinations/snapchat_conversion/data/SnapchatCommonConfig.json
rename to src/v0/destinations/snapchat_conversion/data/SnapchatTrackDefaultConfig.json
diff --git a/src/v0/destinations/snapchat_conversion/data/TrackEventCommonConfig.json b/src/v0/destinations/snapchat_conversion/data/TrackEventCommonConfig.json
new file mode 100644
index 00000000000..42b61fd605e
--- /dev/null
+++ b/src/v0/destinations/snapchat_conversion/data/TrackEventCommonConfig.json
@@ -0,0 +1,90 @@
+[
+ {
+ "destKey": "description",
+ "sourceKeys": "properties.description",
+ "required": false
+ },
+ {
+ "destKey": "brands",
+ "sourceKeys": "properties.brands",
+ "required": false,
+ "metadata": {
+ "type": "IsArray"
+ }
+ },
+ {
+ "destKey": "event_tag",
+ "sourceKeys": "properties.event_tag",
+ "required": false
+ },
+ {
+ "destKey": "click_id",
+ "sourceKeys": "properties.click_id",
+ "required": false
+ },
+ {
+ "destKey": "level",
+ "sourceKeys": "properties.level",
+ "required": false
+ },
+ {
+ "destKey": "uuid_c1",
+ "sourceKeys": "properties.uuid_c1",
+ "required": false
+ },
+ {
+ "destKey": "customer_status",
+ "sourceKeys": "properties.customer_status",
+ "required": false
+ },
+ {
+ "destKey": "data",
+ "sourceKeys": "properties.data",
+ "required": false
+ },
+ {
+ "destKey": "att_status",
+ "sourceKeys": "properties.att_status",
+ "required": false
+ },
+ {
+ "destKey": "sign_up_method",
+ "sourceKeys": "properties.sign_up_method",
+ "required": false
+ },
+ {
+ "destKey": "advertiser_cookie_1",
+ "sourceKeys": "properties.advertiser_cookie_1",
+ "required": false
+ },
+ {
+ "destKey": "delivery_method",
+ "sourceKeys": "properties.delivery_method",
+ "required": false
+ },
+ {
+ "sourceKeys": "context.device.model",
+ "destKey": "device_model",
+ "required": false
+ },
+ {
+ "sourceKeys": "country",
+ "destKey": "country",
+ "sourceFromGenericMap": true,
+ "required": false
+ },
+ {
+ "sourceKeys": "region",
+ "destKey": "region",
+ "sourceFromGenericMap": true,
+ "required": false
+ },
+ {
+ "sourceKeys": "context.userAgent",
+ "destKey": "user_agent",
+ "metadata": {
+ "type": "toLower"
+ },
+ "required": false
+ }
+]
diff --git a/src/v0/destinations/snapchat_conversion/transform.js b/src/v0/destinations/snapchat_conversion/transform.js
index ca489f54600..37d321a468d 100644
--- a/src/v0/destinations/snapchat_conversion/transform.js
+++ b/src/v0/destinations/snapchat_conversion/transform.js
@@ -1,5 +1,6 @@
const get = require('get-value');
const moment = require('moment');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
@@ -21,6 +22,7 @@ const {
mappingConfig,
ConfigCategory,
MAX_BATCH_SIZE,
+ pageTypeToTrackEvent,
} = require('./config');
const {
msUnixTimestamp,
@@ -32,7 +34,6 @@ const {
channelMapping,
generateBatchedPayloadForArray,
} = require('./util');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function buildResponse(apiKey, payload) {
@@ -46,6 +47,30 @@ function buildResponse(apiKey, payload) {
response.body.JSON = removeUndefinedAndNullValues(payload);
return response;
}
+const populateHashedTraitsValues = (payload, message) => {
+ const firstName = getFieldValueFromMessage(message, 'firstName');
+ const lastName = getFieldValueFromMessage(message, 'lastName');
+ const middleName = getFieldValueFromMessage(message, 'middleName');
+ const city = getFieldValueFromMessage(message, 'city');
+ const state = getFieldValueFromMessage(message, 'state');
+ const zip = getFieldValueFromMessage(message, 'zipcode');
+ const updatedPayload = {
+ ...payload,
+ hashed_first_name_sha: firstName
+ ? getHashedValue(firstName.toString().toLowerCase().trim())
+ : undefined,
+ hashed_middle_name_sha: middleName
+ ? getHashedValue(middleName.toString().toLowerCase().trim())
+ : undefined,
+ hashed_last_name_sha: lastName
+ ? getHashedValue(lastName.toString().toLowerCase().trim())
+ : undefined,
+ hashed_city_sha: city ? getHashedValue(city.toString().toLowerCase().trim()) : undefined,
+ hashed_zip: zip ? getHashedValue(zip.toString().toLowerCase().trim()) : undefined,
+ hashed_state_sha: state ? getHashedValue(state.toString().toLowerCase().trim()) : undefined,
+ };
+ return updatedPayload;
+};
/**
* Seperate out hashing operations into one function
@@ -53,12 +78,12 @@ function buildResponse(apiKey, payload) {
* @param {*} message
* @returns updatedPayload
*/
-function populateHashedValues(payload, message) {
- const updatedPayload = payload;
+const populateHashedValues = (payload, message) => {
const email = getFieldValueFromMessage(message, 'email');
const phone = getNormalizedPhoneNumber(message);
const ip = message.context?.ip || message.request_ip;
+ const updatedPayload = populateHashedTraitsValues(payload, message);
if (email) {
updatedPayload.hashed_email = getHashedValue(email.toString().toLowerCase().trim());
}
@@ -84,14 +109,59 @@ function populateHashedValues(payload, message) {
);
}
return updatedPayload;
-}
+};
+const getEventCommonProperties = (message) =>
+ constructPayload(message, mappingConfig[ConfigCategory.TRACK_COMMON.name]);
+const validateEventConfiguration = (eventConversionType, pixelId, snapAppId, appId) => {
+ if ((eventConversionType === 'WEB' || eventConversionType === 'OFFLINE') && !pixelId) {
+ throw new ConfigurationError('Pixel Id is required for web and offline events');
+ }
-// Returns the response for the track event after constructing the payload and setting necessary fields
-function trackResponseBuilder(message, { Config }, mappedEvent) {
- let payload = {};
- const event = mappedEvent.trim().replace(/\s+/g, '_');
+ if (eventConversionType === 'MOBILE_APP' && !(appId && snapAppId)) {
+ let requiredId = 'App Id';
+ if (!snapAppId) {
+ requiredId = 'Snap App Id';
+ }
+ throw new ConfigurationError(`${requiredId} is required for app events`);
+ }
+};
+const validateRequiredFields = (payload) => {
+ if (
+ !payload.hashed_email &&
+ !payload.hashed_phone_number &&
+ !payload.hashed_mobile_ad_id &&
+ !(payload.hashed_ip_address && payload.user_agent)
+ ) {
+ throw new InstrumentationError(
+ 'At least one of email or phone or advertisingId or ip and userAgent is required',
+ );
+ }
+};
+const addSpecificEventDetails = (
+ message,
+ payload,
+ eventConversionType,
+ pixelId,
+ snapAppId,
+ appId,
+) => {
+ const updatedPayload = { ...payload };
+ if (eventConversionType === 'WEB') {
+ updatedPayload.pixel_id = pixelId;
+ updatedPayload.page_url = getFieldValueFromMessage(message, 'pageUrl');
+ }
- const { apiKey, pixelId, snapAppId, appId, deduplicationKey, enableDeduplication } = Config;
+ if (eventConversionType === 'MOBILE_APP') {
+ updatedPayload.snap_app_id = snapAppId;
+ updatedPayload.app_id = appId;
+ }
+
+ if (eventConversionType === 'OFFLINE') {
+ updatedPayload.pixel_id = pixelId;
+ }
+ return updatedPayload;
+};
+const getEventConversionType = (message) => {
const channel = get(message, 'channel');
let eventConversionType = message?.properties?.eventConversionType;
if (
@@ -104,18 +174,16 @@ function trackResponseBuilder(message, { Config }, mappedEvent) {
} else {
eventConversionType = 'OFFLINE';
}
+ return eventConversionType;
+};
- if ((eventConversionType === 'WEB' || eventConversionType === 'OFFLINE') && !pixelId) {
- throw new ConfigurationError('Pixel Id is required for web and offline events');
- }
-
- if (eventConversionType === 'MOBILE_APP' && !(appId && snapAppId)) {
- if (!appId) {
- throw new ConfigurationError('App Id is required for app events');
- } else {
- throw new ConfigurationError('Snap App Id is required for app events');
- }
- }
+// Returns the response for the track event after constructing the payload and setting necessary fields
+const trackResponseBuilder = (message, { Config }, mappedEvent) => {
+ let payload = {};
+ const event = mappedEvent.trim().replace(/\s+/g, '_');
+ const eventConversionType = getEventConversionType(message);
+ const { apiKey, pixelId, snapAppId, appId, deduplicationKey, enableDeduplication } = Config;
+ validateEventConfiguration(eventConversionType, pixelId, snapAppId, appId);
if (eventNameMapping[event.toLowerCase()]) {
// Snapchat standard events
@@ -183,7 +251,7 @@ function trackResponseBuilder(message, { Config }, mappedEvent) {
payload.event_type = eventNameMapping[event.toLowerCase()];
break;
default:
- payload = constructPayload(message, mappingConfig[ConfigCategory.COMMON.name]);
+ payload = constructPayload(message, mappingConfig[ConfigCategory.DEFAULT.name]);
payload.event_type = eventNameMapping[event.toLowerCase()];
break;
}
@@ -191,21 +259,9 @@ function trackResponseBuilder(message, { Config }, mappedEvent) {
throw new InstrumentationError(`Event ${event} doesn't match with Snapchat Events!`);
}
- payload.event_tag = get(message, 'properties.event_tag');
+ payload = { ...payload, ...getEventCommonProperties(message) };
payload = populateHashedValues(payload, message);
-
- payload.user_agent = message.context?.userAgent?.toString().toLowerCase();
-
- if (
- !payload.hashed_email &&
- !payload.hashed_phone_number &&
- !payload.hashed_mobile_ad_id &&
- !(payload.hashed_ip_address && payload.user_agent)
- ) {
- throw new InstrumentationError(
- 'At least one of email or phone or advertisingId or ip and userAgent is required',
- );
- }
+ validateRequiredFields(payload);
payload.timestamp = getFieldValueFromMessage(message, 'timestamp');
const timeStamp = payload.timestamp;
if (timeStamp) {
@@ -223,18 +279,14 @@ function trackResponseBuilder(message, { Config }, mappedEvent) {
}
payload.event_conversion_type = eventConversionType;
- if (eventConversionType === 'WEB') {
- payload.pixel_id = pixelId;
- payload.page_url = getFieldValueFromMessage(message, 'pageUrl');
- }
- if (eventConversionType === 'MOBILE_APP') {
- payload.snap_app_id = snapAppId;
- payload.app_id = appId;
- }
- if (eventConversionType === 'OFFLINE') {
- payload.pixel_id = pixelId;
- }
-
+ payload = addSpecificEventDetails(
+ message,
+ payload,
+ eventConversionType,
+ pixelId,
+ snapAppId,
+ appId,
+ );
// adding for deduplication for more than one source
if (enableDeduplication) {
const dedupId = deduplicationKey || 'messageId';
@@ -245,10 +297,10 @@ function trackResponseBuilder(message, { Config }, mappedEvent) {
// build response
const response = buildResponse(apiKey, payload);
return response;
-}
+};
// Checks if there are any mapping events for the track event and returns them
-function eventMappingHandler(message, destination) {
+const eventMappingHandler = (message, destination) => {
let event = get(message, 'event');
if (!event) {
@@ -275,18 +327,20 @@ function eventMappingHandler(message, destination) {
}
return [...mappedEvents];
-}
+};
-function process(event) {
+const process = (event) => {
const { message, destination } = event;
-
+ // const message = { ...incomingMessage };
if (!message.type) {
throw new InstrumentationError('Event type is required');
}
const messageType = message.type.toLowerCase();
let response;
- if (messageType === EventType.TRACK) {
+ if (messageType === EventType.PAGE) {
+ response = [trackResponseBuilder(message, destination, pageTypeToTrackEvent)];
+ } else if (messageType === EventType.TRACK) {
const mappedEvents = eventMappingHandler(message, destination);
if (mappedEvents.length > 0) {
response = [];
@@ -301,7 +355,7 @@ function process(event) {
throw new InstrumentationError(`Event type ${messageType} is not supported`);
}
return response;
-}
+};
const processRouterDest = async (inputs, reqMetadata) => {
const errorRespEvents = checkInvalidRtTfEvents(inputs);
diff --git a/src/v0/destinations/snapchat_custom_audience/networkHandler.js b/src/v0/destinations/snapchat_custom_audience/networkHandler.js
index 0f75d36a560..db36f6f5180 100644
--- a/src/v0/destinations/snapchat_custom_audience/networkHandler.js
+++ b/src/v0/destinations/snapchat_custom_audience/networkHandler.js
@@ -1,4 +1,5 @@
-const { removeUndefinedValues } = require('../../util');
+const { NetworkError, RetryableError, AbortedError } = require('@rudderstack/integrations-lib');
+const { removeUndefinedValues, getAuthErrCategoryFromErrDetailsAndStCode } = require('../../util');
const { prepareProxyRequest, getPayloadData, httpSend } = require('../../../adapters/network');
const { isHttpStatusSuccess } = require('../../util/index');
const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants');
@@ -7,7 +8,6 @@ const {
getDynamicErrorType,
processAxiosResponse,
} = require('../../../adapters/utils/networkUtils');
-const { NetworkError, RetryableError, AbortedError } = require('../../util/errorTypes');
const { HTTP_STATUS_CODES } = require('../../util/constant');
const prepareProxyReq = (request) => {
@@ -30,22 +30,6 @@ const prepareProxyReq = (request) => {
});
};
-/**
- * This function helps to determine type of error occurred. According to the response
- * we set authErrorCategory to take decision if we need to refresh the access_token
- * or need to disable the destination.
- * @param {*} code
- * @param {*} response
- * @returns
- */
-const getAuthErrCategory = (code, response) => {
- let authErrCategory = '';
- if (code === 401) {
- authErrCategory = !response.error?.details ? REFRESH_TOKEN : '';
- }
- return authErrCategory;
-};
-
const scAudienceProxyRequest = async (request) => {
const { endpoint, data, method, params, headers } = prepareProxyReq(request);
@@ -65,7 +49,7 @@ const scAudienceProxyRequest = async (request) => {
const scaAudienceRespHandler = (destResponse, stageMsg) => {
const { status, response } = destResponse;
- const authErrCategory = getAuthErrCategory(status, response);
+ const authErrCategory = getAuthErrCategoryFromErrDetailsAndStCode(status, response);
if (authErrCategory === REFRESH_TOKEN) {
throw new RetryableError(
diff --git a/src/v0/destinations/snapchat_custom_audience/transform.js b/src/v0/destinations/snapchat_custom_audience/transform.js
index 1c161154946..f4cbeafb56e 100644
--- a/src/v0/destinations/snapchat_custom_audience/transform.js
+++ b/src/v0/destinations/snapchat_custom_audience/transform.js
@@ -1,36 +1,16 @@
const sha256 = require('sha256');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
removeUndefinedAndNullValues,
simpleProcessRouterDest,
isDefinedAndNotNullAndNotEmpty,
+ getAccessToken,
} = require('../../util');
-const { ConfigurationError, OAuthSecretError } = require('../../util/errorTypes');
const { BASE_URL, schemaType } = require('./config');
const { validatePayload, validateFields } = require('./utils');
const { JSON_MIME_TYPE } = require('../../util/constant');
-/**
- * Get access token to be bound to the event req headers
- *
- * Note:
- * This method needs to be implemented particular to the destination
- * As the schema that we'd get in `metadata.secret` can be different
- * for different destinations
- *
- * @param {Object} metadata
- * @returns
- */
-const getAccessToken = (metadata) => {
- // OAuth for this destination
- const { secret } = metadata;
- // we would need to verify if secret is present and also if the access token field is present in secret
- if (!secret || !secret.access_token) {
- throw new OAuthSecretError('Empty/Invalid access token');
- }
- return secret.access_token;
-};
-
const generateResponse = (groupedData, schema, segmentId, metadata, type) => {
const payload = { users: [] };
const userPayload = { schema: [schema], data: groupedData };
@@ -43,7 +23,7 @@ const generateResponse = (groupedData, schema, segmentId, metadata, type) => {
response.endpoint = `${BASE_URL}/segments/${segmentId}/users`;
response.body.JSON = removeUndefinedAndNullValues(payload);
- const accessToken = getAccessToken(metadata);
+ const accessToken = getAccessToken(metadata, 'access_token');
response.headers = {
Authorization: `Bearer ${accessToken}`,
'Content-Type': JSON_MIME_TYPE,
diff --git a/src/v0/destinations/snapchat_custom_audience/utils.js b/src/v0/destinations/snapchat_custom_audience/utils.js
index 4d20b27a098..bc4a2292dae 100644
--- a/src/v0/destinations/snapchat_custom_audience/utils.js
+++ b/src/v0/destinations/snapchat_custom_audience/utils.js
@@ -1,4 +1,4 @@
-const { InstrumentationError } = require('../../util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
/**
* Verifies whether the input payload is in right format or not
diff --git a/src/v0/destinations/splitio/transform.js b/src/v0/destinations/splitio/transform.js
index 012c73a8b6c..6641a62fe8d 100644
--- a/src/v0/destinations/splitio/transform.js
+++ b/src/v0/destinations/splitio/transform.js
@@ -1,3 +1,4 @@
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
CONFIG_CATEGORIES,
MAPPING_CONFIG,
@@ -18,7 +19,6 @@ const {
simpleProcessRouterDest,
ErrorMessage,
} = require('../../util');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function responseBuilderSimple(payload, category, destination) {
diff --git a/src/v0/destinations/statsig/transform.js b/src/v0/destinations/statsig/transform.js
index 1be72d4095e..81658a255a4 100644
--- a/src/v0/destinations/statsig/transform.js
+++ b/src/v0/destinations/statsig/transform.js
@@ -1,7 +1,7 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const { defaultPostRequestConfig, defaultRequestConfig } = require('../../util');
const { ENDPOINT } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
function process(event) {
diff --git a/src/v0/destinations/stormly/transform.js b/src/v0/destinations/stormly/transform.js
index 756bfb80244..dc7a256583b 100644
--- a/src/v0/destinations/stormly/transform.js
+++ b/src/v0/destinations/stormly/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-nested-ternary */
const get = require('get-value');
const set = require('set-value');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -12,7 +13,6 @@ const {
getDestinationExternalID,
} = require('../../util');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (payload, endpoint, destination) => {
@@ -40,7 +40,8 @@ const identifyResponseBuilder = (message, destination) => {
const trackResponseBuilder = (message, destination) => {
const { endpoint, name } = CONFIG_CATEGORIES.TRACK;
- const groupId = getDestinationExternalID(message, 'stormlyGroupId') || message.properties?.groupId;
+ const groupId =
+ getDestinationExternalID(message, 'stormlyGroupId') || message.properties?.groupId;
let payload = constructPayload(message, MAPPING_CONFIG[name]);
if (groupId) {
diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json
index 05709af27a4..cc5f4886e0b 100644
--- a/src/v0/destinations/tiktok_ads/data/TikTokTrack.json
+++ b/src/v0/destinations/tiktok_ads/data/TikTokTrack.json
@@ -1,7 +1,7 @@
[
{
"destKey": "event_id",
- "sourceKeys": "properties.eventId",
+ "sourceKeys": ["properties.eventId", "properties.event_id", "messageId"],
"required": false
},
{
@@ -72,6 +72,11 @@
"sourceKeys": ["properties.context.ad", "context.ad"],
"required": false
},
+ {
+ "destKey": "context.ad.callback",
+ "sourceKeys": "properties.clickId",
+ "required": false
+ },
{
"destKey": "context.page",
"sourceKeys": ["properties.context.page", "context.page"],
diff --git a/src/v0/destinations/tiktok_ads/networkHandler.js b/src/v0/destinations/tiktok_ads/networkHandler.js
index ade33e5133b..ae93b1ec15b 100644
--- a/src/v0/destinations/tiktok_ads/networkHandler.js
+++ b/src/v0/destinations/tiktok_ads/networkHandler.js
@@ -1,10 +1,10 @@
+const { NetworkError, ThrottledError, AbortedError } = require('@rudderstack/integrations-lib');
const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network');
const {
processAxiosResponse,
getDynamicErrorType,
} = require('../../../adapters/utils/networkUtils');
const { DESTINATION } = require('./config');
-const { NetworkError, ThrottledError, AbortedError } = require('../../util/errorTypes');
const { TAG_NAMES } = require('../../util/tags');
const { HTTP_STATUS_CODES } = require('../../util/constant');
@@ -40,6 +40,7 @@ const responseHandler = (destinationResponse) => {
);
};
+// eslint-disable-next-line @typescript-eslint/naming-convention
class networkHandler {
constructor() {
this.responseHandler = responseHandler;
diff --git a/src/v0/destinations/tiktok_ads/transform.js b/src/v0/destinations/tiktok_ads/transform.js
index 6bf9cd7270c..09f0d95dccb 100644
--- a/src/v0/destinations/tiktok_ads/transform.js
+++ b/src/v0/destinations/tiktok_ads/transform.js
@@ -1,8 +1,10 @@
/* eslint-disable camelcase */
+/* eslint-disable @typescript-eslint/naming-convention */
const _ = require('lodash');
const { SHA256 } = require('crypto-js');
const get = require('get-value');
const set = require('set-value');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
constructPayload,
@@ -28,7 +30,6 @@ const {
MAX_BATCH_SIZE,
PARTNER_NAME,
} = require('./config');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const USER_EMAIL_KEY_PATH = 'context.user.email';
@@ -127,7 +128,7 @@ const getTrackResponse = (message, Config, event) => {
};
const trackResponseBuilder = async (message, { Config }) => {
- const { eventsToStandard } = Config;
+ const { eventsToStandard, sendCustomEvents } = Config;
let event = message.event?.toLowerCase().trim();
if (!event) {
@@ -136,7 +137,7 @@ const trackResponseBuilder = async (message, { Config }) => {
const standardEventsMap = getHashFromArrayWithDuplicate(eventsToStandard);
- if (eventNameMapping[event] === undefined && !standardEventsMap[event]) {
+ if (!sendCustomEvents && eventNameMapping[event] === undefined && !standardEventsMap[event]) {
throw new InstrumentationError(
`Event name (${event}) is not valid, must be mapped to one of standard events`,
);
@@ -151,10 +152,12 @@ const trackResponseBuilder = async (message, { Config }) => {
});
}
});
- } else {
- event = eventNameMapping[event];
- responseList.push(getTrackResponse(message, Config, event));
+ return responseList;
}
+ // Doc https://ads.tiktok.com/help/article/standard-events-parameters?lang=en
+ event = eventNameMapping[event] || event;
+ // if there exists no event mapping we will build payload with custom event recieved
+ responseList.push(getTrackResponse(message, Config, event));
return responseList;
};
diff --git a/src/v0/destinations/tiktok_ads/util.js b/src/v0/destinations/tiktok_ads/util.js
index 98acb794a58..4050a9fe348 100644
--- a/src/v0/destinations/tiktok_ads/util.js
+++ b/src/v0/destinations/tiktok_ads/util.js
@@ -8,6 +8,7 @@ const { removeUndefinedAndNullValues } = require('../../util');
const getContents = (message) => {
const contents = [];
const { properties } = message;
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { products, content_type, contentType } = properties;
if (products && Array.isArray(products) && products.length > 0) {
products.forEach((product) => {
diff --git a/src/v0/destinations/tiktok_ads_offline_events/transform.js b/src/v0/destinations/tiktok_ads_offline_events/transform.js
index 0ade5bbfbb8..945c31ea632 100644
--- a/src/v0/destinations/tiktok_ads_offline_events/transform.js
+++ b/src/v0/destinations/tiktok_ads_offline_events/transform.js
@@ -1,6 +1,7 @@
const { SHA256 } = require('crypto-js');
const set = require('set-value');
-const _ = require('lodash');
+const lodash = require('lodash');
+const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
constructPayload,
@@ -21,7 +22,6 @@ const {
EVENT_NAME_MAPPING,
PARTNER_NAME,
} = require('./config');
-const { ConfigurationError, InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const getContents = (message) => {
@@ -191,7 +191,7 @@ const batchEvents = (eventChunksArray) => {
// event_set_id1: [...events]
// event_set_id2: [...events]
// }
- const groupedEventChunks = _.groupBy(eventChunksArray, ({ message }) => {
+ const groupedEventChunks = lodash.groupBy(eventChunksArray, ({ message }) => {
if (Array.isArray(message)) return message[0].event_set_id;
return message.event_set_id;
});
diff --git a/src/v0/destinations/trengo/transform.js b/src/v0/destinations/trengo/transform.js
index 14d1d8c84ca..06e5496a1eb 100644
--- a/src/v0/destinations/trengo/transform.js
+++ b/src/v0/destinations/trengo/transform.js
@@ -2,6 +2,13 @@
/* eslint-disable no-prototype-builtins */
const Handlebars = require('handlebars');
const get = require('get-value');
+const {
+ NetworkError,
+ ConfigurationError,
+ TransformationError,
+ InstrumentationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { EventType } = require('../../../constants');
const { EndPoints, BASE_URL } = require('./config');
@@ -17,13 +24,6 @@ const {
getStringValueOfJSON,
ErrorMessage,
} = require('../../util');
-const {
- NetworkError,
- ConfigurationError,
- TransformationError,
- InstrumentationError,
- NetworkInstrumentationError,
-} = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/twitter_ads/transform.js b/src/v0/destinations/twitter_ads/transform.js
index 78c3379c649..268dca36366 100644
--- a/src/v0/destinations/twitter_ads/transform.js
+++ b/src/v0/destinations/twitter_ads/transform.js
@@ -1,5 +1,10 @@
const sha256 = require('sha256');
+const {
+ InstrumentationError,
+ OAuthSecretError,
+ ConfigurationError,
+} = require('@rudderstack/integrations-lib');
const {
constructPayload,
defaultRequestConfig,
@@ -9,15 +14,10 @@ const {
simpleProcessRouterDest,
} = require('../../util');
const { EventType } = require('../../../constants');
-const {
- ConfigCategories,
- mappingConfig,
- BASE_URL
-} = require('./config');
+const { ConfigCategories, mappingConfig, BASE_URL } = require('./config');
-const { InstrumentationError, OAuthSecretError, ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
-const { getAuthHeaderForRequest } = require("./util");
+const { getAuthHeaderForRequest } = require('./util');
const getOAuthFields = ({ secret }) => {
if (!secret) {
@@ -27,7 +27,7 @@ const getOAuthFields = ({ secret }) => {
consumerKey: secret.consumerKey,
consumerSecret: secret.consumerSecret,
accessToken: secret.accessToken,
- accessTokenSecret: secret.accessTokenSecret
+ accessTokenSecret: secret.accessTokenSecret,
};
return oAuthObject;
};
@@ -42,7 +42,7 @@ function buildResponse(message, requestJson, metadata, endpointUrl) {
const request = {
url: response.endpoint,
method: response.method,
- body: response.body.JSON
+ body: response.body.JSON,
};
const oAuthObject = getOAuthFields(metadata);
@@ -60,17 +60,20 @@ function prepareUrl(message, destination) {
}
function populateEventId(event, requestJson, destination) {
-
const eventNameToIdMappings = destination.Config.twitterAdsEventNames;
- let eventId = "";
+ let eventId = '';
if (eventNameToIdMappings) {
- const eventObj = eventNameToIdMappings.find(obj => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase());
+ const eventObj = eventNameToIdMappings.find(
+ (obj) => obj.rudderEventName?.trim().toLowerCase() === event?.toString().toLowerCase(),
+ );
eventId = eventObj?.twitterEventId;
}
- if(!eventId) {
- throw new ConfigurationError(`[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`);
+ if (!eventId) {
+ throw new ConfigurationError(
+ `[TWITTER ADS]: Event - '${event}' do not have a corresponding eventId in configuration. Aborting`,
+ );
}
return eventId;
@@ -79,14 +82,16 @@ function populateEventId(event, requestJson, destination) {
function populateContents(requestJson) {
const reqJson = { ...requestJson };
if (reqJson.contents) {
- const transformedContents = requestJson.contents.map(obj => ({
- ...(obj.id && { content_id: obj.id }),
- ...(obj.groupId && { content_group_id: obj.groupId }),
- ...(obj.name && { content_name: obj.name }),
- ...(obj.price && { content_price: parseFloat(obj.price) }),
- ...(obj.type && { content_type: obj.type }),
- ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) })
- })).filter(tfObj => Object.keys(tfObj).length > 0);
+ const transformedContents = requestJson.contents
+ .map((obj) => ({
+ ...(obj.id && { content_id: obj.id }),
+ ...(obj.groupId && { content_group_id: obj.groupId }),
+ ...(obj.name && { content_name: obj.name }),
+ ...(obj.price && { content_price: parseFloat(obj.price) }),
+ ...(obj.type && { content_type: obj.type }),
+ ...(obj.quantity && { num_items: parseInt(obj.quantity, 10) }),
+ }))
+ .filter((tfObj) => Object.keys(tfObj).length > 0);
if (transformedContents.length > 0) {
reqJson.contents = transformedContents;
}
@@ -96,13 +101,14 @@ function populateContents(requestJson) {
// process track call
function processTrack(message, metadata, destination) {
-
let requestJson = constructPayload(message, mappingConfig[ConfigCategories.TRACK.name]);
- requestJson.event_id = requestJson.event_id || populateEventId(message.event, requestJson, destination);
+ requestJson.event_id =
+ requestJson.event_id || populateEventId(message.event, requestJson, destination);
requestJson.conversion_time = isDefinedAndNotNull(requestJson.conversion_time)
- ? requestJson.conversion_time : message.timestamp;
+ ? requestJson.conversion_time
+ : message.timestamp;
const identifiers = [];
@@ -110,19 +116,19 @@ function processTrack(message, metadata, destination) {
let email = message.properties.email.trim();
if (email) {
email = email.toLowerCase();
- identifiers.push({hashed_email: sha256(email)})
+ identifiers.push({ hashed_email: sha256(email) });
}
}
if (message.properties.phone) {
const phone = message.properties.phone.trim();
if (phone) {
- identifiers.push({hashed_phone_number: sha256(phone)})
+ identifiers.push({ hashed_phone_number: sha256(phone) });
}
}
if (message.properties.twclid) {
- identifiers.push({twclid: sha256(message.properties.twclid)});
+ identifiers.push({ twclid: message.properties.twclid });
}
requestJson = populateContents(requestJson);
@@ -131,33 +137,26 @@ function processTrack(message, metadata, destination) {
const endpointUrl = prepareUrl(message, destination);
- return buildResponse(
- message,
- requestJson,
- metadata,
- endpointUrl
- );
+ return buildResponse(message, requestJson, metadata, endpointUrl);
}
function validateRequest(message) {
-
const { properties } = message;
if (!properties) {
throw new InstrumentationError(
- '[TWITTER ADS]: properties must be present in event. Aborting message',
+ '[TWITTER ADS]: properties must be present in event. Aborting message',
);
}
if (!properties.email && !properties.phone && !properties.twclid) {
throw new InstrumentationError(
- '[TWITTER ADS]: one of twclid, phone or email must be present in properties.',
+ '[TWITTER ADS]: one of twclid, phone or email must be present in properties.',
);
}
}
function process(event) {
-
const { message, metadata, destination } = event;
validateRequest(message);
@@ -169,7 +168,6 @@ function process(event) {
}
throw new InstrumentationError(`Message type ${messageType} not supported`);
-
}
const processRouterDest = async (inputs, reqMetadata) => {
diff --git a/src/v0/destinations/user/transform.js b/src/v0/destinations/user/transform.js
index 6cde9c9b800..ed04f5ccd4f 100644
--- a/src/v0/destinations/user/transform.js
+++ b/src/v0/destinations/user/transform.js
@@ -1,3 +1,8 @@
+const {
+ TransformationError,
+ InstrumentationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
simpleProcessRouterDest,
@@ -17,11 +22,6 @@ const {
createOrUpdateUserPayloadBuilder,
createEventOccurrencePayloadBuilder,
} = require('./utils');
-const {
- TransformationError,
- InstrumentationError,
- NetworkInstrumentationError,
-} = require('../../util/errorTypes');
const { EventType } = require('../../../constants');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/user/utils.js b/src/v0/destinations/user/utils.js
index 23dd74a30f5..41ad1735835 100644
--- a/src/v0/destinations/user/utils.js
+++ b/src/v0/destinations/user/utils.js
@@ -1,4 +1,8 @@
const get = require('get-value');
+const {
+ InstrumentationError,
+ NetworkInstrumentationError,
+} = require('@rudderstack/integrations-lib');
const {
getHashFromArray,
constructPayload,
@@ -19,7 +23,6 @@ const {
groupSourceKeys,
identifySourceKeys,
} = require('./config');
-const { InstrumentationError, NetworkInstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const ACCEPT_HEADER_VAL = '*/*;version=2';
diff --git a/src/v0/destinations/userlist/transform.js b/src/v0/destinations/userlist/transform.js
index 20b47c6a355..45d58edbbfd 100644
--- a/src/v0/destinations/userlist/transform.js
+++ b/src/v0/destinations/userlist/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -9,7 +10,6 @@ const {
const { endpoint } = require('./config');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
// ------------------------------------------------
diff --git a/src/v0/destinations/vero/transform.js b/src/v0/destinations/vero/transform.js
index 7115ea425d3..f4890566819 100644
--- a/src/v0/destinations/vero/transform.js
+++ b/src/v0/destinations/vero/transform.js
@@ -1,5 +1,6 @@
const set = require('set-value');
const get = require('get-value');
+const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
constructPayload,
@@ -11,7 +12,6 @@ const {
} = require('../../util');
const { EventType } = require('../../../constants');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
-const { InstrumentationError, ConfigurationError } = require('../../util/errorTypes');
// This function handles the common response payload for the supported calls
const responseBuilderSimple = (message, category, destination) => {
diff --git a/src/v0/destinations/webengage/transform.js b/src/v0/destinations/webengage/transform.js
index 835a486eff5..f18a7399ff1 100644
--- a/src/v0/destinations/webengage/transform.js
+++ b/src/v0/destinations/webengage/transform.js
@@ -1,4 +1,5 @@
/* eslint-disable no-param-reassign */
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
CONFIG_CATEGORIES,
@@ -15,7 +16,6 @@ const {
simpleProcessRouterDest,
extractCustomFields,
} = require('../../util');
-const { InstrumentationError, TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const responseBuilder = (message, category, { Config }) => {
diff --git a/src/v0/destinations/webhook/transform.js b/src/v0/destinations/webhook/transform.js
index a4a7617f689..6a115f1c639 100644
--- a/src/v0/destinations/webhook/transform.js
+++ b/src/v0/destinations/webhook/transform.js
@@ -1,6 +1,7 @@
/* eslint-disable no-nested-ternary */
const get = require('get-value');
const set = require('set-value');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
const {
defaultPostRequestConfig,
defaultPutRequestConfig,
@@ -17,7 +18,6 @@ const {
} = require('../../util');
const { EventType } = require('../../../constants');
-const { ConfigurationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const getPropertyParams = (message) => {
diff --git a/src/v0/destinations/woopra/transform.js b/src/v0/destinations/woopra/transform.js
index 1414cbac23e..9104884416a 100644
--- a/src/v0/destinations/woopra/transform.js
+++ b/src/v0/destinations/woopra/transform.js
@@ -1,5 +1,6 @@
/* eslint-disable no-param-reassign */
const { set, get } = require('lodash');
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const {
defaultRequestConfig,
constructPayload,
@@ -12,7 +13,6 @@ const {
const { EventType } = require('../../../constants');
const { BASE_URL, mappingConfig, ConfigCategories } = require('./config');
const { refinePayload, getEvent } = require('./utils');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = (payload, endpoint, method, projectName) => {
if (!payload) {
diff --git a/src/v0/destinations/wootric/transform.js b/src/v0/destinations/wootric/transform.js
index f89e63a5ed2..f8b4274af7f 100644
--- a/src/v0/destinations/wootric/transform.js
+++ b/src/v0/destinations/wootric/transform.js
@@ -1,3 +1,4 @@
+const { TransformationError, InstrumentationError } = require('@rudderstack/integrations-lib');
const { EventType } = require('../../../constants');
const {
defaultRequestConfig,
@@ -19,7 +20,6 @@ const {
createDeclinePayloadBuilder,
} = require('./util');
const { PROPERTIES, END_USER_PROPERTIES } = require('./config');
-const { TransformationError, InstrumentationError } = require('../../util/errorTypes');
const responseBuilder = async (payload, endpoint, method, accessToken) => {
if (payload) {
diff --git a/src/v0/destinations/wootric/util.js b/src/v0/destinations/wootric/util.js
index 207a0994bbd..fce8a66586b 100644
--- a/src/v0/destinations/wootric/util.js
+++ b/src/v0/destinations/wootric/util.js
@@ -1,4 +1,5 @@
const qs = require('qs');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
const { httpGET, httpPOST } = require('../../../adapters/network');
const {
getDynamicErrorType,
@@ -8,7 +9,6 @@ const { BASE_ENDPOINT, VERSION, ACCESS_TOKEN_CACHE_TTL_SECONDS } = require('./co
const { constructPayload, isDefinedAndNotNullAndNotEmpty } = require('../../util');
const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config');
const Cache = require('../../util/cache');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/yahoo_dsp/transform.js b/src/v0/destinations/yahoo_dsp/transform.js
index 8b0875f1a07..4cd1eee73db 100644
--- a/src/v0/destinations/yahoo_dsp/transform.js
+++ b/src/v0/destinations/yahoo_dsp/transform.js
@@ -1,3 +1,4 @@
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const {
BASE_ENDPOINT,
ENDPOINTS,
@@ -12,7 +13,6 @@ const {
} = require('../../util');
const { getAccessToken, createPayload } = require('./util');
-const { InstrumentationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
/**
diff --git a/src/v0/destinations/yahoo_dsp/util.js b/src/v0/destinations/yahoo_dsp/util.js
index f47717df513..d41716935fd 100644
--- a/src/v0/destinations/yahoo_dsp/util.js
+++ b/src/v0/destinations/yahoo_dsp/util.js
@@ -1,12 +1,12 @@
const qs = require('qs');
const sha256 = require('sha256');
+const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib');
const { generateJWTToken } = require('../../../util/jwtTokenGenerator');
-const { httpPOST } = require('../../../adapters/network');
+const { httpSend } = require('../../../adapters/network');
const { isDefinedAndNotNullAndNotEmpty } = require('../../util');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const { ACCESS_TOKEN_CACHE_TTL, AUDIENCE_ATTRIBUTE, DSP_SUPPORTED_OPERATION } = require('./config');
const Cache = require('../../util/cache');
-const { InstrumentationError, NetworkError } = require('../../util/errorTypes');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
@@ -119,7 +119,7 @@ const getAccessToken = async (destination) => {
};
const request = {
- header: {
+ headers: {
'Content-Type': 'application/x-www-form-urlencoded',
Accept: JSON_MIME_TYPE,
},
@@ -134,7 +134,7 @@ const getAccessToken = async (destination) => {
}),
method: 'POST',
};
- const dspAuthorisationData = await httpPOST(request.url, request.data, request.header, {
+ const dspAuthorisationData = await httpSend(request, {
destType: 'yahoo_dsp',
feature: 'transformation',
});
diff --git a/src/v0/destinations/zendesk/transform.js b/src/v0/destinations/zendesk/transform.js
index 869e54c2207..bf2bc01ed28 100644
--- a/src/v0/destinations/zendesk/transform.js
+++ b/src/v0/destinations/zendesk/transform.js
@@ -1,5 +1,10 @@
const get = require('get-value');
const set = require('set-value');
+const {
+ NetworkInstrumentationError,
+ InstrumentationError,
+ NetworkError,
+} = require('@rudderstack/integrations-lib');
const myAxios = require('../../../util/myAxios');
const { EventType } = require('../../../constants');
@@ -26,11 +31,6 @@ const {
const { getSourceName } = require('./util');
const logger = require('../../../logger');
const { httpGET } = require('../../../adapters/network');
-const {
- NetworkInstrumentationError,
- InstrumentationError,
- NetworkError,
-} = require('../../util/errorTypes');
const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils');
const tags = require('../../util/tags');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/destinations/zendesk/util.js b/src/v0/destinations/zendesk/util.js
index 0d03f73c19e..29f3fc0602e 100644
--- a/src/v0/destinations/zendesk/util.js
+++ b/src/v0/destinations/zendesk/util.js
@@ -1,4 +1,4 @@
-const { ConfigurationError } = require('../../util/errorTypes');
+const { ConfigurationError } = require('@rudderstack/integrations-lib');
/**
* Get source name from config or return 'Rudder' as default source name
diff --git a/src/v0/sources/appcenter/transform.js b/src/v0/sources/appcenter/transform.js
index 3a98a6db3ec..40399d92e28 100644
--- a/src/v0/sources/appcenter/transform.js
+++ b/src/v0/sources/appcenter/transform.js
@@ -1,5 +1,6 @@
const path = require('path');
const fs = require('fs');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const { generateUUID } = require('../../util');
const Message = require('../message');
@@ -7,7 +8,6 @@ const mappingJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mappin
const { removeUndefinedAndNullValues } = require('../../util');
-const { TransformationError } = require('../../util/errorTypes');
const { JSON_MIME_TYPE } = require('../../util/constant');
const processNormalEvent = (event) => {
diff --git a/src/v0/sources/appsflyer/transform.js b/src/v0/sources/appsflyer/transform.js
index 862e19acd01..1f21392b67c 100644
--- a/src/v0/sources/appsflyer/transform.js
+++ b/src/v0/sources/appsflyer/transform.js
@@ -1,8 +1,8 @@
const path = require('path');
const fs = require('fs');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const Message = require('../message');
const { generateUUID } = require('../../util');
-const { TransformationError } = require('../../util/errorTypes');
const mappingJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8'));
diff --git a/src/v0/sources/auth0/transform.js b/src/v0/sources/auth0/transform.js
index 8a0013036bc..d2721780d82 100644
--- a/src/v0/sources/auth0/transform.js
+++ b/src/v0/sources/auth0/transform.js
@@ -41,6 +41,7 @@ function processEvents(eventList) {
eventList.forEach((event) => {
let response = {};
// eslint-disable-next-line camelcase
+ // eslint-disable-next-line @typescript-eslint/naming-convention
const { data, log_id } = event;
// Dropping the event if type is not present
if (data && data.type) {
diff --git a/src/v0/sources/braze/transform.js b/src/v0/sources/braze/transform.js
index 34158c8e687..e3d72000235 100644
--- a/src/v0/sources/braze/transform.js
+++ b/src/v0/sources/braze/transform.js
@@ -2,9 +2,9 @@ const set = require('set-value');
const get = require('get-value');
const path = require('path');
const fs = require('fs');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const { formatTimeStamp, removeUndefinedAndNullValues } = require('../../util');
const Message = require('../message');
-const { TransformationError } = require('../../util/errorTypes');
// import mapping json using JSON.parse to preserve object key order
const mapping = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8'));
diff --git a/src/v0/sources/canny/transform.js b/src/v0/sources/canny/transform.js
index abc6f491b8d..9188f5ac345 100644
--- a/src/v0/sources/canny/transform.js
+++ b/src/v0/sources/canny/transform.js
@@ -1,8 +1,8 @@
const sha256 = require('sha256');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const Message = require('../message');
const { voterMapping, authorMapping, checkForRequiredFields } = require('./util');
const { logger } = require('../../../logger');
-const { TransformationError } = require('../../util/errorTypes');
const CannyOperation = {
VOTE_CREATED: 'vote.created',
diff --git a/src/v0/sources/canny/util.js b/src/v0/sources/canny/util.js
index cd92c0c2afe..549b7dcbbc3 100644
--- a/src/v0/sources/canny/util.js
+++ b/src/v0/sources/canny/util.js
@@ -1,6 +1,6 @@
const path = require('path');
const fs = require('fs');
-const { TransformationError } = require('../../util/errorTypes');
+const { TransformationError } = require('@rudderstack/integrations-lib');
// import mapping json using JSON.parse to preserve object key order
const voterMapping = JSON.parse(
diff --git a/src/v0/sources/customerio/transform.js b/src/v0/sources/customerio/transform.js
index 51c353dd3b6..a2e69388b94 100644
--- a/src/v0/sources/customerio/transform.js
+++ b/src/v0/sources/customerio/transform.js
@@ -8,7 +8,6 @@ const Message = require('../message');
const { mappingConfig } = require('./config');
const { isDefinedAndNotNull } = require('../../util');
-// const { TransformationError } = require("../../util/errorTypes");
function process(event) {
const message = new Message(`Customer.io`);
@@ -35,7 +34,6 @@ function process(event) {
message.setProperty('sentAt', validTimestamp);
}
-
// when customer.io does not pass an associated userId, set the email address as anonymousId
if (
(message.userId === null || message.userId === undefined) &&
diff --git a/src/v0/sources/gainsightpx/transform.js b/src/v0/sources/gainsightpx/transform.js
index ca91765fa66..92f0a074562 100644
--- a/src/v0/sources/gainsightpx/transform.js
+++ b/src/v0/sources/gainsightpx/transform.js
@@ -1,4 +1,5 @@
const md5 = require('md5');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const Message = require('../message');
const customMapping = require('./data/customMapping.json');
const identifyMapping = require('./data/identifyMapping.json');
@@ -9,7 +10,6 @@ const surveyMapping = require('./data/surveyMapping.json');
const featureMatchMapping = require('./data/featureMatchMapping.json');
const segmentIoMapping = require('./data/segmentIOMapping.json');
const { refinePayload, refineTraitPayload } = require('./utils');
-const { TransformationError } = require('../../util/errorTypes');
const buildIdentifyPayload = (event) => {
let message = new Message(`GAINSIGHTPX`);
diff --git a/src/v0/sources/iterable/transform.js b/src/v0/sources/iterable/transform.js
index 275051815b4..dc3fc72c3c8 100644
--- a/src/v0/sources/iterable/transform.js
+++ b/src/v0/sources/iterable/transform.js
@@ -1,8 +1,8 @@
const path = require('path');
const fs = require('fs');
const md5 = require('md5');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const Message = require('../message');
-const { TransformationError } = require('../../util/errorTypes');
// import mapping json using JSON.parse to preserve object key order
const mapping = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8'));
diff --git a/src/v0/sources/mailjet/transform.js b/src/v0/sources/mailjet/transform.js
index fcc27611bb8..d2719cc0bab 100644
--- a/src/v0/sources/mailjet/transform.js
+++ b/src/v0/sources/mailjet/transform.js
@@ -40,7 +40,7 @@ function process(event) {
}
message.context.externalId = externalId;
- if (message.userId === null || message.userId === undefined) {
+ if (!message.userId && event.email) {
// Treating userId as unique identifier
// If userId is not present, then generating it from email using md5 hash function
message.userId = md5(event.email);
diff --git a/src/v0/sources/mailmodo/transform.js b/src/v0/sources/mailmodo/transform.js
index 8b36eafa1aa..a4383fb4409 100644
--- a/src/v0/sources/mailmodo/transform.js
+++ b/src/v0/sources/mailmodo/transform.js
@@ -1,9 +1,9 @@
const path = require('path');
const fs = require('fs');
const sha256 = require('sha256');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const { flattenJson, removeUndefinedAndNullAndEmptyValues } = require('../../util');
const Message = require('../message');
-const { TransformationError } = require('../../util/errorTypes');
// import mapping json using JSON.parse to preserve object key order
const mapping = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8'));
diff --git a/src/v0/sources/monday/transform.js b/src/v0/sources/monday/transform.js
index 48cddec3014..d63323605b3 100644
--- a/src/v0/sources/monday/transform.js
+++ b/src/v0/sources/monday/transform.js
@@ -1,7 +1,7 @@
const sha256 = require('sha256');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const Message = require('../message');
const { mapping, formEventName } = require('./util');
-const { TransformationError } = require('../../util/errorTypes');
const { generateUUID, removeUndefinedAndNullValues } = require('../../util');
const { JSON_MIME_TYPE } = require('../../util/constant');
diff --git a/src/v0/sources/ortto/event_mapping.json b/src/v0/sources/ortto/event_mapping.json
new file mode 100644
index 00000000000..f2075c7cd36
--- /dev/null
+++ b/src/v0/sources/ortto/event_mapping.json
@@ -0,0 +1,95 @@
+{
+ "act::s": "Sent email",
+ "act::c": "Clicked email",
+ "act::o": "Opened email",
+ "act::r": "Received email",
+ "act::b": "Bounced email",
+ "act::sk": "Skipped email",
+ "act::rt": "Redacted email",
+ "act::f": "Forwarded email",
+ "act::i": "Invalid email",
+ "act::v": "Viewed email online",
+ "act::d": "Deferred email",
+
+ "act::ss": "Incident Triggered",
+ "act::ds": "Incident Unacknowledged",
+ "act::cs": "Service Created",
+ "act::is": "Service Deleted",
+ "act::bs": "Service Updated",
+ "act::des": "Service Updated",
+ "act::rs": "Service Updated",
+ "act::rtss": "Service Updated",
+ "act::ras": "Service Updated",
+ "act::cos": "Service Updated",
+ "act::rtns": "Service Updated",
+ "act::sf": "Submitted form",
+ "act::oos-a": "Opted out from SMS audience",
+ "act::ois-a": "Opted in to SMS audience",
+ "act::oos-all": "Opted out from all SMS",
+ "act::ros-all": "Opted in to all SMS",
+ "act::ss-ab": "SMS subscription abuse",
+ "act::scr": "SMS consent requested",
+ "act::scf": "SMS consent failed",
+
+ "act::sph": "Sent push",
+ "act::dph": "Delivered push",
+ "act::cph": "Clicked push",
+ "act::iph": "Invalid push",
+ "act::oiip-all": "Opted in to all iOS push",
+ "act::ooip-all": "Opted out of all iOS push",
+ "act::oiip-a": "Opted in to iOS push audience",
+ "act::oips-a": "Opted out of iOS push audience",
+ "act::oigp-all": "Opted in to all Android push",
+ "act::oogp-all": "Opted out of all Android push",
+ "act::oigp-a": "Opted out of Android push audience",
+ "act::oogs-a": "Opted in to Android push audience",
+ "act::oiwp-all": "Opted in to all web push",
+ "act::oowp-all": "Opted out of all web push",
+ "act::oiwp-a": "Opted in to web push audience",
+ "act::oows-a": "Opted out of to web push audience",
+ "act::iws-ab": "Web push subscription abuse",
+
+ "act::ws": "Website session",
+ "act::us": "User session",
+
+ "act::enter-audience": "Entered audience",
+ "act::leave-audience": "Left audience",
+ "act::ta": "Tag added",
+ "act::tr": "Tag removed",
+ "act::u-a": "Unsubscribe from audience",
+ "act::s-a": "Subscribe to audience",
+ "act::u-all": "Un subscribe from all email",
+ "act::s-all": "Resubscribe globally",
+ "act::s-ab": "Subscription abuse",
+
+ "act::ep": "Entered playbook",
+ "act::lp": "Left playbook",
+ "act::spa": "Successful playbook action",
+ "act::fpa": "Failed playbook action",
+
+ "act::ej": "Entered journey",
+ "act::lj": "Left journey",
+ "act::sja": "Successful journey action",
+ "act::fja": "Failed journey action",
+
+ "act::cw": "Clicked widget",
+ "act::sw": "Shown widget",
+ "act::dw": "Dismissed widget",
+ "act::rw": "Reacted to widget",
+ "act::swf": "Submitted widget form",
+ "act::rws": "Responded to widget survey",
+ "act::wwv": "Watched widget video",
+ "act::sww": "Spun widget wheel",
+
+ "act::cop": "Conversation opened",
+ "act::cro": "Conversation re-opened",
+ "act::cas": "Conversation assigned",
+ "act::clc": "Conversation closed",
+ "act::csn": "Conversation snoozed",
+ "act::crt": "Conversation rated",
+ "act::cms": "Conversation marked as spam",
+ "act::cvs": "Conversation voice call started",
+ "act::cve": "Conversation voice call ended",
+ "act::ctg": "Conversation tagged",
+ "act::cut": "Conversation un-tagged"
+}
diff --git a/src/v0/sources/ortto/mapping.json b/src/v0/sources/ortto/mapping.json
new file mode 100644
index 00000000000..30ac8e153c0
--- /dev/null
+++ b/src/v0/sources/ortto/mapping.json
@@ -0,0 +1,38 @@
+[
+ {
+ "sourceKeys": "contact.email",
+ "destKeys": "context.traits.email"
+ },
+ {
+ "sourceKeys": "contact.external_id",
+ "destKeys": "userId"
+ },
+ {
+ "sourceKeys": "contact.country.name",
+ "destKeys": "context.traits.address.country"
+ },
+ {
+ "sourceKeys": "contact.city.name",
+ "destKeys": "context.traits.address.city"
+ },
+ {
+ "sourceKeys": "contact.postal",
+ "destKeys": "context.traits.address.postalCode"
+ },
+ {
+ "sourceKeys": "id",
+ "destKeys": "messageId"
+ },
+ {
+ "sourceKeys": "time",
+ "destKeys": "originalTimestamp"
+ },
+ {
+ "sourceKeys": "contact.first_name",
+ "destKeys": "context.traits.firstName"
+ },
+ {
+ "sourceKeys": "contact.last_name",
+ "destKeys": "context.traits.lastName"
+ }
+]
diff --git a/src/v0/sources/ortto/transform.js b/src/v0/sources/ortto/transform.js
new file mode 100644
index 00000000000..b40163f567b
--- /dev/null
+++ b/src/v0/sources/ortto/transform.js
@@ -0,0 +1,114 @@
+const path = require('path');
+const fs = require('fs');
+const { flattenJson, removeUndefinedAndNullValues, generateUUID } = require('../../util');
+const Message = require('../message');
+const eventMapping = require('./event_mapping.json');
+const { JSON_MIME_TYPE } = require('../../util/constant');
+
+// import mapping json using JSON.parse to preserve object key order
+const mapping = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8'));
+
+function settingProperties(event, message) {
+ const messageReplica = message;
+
+ // flattening the event and assigning it to properties
+ messageReplica.properties = removeUndefinedAndNullValues(flattenJson(event));
+
+ // fields that are already mapped
+ const excludeFields = [
+ 'contact.email',
+ 'contact.contact_id',
+ 'id',
+ 'time',
+ 'activity.field_id',
+ 'contact.external_id',
+ 'contact.country.name',
+ 'contact.city.name',
+ 'contact.postal',
+ 'contact.first_name',
+ 'contact.last_name',
+ 'contact.birthday.day',
+ 'contact.birthday.month',
+ 'contact.birthday.year',
+ 'contact.phone_number.c',
+ 'contact.phone_number',
+ 'contact.phone_number.n',
+ ];
+
+ // deleting already mapped fields
+ excludeFields.forEach((field) => {
+ delete messageReplica.properties[field];
+ });
+
+ return message;
+}
+
+function process(event) {
+ let message = new Message(`ortto`);
+
+ // Here, we are checking for the test event to discard them
+ if (event.activity?.field_id === 'act::test_webhook') {
+ return {
+ outputToSource: {
+ body: Buffer.from(JSON.stringify(event)).toString('base64'),
+ contentType: JSON_MIME_TYPE,
+ },
+ statusCode: 200,
+ };
+ }
+
+ // we are setting event type as track always
+ message.setEventType('track');
+
+ message.setPropertiesV2(event, mapping);
+
+ // setting anonymousId
+ if (!message.userId) {
+ message.anonymousId = generateUUID();
+ }
+
+ if (event.contact?.birthday) {
+ const month =
+ event.contact.birthday?.month < 10
+ ? `0${event.contact.birthday?.month}`
+ : event.contact.birthday?.month;
+ const day =
+ event.contact.birthday?.day < 10
+ ? `0${event.contact.birthday?.day}`
+ : event.contact.birthday?.day;
+ message.context.traits.birthday = `${event.contact.birthday?.year}-${month}-${day}`;
+ }
+
+ if (event.contact?.phone_number) {
+ message.context.traits.phone = `${event.contact.phone_number?.c}${event.contact.phone_number?.n}`;
+ }
+
+ // Updating timestamp to acceptable timestamp format ["2023-10-10T06:24:19.103820974Z" -> "2023-10-10T06:24:19.000Z"]
+ if (message.originalTimestamp) {
+ const date = `${Math.floor(new Date(message.originalTimestamp).getTime() / 1000)}`;
+ message.originalTimestamp = new Date(date * 1000).toISOString();
+ }
+
+ // setting event Name
+ message.setEventName(eventMapping[event.activity.field_id]);
+
+ if (!message.event) {
+ message.event = 'custom event triggered';
+ }
+
+ // setting up ortto contact.contact_id to externalId
+ if (event.contact?.contact_id) {
+ message.context.externalId = [
+ {
+ type: 'orttoPersonId',
+ id: event.contact.contact_id,
+ },
+ ];
+ }
+
+ message = settingProperties(event, message);
+
+ return message;
+}
+
+module.exports = { process };
diff --git a/src/v0/sources/revenuecat/mapping.json b/src/v0/sources/revenuecat/mapping.json
new file mode 100644
index 00000000000..541568b71b6
--- /dev/null
+++ b/src/v0/sources/revenuecat/mapping.json
@@ -0,0 +1,10 @@
+[
+ {
+ "sourceKeys": "event.type",
+ "destKeys": "event"
+ },
+ {
+ "sourceKeys": "event.id",
+ "destKeys": "messageId"
+ }
+]
diff --git a/src/v0/sources/revenuecat/transform.js b/src/v0/sources/revenuecat/transform.js
new file mode 100644
index 00000000000..36944e10fac
--- /dev/null
+++ b/src/v0/sources/revenuecat/transform.js
@@ -0,0 +1,47 @@
+const { camelCase } = require('lodash');
+const moment = require('moment');
+const { removeUndefinedAndNullValues, isDefinedAndNotNull } = require('../../util');
+const Message = require('../message');
+
+function process(event) {
+ const message = new Message(`RevenueCat`);
+
+ // we are setting event type as track always
+ message.setEventType('track');
+
+ const properties = {};
+ // dump all event properties to message.properties after converting them to camelCase
+ if (event.event) {
+ Object.keys(event.event).forEach((key) => {
+ properties[camelCase(key)] = event.event[key];
+ });
+ message.setProperty('properties', properties);
+ }
+
+ // setting up app_user_id to externalId : revenuecatAppUserId
+ if (event?.event?.app_user_id) {
+ message.context.externalId = [
+ {
+ type: 'revenuecatAppUserId',
+ id: event?.event?.app_user_id,
+ },
+ ];
+ }
+
+ if (
+ isDefinedAndNotNull(event?.event?.event_timestamp_ms) &&
+ moment(event?.event?.event_timestamp_ms).isValid()
+ ) {
+ const validTimestamp = new Date(event.event.event_timestamp_ms).toISOString();
+ message.setProperty('originalTimestamp', validTimestamp);
+ message.setProperty('sentAt', validTimestamp);
+ }
+ message.event = event?.event?.type;
+ message.messageId = event?.event?.id;
+
+ // removing undefined and null values from message
+ removeUndefinedAndNullValues(message);
+ return message;
+}
+
+module.exports = { process };
diff --git a/src/v0/sources/shopify/config.js b/src/v0/sources/shopify/config.js
index d8593ce79b6..b8b3cde284d 100644
--- a/src/v0/sources/shopify/config.js
+++ b/src/v0/sources/shopify/config.js
@@ -119,5 +119,5 @@ module.exports = {
SHOPIFY_TRACK_MAP,
useRedisDatabase,
SHOPIFY_ADMIN_ONLY_EVENTS,
- maxTimeToIdentifyRSGeneratedCall
+ maxTimeToIdentifyRSGeneratedCall,
};
diff --git a/src/v0/sources/shopify/shopify_redis.util.test.js b/src/v0/sources/shopify/shopify_redis.util.test.js
index 49437551c2b..db596e1dfb1 100644
--- a/src/v0/sources/shopify/shopify_redis.util.test.js
+++ b/src/v0/sources/shopify/shopify_redis.util.test.js
@@ -1,274 +1,285 @@
const { getAnonymousIdAndSessionId, checkAndUpdateCartItems } = require('./util');
jest.mock('ioredis', () => require('../../../../test/__mocks__/redis'));
describe('Shopify Utils Test', () => {
+ describe('Check for valid cart update event test cases', () => {
+ it('Event containing token and nothing is retreived from redis and less than req. time difference between created_at and uadated_at', async () => {
+ const input = {
+ query_parameters: {
+ topic: ['carts_update'],
+ },
+ id: 'cartTokenTest1',
+ line_items: [],
+ note: null,
+ updated_at: '2023-02-10T12:05:07.251Z',
+ created_at: '2023-02-10T12:05:04.402Z',
+ };
+ const expectedOutput = false;
+ const output = await checkAndUpdateCartItems(input);
+ expect(output).toEqual(expectedOutput);
+ });
+ it('Event containing token and nothing is retreived from redis', async () => {
+ const input = {
+ token: 'token_not_in_redis',
+ line_items: [
+ {
+ prod_id: 'prod_1',
+ quantity: 1,
+ },
+ ],
+ };
+ const expectedOutput = true;
+ const output = await checkAndUpdateCartItems(input);
+ expect(output).toEqual(expectedOutput);
+ });
- describe('Check for valid cart update event test cases', () => {
- it('Event containing token and nothing is retreived from redis and less than req. time difference between created_at and uadated_at', async () => {
- const input = {
- "query_parameters": {
- "topic": [
- "carts_update"
- ]
- },
- "id": "cartTokenTest1",
- "line_items": [],
- "note": null,
- "updated_at": "2023-02-10T12:05:07.251Z",
- "created_at": "2023-02-10T12:05:04.402Z"
- };
- const expectedOutput = false;
- const output = await checkAndUpdateCartItems(input);
- expect(output).toEqual(expectedOutput);
- });
- it('Event containing token and nothing is retreived from redis', async () => {
- const input = {
- token: 'token_not_in_redis',
- line_items: [
- {
- prod_id: 'prod_1',
- quantity: 1,
- },
- ],
- };
- const expectedOutput = true;
- const output = await checkAndUpdateCartItems(input);
- expect(output).toEqual(expectedOutput);
- });
-
- it('Event contain id for cart_update event and isValid', async () => {
- const input = {
- id: 'shopify_test2',
- line_items: [
- {
- prod_id: 'prod_1',
- quantity: 1,
- },
- ],
- };
+ it('Event contain id for cart_update event and isValid', async () => {
+ const input = {
+ id: 'shopify_test2',
+ line_items: [
+ {
+ prod_id: 'prod_1',
+ quantity: 1,
+ },
+ ],
+ };
- const expectedOutput = true;
- const output = await checkAndUpdateCartItems(input);
- expect(output).toEqual(expectedOutput);
- });
+ const expectedOutput = true;
+ const output = await checkAndUpdateCartItems(input);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Event contain id for cart_update event and isInValid', async () => {
- const input = {
- id: 'shopify_test_duplicate_cart',
- line_items: [
- {
- prod_id: 'prod_1',
- quantity: 1,
- },
- ],
- };
+ it('Event contain id for cart_update event and isInValid', async () => {
+ const input = {
+ id: 'shopify_test_duplicate_cart',
+ line_items: [
+ {
+ prod_id: 'prod_1',
+ quantity: 1,
+ },
+ ],
+ };
- const expectedOutput = false;
- const output = await checkAndUpdateCartItems(input);
- expect(output).toEqual(expectedOutput);
- });
+ const expectedOutput = false;
+ const output = await checkAndUpdateCartItems(input);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Valid Cart Event but not able to set data due to redis error', async () => {
- const input = {
- id: 'shopify_test_set_redis_error',
- line_items: [
- {
- prod_id: 'prod_1',
- quantity: 1,
- },
- ],
- };
+ it('Valid Cart Event but not able to set data due to redis error', async () => {
+ const input = {
+ id: 'shopify_test_set_redis_error',
+ line_items: [
+ {
+ prod_id: 'prod_1',
+ quantity: 1,
+ },
+ ],
+ };
- const expectedOutput = true;
- const output = await checkAndUpdateCartItems(input);
- expect(output).toEqual(expectedOutput);
- });
+ const expectedOutput = true;
+ const output = await checkAndUpdateCartItems(input);
+ expect(output).toEqual(expectedOutput);
});
+ });
- describe(' Test Cases -> set AnonymousId and sessionId without using Redis', () => {
- it('Order Updated -> Properties containing cartToken', async () => {
- const input = {
- event: 'Order Updated',
- properties: {
- cart_token: '123',
- },
- };
- const expectedOutput = { "anonymousId": "b9b6607d-6974-594f-8e99-ac3de71c4d89", "sessionId": undefined };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ describe(' Test Cases -> set AnonymousId and sessionId without using Redis', () => {
+ it('Order Updated -> Properties containing cartToken', async () => {
+ const input = {
+ event: 'Order Updated',
+ properties: {
+ cart_token: '123',
+ },
+ };
+ const expectedOutput = {
+ anonymousId: 'b9b6607d-6974-594f-8e99-ac3de71c4d89',
+ sessionId: undefined,
+ };
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Cart Update -> Properties contain `id` ', async () => {
- const input = {
- event: 'Cart Update',
- properties: {
- id: '123',
- },
- };
+ it('Cart Update -> Properties contain `id` ', async () => {
+ const input = {
+ event: 'Cart Update',
+ properties: {
+ id: '123',
+ },
+ };
- const expectedOutput = { "anonymousId": "b9b6607d-6974-594f-8e99-ac3de71c4d89", "sessionId": undefined };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
+ const expectedOutput = {
+ anonymousId: 'b9b6607d-6974-594f-8e99-ac3de71c4d89',
+ sessionId: undefined,
+ };
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ expect(output).toEqual(expectedOutput);
+ });
- it('Customer event -> random AnonymousId', async () => {
- const input = {
- event: 'Customer Enabled',
- properties: {},
- };
+ it('Customer event -> random AnonymousId', async () => {
+ const input = {
+ event: 'Customer Enabled',
+ properties: {},
+ };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(output); // since it will be random
- });
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(output); // since it will be random
+ });
- it('Order Delete -> No anonymousId is there', async () => {
- const input = {
- event: 'Order Deleted',
- properties: {
- order_id: 'Order_ID',
- },
- };
- const expectedOutput = { "anonymousId": undefined, "sessionId": undefined };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ it('Order Delete -> No anonymousId is there', async () => {
+ const input = {
+ event: 'Order Deleted',
+ properties: {
+ order_id: 'Order_ID',
+ },
+ };
+ const expectedOutput = { anonymousId: undefined, sessionId: undefined };
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Checkout Create -> rudderAnonymousId and rudderSessionId present in note_attributes', async () => {
- const input = {
- event: 'Checkout Create',
- properties: {
- cart_token: 'CART_TOKEN',
- note_attributes: [
- {
- "name": "rudderAnonymousId",
- "value": "RUDDER_ANONYMOUSID"
- },
- {
- "name": "rudderSessionId",
- "value": "RUDDER_SESSIONID"
- },
- {
- "name": "rudderUpdatedAt",
- "value": "TIMESTAMP"
- }
- ],
- },
- };
- const expectedOutput = { "anonymousId": "RUDDER_ANONYMOUSID", "sessionId": "RUDDER_SESSIONID" };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ it('Checkout Create -> rudderAnonymousId and rudderSessionId present in note_attributes', async () => {
+ const input = {
+ event: 'Checkout Create',
+ properties: {
+ cart_token: 'CART_TOKEN',
+ note_attributes: [
+ {
+ name: 'rudderAnonymousId',
+ value: 'RUDDER_ANONYMOUSID',
+ },
+ {
+ name: 'rudderSessionId',
+ value: 'RUDDER_SESSIONID',
+ },
+ {
+ name: 'rudderUpdatedAt',
+ value: 'TIMESTAMP',
+ },
+ ],
+ },
+ };
+ const expectedOutput = { anonymousId: 'RUDDER_ANONYMOUSID', sessionId: 'RUDDER_SESSIONID' };
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
});
+ });
- describe('set AnonymousId and sesssionId with Redis Test Cases', () => {
- // Doing the following to enable redis mid test case file execution
- process.env.USE_REDIS_DB = true;
- jest.resetModules();
- const { getAnonymousIdAndSessionId } = require('./util');
- it('Properties containing cartToken but failed due redisError', async () => {
- const input = {
- event: 'Order Paid',
- properties: {
- cart_token: 'shopify_test2',
- },
- };
- const expectedOutput = { "anonymousId": "bcaf0473-fb11-562f-80a1-c83a35f053bc", "sessionId": undefined } // cartToken hashed
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ describe('set AnonymousId and sesssionId with Redis Test Cases', () => {
+ // Doing the following to enable redis mid test case file execution
+ process.env.USE_REDIS_DB = true;
+ jest.resetModules();
+ const { getAnonymousIdAndSessionId } = require('./util');
+ it('Properties containing cartToken but failed due redisError', async () => {
+ const input = {
+ event: 'Order Paid',
+ properties: {
+ cart_token: 'shopify_test2',
+ },
+ };
+ const expectedOutput = {
+ anonymousId: 'bcaf0473-fb11-562f-80a1-c83a35f053bc',
+ sessionId: undefined,
+ }; // cartToken hashed
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Order Paid- > Properties containing cartToken and fetched anonymousId and sessionId successfully', async () => {
- const input = {
- event: 'Order Paid',
- properties: {
- cart_token: 'shopify_test2',
- note_attributes: [
- {
- name: "rudderUpdatedAt",
- value: "RUDDER_UPDTD_AT"
- }
- ],
- },
- };
- const expectedOutput = { "anonymousId": "anon_shopify_test2", "sessionId": "session_id_2" }; // fetched succesfully from redis
+ it('Order Paid- > Properties containing cartToken and fetched anonymousId and sessionId successfully', async () => {
+ const input = {
+ event: 'Order Paid',
+ properties: {
+ cart_token: 'shopify_test2',
+ note_attributes: [
+ {
+ name: 'rudderUpdatedAt',
+ value: 'RUDDER_UPDTD_AT',
+ },
+ ],
+ },
+ };
+ const expectedOutput = { anonymousId: 'anon_shopify_test2', sessionId: 'session_id_2' }; // fetched succesfully from redis
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('Cart Update -> Properties contain id and fetched anonymousId successfully', async () => {
- const input = {
- event: 'Cart Update',
- properties: {
- id: 'shopify_test_only_anon_id',
- },
- };
- const expectedOutput = { "anonymousId": "anon_shopify_test_only_anon_id", "sessionId": undefined };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ it('Cart Update -> Properties contain id and fetched anonymousId successfully', async () => {
+ const input = {
+ event: 'Cart Update',
+ properties: {
+ id: 'shopify_test_only_anon_id',
+ },
+ };
+ const expectedOutput = {
+ anonymousId: 'anon_shopify_test_only_anon_id',
+ sessionId: undefined,
+ };
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('No mapping not present in DB for given cartToken', async () => {
- const input = {
- event: 'Cart Update',
- properties: {
- id: 'unstored_id',
- },
- };
+ it('No mapping not present in DB for given cartToken', async () => {
+ const input = {
+ event: 'Cart Update',
+ properties: {
+ id: 'unstored_id',
+ },
+ };
- const expectedOutput = { "anonymousId": "281a3e25-e603-5870-9cda-281c22940970", "sessionId": undefined };
+ const expectedOutput = {
+ anonymousId: '281a3e25-e603-5870-9cda-281c22940970',
+ sessionId: undefined,
+ };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('No cartToken for SHOPIFY_ADMIN_ONLY_EVENTS', async () => {
- const input = {
- event: 'Fulfillments Update',
- properties: {
- id: 'unstored_id',
- },
- };
- const expectedOutput = { "anonymousId": undefined, "sessionId": undefined };
+ it('No cartToken for SHOPIFY_ADMIN_ONLY_EVENTS', async () => {
+ const input = {
+ event: 'Fulfillments Update',
+ properties: {
+ id: 'unstored_id',
+ },
+ };
+ const expectedOutput = { anonymousId: undefined, sessionId: undefined };
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect(output).toEqual(expectedOutput);
+ });
- it('No cartToken for Order paid', async () => {
- const input = {
- event: 'Order Paid',
- properties: {
- cart_token: 'shopify_test2',
- },
- };
- const expectedOutput = 'RANDOM_ANONYMOUS_ID'; // fetched succesfully from redis
+ it('No cartToken for Order paid', async () => {
+ const input = {
+ event: 'Order Paid',
+ properties: {
+ cart_token: 'shopify_test2',
+ },
+ };
+ const expectedOutput = 'RANDOM_ANONYMOUS_ID'; // fetched succesfully from redis
- const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect('RANDOM_ANONYMOUS_ID').toEqual(expectedOutput);
- });
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
+ expect('RANDOM_ANONYMOUS_ID').toEqual(expectedOutput);
+ });
- it('Only anonymousId fetched from note_attributes and no cartToken', async () => {
- const input = {
- event: 'Order Paid',
- properties: {
- note_attributes: [
- {
- name: "rudderAnonymousId",
- value: "RUDDER_ANON_ID"
- },
- {
- name: "rudderUpdatedAt",
- value: "RUDDER_UPDTD_AT"
- }
- ],
- },
- };
- const expectedOutput = { "anonymousId": "RUDDER_ANON_ID", "sessionId": null }; // fetched succesfully from redis
- const output = await getAnonymousIdAndSessionId(input, {}, null);
+ it('Only anonymousId fetched from note_attributes and no cartToken', async () => {
+ const input = {
+ event: 'Order Paid',
+ properties: {
+ note_attributes: [
+ {
+ name: 'rudderAnonymousId',
+ value: 'RUDDER_ANON_ID',
+ },
+ {
+ name: 'rudderUpdatedAt',
+ value: 'RUDDER_UPDTD_AT',
+ },
+ ],
+ },
+ };
+ const expectedOutput = { anonymousId: 'RUDDER_ANON_ID', sessionId: null }; // fetched succesfully from redis
+ const output = await getAnonymousIdAndSessionId(input, {}, null);
- expect(output).toEqual(expectedOutput);
- });
+ expect(output).toEqual(expectedOutput);
});
-
+ });
});
diff --git a/src/v0/sources/shopify/transform.js b/src/v0/sources/shopify/transform.js
index 5c26bfd8449..013580d7a3c 100644
--- a/src/v0/sources/shopify/transform.js
+++ b/src/v0/sources/shopify/transform.js
@@ -1,4 +1,5 @@
-const _ = require('lodash');
+/* eslint-disable @typescript-eslint/naming-convention */
+const lodash = require('lodash');
const get = require('get-value');
const stats = require('../../../util/stats');
const {
@@ -125,8 +126,8 @@ const trackPayloadBuilder = (event, shopifyTopic) => {
const processEvent = async (inputEvent, metricMetadata) => {
let message;
+ const event = lodash.cloneDeep(inputEvent);
let redisData;
- const event = _.cloneDeep(inputEvent);
const shopifyTopic = getShopifyTopic(event);
delete event.query_parameters;
switch (shopifyTopic) {
@@ -172,7 +173,11 @@ const processEvent = async (inputEvent, metricMetadata) => {
}
}
if (message.type !== EventType.IDENTIFY) {
- const { anonymousId, sessionId } = await getAnonymousIdAndSessionId(message, metricMetadata, redisData);
+ const { anonymousId, sessionId } = await getAnonymousIdAndSessionId(
+ message,
+ { shopifyTopic, ...metricMetadata },
+ redisData,
+ );
if (isDefinedAndNotNull(anonymousId)) {
message.setProperty('anonymousId', anonymousId);
} else if (!message.userId) {
@@ -197,7 +202,8 @@ const processEvent = async (inputEvent, metricMetadata) => {
message = removeUndefinedAndNullValues(message);
return message;
};
-const isIdentifierEvent = (event) => ['rudderIdentifier', 'rudderSessionIdentifier'].includes(event?.event);
+const isIdentifierEvent = (event) =>
+ ['rudderIdentifier', 'rudderSessionIdentifier'].includes(event?.event);
const processIdentifierEvent = async (event, metricMetadata) => {
if (useRedisDatabase) {
let value;
@@ -240,7 +246,6 @@ const processIdentifierEvent = async (event, metricMetadata) => {
...metricMetadata,
});
}
-
}
const result = {
outputToSource: {
diff --git a/src/v0/sources/shopify/util.js b/src/v0/sources/shopify/util.js
index 76cc255f385..6f31ade4a70 100644
--- a/src/v0/sources/shopify/util.js
+++ b/src/v0/sources/shopify/util.js
@@ -1,8 +1,16 @@
/* eslint-disable camelcase */
+/* eslint-disable @typescript-eslint/naming-convention */
const { v5 } = require('uuid');
const sha256 = require('sha256');
+const { TransformationError } = require('@rudderstack/integrations-lib');
const stats = require('../../../util/stats');
-const { constructPayload, extractCustomFields, flattenJson, generateUUID, isDefinedAndNotNull, } = require('../../util');
+const {
+ constructPayload,
+ extractCustomFields,
+ flattenJson,
+ generateUUID,
+ isDefinedAndNotNull,
+} = require('../../util');
const { RedisDB } = require('../../../util/redis/redisConnector');
const logger = require('../../../logger');
const {
@@ -13,10 +21,8 @@ const {
SHOPIFY_TRACK_MAP,
SHOPIFY_ADMIN_ONLY_EVENTS,
useRedisDatabase,
- maxTimeToIdentifyRSGeneratedCall
+ maxTimeToIdentifyRSGeneratedCall,
} = require('./config');
-const { TransformationError } = require('../../util/errorTypes');
-
const getDataFromRedis = async (key, metricMetadata) => {
try {
@@ -26,14 +32,16 @@ const getDataFromRedis = async (key, metricMetadata) => {
...metricMetadata,
});
const redisData = await RedisDB.getVal(key);
- if (redisData === null) {
+ if (
+ redisData === null ||
+ (typeof redisData === 'object' && Object.keys(redisData).length === 0)
+ ) {
stats.increment('shopify_redis_no_val', {
...metricMetadata,
});
}
return redisData;
- }
- catch (e) {
+ } catch (e) {
logger.debug(`{{SHOPIFY::}} Get call Failed due redis error ${e}`);
stats.increment('shopify_redis_failures', {
type: 'get',
@@ -112,11 +120,11 @@ const extractEmailFromPayload = (event) => {
};
const getCartToken = (message) => {
- const { event } = message;
+ const { event, properties } = message;
if (event === SHOPIFY_TRACK_MAP.carts_update) {
- return message.properties?.id || message.properties?.token;
+ return properties?.id || properties?.token;
}
- return message.properties?.cart_token || null;
+ return properties?.cart_token || null;
};
/**
@@ -141,9 +149,9 @@ const getRudderIdFromNoteAtrributes = (noteAttributes, field) => {
* -> if true we return `null`;
* -> else we don't have any identifer (very edge case) we return `random anonymousId`
* No Random SessionId is generated as its not a required field
- * @param {*} message
- * @param {*} metricMetadata
- * @returns
+ * @param {*} message
+ * @param {*} metricMetadata
+ * @returns
*/
const getAnonymousIdAndSessionId = async (message, metricMetadata, redisData = null) => {
let anonymousId;
@@ -151,11 +159,15 @@ const getAnonymousIdAndSessionId = async (message, metricMetadata, redisData = n
const noteAttributes = message.properties?.note_attributes;
// Giving Priority to note_attributes to fetch rudderAnonymousId over Redis due to better efficiency
if (isDefinedAndNotNull(noteAttributes)) {
- anonymousId = getRudderIdFromNoteAtrributes(noteAttributes, "rudderAnonymousId");
- sessionId = getRudderIdFromNoteAtrributes(noteAttributes, "rudderSessionId");
+ anonymousId = getRudderIdFromNoteAtrributes(noteAttributes, 'rudderAnonymousId');
+ sessionId = getRudderIdFromNoteAtrributes(noteAttributes, 'rudderSessionId');
}
// falling back to cartToken mapping or its hash in case no rudderAnonymousId or rudderSessionId is found
if (isDefinedAndNotNull(anonymousId) && isDefinedAndNotNull(sessionId)) {
+ stats.increment('shopify_anon_id_resolve', {
+ method: 'note_attributes',
+ ...metricMetadata,
+ });
return { anonymousId, sessionId };
}
const cartToken = getCartToken(message);
@@ -163,7 +175,10 @@ const getAnonymousIdAndSessionId = async (message, metricMetadata, redisData = n
if (SHOPIFY_ADMIN_ONLY_EVENTS.includes(message.event)) {
return { anonymousId, sessionId };
}
- return { anonymousId: isDefinedAndNotNull(anonymousId) ? anonymousId : generateUUID(), sessionId };
+ return {
+ anonymousId: isDefinedAndNotNull(anonymousId) ? anonymousId : generateUUID(),
+ sessionId,
+ };
}
if (useRedisDatabase) {
if (!isDefinedAndNotNull(redisData)) {
@@ -178,6 +193,13 @@ const getAnonymousIdAndSessionId = async (message, metricMetadata, redisData = n
Hash the id and use it as anonymousId (limiting 256 -> 36 chars) and sessionId is not sent as its not required field
*/
anonymousId = v5(cartToken, v5.URL);
+ } else {
+ // This metric let us know how many events based on event name used redis for anonId resolution
+ // and for how many
+ stats.increment('shopify_anon_id_resolve', {
+ method: 'database',
+ ...metricMetadata,
+ });
}
return { anonymousId, sessionId };
};
@@ -196,8 +218,7 @@ const updateCartItemsInRedis = async (cartToken, newCartItemsHash, metricMetadat
...metricMetadata,
});
await RedisDB.setVal(`${cartToken}`, value);
- }
- catch (e) {
+ } catch (e) {
logger.debug(`{{SHOPIFY::}} itemsHash set call Failed due redis error ${e}`);
stats.increment('shopify_redis_failures', {
type: 'set',
@@ -228,10 +249,10 @@ const checkAndUpdateCartItems = async (inputEvent, redisData, metricMetadata) =>
}
await updateCartItemsInRedis(cartToken, newCartItemsHash, metricMetadata);
} else {
- const { created_at, updated_at } = inputEvent;
+ const { created_at, updated_at, line_items } = inputEvent;
const timeDifference = Date.parse(updated_at) - Date.parse(created_at);
const isTimeWithinThreshold = timeDifference < maxTimeToIdentifyRSGeneratedCall;
- const isLineItemsEmpty = inputEvent?.line_items?.length === 0;
+ const isLineItemsEmpty = line_items?.length === 0;
if (isTimeWithinThreshold && isLineItemsEmpty) {
return false;
diff --git a/src/v0/util/constant.js b/src/v0/util/constant.js
index a06fbd8b9a4..9996f1ea7c6 100644
--- a/src/v0/util/constant.js
+++ b/src/v0/util/constant.js
@@ -10,6 +10,9 @@ const API_CALL = 'api_call_count';
const JSON_MIME_TYPE = 'application/json';
+const FEATURE_FILTER_CODE = 'filter-code';
+const FEATURE_GZIP_SUPPORT = 'gzip-support';
+
const HTTP_STATUS_CODES = {
// 1xx Informational
CONTINUE: 100,
@@ -25,6 +28,8 @@ const HTTP_STATUS_CODES = {
RESET_CONTENT: 205,
PARTIAL_CONTENT: 206,
MULTI_STATUS: 207,
+ FILTER_EVENTS: 298,
+ SUPPRESS_EVENTS: 299,
// 3xx Redirection
MULTIPLE_CHOICES: 300,
@@ -75,14 +80,15 @@ const HTTP_STATUS_CODES = {
GATEWAY_TIMEOUT: 504,
HTTP_VERSION_NOT_SUPPORTED: 505,
INSUFFICIENT_STORAGE: 507,
- NETWORK_AUTHENTICATION_REQUIRED: 511
+ NETWORK_AUTHENTICATION_REQUIRED: 511,
};
-
module.exports = {
API_CALL,
AUTH_CACHE_TTL,
- USER_LEAD_CACHE_TTL,
JSON_MIME_TYPE,
- HTTP_STATUS_CODES
+ HTTP_STATUS_CODES,
+ USER_LEAD_CACHE_TTL,
+ FEATURE_FILTER_CODE,
+ FEATURE_GZIP_SUPPORT,
};
diff --git a/src/v0/util/deleteUserUtils.js b/src/v0/util/deleteUserUtils.js
index 81607aeb3da..6cf16d7f9ea 100644
--- a/src/v0/util/deleteUserUtils.js
+++ b/src/v0/util/deleteUserUtils.js
@@ -1,4 +1,4 @@
-const _ = require('lodash');
+const lodash = require('lodash');
/**
* Takes the userAttributes array fetches userIds at root level of each element
* and make batches of Ids accoring to MAX_BATCH_SIZE
@@ -14,7 +14,7 @@ const getUserIdBatches = (userAttributes, MAX_BATCH_SIZE) => {
userIds.push(userAttribute.userId);
}
});
- const userIdBatches = _.chunk(userIds, MAX_BATCH_SIZE);
+ const userIdBatches = lodash.chunk(userIds, MAX_BATCH_SIZE);
return userIdBatches;
};
diff --git a/src/v0/util/errorTypes/abortedError.js b/src/v0/util/errorTypes/abortedError.js
deleted file mode 100644
index bf5896c8bec..00000000000
--- a/src/v0/util/errorTypes/abortedError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class AbortedError extends BaseError {
- constructor(message, statusCode, destResponse, authErrorCategory) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.ABORTED,
- };
-
- super(message, statusCode || 400, finalStatTags, destResponse, authErrorCategory);
- }
-}
-
-module.exports = AbortedError;
diff --git a/src/v0/util/errorTypes/configurationError.js b/src/v0/util/errorTypes/configurationError.js
deleted file mode 100644
index 59df3718e70..00000000000
--- a/src/v0/util/errorTypes/configurationError.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class ConfigurationError extends BaseError {
- constructor(message) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.DATA_VALIDATION,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.CONFIGURATION,
- };
-
- // TODO: Change this to a retryable error
- super(message, 400, finalStatTags);
- }
-}
-
-module.exports = ConfigurationError;
diff --git a/src/v0/util/errorTypes/filteredEventsError.js b/src/v0/util/errorTypes/filteredEventsError.js
new file mode 100644
index 00000000000..990ca76670c
--- /dev/null
+++ b/src/v0/util/errorTypes/filteredEventsError.js
@@ -0,0 +1,10 @@
+const { BaseError } = require('@rudderstack/integrations-lib');
+const { HTTP_STATUS_CODES } = require('../constant');
+
+class FilteredEventsError extends BaseError {
+ constructor(message, statusCode = HTTP_STATUS_CODES.FILTER_EVENTS) {
+ super(message, statusCode);
+ }
+}
+
+module.exports = FilteredEventsError;
diff --git a/src/v0/util/errorTypes/index.js b/src/v0/util/errorTypes/index.js
index 01708caa15c..f3cef657cad 100644
--- a/src/v0/util/errorTypes/index.js
+++ b/src/v0/util/errorTypes/index.js
@@ -1,35 +1,7 @@
-const { BaseError } = require('./base');
-const TransformationError = require('./transformationError');
-const ConfigurationError = require('./configurationError');
-const InstrumentationError = require('./instrumentationError');
-const PlatformError = require('./platformError');
-const OAuthSecretError = require('./oAuthSecretError');
-const NetworkError = require('./networkError');
-const ThrottledError = require('./throttledError');
-const RedisError = require('./redisError');
-const RetryableError = require('./retryableError');
-const InvalidAuthTokenError = require('./invalidAuthTokenError');
-const AbortedError = require('./abortedError');
-const UnhandledStatusCodeError = require('./unhandledStatusCodeError');
-const UnauthorizedError = require('./unauthorizedError');
-const NetworkInstrumentationError = require('./networkInstrumentationError');
-const UnsupportedEventError = require('./unsupportedEventError');
+const FilteredEventsError = require('./filteredEventsError');
+const TransformerProxyError = require('./transformerProxyError');
module.exports = {
- BaseError,
- TransformationError,
- ConfigurationError,
- InstrumentationError,
- PlatformError,
- OAuthSecretError,
- NetworkError,
- ThrottledError,
- RetryableError,
- InvalidAuthTokenError,
- AbortedError,
- UnhandledStatusCodeError,
- UnauthorizedError,
- NetworkInstrumentationError,
- UnsupportedEventError,
- RedisError,
+ FilteredEventsError,
+ TransformerProxyError,
};
diff --git a/src/v0/util/errorTypes/instrumentationError.js b/src/v0/util/errorTypes/instrumentationError.js
deleted file mode 100644
index 74df966260f..00000000000
--- a/src/v0/util/errorTypes/instrumentationError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class InstrumentationError extends BaseError {
- constructor(message) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.DATA_VALIDATION,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.INSTRUMENTATION,
- };
-
- super(message, 400, finalStatTags);
- }
-}
-
-module.exports = InstrumentationError;
diff --git a/src/v0/util/errorTypes/invalidAuthTokenError.js b/src/v0/util/errorTypes/invalidAuthTokenError.js
deleted file mode 100644
index 6a78996c6ec..00000000000
--- a/src/v0/util/errorTypes/invalidAuthTokenError.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class InvalidAuthTokenError extends BaseError {
- constructor(message, statusCode, destResponse, authErrorCategory) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.RETRYABLE,
- [tags.TAG_NAMES.META]: tags.METADATA.INVALID_AUTH_TOKEN,
- };
-
- super(message, statusCode || 500, finalStatTags, destResponse, authErrorCategory);
- }
-}
-
-module.exports = InvalidAuthTokenError;
diff --git a/src/v0/util/errorTypes/networkInstrumentationError.js b/src/v0/util/errorTypes/networkInstrumentationError.js
deleted file mode 100644
index fb9acdfeb45..00000000000
--- a/src/v0/util/errorTypes/networkInstrumentationError.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class NetworkInstrumentationError extends BaseError {
- constructor(message, destResponse) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.ABORTED,
- [tags.TAG_NAMES.META]: tags.METADATA.INSTRUMENTATION,
- };
-
- super(message, 400, finalStatTags, destResponse);
- }
-}
-
-module.exports = NetworkInstrumentationError;
diff --git a/src/v0/util/errorTypes/oAuthSecretError.js b/src/v0/util/errorTypes/oAuthSecretError.js
deleted file mode 100644
index dd8c51eaac7..00000000000
--- a/src/v0/util/errorTypes/oAuthSecretError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class OAuthSecretError extends BaseError {
- constructor(message) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.PLATFORM,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.OAUTH_SECRET,
- };
-
- super(message, 500, finalStatTags);
- }
-}
-
-module.exports = OAuthSecretError;
diff --git a/src/v0/util/errorTypes/platformError.js b/src/v0/util/errorTypes/platformError.js
deleted file mode 100644
index b04ef50c162..00000000000
--- a/src/v0/util/errorTypes/platformError.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class PlatformError extends BaseError {
- constructor(message) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.PLATFORM,
- };
-
- super(message, 400, finalStatTags);
- }
-}
-
-module.exports = PlatformError;
diff --git a/src/v0/util/errorTypes/redisError.js b/src/v0/util/errorTypes/redisError.js
deleted file mode 100644
index ec3d49ff2b5..00000000000
--- a/src/v0/util/errorTypes/redisError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class RedisError extends BaseError {
- constructor(message, statusCode) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.TRANSFORMATION,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.REDIS,
- };
-
- super(message, statusCode || 500, finalStatTags);
- }
-}
-
-module.exports = RedisError;
diff --git a/src/v0/util/errorTypes/retryableError.js b/src/v0/util/errorTypes/retryableError.js
deleted file mode 100644
index ba18424c76f..00000000000
--- a/src/v0/util/errorTypes/retryableError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class RetryableError extends BaseError {
- constructor(message, statusCode, destResponse, authErrorCategory) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.RETRYABLE,
- };
-
- super(message, statusCode || 500, finalStatTags, destResponse, authErrorCategory);
- }
-}
-
-module.exports = RetryableError;
diff --git a/src/v0/util/errorTypes/throttledError.js b/src/v0/util/errorTypes/throttledError.js
deleted file mode 100644
index 0e873c78928..00000000000
--- a/src/v0/util/errorTypes/throttledError.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class ThrottledError extends BaseError {
- constructor(message, destResponse) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.THROTTLED,
- };
-
- super(message, 429, finalStatTags, destResponse);
- }
-}
-
-module.exports = ThrottledError;
diff --git a/src/v0/util/errorTypes/transformationError.js b/src/v0/util/errorTypes/transformationError.js
deleted file mode 100644
index 0b28b619840..00000000000
--- a/src/v0/util/errorTypes/transformationError.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class TransformationError extends BaseError {
- constructor(message, statusCode, destResponse, authErrorCategory) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.TRANSFORMATION,
- };
-
- super(message, statusCode || 400, finalStatTags, destResponse, authErrorCategory);
- }
-}
-
-module.exports = TransformationError;
diff --git a/src/v0/util/errorTypes/networkError.js b/src/v0/util/errorTypes/transformerProxyError.js
similarity index 72%
rename from src/v0/util/errorTypes/networkError.js
rename to src/v0/util/errorTypes/transformerProxyError.js
index 3461efbbdd1..2fefb6fb926 100644
--- a/src/v0/util/errorTypes/networkError.js
+++ b/src/v0/util/errorTypes/transformerProxyError.js
@@ -1,11 +1,10 @@
+const { BaseError } = require('@rudderstack/integrations-lib');
const tags = require('../tags');
-const { BaseError } = require('./base');
const errorTypes = Object.values(tags.ERROR_TYPES);
const metaTypes = Object.values(tags.METADATA);
-// To throw error when error type (abort, retry or throttle) has to be dynamically deduced
-class NetworkError extends BaseError {
- constructor(message, statusCode, statTags, destResponse, authErrorCategory) {
+class TransformerProxyError extends BaseError {
+ constructor(message, statusCode, statTags, destResponse, authErrorCategory, response) {
const finalStatTags = {
[tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
[tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.ABORTED,
@@ -21,9 +20,9 @@ class NetworkError extends BaseError {
finalStatTags[tags.TAG_NAMES.META] = statTags[tags.TAG_NAMES.META];
}
}
-
- super(message, statusCode || 400, finalStatTags, destResponse, authErrorCategory);
+ super(message, statusCode, finalStatTags, destResponse, authErrorCategory);
+ this.response = response;
}
}
-module.exports = NetworkError;
+module.exports = TransformerProxyError;
diff --git a/src/v0/util/errorTypes/unauthorizedError.js b/src/v0/util/errorTypes/unauthorizedError.js
deleted file mode 100644
index c9c35795b8a..00000000000
--- a/src/v0/util/errorTypes/unauthorizedError.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class UnauthorizedError extends BaseError {
- constructor(message, statusCode, destResponse, authErrorCategory) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.ABORTED,
- [tags.TAG_NAMES.META]: tags.METADATA.UNAUTHORIZED,
- };
-
- super(message, statusCode || 400, finalStatTags, destResponse, authErrorCategory);
- }
-}
-
-module.exports = UnauthorizedError;
diff --git a/src/v0/util/errorTypes/unhandledStatusCodeError.js b/src/v0/util/errorTypes/unhandledStatusCodeError.js
deleted file mode 100644
index fe35c01c1ad..00000000000
--- a/src/v0/util/errorTypes/unhandledStatusCodeError.js
+++ /dev/null
@@ -1,16 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class UnhandledStatusCodeError extends BaseError {
- constructor(message, destResponse) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.NETWORK,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.ABORTED,
- [tags.TAG_NAMES.META]: tags.METADATA.UNHANDLED_STATUS_CODE,
- };
-
- super(message, 400, finalStatTags, destResponse);
- }
-}
-
-module.exports = UnhandledStatusCodeError;
diff --git a/src/v0/util/errorTypes/unsupportedEventError.js b/src/v0/util/errorTypes/unsupportedEventError.js
deleted file mode 100644
index c2e965b620a..00000000000
--- a/src/v0/util/errorTypes/unsupportedEventError.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const tags = require('../tags');
-const { BaseError } = require('./base');
-
-class UnsupportedEventError extends BaseError {
- constructor(message) {
- const finalStatTags = {
- [tags.TAG_NAMES.ERROR_CATEGORY]: tags.ERROR_CATEGORIES.PLATFORM,
- [tags.TAG_NAMES.ERROR_TYPE]: tags.ERROR_TYPES.UNSUPPORTED,
- };
- super(message, 400, finalStatTags);
- }
-}
-
-module.exports = UnsupportedEventError;
diff --git a/src/v0/util/facebookUtils/index.js b/src/v0/util/facebookUtils/index.js
new file mode 100644
index 00000000000..4c095185592
--- /dev/null
+++ b/src/v0/util/facebookUtils/index.js
@@ -0,0 +1,301 @@
+const sha256 = require('sha256');
+const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib');
+const {
+ isObject,
+ getIntegrationsObj,
+ getHashFromArray,
+ constructPayload,
+ defaultRequestConfig,
+ defaultPostRequestConfig,
+ getFieldValueFromMessage,
+ formatTimeStamp,
+} = require('../index');
+
+/** This function transforms the payloads according to the config settings and adds, removes or hashes pii data.
+ @param message --> the rudder payload
+
+ {
+ anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1',
+ destination_props: { Fb: { app_id: 'RudderFbApp' } },
+ context: {
+ device: {
+ id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R',
+ manufacturer: 'Xiaomi',
+ model: 'Redmi 6',
+ name: 'xiaomi'
+ },
+ network: { carrier: 'Banglalink' },
+ os: { name: 'android', version: '8.1.0' },
+ screen: { height: '100', density: 50 },
+ traits: {
+ email: 'abc@gmail.com',
+ anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1'
+ }
+ },
+ event: 'spin_result',
+ integrations: {
+ All: true,
+ FacebookPixel: {
+ dataProcessingOptions: [Array],
+ fbc: 'fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890',
+ fbp: 'fb.1.1554763741205.234567890',
+ fb_login_id: 'fb_id',
+ lead_id: 'lead_id'
+ }
+ },
+ message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8',
+ properties: { revenue: 400, additional_bet_index: 0 },
+ timestamp: '2019-09-01T15:46:51.693229+05:30',
+ type: 'track'
+ }
+
+ @param customData --> properties
+ { revenue: 400, additional_bet_index: 0 }
+
+ @param blacklistPiiProperties -->
+ [ { blacklistPiiProperties: 'phone', blacklistPiiHash: true } ] // hashes the phone property
+
+ @param whitelistPiiProperties -->
+ [ { whitelistPiiProperties: 'email' } ] // sets email
+
+
+ @param integrationsObj -->
+ { hashed: true }
+
+ */
+
+const transformedPayloadData = (
+ message,
+ customData,
+ blacklistPiiProperties,
+ whitelistPiiProperties,
+ integrationsObj,
+) => {
+ const defaultPiiProperties = [
+ 'email',
+ 'firstName',
+ 'lastName',
+ 'firstname',
+ 'lastname',
+ 'first_name',
+ 'last_name',
+ 'gender',
+ 'city',
+ 'country',
+ 'phone',
+ 'state',
+ 'zip',
+ 'postalCode',
+ 'birthday',
+ ];
+ const clonedCustomData = { ...customData };
+ const finalBlacklistPiiProperties = blacklistPiiProperties || [];
+ const finalWhitelistPiiProperties = whitelistPiiProperties || [];
+ const customBlackListedPiiProperties = {};
+
+ // create list of whitelisted properties
+ const customWhiteListedProperties = finalWhitelistPiiProperties.map(
+ (propObject) => propObject.whitelistPiiProperties,
+ );
+
+ // create map of blacklisted properties
+ finalBlacklistPiiProperties.forEach((property) => {
+ const singularConfigInstance = property;
+ customBlackListedPiiProperties[singularConfigInstance.blacklistPiiProperties] =
+ singularConfigInstance.blacklistPiiHash;
+ });
+
+ // remove properties which are default pii properties and not whitelisted
+ Object.keys(clonedCustomData).forEach((eventProp) => {
+ const isDefaultPiiProperty = defaultPiiProperties.includes(eventProp);
+ const isProperyWhiteListed = customWhiteListedProperties.includes(eventProp);
+
+ if (Object.hasOwn(customBlackListedPiiProperties, eventProp)) {
+ if (customBlackListedPiiProperties[eventProp]) {
+ // if customBlackListedPiiProperty is marked to be hashed from UI
+ clonedCustomData[eventProp] = integrationsObj?.hashed
+ ? String(message.properties[eventProp])
+ : sha256(String(message.properties[eventProp]));
+ } else if (isDefaultPiiProperty && !isProperyWhiteListed) {
+ delete clonedCustomData[eventProp];
+ }
+ } else if (isDefaultPiiProperty && !isProperyWhiteListed) {
+ delete clonedCustomData[eventProp];
+ }
+ });
+
+ return clonedCustomData;
+};
+
+/**
+ *
+ * @param {*} message Rudder Payload
+ * @param {*} defaultValue product / product_group
+ * @param {*} categoryToContent example: [ { from: 'clothing', to: 'product' } ]
+ * @param {*} destinationName destination name
+ *
+ * We will be mapping properties.category to user provided content else taking the default value as per ecomm spec
+ * If category is clothing it will be set to ["product"]
+ * @return Content Type array as defined in:
+ * - https://developers.facebook.com/docs/facebook-pixel/reference/#object-properties
+ */
+const getContentType = (message, defaultValue, categoryToContent, destinationName) => {
+ const { properties } = message;
+ const integrationsObj = getIntegrationsObj(message, destinationName || 'fb_pixel');
+
+ if (integrationsObj?.contentType) {
+ return integrationsObj.contentType;
+ }
+
+ let { category } = properties;
+ if (!category) {
+ const { products } = properties;
+ if (products && products.length > 0 && Array.isArray(products) && isObject(products[0])) {
+ category = products[0].category;
+ }
+ }
+
+ if (Array.isArray(categoryToContent) && category) {
+ const categoryToContentHash = getHashFromArray(categoryToContent, 'from', 'to', false);
+ if (categoryToContentHash[category]) {
+ return categoryToContentHash[category];
+ }
+ }
+
+ return defaultValue;
+};
+
+/**
+ * This method gets content category with proper error-handling
+ *
+ * @param {*} category
+ * @returns The content category as a string
+ */
+const getContentCategory = (category) => {
+ let contentCategory = category;
+ if (Array.isArray(contentCategory)) {
+ contentCategory = contentCategory.map(String).join(',');
+ }
+ if (
+ contentCategory &&
+ typeof contentCategory !== 'string' &&
+ typeof contentCategory !== 'object'
+ ) {
+ contentCategory = String(contentCategory);
+ }
+ if (
+ contentCategory &&
+ typeof contentCategory !== 'string' &&
+ !Array.isArray(contentCategory) &&
+ typeof contentCategory === 'object'
+ ) {
+ throw new InstrumentationError("'properties.category' must be either be a string or an array");
+ }
+ return contentCategory;
+};
+
+/**
+ *
+ * @param {*} message
+ * @returns string which is fbc parameter
+ *
+ * version : "fb" (default)
+ *
+ * subdomainIndex : 1 ( recommended by facebook, as well as our JS SDK sets cookies on the main domain, i.e "facebook.com")
+ *
+ * creationTime : mapped to originalTimestamp converted in miliseconds
+ *
+ * fbclid : deduced query paramter from context.page.url
+ *
+ * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc#fbc
+ */
+const deduceFbcParam = (message) => {
+ const url = message.context?.page?.url;
+ if (!url) {
+ return undefined;
+ }
+ let parseUrl;
+ try {
+ parseUrl = new URL(url);
+ } catch {
+ return undefined;
+ }
+ const paramsList = new URLSearchParams(parseUrl.search);
+ const fbclid = paramsList.get('fbclid');
+
+ if (!fbclid) {
+ return undefined;
+ }
+ const creationTime = getFieldValueFromMessage(message, 'timestamp');
+ return `fb.1.${formatTimeStamp(creationTime)}.${fbclid}`;
+};
+
+const fetchUserData = (message, Config, mappingJson, destinationName) => {
+ const integrationsObj = getIntegrationsObj(message, destinationName);
+ const userData = constructPayload(message, mappingJson, destinationName);
+ const { removeExternalId } = Config;
+ if (removeExternalId) {
+ delete userData.external_id;
+ }
+
+ if (userData) {
+ const split = userData.name?.split(' ');
+ if (split && split.length === 2) {
+ const hashValue = (value) => (integrationsObj?.hashed ? value : sha256(value));
+ userData.fn = hashValue(split[0]);
+ userData.ln = hashValue(split[1]);
+ }
+ delete userData.name;
+ userData.fbc = userData.fbc || deduceFbcParam(message);
+ }
+
+ return userData;
+};
+
+const formingFinalResponse = (
+ userData,
+ commonData,
+ customData,
+ endpoint,
+ testDestination,
+ testEventCode,
+ appData,
+) => {
+ if (userData && commonData) {
+ const response = defaultRequestConfig();
+ response.endpoint = endpoint;
+ response.method = defaultPostRequestConfig.requestMethod;
+ const jsonData = {
+ user_data: userData,
+ ...commonData,
+ };
+ if (appData && Object.keys(appData).length > 0) {
+ jsonData.app_data = appData;
+ }
+ if (customData && Object.keys(customData).length > 0) {
+ jsonData.custom_data = customData;
+ }
+ const jsonStringify = JSON.stringify(jsonData);
+ const payload = {
+ data: [jsonStringify],
+ };
+
+ // Ref: https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api/
+ // Section: Test Events Tool
+ if (testDestination) {
+ payload.test_event_code = testEventCode;
+ }
+ response.body.FORM = payload;
+ return response;
+ }
+ // fail-safety for developer error
+ throw new TransformationError('Payload could not be constructed');
+};
+
+module.exports = {
+ getContentType,
+ getContentCategory,
+ transformedPayloadData,
+ formingFinalResponse,
+ fetchUserData,
+};
diff --git a/src/v0/destinations/facebook_pixel/utils.test.js b/src/v0/util/facebookUtils/index.test.js
similarity index 98%
rename from src/v0/destinations/facebook_pixel/utils.test.js
rename to src/v0/util/facebookUtils/index.test.js
index acd14ad2a80..98e4ccec402 100644
--- a/src/v0/destinations/facebook_pixel/utils.test.js
+++ b/src/v0/util/facebookUtils/index.test.js
@@ -1,4 +1,4 @@
-const { transformedPayloadData } = require('../../../../src/v0/destinations/facebook_pixel/utils');
+const { transformedPayloadData } = require('./index');
const sha256 = require('sha256');
describe('transformedPayloadData_function', () => {
diff --git a/src/v0/util/facebookUtils/networkHandler.js b/src/v0/util/facebookUtils/networkHandler.js
new file mode 100644
index 00000000000..e0d69fa5c8b
--- /dev/null
+++ b/src/v0/util/facebookUtils/networkHandler.js
@@ -0,0 +1,272 @@
+const { isEmpty } = require('lodash');
+const get = require('get-value');
+const { NetworkError } = require('@rudderstack/integrations-lib');
+const {
+ processAxiosResponse,
+ getDynamicErrorType,
+} = require('../../../adapters/utils/networkUtils');
+const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
+const tags = require('../tags');
+const { ErrorDetailsExtractorBuilder } = require('../../../util/error-extractor');
+
+/**
+ * Only under below mentioned scenario(s), add the errorCodes, subCodes etc,. to this map
+ *
+ * The actual API reference doc to which events from Rudderstack are being sent
+ * https://developers.facebook.com/docs/marketing-api/reference/ads-pixel/events/v13.0
+ *
+ * The documents referred while formulating the error responses
+ * 1. https://developers.facebook.com/docs/graph-api/guides/error-handling/
+ * - This seems like a generic document that contains errors possible for Graph API
+ * 2. https://developers.facebook.com/docs/marketing-api/error-reference/
+ * - The doc seems to be more related to Marketing API
+ * 3. https://developers.facebook.com/docs/marketing-api/error-reference/
+{
+ // A scenario where in we have to know the error with code and subcode, we can conclude that
+ // this error will have a particular status, statTags
+ code1: {
+ subCode1: {
+ status: ,
+ // Only tags that are unique to this error needs to be provided
+ statTags: {},
+ messageDetails: {
+ message: "",
+ field:
+ },
+
+ }
+ }
+}
+ */
+const errorDetailsMap = {
+ 100: {
+ // This error talks about event being sent after seven days or so
+ 2804003: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804001: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804007: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804016: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804017: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804019: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ 2804048: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessageField('error_user_title')
+ .build(),
+ // This error-subcode indicates that the business access token expired or is invalid or sufficient permissions are not provided
+ // since there is involvement of changes required on dashboard to make event successful
+ // for now, we are aborting this error-subCode combination
+ 33: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage(
+ "Object with ID 'PIXEL_ID' / 'DATASET_ID' / 'AUDIENCE_ID' does not exist, cannot be loaded due to missing permissions, or does not support this operation",
+ )
+ .build(),
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('Invalid Parameter')
+ .build(),
+ },
+ 1: {
+ // An unknown error occurred.
+ // This error may occur if you set level to adset but the correct value should be campaign
+ 99: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage(
+ 'This error may occur if you set level to adset but the correct value should be campaign',
+ )
+ .build(),
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage('An unknown error occurred')
+ .build(),
+ },
+ 190: {
+ 460: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage(
+ 'The session has been invalidated because the user changed their password or Facebook has changed the session for security reasons',
+ )
+ .build(),
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('Invalid OAuth 2.0 access token')
+ .build(),
+ },
+ 3: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('Capability or permissions issue.')
+ .build(),
+ },
+ 2: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage('Temporary issue due to downtime.')
+ .build(),
+ },
+ 341: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage('Application limit reached: Temporary issue due to downtime or throttling')
+ .build(),
+ },
+ 368: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage('Temporarily blocked for policies violations.')
+ .build(),
+ },
+ 5000: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(500)
+ .setMessage('Unknown Error Code')
+ .build(),
+ },
+ 4: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(429)
+ .setMessage('API Too Many Calls')
+ .build(),
+ },
+ 17: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(429)
+ .setMessage('API User Too Many Calls')
+ .build(),
+ },
+ // facebook custom audience related error codes
+ // ref:
+ // https://developers.facebook.com/docs/marketing-api/reference/custom-audience/#error-codes-4
+ // https://developers.facebook.com/docs/marketing-api/error-reference/
+ 294: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage(
+ 'Missing permission. Please make sure you have ads_management permission and the application is included in the allowlist',
+ )
+ .build(),
+ },
+ 1487301: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage(
+ 'Custom Audience Unavailable: The custom audience you are trying to use has not been shared with your ad account',
+ )
+ .build(),
+ },
+ 1487366: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('Custom Audience Has Been Deleted')
+ .build(),
+ },
+ 2650: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('Failed to update the custom audience')
+ .build(),
+ },
+ 105: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(400)
+ .setMessage('The number of parameters exceeded the maximum for this operation')
+ .build(),
+ },
+ 80003: {
+ default: new ErrorDetailsExtractorBuilder()
+ .setStatus(429)
+ .setMessage('There have been too many calls to this ad-account.')
+ .build(),
+ },
+ 200: {
+ default: new ErrorDetailsExtractorBuilder().setStatus(403).setMessageField('message').build(),
+ },
+};
+
+const getErrorDetailsFromErrorMap = (error) => {
+ const { code, error_subcode: subCode } = error;
+ let errDetails;
+ if (!isEmpty(errorDetailsMap[code])) {
+ errDetails = errorDetailsMap[code][subCode] || errorDetailsMap[code]?.default;
+ }
+ return errDetails;
+};
+
+const getStatus = (error) => {
+ const errorDetail = getErrorDetailsFromErrorMap(error);
+ let errorStatus = 500;
+ const isErrorDetailEmpty = isEmpty(errorDetail);
+ if (isErrorDetailEmpty) {
+ // Unhandled error response
+ return {
+ status: errorStatus,
+ tags: { [tags.TAG_NAMES.META]: tags.METADATA.UNHANDLED_STATUS_CODE },
+ };
+ }
+ errorStatus = errorDetail.status;
+
+ let errorMessage = errorDetail?.messageDetails?.message;
+ if (errorDetail?.messageDetails?.field) {
+ errorMessage = get(error, errorDetail?.messageDetails?.field);
+ }
+
+ return { status: errorStatus, errorMessage };
+};
+
+const errorResponseHandler = (destResponse) => {
+ const { response } = destResponse;
+ if (!response.error) {
+ // successful response from facebook pixel api
+ return;
+ }
+ const { error } = response;
+ const { status, errorMessage, tags: errorStatTags } = getStatus(error);
+ throw new NetworkError(
+ `${errorMessage || error.message || 'Unknown failure during response transformation'}`,
+ status,
+ {
+ ...errorStatTags,
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
+ },
+ { ...response, status: destResponse.status },
+ );
+};
+
+const destResponseHandler = (destinationResponse) => {
+ errorResponseHandler(destinationResponse);
+ return {
+ destinationResponse: destinationResponse.response,
+ message: 'Request Processed Successfully',
+ status: destinationResponse.status,
+ };
+};
+
+function networkHandler() {
+ // The order of execution also happens in this way
+ this.prepareProxy = prepareProxyRequest;
+ this.proxy = proxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+ this.responseHandler = destResponseHandler;
+}
+
+module.exports = {
+ networkHandler,
+ errorResponseHandler,
+};
diff --git a/src/v0/util/index.js b/src/v0/util/index.js
index 1b9164c321b..34182a76850 100644
--- a/src/v0/util/index.js
+++ b/src/v0/util/index.js
@@ -9,40 +9,47 @@ const Handlebars = require('handlebars');
const fs = require('fs');
const path = require('path');
-const _ = require('lodash');
+const lodash = require('lodash');
const set = require('set-value');
const get = require('get-value');
const uaParser = require('ua-parser-js');
const moment = require('moment-timezone');
const sha256 = require('sha256');
const crypto = require('crypto');
-const logger = require('../../logger');
-const stats = require('../../util/stats');
-const { DestCanonicalNames, DestHandlerMap } = require('../../constants/destinationCanonicalNames');
const {
InstrumentationError,
BaseError,
PlatformError,
TransformationError,
OAuthSecretError,
-} = require('./errorTypes');
+} = require('@rudderstack/integrations-lib');
+const logger = require('../../logger');
+const stats = require('../../util/stats');
+const { DestCanonicalNames, DestHandlerMap } = require('../../constants/destinationCanonicalNames');
const { client: errNotificationClient } = require('../../util/errorNotifier');
const { HTTP_STATUS_CODES } = require('./constant');
+const {
+ REFRESH_TOKEN,
+ AUTH_STATUS_INACTIVE,
+} = require('../../adapters/networkhandler/authConstants');
+const { FEATURE_FILTER_CODE, FEATURE_GZIP_SUPPORT } = require('./constant');
+
// ========================================================================
// INLINERS
// ========================================================================
-const isDefined = (x) => !_.isUndefined(x);
-const isNotEmpty = (x) => !_.isEmpty(x);
+const isDefined = (x) => !lodash.isUndefined(x);
+const isNotEmpty = (x) => !lodash.isEmpty(x);
const isNotNull = (x) => x != null;
const isDefinedAndNotNull = (x) => isDefined(x) && isNotNull(x);
const isDefinedAndNotNullAndNotEmpty = (x) => isDefined(x) && isNotNull(x) && isNotEmpty(x);
-const removeUndefinedValues = (obj) => _.pickBy(obj, isDefined);
-const removeNullValues = (obj) => _.pickBy(obj, isNotNull);
-const removeUndefinedAndNullValues = (obj) => _.pickBy(obj, isDefinedAndNotNull);
-const removeUndefinedAndNullAndEmptyValues = (obj) => _.pickBy(obj, isDefinedAndNotNullAndNotEmpty);
-const isBlank = (value) => _.isEmpty(_.toString(value));
-const flattenMap = (collection) => _.flatMap(collection, (x) => x);
+const removeUndefinedValues = (obj) => lodash.pickBy(obj, isDefined);
+const removeNullValues = (obj) => lodash.pickBy(obj, isNotNull);
+const removeUndefinedAndNullValues = (obj) => lodash.pickBy(obj, isDefinedAndNotNull);
+const removeUndefinedAndNullAndEmptyValues = (obj) =>
+ lodash.pickBy(obj, isDefinedAndNotNullAndNotEmpty);
+const isBlank = (value) => lodash.isEmpty(lodash.toString(value));
+const flattenMap = (collection) => lodash.flatMap(collection, (x) => x);
// ========================================================================
// GENERIC UTLITY
// ========================================================================
@@ -73,6 +80,14 @@ const isPrimitive = (arg) => {
return arg == null || (type !== 'object' && type !== 'function');
};
+const isNewStatusCodesAccepted = (reqMetadata = {}) => {
+ if (reqMetadata && typeof reqMetadata === 'object' && !Array.isArray(reqMetadata)) {
+ const { features } = reqMetadata;
+ return !!features?.[FEATURE_FILTER_CODE];
+ }
+ return false;
+};
+
/**
*
* @param {*} arg
@@ -104,7 +119,7 @@ const isObject = (value) => {
};
function isEmpty(input) {
- return _.isEmpty(_.toString(input).trim());
+ return lodash.isEmpty(lodash.toString(input).trim());
}
/**
@@ -122,8 +137,8 @@ function isEmptyObject(obj) {
/**
* Function to check if value is Defined, Not null and Not Empty.
- * Create this function, Because existing isDefinedAndNotNullAndNotEmpty(123) is returning false due to lodash _.isEmpty function.
- * _.isEmpty is used to detect empty collections/objects and it will return true for Integer, Boolean values.
+ * Create this function, Because existing isDefinedAndNotNullAndNotEmpty(123) is returning false due to lodash lodash.isEmpty function.
+ * lodash.isEmpty is used to detect empty collections/objects and it will return true for Integer, Boolean values.
* ref: https://github.com/lodash/lodash/issues/496
* @param {*} value 123
* @returns yes
@@ -137,7 +152,7 @@ const isDefinedNotNullNotEmpty = (value) =>
(typeof value === 'string' && value.trim().length === 0)
);
-const removeUndefinedNullEmptyExclBoolInt = (obj) => _.pickBy(obj, isDefinedNotNullNotEmpty);
+const removeUndefinedNullEmptyExclBoolInt = (obj) => lodash.pickBy(obj, isDefinedNotNullNotEmpty);
/**
* Recursively removes undefined, null, empty objects, and empty arrays from the given object at all levels.
@@ -145,6 +160,7 @@ const removeUndefinedNullEmptyExclBoolInt = (obj) => _.pickBy(obj, isDefinedNotN
* @returns
*/
const removeUndefinedNullValuesAndEmptyObjectArray = (obj) => {
+ // eslint-disable-next-line @typescript-eslint/no-shadow
function recursive(obj) {
if (Array.isArray(obj)) {
const cleanedArray = obj
@@ -235,16 +251,46 @@ const getHashFromArrayWithValueAsObject = (arrays, fromKey = 'from', isLowerCase
const getValueFromPropertiesOrTraits = ({ message, key }) => {
const keySet = ['properties', 'traits', 'context.traits'];
- const val = _.find(
- _.map(keySet, (k) => get(message, `${k}.${key}`)),
- (v) => !_.isNil(v),
+ const val = lodash.find(
+ lodash.map(keySet, (k) => get(message, `${k}.${key}`)),
+ (v) => !lodash.isNil(v),
);
- return !_.isNil(val) ? val : null;
+ return !lodash.isNil(val) ? val : null;
+};
+
+/**
+ * Checks if an object contains a circular reference.
+ *
+ * @param {object} obj - The object to check for circular references.
+ * @param {array} [seen=[]] - An array that keeps track of objects already seen during the recursive traversal. Defaults to an empty array.
+ * @returns {boolean} - True if a circular reference is found, false otherwise.
+ */
+const hasCircularReference = (obj, seen = []) => {
+ if (typeof obj !== 'object' || obj === null) {
+ return false;
+ }
+
+ if (seen.includes(obj)) {
+ return true;
+ }
+
+ seen.push(obj);
+ // eslint-disable-next-line no-restricted-syntax
+ for (const value of Object.values(obj)) {
+ if (hasCircularReference(value, seen)) {
+ return true;
+ }
+ }
+ seen.pop();
+ return false;
};
// function to flatten a json
function flattenJson(data, separator = '.', mode = 'normal', flattenArrays = true) {
const result = {};
+ if (hasCircularReference(data)) {
+ throw new InstrumentationError("Event has circular reference. Can't flatten the event");
+ }
// a recursive function to loop through the array of the data
function recurse(cur, prop) {
@@ -327,6 +373,9 @@ const hashToSha256 = (value) => sha256(value);
// Check what type of gender and convert to f or m
const getFbGenderVal = (gender) => {
+ if (typeof gender !== 'string') {
+ return null;
+ }
if (
gender.toUpperCase() === 'FEMALE' ||
gender.toUpperCase() === 'F' ||
@@ -418,11 +467,17 @@ const defaultBatchRequestConfig = () => ({
// Router transformer
// Success responses
-const getSuccessRespEvents = (message, metadata, destination, batched = false) => ({
+const getSuccessRespEvents = (
+ message,
+ metadata,
+ destination,
+ batched = false,
+ statusCode = 200,
+) => ({
batchedRequest: message,
metadata,
batched,
- statusCode: 200,
+ statusCode,
destination,
});
@@ -523,7 +578,7 @@ const handleSourceKeysOperation = ({ message, operationObject }) => {
// quick sanity check for the undefined values in the list.
// if there is any undefined values, return null
// without going further for operations
- const isAllDefined = _.every(argValues, (v) => !_.isNil(v));
+ const isAllDefined = lodash.every(argValues, (v) => !lodash.isNil(v));
if (!isAllDefined) {
return null;
}
@@ -535,8 +590,10 @@ const handleSourceKeysOperation = ({ message, operationObject }) => {
result = 1;
// eslint-disable-next-line no-restricted-syntax
for (const v of argValues) {
- if (_.isNumber(v)) {
+ if (lodash.isNumber(v)) {
result *= v;
+ } else if (lodash.isString(v) && /^[+-]?(\d+(\.\d*)?|\.\d+)([Ee][+-]?\d+)?$/.test(v)) {
+ result *= parseFloat(v);
} else {
// if there is a non number argument simply return null
// non numbers can't be operated arithmatically
@@ -548,7 +605,7 @@ const handleSourceKeysOperation = ({ message, operationObject }) => {
result = 0;
// eslint-disable-next-line no-restricted-syntax
for (const v of argValues) {
- if (_.isNumber(v)) {
+ if (lodash.isNumber(v)) {
result += v;
} else {
// if there is a non number argument simply return null
@@ -768,6 +825,13 @@ function formatValues(formattedVal, formattingType, typeFormat, integrationsObj)
curFormattedVal = false;
}
},
+ IsArray: () => {
+ curFormattedVal = formattedVal;
+ if (!Array.isArray(formattedVal)) {
+ logger.debug('Array value missing, so dropping it');
+ curFormattedVal = undefined;
+ }
+ },
trim: () => {
if (typeof formattedVal === 'string') {
curFormattedVal = formattedVal.trim();
@@ -1016,7 +1080,7 @@ const constructPayload = (message, mappingJson, destinationName = null) => {
if (value || value === 0 || value === false) {
if (destKey) {
// set the value only if correct
- _.set(payload, destKey, value);
+ lodash.set(payload, destKey, value);
} else {
// to set to root and flatten later
payload[''] = value;
@@ -1339,6 +1403,12 @@ const getMetadata = (metadata) => ({
destinationType: metadata.destinationType,
k8_namespace: metadata.namespace,
});
+
+const getTransformationMetadata = (metadata) => ({
+ transformationId: metadata.transformationId,
+ workspaceId: metadata.workspaceId,
+});
+
// checks if array 2 is a subset of array 1
function checkSubsetOfArray(array1, array2) {
const result = array2.every((val) => array1.includes(val));
@@ -1393,12 +1463,12 @@ const errorStatusCodeKeys = ['response.status', 'code', 'status'];
const getErrorStatusCode = (error, defaultStatusCode = HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR) => {
try {
let defaultStCode = defaultStatusCode;
- if (!_.isNumber(defaultStatusCode)) {
+ if (!lodash.isNumber(defaultStatusCode)) {
defaultStCode = HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;
}
const errStCode = errorStatusCodeKeys
.map((statusKey) => get(error, statusKey))
- .find((stCode) => _.isNumber(stCode));
+ .find((stCode) => lodash.isNumber(stCode));
return errStCode || defaultStCode;
} catch (err) {
logger.error('Failed in getErrorStatusCode', err);
@@ -1409,13 +1479,22 @@ const getErrorStatusCode = (error, defaultStatusCode = HTTP_STATUS_CODES.INTERNA
/**
* Used for generating error response with stats from native and built errors
*/
-function generateErrorObject(error, defTags = {}, shouldEnrichErrorMessage = false) {
- let errObject = error;
+function generateErrorObject(error, defTags = {}, shouldEnrichErrorMessage = true) {
+ let errObject = new BaseError(
+ error.message,
+ getErrorStatusCode(error),
+ {
+ ...error.statTags,
+ ...defTags,
+ },
+ error.destinationResponse,
+ error.authErrorCategory,
+ );
let errorMessage = error.message;
if (shouldEnrichErrorMessage) {
if (error.destinationResponse) {
errorMessage = JSON.stringify({
- message: error.message,
+ message: errorMessage,
destinationResponse: error.destinationResponse,
});
}
@@ -1424,13 +1503,6 @@ function generateErrorObject(error, defTags = {}, shouldEnrichErrorMessage = fal
if (!(error instanceof BaseError)) {
errObject = new TransformationError(errorMessage, getErrorStatusCode(error));
}
-
- // Add higher level default tags
- errObject.statTags = {
- ...errObject.statTags,
- ...defTags,
- };
-
return errObject;
}
/**
@@ -1666,7 +1738,7 @@ const simpleProcessRouterDestSync = async (inputs, singleTfFunc, reqMetadata, pr
// transform if not already done
if (!input.message.statusCode) {
// eslint-disable-next-line no-await-in-loop
- resp = await singleTfFunc(input, processParams);
+ resp = await singleTfFunc(input, processParams, reqMetadata);
}
respList.push(getSuccessRespEvents(resp, [input.metadata], input.destination));
} catch (error) {
@@ -1827,8 +1899,8 @@ const getAccessToken = (metadata, accessTokenKey) => {
// OAuth for this destination
const { secret } = metadata;
// we would need to verify if secret is present and also if the access token field is present in secret
- if (!secret || !secret[accessTokenKey]) {
- throw new OAuthSecretError('Empty/Invalid access token');
+ if (!secret?.[accessTokenKey]) {
+ throw new OAuthSecretError('OAuth - access token not found');
}
return secret[accessTokenKey];
};
@@ -1896,7 +1968,7 @@ const batchMultiplexedEvents = (transformedEventsList, maxBatchSize) => {
}
if (batchedEvents.length === 0 || eventsNotBatched) {
if (transformedMessage.length > maxBatchSize) {
- transformedMessage = _.chunk(transformedMessage, maxBatchSize);
+ transformedMessage = lodash.chunk(transformedMessage, maxBatchSize);
}
batchedEvents.push({
events: transformedMessage,
@@ -1910,6 +1982,132 @@ const batchMultiplexedEvents = (transformedEventsList, maxBatchSize) => {
return batchedEvents;
};
+/**
+ * Groups events with the same message type together in batches.
+ * Each batch contains events that have the same message type and are from different users.
+ * @param {*} inputs - An array of events
+ * @returns {*} - An array of batches
+ */
+const groupEventsByType = (inputs) => {
+ const batches = [];
+ let currentInputsArray = inputs;
+ while (currentInputsArray.length > 0) {
+ const remainingInputsArray = [];
+ const userOrderTracker = {};
+ const event = currentInputsArray.shift();
+ const messageType = event.message.type;
+ const batch = [event];
+ currentInputsArray.forEach((currentInput) => {
+ const currentMessageType = currentInput.message.type;
+ const currentUser = currentInput.metadata.userId;
+ if (currentMessageType === messageType && !userOrderTracker[currentUser]) {
+ batch.push(currentInput);
+ } else {
+ remainingInputsArray.push(currentInput);
+ userOrderTracker[currentUser] = true;
+ }
+ });
+ batches.push(batch);
+ currentInputsArray = remainingInputsArray;
+ }
+
+ return batches;
+};
+
+/**
+ * This function helps to detarmine type of error occured. According to the response
+ * we set authErrorCategory to take decision if we need to refresh the access_token
+ * or need to de-activate authStatus for the destination.
+ *
+ * **Scenarios**:
+ * - statusCode=401, response.error.details !== "" -> REFRESH_TOKEN
+ * - statusCode=403, response.error.details !== "" -> AUTH_STATUS_INACTIVE
+ *
+ * @param {*} code
+ * @param {*} response
+ * @returns
+ */
+const getAuthErrCategoryFromErrDetailsAndStCode = (code, response) => {
+ if (code === 401 && (!get(response, 'error.details') || typeof response === 'string'))
+ return REFRESH_TOKEN;
+ if (code === 403 && (!get(response, 'error.details') || typeof response === 'string'))
+ return AUTH_STATUS_INACTIVE;
+ return '';
+};
+
+/**
+ * This function helps to determine the type of error occurred. We set the authErrorCategory
+ * as per the destination response that is received and take the decision whether
+ * to refresh the access_token or de-activate authStatus.
+ *
+ * **Scenarios**:
+ * - statusCode=401 -> REFRESH_TOKEN
+ * - statusCode=403 -> AUTH_STATUS_INACTIVE
+ *
+ * @param {*} status
+ * @returns
+ */
+const getAuthErrCategoryFromStCode = (status) => {
+ if (status === 401) {
+ // UNAUTHORIZED
+ return REFRESH_TOKEN;
+ }
+ if (status === 403) {
+ // ACCESS_DENIED
+ return AUTH_STATUS_INACTIVE;
+ }
+ return '';
+};
+
+const isValidInteger = (value) => {
+ if (Number.isNaN(value) || !isDefinedAndNotNull(value)) {
+ return false;
+ }
+ if (typeof value === 'number' && value % 1 === 0) {
+ return true;
+ }
+ // Use a regular expression to check if the string is a valid integer or a valid floating-point number
+ return typeof value === 'string' ? /^-?\d+$/.test(value) : false;
+};
+const validateEventName = (event) => {
+ if (!event || typeof event !== 'string') {
+ throw new InstrumentationError('Event is a required field and should be a string');
+ }
+};
+
+const IsGzipSupported = (reqMetadata = {}) => {
+ if (reqMetadata && typeof reqMetadata === 'object' && !Array.isArray(reqMetadata)) {
+ const { features } = reqMetadata;
+ return !!features?.[FEATURE_GZIP_SUPPORT];
+ }
+ return false;
+};
+
+/**
+ * Returns an array containing the values of the specified key from each object in the input array.
+ * If the input array is falsy (null, undefined, empty array), an empty array is returned.
+ *
+ * @param {Array} arr - The input array from which values will be extracted.
+ * @param {string} key - The key of the property whose values will be extracted from each object in the input array.
+ * @returns {Array} - A new array containing the values of the specified key from each object in the input array.
+ *
+ * @example
+ * const configArray = [
+ * { name: 'John', age: 25 },
+ * { name: 'Jane', age: 30 },
+ * { name: 'Bob', age: 35 }
+ * ];
+ *
+ * const result = parseConfigArray(configArray, 'name');
+ * Output: ['John', 'Jane', 'Bob']
+ */
+const parseConfigArray = (arr, key) => {
+ if (!arr) {
+ return [];
+ }
+ return arr.map((item) => item[key]);
+};
+
// ========================================================================
// EXPORTS
// ========================================================================
@@ -1956,6 +2154,7 @@ module.exports = {
getIntegrationsObj,
getMappingConfig,
getMetadata,
+ getTransformationMetadata,
getParsedIP,
getStringValueOfJSON,
getSuccessRespEvents,
@@ -2003,6 +2202,7 @@ module.exports = {
getDestAuthCacheInstance,
refinePayload,
validateEmail,
+ validateEventName,
validatePhoneWithCountryCode,
getEventReqMetadata,
isHybridModeEnabled,
@@ -2010,4 +2210,12 @@ module.exports = {
checkAndCorrectUserId,
getAccessToken,
formatValues,
+ groupEventsByType,
+ hasCircularReference,
+ getAuthErrCategoryFromErrDetailsAndStCode,
+ getAuthErrCategoryFromStCode,
+ isValidInteger,
+ isNewStatusCodesAccepted,
+ IsGzipSupported,
+ parseConfigArray,
};
diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js
index b575f006fa0..65d6313e301 100644
--- a/src/v0/util/index.test.js
+++ b/src/v0/util/index.test.js
@@ -1,5 +1,8 @@
+const { TAG_NAMES } = require('@rudderstack/integrations-lib');
const utilities = require('.');
const { getFuncTestData } = require('../../../test/testHelper');
+const { FilteredEventsError } = require('./errorTypes');
+const { hasCircularReference, flattenJson } = require('./index');
// Names of the utility functions to test
const functionNames = [
@@ -11,6 +14,8 @@ const functionNames = [
'extractCustomFields',
'batchMultiplexedEvents',
'removeUndefinedNullValuesAndEmptyObjectArray',
+ 'groupEventsByType',
+ 'isValidInteger',
];
// Names of the utility functions to test which expects multiple arguments as values and not objects
@@ -67,3 +72,57 @@ describe('Utility Functions Tests', () => {
});
//Test cases which can't be fit in above test suite, have individual function level test blocks
+
+describe('hasCircularReference', () => {
+ it('should return false when object has no circular reference', () => {
+ const obj = { a: 1, b: 2, c: 3 };
+ expect(hasCircularReference(obj)).toBe(false);
+ });
+
+ it('should return true when object has circular reference', () => {
+ const obj = { a: 1, b: 2 };
+ obj.c = obj;
+ expect(hasCircularReference(obj)).toBe(true);
+ });
+
+ it('should return true when object has nested objects containing circular reference', () => {
+ const obj1 = { a: 1 };
+ const obj2 = { b: 2 };
+ obj1.c = obj2;
+ obj2.d = obj1;
+ expect(hasCircularReference(obj1)).toBe(true);
+ });
+
+ it('should return false when input is null', () => {
+ expect(hasCircularReference(null)).toBe(false);
+ });
+
+ it('should return false when input is not an object', () => {
+ expect(hasCircularReference(123)).toBe(false);
+ });
+
+ it('should return true when object has self-reference', () => {
+ const obj = { a: 1 };
+ obj.b = obj;
+ expect(hasCircularReference(obj)).toBe(true);
+ });
+});
+
+// extra test cases for flattenJson
+describe('flattenJson', () => {
+ it('should throw an error when flattening a json object with circular reference', () => {
+ const data = { name: 'John' };
+ data.self = data;
+ expect(() => flattenJson(data)).toThrow(
+ "Event has circular reference. Can't flatten the event",
+ );
+ });
+});
+
+describe('tests for generateErrorObject', () => {
+ test('test-0', () => {
+ const myErr = new FilteredEventsError('error-1');
+ const outputErrObj = utilities.generateErrorObject(myErr);
+ expect(outputErrObj.statTags).toEqual({});
+ });
+});
diff --git a/src/v0/util/regulation-api.js b/src/v0/util/regulation-api.js
index 8a557858e0d..238993ee811 100644
--- a/src/v0/util/regulation-api.js
+++ b/src/v0/util/regulation-api.js
@@ -1,4 +1,4 @@
-const { PlatformError } = require('./errorTypes');
+const { PlatformError } = require('@rudderstack/integrations-lib');
const RegulationApiUtils = {
/**
diff --git a/src/v0/util/tags.js b/src/v0/util/tags.js
index 95e78825c39..81e6b9a2a65 100644
--- a/src/v0/util/tags.js
+++ b/src/v0/util/tags.js
@@ -51,6 +51,7 @@ const ERROR_TYPES = {
OAUTH_SECRET: 'oAuthSecret',
UNSUPPORTED: 'unsupported',
REDIS: 'redis',
+ FILTERED: 'filtered',
};
const METADATA = {
diff --git a/src/v0/util/testdata/flattenJson.json b/src/v0/util/testdata/flattenJson.json
index 42f4cd286d7..bdd1891be94 100644
--- a/src/v0/util/testdata/flattenJson.json
+++ b/src/v0/util/testdata/flattenJson.json
@@ -514,8 +514,8 @@
"id": "abc123"
},
"createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "email": "ruchira@gmail.com",
- "name": "Ruchira Moitra",
+ "email": "rudderTest@gmail.com",
+ "name": "Rudder Test",
"plan": "Enterprise"
},
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
@@ -543,8 +543,8 @@
"timezone": "Asia/Kolkata",
"traits.company.id": "abc123",
"traits.createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "traits.email": "ruchira@gmail.com",
- "traits.name": "Ruchira Moitra",
+ "traits.email": "rudderTest@gmail.com",
+ "traits.name": "Rudder Test",
"traits.plan": "Enterprise",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
}
diff --git a/src/v0/util/testdata/groupEventsByType.json b/src/v0/util/testdata/groupEventsByType.json
new file mode 100644
index 00000000000..168b875036a
--- /dev/null
+++ b/src/v0/util/testdata/groupEventsByType.json
@@ -0,0 +1,624 @@
+[
+ {
+ "description": "Should return an empty array when given an empty events array",
+ "input": [[]],
+ "output": []
+ },
+ {
+ "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 1",
+ "input": [
+ [
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user2"
+ },
+ "metadata": {
+ "jobId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user2"
+ },
+ "metadata": {
+ "jobId": "5"
+ }
+ }
+ ]
+ ],
+ "output": [
+ [
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user2"
+ },
+ "metadata": {
+ "jobId": "2"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "track",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "3"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user1"
+ },
+ "metadata": {
+ "jobId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify",
+ "userId": "user2"
+ },
+ "metadata": {
+ "jobId": "5"
+ }
+ }
+ ]
+ ]
+ },
+ {
+ "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 2",
+ "input": [
+ [
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ }
+ ]
+ ],
+ "output": [
+ [
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ }
+ ]
+ ]
+ },
+ {
+ "description": "Should group multiple events with the different message type and different users together in a batch: Scenario 3",
+ "input": [
+ [
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ }
+ ]
+ ],
+ "output": [
+ [
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "3"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "4"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ },
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "6"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "1"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ },
+ {
+ "message": {
+ "type": "track"
+ },
+ "metadata": {
+ "userId": "2"
+ }
+ }
+ ],
+ [
+ {
+ "message": {
+ "type": "identify"
+ },
+ "metadata": {
+ "userId": "5"
+ }
+ }
+ ]
+ ]
+ }
+]
diff --git a/src/v0/util/testdata/isValidInteger.json b/src/v0/util/testdata/isValidInteger.json
new file mode 100644
index 00000000000..be7be936a6c
--- /dev/null
+++ b/src/v0/util/testdata/isValidInteger.json
@@ -0,0 +1,31 @@
+[
+ {
+ "description": "Number is undefined",
+ "output": false
+ },
+ {
+ "description": "Number in string format",
+ "input": "123",
+ "output": true
+ },
+ {
+ "description": "Normal Integer",
+ "input": 123,
+ "output": true
+ },
+ {
+ "description": "Float",
+ "input": 123.91,
+ "output": false
+ },
+ {
+ "description": "Float string",
+ "input": "123.00",
+ "output": false
+ },
+ {
+ "description": "Alphanumeric String",
+ "input": "abcd1234",
+ "output": false
+ }
+]
diff --git a/src/v1/destinations/campaign_manager/networkHandler.js b/src/v1/destinations/campaign_manager/networkHandler.js
new file mode 100644
index 00000000000..431cbd69662
--- /dev/null
+++ b/src/v1/destinations/campaign_manager/networkHandler.js
@@ -0,0 +1,96 @@
+/* eslint-disable no-param-reassign */
+/* eslint-disable no-restricted-syntax */
+const { TransformerProxyError } = require('../../../v0/util/errorTypes');
+const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network');
+const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../../v0/util/index');
+
+const {
+ processAxiosResponse,
+ getDynamicErrorType,
+} = require('../../../adapters/utils/networkUtils');
+const tags = require('../../../v0/util/tags');
+
+function isEventAbortableAndExtractErrMsg(element, proxyOutputObj) {
+ let isAbortable = false;
+ let errorMsg = '';
+ // success event
+ if (!element.errors) {
+ return isAbortable;
+ }
+ for (const err of element.errors) {
+ errorMsg += `${err.message}, `;
+ // if code is any of these, event is not retryable
+ if (
+ err.code === 'PERMISSION_DENIED' ||
+ err.code === 'INVALID_ARGUMENT' ||
+ err.code === 'NOT_FOUND'
+ ) {
+ isAbortable = true;
+ }
+ }
+ if (errorMsg) {
+ proxyOutputObj.error = errorMsg;
+ }
+ return isAbortable;
+}
+
+const responseHandler = (destinationResponse) => {
+ const message = `[CAMPAIGN_MANAGER Response V1 Handler] - Request Processed Successfully`;
+ const responseWithIndividualEvents = [];
+ const { response, status, rudderJobMetadata } = destinationResponse;
+
+ if (isHttpStatusSuccess(status)) {
+ // check for Partial Event failures and Successes
+ const destPartialStatus = response.status;
+
+ for (const [idx, element] of destPartialStatus.entries()) {
+ const proxyOutputObj = {
+ statusCode: 200,
+ metadata: rudderJobMetadata[idx],
+ error: 'success',
+ };
+ // update status of partial event if abortable
+ if (isEventAbortableAndExtractErrMsg(element, proxyOutputObj)) {
+ proxyOutputObj.statusCode = 400;
+ }
+ responseWithIndividualEvents.push(proxyOutputObj);
+ }
+
+ return {
+ status,
+ message,
+ destinationResponse,
+ response: responseWithIndividualEvents,
+ };
+ }
+
+ // in case of failure status, populate response to maintain len(metadata)=len(response)
+ const errorMessage = response.error?.message || 'unknown error format';
+ for (const metadata of rudderJobMetadata) {
+ responseWithIndividualEvents.push({
+ statusCode: 500,
+ metadata,
+ error: errorMessage,
+ });
+ }
+
+ throw new TransformerProxyError(
+ `Campaign Manager: Error transformer proxy v1 during CAMPAIGN_MANAGER response transformation`,
+ 500,
+ {
+ [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status),
+ },
+ destinationResponse,
+ getAuthErrCategoryFromStCode(status),
+ responseWithIndividualEvents,
+ );
+};
+
+function networkHandler() {
+ this.prepareProxy = prepareProxyRequest;
+ this.proxy = proxyRequest;
+ this.processAxiosResponse = processAxiosResponse;
+ this.responseHandler = responseHandler;
+}
+
+module.exports = { networkHandler };
diff --git a/src/v0/sources/webhook/transform.js b/src/v1/sources/webhook/transform.js
similarity index 81%
rename from src/v0/sources/webhook/transform.js
rename to src/v1/sources/webhook/transform.js
index 3a756ef63b8..fc13424b8a4 100644
--- a/src/v0/sources/webhook/transform.js
+++ b/src/v1/sources/webhook/transform.js
@@ -1,4 +1,4 @@
-const { removeUndefinedAndNullValues, generateUUID } = require('../../util');
+const { removeUndefinedAndNullValues, generateUUID } = require('../../../v0/util');
function processEvent(event) {
const payload = {
@@ -10,7 +10,8 @@ function processEvent(event) {
return payload;
}
-function process(event) {
+function process(inputEvent) {
+ const { event } = inputEvent;
const response = processEvent(event);
return removeUndefinedAndNullValues(response);
}
diff --git a/src/warehouse/identity.js b/src/warehouse/identity.js
index 4326dddfc67..c34a66a481c 100644
--- a/src/warehouse/identity.js
+++ b/src/warehouse/identity.js
@@ -1,5 +1,5 @@
const _ = require('lodash');
-const { InstrumentationError } = require('../v0/util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const { getVersionedUtils } = require('./util');
const identityEnabledWarehouses = ['snowflake', 'bq'];
diff --git a/src/warehouse/index.js b/src/warehouse/index.js
index dd5116f00e0..d88904b4a86 100644
--- a/src/warehouse/index.js
+++ b/src/warehouse/index.js
@@ -7,7 +7,8 @@ const {
isObject,
isBlank,
isValidJsonPathKey,
- getKeysFromJsonPaths,
+ isValidLegacyJsonPathKey,
+ keysFromJsonPaths,
validTimestamp,
getVersionedUtils,
isRudderSourcesEvent,
@@ -24,7 +25,7 @@ const whScreenColumnMappingRules = require('./config/WHScreenConfig.js');
const whGroupColumnMappingRules = require('./config/WHGroupConfig.js');
const whAliasColumnMappingRules = require('./config/WHAliasConfig.js');
const { isDataLakeProvider } = require('./config/helpers');
-const { InstrumentationError } = require('../v0/util/errorTypes');
+const { InstrumentationError } = require('@rudderstack/integrations-lib');
const whExtractEventTableColumnMappingRules = require('./config/WHExtractEventTableConfig.js');
const maxColumnsInEvent = parseInt(process.env.WH_MAX_COLUMNS_IN_EVENT || '200', 10);
@@ -195,7 +196,6 @@ function setDataFromColumnMappingAndComputeColumnTypes(
columnTypes = {context_library_name: 'string', context_library_version: 'string'}
*/
-
function setDataFromInputAndComputeColumnTypes(
utils,
eventType,
@@ -203,12 +203,26 @@ function setDataFromInputAndComputeColumnTypes(
input,
columnTypes,
options,
+ completePrefix = '',
+ completeLevel = 0,
prefix = '',
level = 0,
) {
if (!input || !isObject(input)) return;
Object.keys(input).forEach((key) => {
- if (isValidJsonPathKey(eventType, `${prefix + key}`, input[key], level, options.jsonKeys)) {
+ const isValidLegacyJSONPath = isValidLegacyJsonPathKey(
+ eventType,
+ `${prefix + key}`,
+ level,
+ options.jsonLegacyPathKeys,
+ );
+ const isValidJSONPath = isValidJsonPathKey(
+ `${completePrefix + key}`,
+ completeLevel,
+ options.jsonPathKeys,
+ );
+
+ if (isValidJSONPath || isValidLegacyJSONPath) {
if (isBlank(input[key])) {
return;
}
@@ -232,6 +246,8 @@ function setDataFromInputAndComputeColumnTypes(
input[key],
columnTypes,
options,
+ `${completePrefix + key}_`,
+ completeLevel + 1,
`${prefix + key}_`,
level + 1,
);
@@ -321,7 +337,10 @@ function addJsonKeysToOptions(options) {
if (options.destJsonPaths) {
jsonPaths.push(...options.destJsonPaths.split(','));
}
- options.jsonKeys = getKeysFromJsonPaths(jsonPaths);
+
+ const keys = keysFromJsonPaths(jsonPaths);
+ options.jsonPathKeys = keys.jsonPathKeys;
+ options.jsonLegacyPathKeys = keys.jsonLegacyPathKeys;
}
/*
@@ -583,6 +602,8 @@ function processWarehouseMessage(message, options) {
message.context,
commonColumnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
@@ -605,6 +626,8 @@ function processWarehouseMessage(message, options) {
message.properties,
eventTableColumnTypes,
options,
+ `${eventType + '_properties_'}`,
+ 2,
);
setDataFromColumnMappingAndComputeColumnTypes(
utils,
@@ -658,6 +681,8 @@ function processWarehouseMessage(message, options) {
message.context,
commonColumnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
setDataFromColumnMappingAndComputeColumnTypes(
@@ -732,6 +757,8 @@ function processWarehouseMessage(message, options) {
message.properties,
eventTableColumnTypes,
options,
+ `${eventType + '_properties_'}`,
+ 2,
);
setDataFromInputAndComputeColumnTypes(
utils,
@@ -740,6 +767,8 @@ function processWarehouseMessage(message, options) {
message.userProperties,
eventTableColumnTypes,
options,
+ `${eventType + '_userProperties_'}`,
+ 2,
);
setDataFromColumnMappingAndComputeColumnTypes(
utils,
@@ -794,6 +823,8 @@ function processWarehouseMessage(message, options) {
message.userProperties,
commonColumnTypes,
options,
+ `${eventType + '_userProperties_'}`,
+ 2,
);
setDataFromInputAndComputeColumnTypes(
utils,
@@ -802,6 +833,8 @@ function processWarehouseMessage(message, options) {
message.context ? message.context.traits : {},
commonColumnTypes,
options,
+ `${eventType + '_context_traits_'}`,
+ 3,
);
setDataFromInputAndComputeColumnTypes(
utils,
@@ -810,6 +843,8 @@ function processWarehouseMessage(message, options) {
message.traits,
commonColumnTypes,
options,
+ `${eventType + '_traits_'}`,
+ 2,
'',
);
@@ -821,6 +856,8 @@ function processWarehouseMessage(message, options) {
message.context,
commonColumnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
@@ -925,6 +962,8 @@ function processWarehouseMessage(message, options) {
message.properties,
columnTypes,
options,
+ `${eventType + '_properties_'}`,
+ 2,
);
// set rudder properties after user set properties to prevent overwriting
setDataFromInputAndComputeColumnTypes(
@@ -934,6 +973,8 @@ function processWarehouseMessage(message, options) {
message.context,
columnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
setDataFromColumnMappingAndComputeColumnTypes(
@@ -992,6 +1033,8 @@ function processWarehouseMessage(message, options) {
message.traits,
columnTypes,
options,
+ `${eventType + '_traits_'}`,
+ 2,
);
setDataFromInputAndComputeColumnTypes(
utils,
@@ -1000,6 +1043,8 @@ function processWarehouseMessage(message, options) {
message.context,
columnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
setDataFromColumnMappingAndComputeColumnTypes(
@@ -1046,6 +1091,8 @@ function processWarehouseMessage(message, options) {
message.traits,
columnTypes,
options,
+ `${eventType + '_traits_'}`,
+ 2,
);
setDataFromInputAndComputeColumnTypes(
utils,
@@ -1054,6 +1101,8 @@ function processWarehouseMessage(message, options) {
message.context,
columnTypes,
options,
+ `${eventType + '_context_'}`,
+ 2,
'context_',
);
setDataFromColumnMappingAndComputeColumnTypes(
diff --git a/src/warehouse/util.js b/src/warehouse/util.js
index b965ecb0295..79981249e78 100644
--- a/src/warehouse/util.js
+++ b/src/warehouse/util.js
@@ -3,7 +3,7 @@ const get = require('get-value');
const v0 = require('./v0/util');
const v1 = require('./v1/util');
-const { PlatformError, InstrumentationError } = require('../v0/util/errorTypes');
+const { PlatformError, InstrumentationError } = require('@rudderstack/integrations-lib');
const minTimeInMs = Date.parse('0001-01-01T00:00:00Z');
const maxTimeInMs = Date.parse('9999-12-31T23:59:59.999Z');
@@ -15,26 +15,77 @@ const isObject = (value) => {
return value != null && (type === 'object' || type === 'function') && !Array.isArray(value);
};
-const isValidJsonPathKey = (eventType, key, val, level, jsonKeys = {}) => {
+const isValidJsonPathKey = (key, level, jsonKeys = {}) => {
+ return jsonKeys[key] === level;
+};
+const isValidLegacyJsonPathKey = (eventType, key, level, jsonKeys = {}) => {
return eventType === 'track' && jsonKeys[key] === level;
};
const isBlank = (value) => {
return _.isEmpty(_.toString(value));
};
+
/*
- * input => ["a", "b.c"]
- * output => { "a": 0, "b_c": 1}
+This function takes in an array of json paths and returns an object with keys as the json path and value as the position of the key in the json path
+Example:
+Input:
+[
+ "a",
+ "b.c"
+]
+Output:
+{
+ "a": 0,
+ "b_c": 1
+}
+
+Input:
+[
+ "track.context.a",
+ "track.properties.b",
+ "pages.properties.c.d",
+ "groups.traits.e.f"
+]
+Output:
+{
+ "track_context_a": 2,
+ "track_properties_b": 2,
+ "pages_properties_c_d": 3,
+ "groups_traits_e_f": 3
+}
*/
-const getKeysFromJsonPaths = (jsonPaths) => {
- const jsonKeys = {};
+const keysFromJsonPaths = (jsonPaths) => {
+ const jsonPathKeys = {};
+ const jsonLegacyPathKeys = {};
+
+ const supportedEventPrefixes = [
+ 'track.',
+ 'identify.',
+ 'page.',
+ 'screen.',
+ 'alias.',
+ 'group.',
+ 'extract.',
+ ];
+
jsonPaths.forEach((jsonPath) => {
- if (jsonPath.trim()) {
- const paths = jsonPath.trim().split('.');
- jsonKeys[paths.join('_')] = paths.length - 1;
+ const trimmedJSONPath = jsonPath.trim();
+ if (!trimmedJSONPath) {
+ return;
+ }
+
+ const paths = trimmedJSONPath.split('.');
+ const key = paths.join('_');
+ const pos = paths.length - 1;
+
+ if (supportedEventPrefixes.some((prefix) => trimmedJSONPath.startsWith(prefix))) {
+ jsonPathKeys[key] = pos;
+ return;
}
+ jsonLegacyPathKeys[key] = pos;
});
- return jsonKeys;
+ return { jsonPathKeys, jsonLegacyPathKeys };
};
// https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
@@ -98,7 +149,8 @@ module.exports = {
isObject,
isBlank,
isValidJsonPathKey,
- getKeysFromJsonPaths,
+ isValidLegacyJsonPathKey,
+ keysFromJsonPaths,
timestampRegex,
validTimestamp,
getVersionedUtils,
diff --git a/src/warehouse/v1/util.js b/src/warehouse/v1/util.js
index 8f44a17b8e6..1c44a2385e9 100644
--- a/src/warehouse/v1/util.js
+++ b/src/warehouse/v1/util.js
@@ -2,7 +2,7 @@ const _ = require('lodash');
const reservedANSIKeywordsMap = require('../config/ReservedKeywords.json');
const { isDataLakeProvider } = require('../config/helpers');
-const { TransformationError } = require('../../v0/util/errorTypes');
+const { TransformationError } = require('@rudderstack/integrations-lib');
function safeTableName(options, name = '') {
const { provider } = options;
diff --git a/swagger/components/examples/batch/success.yaml b/swagger/components/examples/batch/success.yaml
index 435f07ceff1..657f2dbde03 100644
--- a/swagger/components/examples/batch/success.yaml
+++ b/swagger/components/examples/batch/success.yaml
@@ -22,7 +22,7 @@ batchedRequest:
plan: 'Open source'
term: 'keyword'
test: 'other value'
- email: 'chandra+r@rudderlabs.com'
+ email: 'test@rudderstack.com'
logins: 5
medium: 'medium'
source: 'google'
diff --git a/swagger/components/examples/processor/success.yaml b/swagger/components/examples/processor/success.yaml
index 177a610a8eb..08924c88138 100644
--- a/swagger/components/examples/processor/success.yaml
+++ b/swagger/components/examples/processor/success.yaml
@@ -9,15 +9,15 @@ output:
advertiser_id: 'advertiserId123'
user_data:
em:
- - 7e4f504f2f6ec2d363365ec866894c6e2c4c1609889f33535bbfeeec3c33a617
+ - b9ecbd1d999a0f17d442a08971caeea92d770dba89ac900688ecede233d652df
ph:
- - 6bd20b059b192cded172dfd75d49bd91d6a4ad09b56ace298db8a067cbef310a
+ - 92b5072176e723878b5e06ff3ca61898e4eb74e8c46642a0f2db800b17364ab0
ge:
- 62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a
ln:
- - b0e6036f293e37324425377b579507ee4455a3bdf74447e5fd0ba1b512e739c2
+ - dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251
fn:
- - a4371f70c2cc620598bdd98dca42c1cfb2d57da40886fc19c10491cd7f666cd7
+ - 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
client_ip_address: '[::1]'
custom_data:
num_items: 11
diff --git a/swagger/components/examples/router/success.yaml b/swagger/components/examples/router/success.yaml
index 2452ff65e33..9d0f80807d2 100644
--- a/swagger/components/examples/router/success.yaml
+++ b/swagger/components/examples/router/success.yaml
@@ -8,15 +8,15 @@ body:
advertiser_id: 'advertiserId123'
user_data:
em:
- - '7e4f504f2f6ec2d363365ec866894c6e2c4c1609889f33535bbfeeec3c33a617'
+ - 'b9ecbd1d999a0f17d442a08971caeea92d770dba89ac900688ecede233d652df'
ph:
- - '6bd20b059b192cded172dfd75d49bd91d6a4ad09b56ace298db8a067cbef310a'
+ - '92b5072176e723878b5e06ff3ca61898e4eb74e8c46642a0f2db800b17364ab0'
ge:
- '62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a'
ln:
- - 'b0e6036f293e37324425377b579507ee4455a3bdf74447e5fd0ba1b512e739c2'
+ - 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251'
fn:
- - 'a4371f70c2cc620598bdd98dca42c1cfb2d57da40886fc19c10491cd7f666cd7'
+ - '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'
client_ip_address: '[::1]'
custom_data:
num_items: 11
diff --git a/test/__mocks__/axios.js b/test/__mocks__/axios.js
index c5d0f13b0d4..6a3139c4e96 100644
--- a/test/__mocks__/axios.js
+++ b/test/__mocks__/axios.js
@@ -40,7 +40,6 @@ const { sendgridGetRequestHandler } = require("./sendgrid.mock");
const { sendinblueGetRequestHandler } = require("./sendinblue.mock");
const { courierGetRequestHandler } = require("./courier.mock");
const { brazePostRequestHandler } = require("./braze.mock");
-const {optimizelyFullStackGetRequestHandler} = require("./optimizely_fullstack.mock");
const urlDirectoryMap = {
"api.hubapi.com": "hs",
@@ -55,7 +54,6 @@ const urlDirectoryMap = {
"api.sendinblue.com": "sendinblue",
"api.criteo.com": "criteo_audience",
"api.courier.com": "courier",
- "cdn.optimizely.com": "optimizely_fullstack",
};
const fs = require("fs");
@@ -88,7 +86,7 @@ function getData(url) {
function get(url, options) {
const mockData = getData(url);
- if (url.includes("https://api.kustomerapp.com")) {
+ if (url.includes("https://api.kustomerapp.com") || url.includes("https://api.prod2.kustomerapp.com")) {
return new Promise((resolve, reject) => {
resolve(kustomerGetRequestHandler(url));
});
diff --git a/test/__mocks__/data/canny/response.json b/test/__mocks__/data/canny/response.json
index a293a3b6946..b4dce15ed2c 100644
--- a/test/__mocks__/data/canny/response.json
+++ b/test/__mocks__/data/canny/response.json
@@ -3,12 +3,12 @@
"data": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@abc.com",
+ "email": "test@rudderstack.com",
"id": "52d14c90fff7c80abcd12345",
"isAdmin": true,
"lastActivity": "2022-07-18T14:24:43.632Z",
- "name": "Rohith Kumar Kaza",
- "url": "https://rohith-kaza-rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://ruderstack.canny.io/admin/users/dummyUser",
"userID": null
}
}
diff --git a/test/__mocks__/data/criteo_audience/proxy_response.json b/test/__mocks__/data/criteo_audience/proxy_response.json
index 0950419ea76..a16dbf26cd5 100644
--- a/test/__mocks__/data/criteo_audience/proxy_response.json
+++ b/test/__mocks__/data/criteo_audience/proxy_response.json
@@ -2,6 +2,23 @@
"https://api.criteo.com/2022-10/audiences/34894/contactlist": {
"status": 200
},
+ "https://api.criteo.com/2022-10/audiences/3485/contactlist": {
+ "code": "400",
+ "response": {
+ "data": {
+ "errors": [
+ {
+ "traceIdentifier": "80a1a0ba3981b04da847d05700752c77",
+ "type": "authorization",
+ "code": "authorization-token-expired",
+ "instance": "/2022-10/audiences/123/contactlist",
+ "title": "The authorization token has expired"
+ }
+ ]
+ },
+ "status": 401
+ }
+ },
"https://api.criteo.com/2022-10/audiences/34895/contactlist": {
"code": "400",
"response": {
diff --git a/test/__mocks__/data/google_adwords_offline_conversion/response.json b/test/__mocks__/data/google_adwords_offline_conversion/response.json
index d9e763c3ace..285ef565097 100644
--- a/test/__mocks__/data/google_adwords_offline_conversion/response.json
+++ b/test/__mocks__/data/google_adwords_offline_conversion/response.json
@@ -1,17 +1,17 @@
{
- "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs:create": {
+ "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs:create": {
"data": {
"resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE"
},
"status": 200
},
- "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs:create": {
+ "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs:create": {
"data": {
"resourceName": "customers/111-222-3333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID"
},
"status": 200
},
- "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs:create": {
+ "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs:create": {
"status": 401,
"data": {
"error": {
@@ -21,11 +21,11 @@
}
}
},
- "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": {
+ "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:addOperations": {
"status": 200,
"data": {}
},
- "https://googleads.googleapis.com/v13/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": {
+ "https://googleads.googleapis.com/v14/customers/11122233331/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_FOR_ADD_FAILURE:addOperations": {
"status": 400,
"data": {
"error": {
@@ -34,7 +34,7 @@
"status": "INVALID_ARGUMENT",
"details": [
{
- "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure",
+ "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
@@ -67,13 +67,13 @@
}
}
},
- "https://googleads.googleapis.com/v13/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": {
+ "https://googleads.googleapis.com/v14/customers/1112223333/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID:run": {
"status": 200,
"data": {
"name": "customers/111-222-3333/operations/abcd="
}
},
- "https://googleads.googleapis.com/v13/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": {
+ "https://googleads.googleapis.com/v14/customers/customerid/offlineUserDataJobs/OFFLINE_USER_DATA_JOB_ID_ADD_FAILURE:addOperations": {
"status": 400,
"data": {
"error": {
@@ -82,7 +82,7 @@
"status": "INVALID_ARGUMENT",
"details": [
{
- "@type": "type.googleapis.com/google.ads.googleads.v13.errors.GoogleAdsFailure",
+ "@type": "type.googleapis.com/google.ads.googleads.v14.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
diff --git a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json
index 93689bb0cbf..5d3ac9496ba 100644
--- a/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json
+++ b/test/__mocks__/data/google_adwords_remarketing_lists/proxy_response.json
@@ -1,23 +1,24 @@
{
- "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs:create": {
+ "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs:create": {
"status": 200,
"data": {
"resourceName": "customers/9249589672/offlineUserDataJobs/18025019461"
}
},
- "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": {
- "status": 200
+ "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:addOperations": {
+ "status": 200,
+ "data": {}
},
- "https://googleads.googleapis.com/v13/customers/7693729833/offlineUserDataJobs/18025019461:run": {
+ "https://googleads.googleapis.com/v14/customers/7693729833/offlineUserDataJobs/18025019461:run": {
"status": 200
},
- "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs:create": {
+ "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs:create": {
"status": 200,
"data": {
"resourceName": "customers/9249589672/offlineUserDataJobs/18025019462"
}
},
- "https://googleads.googleapis.com/v13/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": {
+ "https://googleads.googleapis.com/v14/customers/7693729834/offlineUserDataJobs/18025019462:addOperations": {
"response": {
"data": {
"error": {
@@ -60,7 +61,7 @@
"status": 400
}
},
- "https://googleads.googleapis.com/v13/customers/1234567890/googleAds:searchStream": {
+ "https://googleads.googleapis.com/v14/customers/1234567890/googleAds:searchStream": {
"response": {
"data": [
{
@@ -74,11 +75,11 @@
"status": 401
}
},
- "https://googleads.googleapis.com/v13/customers/1234567899/googleAds:searchStream": {
+ "https://googleads.googleapis.com/v14/customers/1234567899/googleAds:searchStream": {
"response": "",
"code": "ECONNREFUSED"
},
- "https://googleads.googleapis.com/v13/customers/1234567891/googleAds:searchStream": {
+ "https://googleads.googleapis.com/v14/customers/1234567891/googleAds:searchStream": {
"data": [
{
"results": [
@@ -95,7 +96,7 @@
],
"status": 200
},
- "https://googleads.googleapis.com/v13/customers/1234567891:uploadConversionAdjustments": {
+ "https://googleads.googleapis.com/v14/customers/1234567891:uploadConversionAdjustments": {
"data": [
{
"adjustmentType": "ENHANCEMENT",
diff --git a/test/__mocks__/data/hs/response.json b/test/__mocks__/data/hs/response.json
index 721ee644100..e5522754662 100644
--- a/test/__mocks__/data/hs/response.json
+++ b/test/__mocks__/data/hs/response.json
@@ -3,6 +3,18 @@
{ "name": "company_size", "type": "string" },
{ "name": "date_of_birth", "type": "string" },
{ "name": "days_to_close", "type": "number" },
+ {
+ "name": "date_submitted",
+ "type": "date"
+ },
+ {
+ "name": "days_create",
+ "type": "date"
+ },
+ {
+ "name": "days_closed",
+ "type": "date"
+ },
{ "name": "degree", "type": "string" },
{ "name": "field_of_study", "type": "string" },
{ "name": "first_conversion_date", "type": "datetime" },
@@ -192,6 +204,18 @@
{ "name": "company_size", "type": "string" },
{ "name": "date_of_birth", "type": "string" },
{ "name": "days_to_close", "type": "number" },
+ {
+ "name": "date_submitted",
+ "type": "date"
+ },
+ {
+ "name": "date_created",
+ "type": "date"
+ },
+ {
+ "name": "date_closed",
+ "type": "date"
+ },
{ "name": "degree", "type": "string" },
{ "name": "field_of_study", "type": "string" },
{ "name": "first_conversion_date", "type": "datetime" },
diff --git a/test/__mocks__/data/intercom/proxy_response.json b/test/__mocks__/data/intercom/proxy_response.json
new file mode 100644
index 00000000000..3c5a3d96389
--- /dev/null
+++ b/test/__mocks__/data/intercom/proxy_response.json
@@ -0,0 +1,15 @@
+{
+ "https://api.intercom.io/users/test1": {
+ "data": {
+ "type": "error.list",
+ "request_id": "000on04msi4jpk7d3u60",
+ "errors": [
+ {
+ "code": "Request Timeout",
+ "message": "The server would not wait any longer for the client"
+ }
+ ]
+ },
+ "status": 408
+ }
+}
diff --git a/test/__mocks__/data/marketo/proxy_response.json b/test/__mocks__/data/marketo/proxy_response.json
deleted file mode 100644
index 4f5bfea7a66..00000000000
--- a/test/__mocks__/data/marketo/proxy_response.json
+++ /dev/null
@@ -1,282 +0,0 @@
-{
- "https://testMunchkin3.mktorest.com/bulk/v1/leads/batch/12345/warnings.json": {
- "status": 200
- },
- "https://testMunchkin3.mktorest.com/bulk/v1/leads/batch/12345/failures.json": {
- "status": 200
- },
- "https://a.mktorest.com/bulk/v1/leads/batch/12345/warnings.json": {
- "status": 200,
- "data": "data"
- },
- "https://a.mktorest.com/bulk/v1/leads/batch/12345/failures.json": {
- "status": 200,
- "data": "data"
- },
- "https://testMunchkin3.mktorest.com/bulk/v1/leads/batch/1234.json": {
- "status": 200,
- "data": {
- "errors": [
- {
- "message": "Any 400 error",
- "code": 500
- }
- ]
- },
- "response": {
- "statusText": "Any 500 error",
- "status": 502
- }
- },
- "https://testMunchkin4.mktorest.com/bulk/v1/leads/batch/1234.json": {
- "status": 200,
- "data": {
- "errors": [
- {
- "message": "Any 400 error",
- "code": 1000
- }
- ]
- }
- },
- "https://a.mktorest.com/bulk/v1/leads/batch/1234.json": {
- "status": 200,
- "data": {
- "requestId": "13402#17e7238a1b9",
- "result": [
- {
- "batchId": 1234,
- "importId": "1234",
- "status": "Complete",
- "numOfLeadsProcessed": 1,
- "numOfRowsFailed": 0,
- "numOfRowsWithWarning": 0,
- "message": "Import succeeded, 1 records imported (1 members)"
- }
- ],
- "success": true
- }
- },
- "https://testMunchkin4.mktorest.com/bulk/v1/leads.json": {
- "status": 200,
- "data": {
- "requestId": "125f1#17e710ba1fd",
- "success": false,
- "errors": [
- {
- "message": "Any other error"
- }
- ]
- }
- },
- "https://testMunchkin4.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://testMunchkin3.mktorest.com/bulk/v1/leads.json": {
- "status": 200,
- "data": {
- "requestId": "125f1#17e710ba1fd",
- "success": false,
- "errors": [
- {
- "message": "Empty file"
- }
- ]
- }
- },
- "https://testMunchkin3.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://testMunchkin2.mktorest.com/bulk/v1/leads.json": {
- "status": 200,
- "data": {
- "requestId": "125f1#17e710ba1fd",
- "success": false,
- "errors": [
- {
- "message": "There are 10 imports currently being processed. Please try again later"
- }
- ]
- }
- },
- "https://testMunchkin2.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://testMunchkin1.mktorest.com/bulk/v1/leads.json": {
- "status": 400
- },
- "https://testMunchkin1.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://testMunchkin.mktorest.com/bulk/v1/leads.json": {
- "status": 200,
- "data": {
- "requestId": "125f1#17e710ba1fd",
- "success": false,
- "errors": [
- {
- "code": "1006",
- "message": "Header field 'a' not found"
- }
- ]
- }
- },
- "https://testMunchkin.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://a.mktorest.com/identity/oauth/token?client_id=b&client_secret=forThrottle&grant_type=client_credentials": {
- "status": 500,
- "response": {
- "status": 502,
- "statusText": "throttled"
- }
- },
- "https://a.mktorest.com/identity/oauth/token?client_id=wrongClientId&client_secret=c&grant_type=client_credentials": {
- "status": 400,
- "code": 401,
- "statusText": "Unauthorized"
- },
- "https://wrongMunchkin.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 400,
- "code": "ENOTFOUND"
- },
- "https://a.mktorest.com/identity/oauth/token?client_id=b&client_secret=c&grant_type=client_credentials": {
- "status": 200,
- "data": {
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://a.mktorest.com/bulk/v1/leads.json": {
- "status": 200,
- "data": {
- "success": true,
- "result": [
- {
- "importId": "TestImportId"
- }
- ],
- "access_token": "abc",
- "token_type": "bearer",
- "expires_in": 2340,
- "scope": "integrations@rudderstack.com"
- }
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test1": {
- "data": {
- "requestId": "664#17dae8c3d48",
- "result": [
- {
- "id": 1328328,
- "status": "updated"
- }
- ],
- "success": true
- },
- "status": 200,
- "statusText": "OK"
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test2": {
- "data": {
- "requestId": "a61c#17daea5968a",
- "success": false,
- "errors": [
- {
- "code": "601",
- "message": "Access token invalid"
- }
- ]
- },
- "status": 200,
- "statusText": "OK"
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test3": {
- "data": {
- "requestId": "a61c#17daea5968a",
- "success": false,
- "errors": [
- {
- "code": "610",
- "message": "Requested resource not found"
- }
- ]
- },
- "status": 200,
- "statusText": "OK"
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test4": {
- "response": {
- "data": {
- "code": 413,
- "payload_size_bytes": 86321233,
- "message": "Payload exceeded 1MB limit."
- },
- "status": 413,
- "statusText": "Request Entity Too Large",
- "headers": {
- "date": "Sat, 11 Dec 2021 15:08:22 GMT",
- "content-type": "application/json",
- "content-length": "93",
- "connection": "keep-alive",
- "access-control-allow-origin": "*",
- "access-control-allow-methods": "GET, POST",
- "strict-transport-security": "max-age=15768000"
- }
- }
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test5": {
- "response": {}
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test6": {
- "response": ""
- },
- "https://mktId.mktorest.com/rest/v1/leads.json/test7": {
- "code": "[ENOTFOUND] :: DNS lookup failed"
- },
- "https://unhandled_exception_in_proxy_req.mktorest.com/rest/v1/leads.json": {
- "data": {
- "requestId": "142e4#1835b117b76",
- "success": false,
- "errors": [
- {
- "code": "random_marketo_code",
- "message": "problem"
- }
- ]
- },
- "status": 200,
- "statusText": "OK"
- }
-}
diff --git a/test/__mocks__/data/marketo_static_list/proxy_response.json b/test/__mocks__/data/marketo_static_list/proxy_response.json
index 5c00ced9416..290a4f5fbf6 100644
--- a/test/__mocks__/data/marketo_static_list/proxy_response.json
+++ b/test/__mocks__/data/marketo_static_list/proxy_response.json
@@ -1,4 +1,31 @@
{
+ "https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=110&id=111&id=112": {
+ "data": {
+ "requestId": "b6d1#18a8d2c10e7",
+ "result": [
+ {
+ "id": 110,
+ "status": "skipped",
+ "reasons": [
+ {
+ "code": "1015",
+ "message": "Lead not in list"
+ }
+ ]
+ },
+ {
+ "id": 111,
+ "status": "removed"
+ },
+ {
+ "id": 112,
+ "status": "removed"
+ }
+ ],
+ "success": true
+ },
+ "status": 200
+ },
"https://marketo_acct_id_success.mktorest.com/rest/v1/lists/1234/leads.json?id=1&id=2&id=3": {
"data": {
"requestId": "68d8#1846058ee27",
@@ -60,12 +87,11 @@
"status": "skipped",
"reasons": [
{
- "code": "1004",
- "message": "Lead not found"
+ "code": "1015",
+ "message": "Lead not in list"
}
]
},
-
"success": true
},
"status": 200
diff --git a/test/__mocks__/data/mautic/response.json b/test/__mocks__/data/mautic/response.json
index 7af8b6ee780..13ec88e3015 100644
--- a/test/__mocks__/data/mautic/response.json
+++ b/test/__mocks__/data/mautic/response.json
@@ -11,9 +11,9 @@
"dateAdded": "2022-08-21T16:30:21+00:00",
"dateModified": "2022-08-21T18:08:06+00:00",
"createdBy": 1,
- "createdByUser": "shruti Paul",
+ "createdByUser": "shruti rudderlabs",
"modifiedBy": 1,
- "modifiedByUser": "shruti Paul",
+ "modifiedByUser": "shruti rudderlabs",
"id": 247,
"points": 123,
"color": null,
@@ -81,8 +81,8 @@
"is_fixed": "1",
"properties": "a:0:{}",
"default_value": null,
- "value": "Ganguly",
- "normalizedValue": "Ganguly"
+ "value": "Test",
+ "normalizedValue": "Test"
},
"company": {
"id": "4",
@@ -563,7 +563,7 @@
"last_active": null,
"title": "abcd",
"firstname": "hijibiji",
- "lastname": "Ganguly",
+ "lastname": "Test",
"company": null,
"position": "lead",
"email": "hijibi@gmail.com",
@@ -640,9 +640,9 @@
"dateAdded": "2022-08-18T12:19:27+00:00",
"dateModified": "2022-08-23T11:46:30+00:00",
"createdBy": 1,
- "createdByUser": "Jain Anant",
+ "createdByUser": "test rudderlabs",
"modifiedBy": 1,
- "modifiedByUser": "Jain Anant",
+ "modifiedByUser": "test rudderlabs",
"id": 248,
"points": 0,
"color": null,
@@ -697,8 +697,8 @@
"is_fixed": "1",
"properties": "a:0:{}",
"default_value": null,
- "value": "Anant",
- "normalizedValue": "Anant"
+ "value": "rudderstack",
+ "normalizedValue": "rudderstack"
},
"lastname": {
"id": "3",
@@ -1191,7 +1191,7 @@
"points": 0,
"last_active": "2022-08-23 11:46:27",
"title": null,
- "firstname": "Anant",
+ "firstname": "rudderstack",
"lastname": "kumar",
"company": null,
"position": null,
@@ -1264,9 +1264,9 @@
"dateAdded": "2022-08-18T12:20:05+00:00",
"dateModified": "2022-08-24T09:19:10+00:00",
"createdBy": 1,
- "createdByUser": "Jain Anant",
+ "createdByUser": "test rudderlabs",
"modifiedBy": 1,
- "modifiedByUser": "Jain Anant",
+ "modifiedByUser": "test rudderlabs",
"id": 249,
"points": 0,
"color": null,
@@ -1888,9 +1888,9 @@
"dateAdded": "2022-08-18T13:20:27+00:00",
"dateModified": "2022-08-18T13:20:27+00:00",
"createdBy": 1,
- "createdByUser": "Jain Anant",
+ "createdByUser": "test rudderlabs",
"modifiedBy": 1,
- "modifiedByUser": "Jain Anant",
+ "modifiedByUser": "test rudderlabs",
"id": 254,
"points": 0,
"color": null,
diff --git a/test/__mocks__/data/optimizely_fullstack/response.json b/test/__mocks__/data/optimizely_fullstack/response.json
deleted file mode 100644
index e83dd8197f0..00000000000
--- a/test/__mocks__/data/optimizely_fullstack/response.json
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "https://cdn.optimizely.com/datafiles/abc.json": {
- "accountId": "test_account_id",
- "projectId": "test_project_id",
- "revision": "45",
- "attributes": [
- {
- "id": "test_attribute_id_1",
- "key": "gender"
- },
- {
- "id": "test_attribute_id_2",
- "key": "name"
- },
- {
- "id": "test_attribute_id_3",
- "key": "userId"
- },
- {
- "id": "test_attribute_id_4",
- "key": "anonymousId"
- },
- {
- "id": "test_attribute_id_5",
- "key": "company"
- }
- ],
- "audiences": [
- {
- "id": "$opt_test_audience",
- "name": "Optimizely-Generated Audience for Backwards Compatibility",
- "conditions": "[\"or\", {\"match\": \"exact\", \"name\": \"$opt_test_attribute\", \"type\": \"custom_attribute\", \"value\": \"$opt_test_value\"}]"
- }
- ],
- "version": "4",
- "events": [
- {
- "id": "test_event_id_1",
- "experimentIds": ["test_experiment_id"],
- "key": "Product Added"
- },
- {
- "id": "test_event_id_2",
- "experimentIds": ["test_experiment_id"],
- "key": "Product Removed"
- },
- {
- "id": "test_event_id_3",
- "experimentIds": ["test_experiment_id"],
- "key": "Order Placed"
- },
- {
- "id": "test_event_id_4",
- "experimentIds": ["test_experiment_id"],
- "key": "Viewed Meal page"
- },
- {
- "id": "test_event_id_5",
- "experimentIds": ["test_experiment_id"],
- "key": "Viewed food page"
- },
- {
- "id": "test_event_id_6",
- "experimentIds": ["test_experiment_id"],
- "key": "Viewed Main screen"
- },
- {
- "id": "test_event_id_7",
- "experimentIds": ["test_experiment_id"],
- "key": "Home"
- },
- {
- "id": "test_event_id_8",
- "experimentIds": ["test_experiment_id"],
- "key": "Index"
- }
- ],
- "anonymizeIP": true,
- "botFiltering": false,
- "typedAudiences": [],
- "variables": [],
- "environmentKey": "production",
- "sdkKey": "test_sdk_key",
- "featureFlags": [
- {
- "id": "test_feature_flag_id",
- "key": "testfeature",
- "experimentIds": ["test_experiment_id"],
- "rolloutId": "test_rollout_id",
- "variables": [
- {
- "id": "test_variable_id",
- "key": "sort_method",
- "type": "string",
- "defaultValue": "alphabetical"
- }
- ]
- }
- ],
- "rollouts": [
- {
- "id": "test_rollout_id",
- "experiments": [
- {
- "forcedVariations": {},
- "id": "test_experiment_id",
- "key": "test_experiment_key",
- "status": "Running",
- "trafficAllocation": [
- {
- "entityId": "test_variation_id",
- "endOfRange": 10000
- }
- ],
- "variations": [
- {
- "id": "test_variation_id",
- "key": "test_variation_key",
- "variables": [
- {
- "id": "test_variable_id",
- "value": "alphabetical"
- }
- ],
- "featureEnabled": true
- }
- ],
- "layerId": "test_layer_id",
- "audienceIds": []
- }
- ]
- }
- ],
- "experiments": [
- {
- "forcedVariations": {},
- "id": "test_experiment_id",
- "key": "test_experiment_key",
- "status": "Running",
- "trafficAllocation": [
- {
- "entityId": "test_variation_id_1",
- "endOfRange": 5000
- },
- {
- "entityId": "test_variation_id_2",
- "endOfRange": 10000
- }
- ],
- "variations": [
- {
- "id": "test_variation_id_1",
- "key": "variation_1",
- "variables": [
- {
- "id": "test_variable_id",
- "value": "popular_first"
- }
- ],
- "featureEnabled": true
- },
- {
- "id": "test_variation_id_2",
- "key": "variation_2",
- "variables": [
- {
- "id": "test_variable_id",
- "value": "popular_first"
- }
- ],
- "featureEnabled": true
- }
- ],
- "layerId": "test_layer_id",
- "audienceIds": []
- }
- ],
- "groups": []
- }
-}
diff --git a/test/__mocks__/data/pardot/proxy_response.json b/test/__mocks__/data/pardot/proxy_response.json
deleted file mode 100644
index 53cf0d1255e..00000000000
--- a/test/__mocks__/data/pardot/proxy_response.json
+++ /dev/null
@@ -1,352 +0,0 @@
-{
- "https://pi.pardot.com/api/prospect/version/4/do/upsert/id/123435": {
- "data": {
- "@attributes": {
- "stat": "ok",
- "version": 1
- },
- "prospect": {
- "id": 123435,
- "campaign_id": 42213,
- "salutation": null,
- "first_name": "Roger12",
- "last_name": "Federer12",
- "email": "Roger12@waltair.io",
- "password": null,
- "company": null,
- "website": "https://rudderstack.com",
- "job_title": null,
- "department": null,
- "country": "AU",
- "address_one": null,
- "address_two": null,
- "city": null,
- "state": null,
- "territory": null,
- "zip": null,
- "phone": null,
- "fax": null,
- "source": null,
- "annual_revenue": null,
- "employees": null,
- "industry": null,
- "years_in_business": null,
- "comments": null,
- "notes": null,
- "score": 14,
- "grade": null,
- "last_activity_at": null,
- "recent_interaction": "Never active.",
- "crm_lead_fid": null,
- "crm_contact_fid": null,
- "crm_owner_fid": "00G2v000004WYXaEAO",
- "crm_account_fid": null,
- "salesforce_fid": null,
- "crm_last_sync": null,
- "crm_url": null,
- "is_do_not_email": null,
- "is_do_not_call": null,
- "opted_out": null,
- "is_reviewed": 1,
- "is_starred": null,
- "created_at": "2022-01-21 18:21:46",
- "updated_at": "2022-01-21 18:48:41",
- "campaign": {
- "id": 42113,
- "name": "Test",
- "crm_fid": "7012y000000MNOCLL4"
- },
- "assigned_to": {
- "user": {
- "id": 38443703,
- "email": "test_rudderstack@testcompany.com",
- "first_name": "Rudderstack",
- "last_name": "User",
- "job_title": null,
- "role": "Administrator",
- "account": 489853,
- "created_at": "2021-02-26 06:25:17",
- "updated_at": "2021-02-26 06:25:17"
- }
- },
- "Are_you_shipping_large_fragile_or_bulky_items": false,
- "Calendly": false,
- "Country_Code": "AU",
- "Currency": "AUD",
- "Inventory_or_Warehouse_Management_System": false,
- "Lead_Status": "New",
- "Marketing_Stage": "SAL",
- "Record_Type_ID": "TestCompany Lead",
- "profile": {
- "id": 304,
- "name": "Default",
- "profile_criteria": [
- {
- "id": 1500,
- "name": "Shipping Volume",
- "matches": "Unknown"
- },
- {
- "id": 1502,
- "name": "Industry",
- "matches": "Unknown"
- },
- {
- "id": 1506,
- "name": "Job Title",
- "matches": "Unknown"
- },
- {
- "id": 1508,
- "name": "Department",
- "matches": "Unknown"
- }
- ]
- },
- "visitors": null,
- "visitor_activities": null,
- "lists": null
- }
- },
- "status": 200,
- "statusText": "OK"
- },
- "https://pi.pardot.com/api/prospect/version/4/do/upsert/email/Roger_12@waltair.io": {
- "data": {
- "@attributes": {
- "stat": "ok",
- "version": 1
- },
- "prospect": {
- "id": 123435,
- "campaign_id": 42213,
- "salutation": null,
- "first_name": "Roger_12",
- "last_name": "Federer_12",
- "email": "Roger_12@waltair.io",
- "password": null,
- "company": null,
- "website": "https://rudderstack.com",
- "job_title": null,
- "department": null,
- "country": "AU",
- "address_one": null,
- "address_two": null,
- "city": null,
- "state": null,
- "territory": null,
- "zip": null,
- "phone": null,
- "fax": null,
- "source": null,
- "annual_revenue": null,
- "employees": null,
- "industry": null,
- "years_in_business": null,
- "comments": null,
- "notes": null,
- "score": 14,
- "grade": null,
- "last_activity_at": null,
- "recent_interaction": "Never active.",
- "crm_lead_fid": null,
- "crm_contact_fid": null,
- "crm_owner_fid": "00G2v000004WYXaEAO",
- "crm_account_fid": null,
- "salesforce_fid": null,
- "crm_last_sync": null,
- "crm_url": null,
- "is_do_not_email": null,
- "is_do_not_call": null,
- "opted_out": null,
- "is_reviewed": 1,
- "is_starred": null,
- "created_at": "2022-01-21 18:21:46",
- "updated_at": "2022-01-21 18:48:41",
- "campaign": {
- "id": 42113,
- "name": "Test",
- "crm_fid": "7012y000000MNOCLL4"
- },
- "assigned_to": {
- "user": {
- "id": 38443703,
- "email": "test_rudderstack@testcompany.com",
- "first_name": "Rudderstack",
- "last_name": "User",
- "job_title": null,
- "role": "Administrator",
- "account": 489853,
- "created_at": "2021-02-26 06:25:17",
- "updated_at": "2021-02-26 06:25:17"
- }
- },
- "Are_you_shipping_large_fragile_or_bulky_items": false,
- "Calendly": false,
- "Country_Code": "AU",
- "Currency": "AUD",
- "Inventory_or_Warehouse_Management_System": false,
- "Lead_Status": "New",
- "Marketing_Stage": "SAL",
- "Record_Type_ID": "TestCompany Lead",
- "profile": {
- "id": 304,
- "name": "Default",
- "profile_criteria": [
- {
- "id": 1500,
- "name": "Shipping Volume",
- "matches": "Unknown"
- },
- {
- "id": 1502,
- "name": "Industry",
- "matches": "Unknown"
- },
- {
- "id": 1506,
- "name": "Job Title",
- "matches": "Unknown"
- },
- {
- "id": 1508,
- "name": "Department",
- "matches": "Unknown"
- }
- ]
- },
- "visitors": null,
- "visitor_activities": null,
- "lists": null
- }
- },
- "status": 201,
- "statusText": "Created"
- },
- "https://pi.pardot.com/api/prospect/version/4/do/upsert/fid/00Q6r000002LKhTPVR": {
- "data": {
- "@attributes": {
- "stat": "ok",
- "version": 1
- },
- "prospect": {
- "id": 123435,
- "campaign_id": 42213,
- "salutation": null,
- "first_name": "Roger_12",
- "last_name": "Federer_12",
- "email": "Roger_12@federer.io",
- "password": null,
- "company": null,
- "website": "https://rudderstack.com",
- "job_title": null,
- "department": null,
- "country": "AU",
- "address_one": null,
- "address_two": null,
- "city": null,
- "state": null,
- "territory": null,
- "zip": null,
- "phone": null,
- "fax": null,
- "source": null,
- "annual_revenue": null,
- "employees": null,
- "industry": null,
- "years_in_business": null,
- "comments": null,
- "notes": null,
- "score": 14,
- "grade": null,
- "last_activity_at": null,
- "recent_interaction": "Never active.",
- "crm_lead_fid": "00Q6r000002LKhTPVR",
- "crm_contact_fid": null,
- "crm_owner_fid": "00G2v000004WYXaEAO",
- "crm_account_fid": null,
- "salesforce_fid": "00Q6r000002LKhTPVR",
- "crm_last_sync": "2022-01-21 18:47:37",
- "crm_url": "https://testcompany.my.salesforce.com/00Q6r000002LKhTPVR",
- "is_do_not_email": null,
- "is_do_not_call": null,
- "opted_out": null,
- "is_reviewed": 1,
- "is_starred": null,
- "created_at": "2022-01-21 18:21:46",
- "updated_at": "2022-01-21 18:48:41",
- "campaign": {
- "id": 42113,
- "name": "Test",
- "crm_fid": "7012y000000MNOCLL4"
- },
- "assigned_to": {
- "user": {
- "id": 38443703,
- "email": "test_rudderstack@testcompany.com",
- "first_name": "Rudderstack",
- "last_name": "User",
- "job_title": null,
- "role": "Administrator",
- "account": 489853,
- "created_at": "2021-02-26 06:25:17",
- "updated_at": "2021-02-26 06:25:17"
- }
- },
- "Are_you_shipping_large_fragile_or_bulky_items": false,
- "Calendly": false,
- "Country_Code": "AU",
- "Currency": "AUD",
- "Inventory_or_Warehouse_Management_System": false,
- "Lead_Status": "New",
- "Marketing_Stage": "SAL",
- "Record_Type_ID": "TestCompany Lead",
- "profile": {
- "id": 304,
- "name": "Default",
- "profile_criteria": [
- {
- "id": 1500,
- "name": "Shipping Volume",
- "matches": "Unknown"
- },
- {
- "id": 1502,
- "name": "Industry",
- "matches": "Unknown"
- },
- {
- "id": 1506,
- "name": "Job Title",
- "matches": "Unknown"
- },
- {
- "id": 1508,
- "name": "Department",
- "matches": "Unknown"
- }
- ]
- },
- "visitors": null,
- "visitor_activities": null,
- "lists": null
- }
- },
- "status": 200,
- "statusText": "OK"
- },
- "https://pi.pardot.com/api/prospect/version/4/do/upsert/email/rolex_waltair@mywebsite.io": {
- "response": {
- "data": {
- "@attributes": {
- "stat": "fail",
- "version": 1,
- "err_code": 184
- },
- "err": "access_token is invalid, unknown, or malformed: Inactive token"
- }
- },
- "status": 401,
- "statusText": "Unauthorized"
- }
-}
diff --git a/test/__mocks__/data/salesforce/proxy_response.json b/test/__mocks__/data/salesforce/proxy_response.json
index f24e898825a..a92edc58c2d 100644
--- a/test/__mocks__/data/salesforce/proxy_response.json
+++ b/test/__mocks__/data/salesforce/proxy_response.json
@@ -1,4 +1,14 @@
{
+ "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/101": {
+ "message": "Connection Aborted",
+ "name": "Error",
+ "code": "ECONNABORTED"
+ },
+ "https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/102": {
+ "message": "DNS not found",
+ "name": "Error",
+ "code": "EAI_AGAIN"
+ },
"https://rudderstack.my.salesforce.com/services/data/v50.0/sobjects/Lead/1": {
"response": {
"data": {
@@ -69,7 +79,7 @@
"status": 503
}
},
- "https://rudderstack.my.salesforce.com/services/data/v50.0/parameterizedSearch/?q=external_id&sobject=object_name&in=External_ID__c&object_name.fields=id,External_ID__c": {
+ "https://rudderstack.my.salesforce.com/services/data/v50.0/parameterizedSearch/?q=123&sobject=object_name&in=External_ID__c&object_name.fields=id,External_ID__c": {
"response": {
"searchRecords": [
{
diff --git a/test/__mocks__/data/salesforce/response.json b/test/__mocks__/data/salesforce/response.json
index 0527fda8f0c..de18da7656e 100644
--- a/test/__mocks__/data/salesforce/response.json
+++ b/test/__mocks__/data/salesforce/response.json
@@ -1,5 +1,5 @@
{
- "https://login.salesforce.com/services/oauth2/token?username=sampathvinayak1453@gmail.com&password=hJCR557%23uzFfD9f58ryaM64FZp0rg3jyDV4PB5&client_id=undefined&client_secret=undefined&grant_type=password": {
+ "https://login.salesforce.com/services/oauth2/token?username=testsalesforce1453@gmail.com&password=dummyPassword1dummyInitialAccessToken&client_id=undefined&client_secret=undefined&grant_type=password": {
"access_token": "00D2v000002lXbX!ARcAQJBSGNA1Rq.MbUdtmlREscrN_nO3ckBz6kc4jRQGxqAzNkhT1XZIF0yPqyCQSnezWO3osMw1ewpjToO7q41E9.LvedWY",
"instance_url": "https://ap15.salesforce.com",
"id": "https://login.salesforce.com/id/00D2v000002lXbXEAU/0052v00000ga9WqAAI",
@@ -21,7 +21,7 @@
}
]
},
- "https://test.salesforce.com/services/oauth2/token?username=utsab.c97-qvpd@force.com.test&password=vfNx8%268%25JR7fiy1FKcO9sohsxq1v6J88sg&client_id=undefined&client_secret=undefined&grant_type=password": {
+ "https://test.salesforce.com/services/oauth2/token?username=test.c97-qvpd@force.com.test&password=dummyPassword27fiy1FKcO9sohsxq1v6J88sg&client_id=undefined&client_secret=undefined&grant_type=password": {
"access_token": "00D2v000002lXbX!ARcAQJBSGNA1Rq.MbUdtmlREscrN_nO3ckBz6kc4jRQGxqAzNkhT1XZIF0yPqyCQSnezWO3osMw1ewpjToO7q41E9.LvedWY",
"instance_url": "https://ap15.salesforce.com",
"id": "https://login.salesforce.com/id/00D2v000002lXbXEAU/0052v00000ga9WqAAI",
diff --git a/test/__mocks__/data/trengo/response.json b/test/__mocks__/data/trengo/response.json
index 18caac3b957..6b9248f6528 100644
--- a/test/__mocks__/data/trengo/response.json
+++ b/test/__mocks__/data/trengo/response.json
@@ -1,5 +1,5 @@
{
- "https://app.trengo.com/api/v2/contacts?page=1&term=jimbo@dunmiff.com": {
+ "https://app.trengo.com/api/v2/contacts?page=1&term=j@d.com": {
"data": [],
"links": {
"first": "https://app.trengo.com/api/v2/contacts?page=1",
@@ -215,13 +215,13 @@
"to": 1
}
},
- "https://app.trengo.com/api/v2/contacts?page=1&term=utsab@outlook.com": {
+ "https://app.trengo.com/api/v2/contacts?page=1&term=test@outlook.com": {
"data": [
{
"id": 97694755,
- "name": "Utsab Email",
- "full_name": "Utsab Email",
- "email": "utsab@outlook.com",
+ "name": "test Email",
+ "full_name": "test Email",
+ "email": "test@outlook.com",
"abbr": "U",
"color": "#00bcd4",
"profile_image": null,
@@ -229,7 +229,7 @@
"phone": "98303115423",
"formatted_phone": "+98 303115423",
"avatar": "https://app.trengo.com/img/defaultpic.png",
- "identifier": "utsab@outlook.com",
+ "identifier": "test@outlook.com",
"custom_field_data": null,
"profile": [],
"channels": [
@@ -318,7 +318,7 @@
"Customer number": null,
"Policy": null
},
- "display_name": "Utsab Phone tct (utsab@outlook.com)",
+ "display_name": "test Phone tct (test@outlook.com)",
"is_private": false
}
],
diff --git a/test/__mocks__/data/wootric/response.json b/test/__mocks__/data/wootric/response.json
index b52730167b9..48cdd44a837 100644
--- a/test/__mocks__/data/wootric/response.json
+++ b/test/__mocks__/data/wootric/response.json
@@ -96,7 +96,7 @@
"surveys_disabled_by_end_user": null
}
},
- "https://api.wootric.com/oauth/token?account_token=NPS-1234567": {
+ "https://api.wootric.com/oauth/token?account_token=NPS-dummyToken": {
"access_token": "2fe581c1c72851e73d60f4191f720be93e5d3e8a6147e37c4e8e852b1a8f506c",
"token_type": "Bearer",
"expires_in": 7200,
diff --git a/test/__mocks__/data/yahoo_dsp/response.json b/test/__mocks__/data/yahoo_dsp/response.json
index ada03fb0805..5b197cbea8f 100644
--- a/test/__mocks__/data/yahoo_dsp/response.json
+++ b/test/__mocks__/data/yahoo_dsp/response.json
@@ -1,7 +1,7 @@
{
"https://id.b2b.yahooinc.com/identity/oauth2/access_token": {
"data": {
- "access_token": "fb8c05c9-3a32-409a-9993-3f53d307fe75",
+ "access_token": "testAuthToken",
"scope": "dsp-api-access",
"token_type": "Bearer",
"expires_in": 3599
diff --git a/test/__mocks__/klaviyo.mock.js b/test/__mocks__/klaviyo.mock.js
index 495a6c1f4a1..020387d1f21 100644
--- a/test/__mocks__/klaviyo.mock.js
+++ b/test/__mocks__/klaviyo.mock.js
@@ -7,7 +7,7 @@ const klaviyoPostRequestHandler = (url, payload) => {
//resolve with status 200
return { data: payload, status: 200 };
case 'https://a.klaviyo.com/api/profiles':
- if (payload.data.attributes.email === "utsab3@rudderstack.com") {
+ if (payload.data.attributes.email === "test3@rudderstack.com") {
return {
status: 409,
data: {
@@ -19,6 +19,7 @@ const klaviyoPostRequestHandler = (url, payload) => {
data: {
data: {
id: '01GW3PHVY0MTCDGS0A1612HARX',
+ attributes: {}
},
}
};
diff --git a/test/__mocks__/kustomer.mock.js b/test/__mocks__/kustomer.mock.js
index 90fad780726..0a1187595d3 100644
--- a/test/__mocks__/kustomer.mock.js
+++ b/test/__mocks__/kustomer.mock.js
@@ -126,6 +126,12 @@ const kustomerGetRequestHandler = url => {
case "https://api.kustomerapp.com/v1/customers/externalId=annodD":
//resolve with status 200
return { data: storedPayload, status: 200 };
+ case "https://api.kustomerapp.com/v1/customers/externalId=58210c3db0f09110006b7953":
+ //resolve with status 200
+ return { data: storedPayload, status: 200 };
+ case "https://api.prod2.kustomerapp.com/v1/customers/externalId=58210c3db0f09110006b7953":
+ //resolve with status 200
+ return { data: storedPayload, status: 200 };
default:
return new Promise((resolve, reject) => {
resolve({ error: "Request failed", status: 404 });
diff --git a/test/__mocks__/network.js b/test/__mocks__/network.js
index acfe8985128..752dd48ca2f 100644
--- a/test/__mocks__/network.js
+++ b/test/__mocks__/network.js
@@ -23,7 +23,8 @@ const urlDirectoryMap = {
"api.clevertap.com": "clevertap",
"marketo_acct_id_success.mktorest.com": "marketo_static_list",
"api.criteo.com": "criteo_audience",
- "business-api.tiktok.com": "tiktok_ads"
+ "business-api.tiktok.com": "tiktok_ads",
+ "api.intercom.io": "intercom"
};
function getData(arg) {
diff --git a/test/__mocks__/optimizely_fullstack.mock.js b/test/__mocks__/optimizely_fullstack.mock.js
deleted file mode 100644
index f2eb3deb8c1..00000000000
--- a/test/__mocks__/optimizely_fullstack.mock.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const optimizelyFullStackGetRequestHandler = (url, mockData) => {
- if (url === 'https://cdn.optimizely.com/datafiles/abc.json') {
- return { data: mockData, status: 200 };
- }
-
- return Promise.reject({
- response: {
- data: {
- code: 'document_not_found',
- message: 'document_not_found',
- },
- status: 404,
- },
- });
-};
-
-module.exports = {
- optimizelyFullStackGetRequestHandler,
-};
diff --git a/test/__tests__/algolia-cdk.test.ts b/test/__tests__/algolia-cdk.test.ts
deleted file mode 100644
index 0b6fae67411..00000000000
--- a/test/__tests__/algolia-cdk.test.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import { processCdkV2Workflow } from '../../src/cdk/v2/handler';
-import tags from '../../src/v0/util/tags';
-
-const integration = 'algolia';
-const destName = 'Algolia';
-
-const inputDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}_input.json`), {
- encoding: 'utf8',
-});
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`),
- { encoding: 'utf8' },
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-describe(`${destName} Tests`, () => {
- describe('Processor Tests', () => {
- inputData.forEach((input, index) => {
- it(`${destName} - payload: ${index}`, async () => {
- const expected = expectedData[index];
- try {
- const output = await processCdkV2Workflow(integration, input, tags.FEATURES.PROCESSOR);
- expect(output).toEqual(expected);
- } catch (error: any) {
- expect(error.message).toEqual(expected.message);
- }
- });
- });
- });
-
- const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`),
- { encoding: 'utf8' },
- );
- const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`),
- { encoding: 'utf8' },
- );
- const inputRouterData = JSON.parse(inputRouterDataFile);
- const expectedRouterData = JSON.parse(outputRouterDataFile);
-
- describe('Router Tests', () => {
- inputRouterData.forEach((input, index) => {
- it(`${destName} - payload: ${index}`, async () => {
- const expected = expectedRouterData[index];
- try {
- const output = await processCdkV2Workflow(integration, input, tags.FEATURES.ROUTER);
- expect(output).toEqual(expected);
- } catch (error: any) {
- // console.log(error);
- expect(error.message).toEqual(expected.message);
- }
- });
- });
- });
-});
diff --git a/test/__tests__/algolia.test.js b/test/__tests__/algolia.test.js
deleted file mode 100644
index c958ff237b6..00000000000
--- a/test/__tests__/algolia.test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-const integration = "algolia";
-const name = "algolia";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-inputData.forEach((input, index) => {
- it(`${name} Tests: payload - ${index}`, () => {
- let output, expected;
- try {
- output = transformer.process(input);
- expected = expectedData[index];
- } catch (error) {
- output = error.message;
- // console.log(output);
- expected = expectedData[index].message;
- }
- expect(output).toEqual(expected);
- });
-});
-
-const routerInputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const routerInputData = JSON.parse(routerInputDataFile);
-const routerOutputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const routerOutputData = JSON.parse(routerOutputDataFile);
-
-describe("Router Tests", () => {
- routerInputData.forEach((input, index) => {
- it(`${name} Tests: payload - ${index}`, async () => {
- let output, expected;
- try {
- output = await transformer.processRouterDest(input);
- expected = routerOutputData[index];
- } catch (error) {
- output = error.message;
- // console.log(output);
- expected = routerOutputData[index].message;
- }
- expect(output).toEqual(expected);
- });
- });
-});
diff --git a/test/__tests__/appcues.test.js b/test/__tests__/appcues.test.js
deleted file mode 100644
index 077d2e580c7..00000000000
--- a/test/__tests__/appcues.test.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const integration = "appcues";
-const name = "Appcues";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor Tests", () => {
- inputData.forEach((input, index) => {
- it(`${name} - payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/appsFlyer.test.js b/test/__tests__/appsFlyer.test.js
index 9a3c81399c5..3a15f6232be 100644
--- a/test/__tests__/appsFlyer.test.js
+++ b/test/__tests__/appsFlyer.test.js
@@ -1,53 +1,3 @@
-// const integration = "af";
-// const name = "AppsFlyer";
-// const fs = require("fs");
-// const path = require("path");
-// const version = "v0";
-
-// const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-// const inputDataFile = fs.readFileSync(
-// path.resolve(__dirname, `./data/${integration}_input.json`)
-// );
-// const outputDataFile = fs.readFileSync(
-// path.resolve(__dirname, `./data/${integration}_output.json`)
-// );
-// const inputData = JSON.parse(inputDataFile);
-// const expectedData = JSON.parse(outputDataFile);
-
-// // Router Test Data
-// const inputRouterDataFile = fs.readFileSync(
-// path.resolve(__dirname, `./data/${integration}_router_input.json`)
-// );
-// const outputRouterDataFile = fs.readFileSync(
-// path.resolve(__dirname, `./data/${integration}_router_output.json`)
-// );
-// const inputRouterData = JSON.parse(inputRouterDataFile);
-// const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-// inputData.forEach((input, index) => {
-// test(`${name} Tests - Payload ${index}`, () => {
-// try {
-// // ignored
-// const output = transformer.process(input);
-// expect(output).toEqual(expectedData[index]);
-// } catch (error) {
-// expect(error.message).toEqual(expectedData[index].error);
-// }
-// });
-
-// });
-
-// describe(`${name} Tests`, () => {
-
-// describe("Router Tests", () => {
-// it("Payload", async () => {
-// const routerOutput = await transformer.processRouterDest(inputRouterData);
-// expect(routerOutput).toEqual(expectedRouterData);
-// });
-// });
-
-// });
-
const {
getDestFromTestFile,
executeTransformationTest
diff --git a/test/__tests__/attentive_tag.test.js b/test/__tests__/attentive_tag.test.js
deleted file mode 100644
index ff8e278eced..00000000000
--- a/test/__tests__/attentive_tag.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const integration = "attentive_tag";
-const name = "Attentive Tag";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-Date.now = jest.fn(() => new Date("2019-10-14T09:03:17.562Z"));
-
-describe(`${name} Tests`, () => {
- describe("Processor Tests", () => {
- inputData.forEach((input, index) => {
- it(`${name} - payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/autopilot-cdk.test.ts b/test/__tests__/autopilot-cdk.test.ts
deleted file mode 100644
index fcb0ad401b8..00000000000
--- a/test/__tests__/autopilot-cdk.test.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import { processCdkV2Workflow } from '../../src/cdk/v2/handler';
-import tags from '../../src/v0/util/tags';
-
-const integration = 'autopilot';
-const destName = 'Autopilot';
-
-const inputDataFile = fs.readFileSync(path.resolve(__dirname, `./data/${integration}_input.json`), {
- encoding: 'utf8',
-});
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_cdk_output.json`),
- { encoding: 'utf8' },
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-describe(`${destName} Tests`, () => {
- describe('Processor Tests', () => {
- inputData.forEach((input, index) => {
- it(`${destName} - payload: ${index}`, async () => {
- const expected = expectedData[index];
- try {
- const output = await processCdkV2Workflow(integration, input, tags.FEATURES.PROCESSOR);
- expect(output).toEqual(expected);
- } catch (error: any) {
- expect(error.message).toEqual(expected.error);
- }
- });
- });
- });
-});
diff --git a/test/__tests__/autopilot.test.js b/test/__tests__/autopilot.test.js
deleted file mode 100644
index d2b226aea35..00000000000
--- a/test/__tests__/autopilot.test.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const {
- getDestFromTestFile,
- executeTransformationTest
-} = require("./utilities/test-utils");
-
-executeTransformationTest(getDestFromTestFile(__filename), "processor");
-executeTransformationTest(getDestFromTestFile(__filename), "router");
diff --git a/test/__tests__/azure_event_hub.test.js b/test/__tests__/azure_event_hub.test.js
deleted file mode 100644
index b76c7450cd0..00000000000
--- a/test/__tests__/azure_event_hub.test.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const integration = "azure_event_hub";
-const name = "Azure event Hub";
-
-const fs = require("fs");
-const path = require("path");
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-
-const dataWithMetadata = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_with_metadata.json`)
-);
-
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-inputData.forEach((input, index) => {
- it(`${name} Tests: payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].message);
- }
- });
-});
-
-test(`${name} Metadata parse test`, done => {
- const inputData = JSON.parse(dataWithMetadata);
- inputData.forEach(async (data, _) => {
- try {
- const output = transformer.processMetadata(data.input);
- expect(output).toEqual(data.output);
- done();
- } catch (error) {
- done(error);
- }
- });
-});
diff --git a/test/__tests__/blueshift.test.js b/test/__tests__/blueshift.test.js
deleted file mode 100644
index 156552b54b3..00000000000
--- a/test/__tests__/blueshift.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const integration = "blueshift";
-const name = "blueshift";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-// Processor Test Data
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor Tests", () => {
- inputData.forEach((input, index) => {
- it(`${name} - payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/branch.test.js b/test/__tests__/branch.test.js
deleted file mode 100644
index 74af08b18ac..00000000000
--- a/test/__tests__/branch.test.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const integration = "branch";
-const name = "Branch";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor Tests", () => {
- inputData.forEach((input, index) => {
- it(`${name} - payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/braze.test.js b/test/__tests__/braze.test.js
index 9e4a663d51c..c1d317c6ba1 100644
--- a/test/__tests__/braze.test.js
+++ b/test/__tests__/braze.test.js
@@ -1,3 +1,4 @@
+const cloneDeep = require('lodash/cloneDeep');
const integration = "braze";
const name = "Braze";
@@ -6,6 +7,7 @@ const path = require("path");
const version = "v0";
+const { FEATURE_FILTER_CODE } = require('../../src/v0/util/constant');
const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
const inputDataFile = fs.readFileSync(
path.resolve(__dirname, `./data/${integration}_input.json`)
@@ -18,38 +20,57 @@ const expectedData = JSON.parse(outputDataFile);
inputData.forEach((input, index) => {
it(`${name} Tests: payload - ${index}`, async () => {
- let output, expected;
+ let output1, output2, output3, expected;
try {
- output = await transformer.process(input);
+ // default reqMetadata
+ output1 = await transformer.process(cloneDeep(input));
+ // null reqMetadata
+ output2 = await transformer.process(cloneDeep(input), { userStore: new Map() }, null);
+ // undefined reqMetadata
+ output3 = await transformer.process(cloneDeep(input), { userStore: new Map() }, undefined);
expected = expectedData[index];
} catch (error) {
- output = error.message;
+ output1 = error.message;
+ output2 = error.message;
+ output3 = error.message;
expected = expectedData[index].message;
}
- expect(output).toEqual(expected);
+ expect(output1).toEqual(expected);
+ expect(output2).toEqual(expected);
+ expect(output3).toEqual(expected);
});
});
+
// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
+const routerTestDataFile = fs.readFileSync(
+ path.resolve(__dirname, `./data/${integration}_router.json`)
);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
+const routerTestData = JSON.parse(routerTestDataFile);
+const { simpleRouterTestData, dedupEnabledRouterTestData } = routerTestData;
describe(`${name} Tests`, () => {
describe("Simple Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData.simpleRouterRequests);
- expect(routerOutput).toEqual(expectedRouterData.simpleRouterResponse);
+ simpleRouterTestData.forEach((dataPoint, index) => {
+ it(`${index}. ${integration} - ${dataPoint.description}`, async () => {
+ const output = await transformer.processRouterDest(dataPoint.input);
+ expect(output).toEqual(dataPoint.output);
+ });
});
});
describe("Dedupenabled Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData.dedupEnabledRouterRequests);
- expect(routerOutput).toEqual(expectedRouterData.dedupEnabledRouterResponse);
+ dedupEnabledRouterTestData.forEach((dataPoint, index) => {
+ it(`${index}. ${integration} - ${dataPoint.description}`, async () => {
+ // default reqMetadata
+ const oldTransformerOutput = await transformer.processRouterDest(cloneDeep(dataPoint.input));
+ // valid reqMetadata
+ const newTransformerOutput = await transformer.processRouterDest(cloneDeep(dataPoint.input), { features: { [FEATURE_FILTER_CODE]: true } });
+ // invalid reqMetadata
+ const invalidRequestMetadataOutput = await transformer.processRouterDest(cloneDeep(dataPoint.input), [{ features: { [FEATURE_FILTER_CODE]: true } }]);
+
+ expect(oldTransformerOutput).toEqual(dataPoint.oldTransformerOutput);
+ expect(newTransformerOutput).toEqual(dataPoint.newTransformerOutput);
+ expect(invalidRequestMetadataOutput).toEqual(dataPoint.oldTransformerOutput);
+ });
});
});
});
diff --git a/test/__tests__/campaign_manager.test.js b/test/__tests__/campaign_manager.test.js
deleted file mode 100644
index 4f3a40d5205..00000000000
--- a/test/__tests__/campaign_manager.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-const integration = "campaign_manager";
-const name = "campaign_manager";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-// Processor Test Data
-const testDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}.json`)
-);
-const testData = JSON.parse(testDataFile);
-
-// Router Test files
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor", () => {
- testData.forEach((dataPoint, index) => {
- it(`${index}. ${integration} - ${dataPoint.description}`, async () => {
- try {
- let output = await transformer.process(dataPoint.input);
- delete output.body.JSON.idempotency;
- expect(output).toEqual(dataPoint.output);
- } catch (error) {
- expect(error.message).toEqual(dataPoint.output.error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/candu.test.js b/test/__tests__/candu.test.js
deleted file mode 100644
index 6a2fcadb234..00000000000
--- a/test/__tests__/candu.test.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const integration = "candu";
-const name = "Candu";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor Tests", () => {
- inputData.forEach((input, index) => {
- it(`${name} - payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/clevertap.test.js b/test/__tests__/clevertap.test.js
index f5c95c3dfda..1a07c2f6bcf 100644
--- a/test/__tests__/clevertap.test.js
+++ b/test/__tests__/clevertap.test.js
@@ -42,7 +42,7 @@ describe(`${name} Tests`, () => {
describe("Router Tests", () => {
it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
+ const routerOutput = await transformer.processRouterDest(inputRouterData, {namespace: 'unknown', cluster: 'unknown'});
expect(routerOutput).toEqual(expectedRouterData);
});
});
diff --git a/test/__tests__/confluent_cloud.test.js b/test/__tests__/confluent_cloud.test.js
deleted file mode 100644
index 3c57ebccbe6..00000000000
--- a/test/__tests__/confluent_cloud.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-const integration = "confluent_cloud";
-const name = "Confluent Cloud";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-
-const dataWithMetadata = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_with_metadata.json`)
-);
-
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-inputData.forEach((input, index) => {
- it(`${name} Tests: payload: ${index}`, async () => {
- try {
- const output = await transformer.process(input);
- expect(output).toEqual(expectedData[index]);
- } catch (error) {
- expect(error.message).toEqual(expectedData[index].message);
- }
- });
-});
-
-test(`${name} Metadata parse test`, done => {
- const inputData = JSON.parse(dataWithMetadata);
- inputData.forEach(async (data, _) => {
- try {
- const output = transformer.processMetadata(data.input);
- expect(output).toEqual(data.output);
- done();
- } catch (error) {
- done(error);
- }
- });
-});
diff --git a/test/__tests__/courier.test.js b/test/__tests__/courier.test.js
deleted file mode 100644
index 30c99a424cb..00000000000
--- a/test/__tests__/courier.test.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const integration = "courier";
-const name = "Courier";
-
-const fs = require("fs");
-const path = require("path");
-
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-// Processor Test files
-const testDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}.json`)
-);
-const testData = JSON.parse(testDataFile);
-
-// Router Test files
-const routerTestDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router.json`)
- );
-const routerTestData = JSON.parse(routerTestDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor", () => {
- testData.forEach(async (dataPoint, index) => {
- it(`${index}. ${integration} - ${dataPoint.description}`, async () => {
- try {
- const output = await transformer.process(dataPoint.input);
- expect(output).toEqual(dataPoint.output);
- } catch (error) {
- expect(error.message).toEqual(dataPoint.output.error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- routerTestData.forEach(dataPoint => {
- it("Payload", async () => {
- const output = await transformer.processRouterDest(dataPoint.input);
- expect(output).toEqual(dataPoint.output);
- });
- });
- });
-
-});
diff --git a/test/__tests__/criteo_audience.test.js b/test/__tests__/criteo_audience.test.js
deleted file mode 100644
index abeff146e58..00000000000
--- a/test/__tests__/criteo_audience.test.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const fs = require("fs");
-const path = require("path");
-
-const integration = "criteo_audience";
-const name = "Criteo_Audience";
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/${integration}/transform`);
-
-// Processor Test Data
-const testDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}.json`)
-);
-const testData = JSON.parse(testDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-describe(`${name} Tests`, () => {
- describe("Processor", () => {
- testData.forEach((dataPoint, index) => {
- it(`${index}. ${integration} - ${dataPoint.description}`, async () => {
- try {
- const output = await transformer.process(dataPoint.input);
- expect(output).toEqual(dataPoint.output);
- } catch (error) {
- expect(error.message).toEqual(dataPoint.output.error);
- }
- });
- });
- });
-
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
-
-describe("Router Tests for rETL sources", () => {
- it("should send events to dest", async () => {
- const input = JSON.parse(
- fs.readFileSync(
- path.resolve(
- __dirname,
- `data/${integration}_router_rETL_input.json`
- )
- )
- );
- const output = JSON.parse(
- fs.readFileSync(
- path.resolve(
- __dirname,
- `data/${integration}_router_rETL_output.json`
- )
- )
- );
- const actualOutput = await transformer.processRouterDest(input);
- console.log(JSON.stringify(actualOutput))
- expect(actualOutput).toEqual(output);
- });
-});
diff --git a/test/__tests__/customerio.test.js b/test/__tests__/customerio.test.js
deleted file mode 100644
index 7170c0dc307..00000000000
--- a/test/__tests__/customerio.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const integration = "customerio";
-const name = "CustomerIO";
-
-const fs = require("fs");
-const path = require("path");
-const version = "v0";
-
-const transformer = require(`../../src/${version}/destinations/customerio/transform`);
-
-const inputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_input.json`)
-);
-const outputDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_output.json`)
-);
-const inputData = JSON.parse(inputDataFile);
-const expectedData = JSON.parse(outputDataFile);
-
-// Router Test Data
-const inputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_input.json`)
-);
-const outputRouterDataFile = fs.readFileSync(
- path.resolve(__dirname, `./data/${integration}_router_output.json`)
-);
-const inputRouterData = JSON.parse(inputRouterDataFile);
-const expectedRouterData = JSON.parse(outputRouterDataFile);
-
-for (let index = 0; index < inputData.length; index++) {
- it(`${name} Tests - payload: ${index}`, () => {
- let output, expected;
- try {
- output = transformer.process(inputData[index]);
- expected = expectedData[index];
- } catch (error) {
- output = error.message;
- expected = expectedData[index].message;
- }
-
- expect(output).toEqual(expected);
- });
-}
-
-describe(`${name} Tests`, () => {
- describe("Router Tests", () => {
- it("Payload", async () => {
- const routerOutput = await transformer.processRouterDest(inputRouterData);
- expect(routerOutput).toEqual(expectedRouterData);
- });
- });
-});
diff --git a/test/__tests__/data/adobe_analytics.json b/test/__tests__/data/adobe_analytics.json
index cfffccb8da5..6361f92640c 100644
--- a/test/__tests__/data/adobe_analytics.json
+++ b/test/__tests__/data/adobe_analytics.json
@@ -1010,7 +1010,6 @@
},
"messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383",
"properties": {
- "order_id": "1234",
"affiliation": "Apple Store",
"value": 20,
"revenue": 15.0,
@@ -1019,6 +1018,7 @@
"discount": 1.5,
"coupon": "ImagePro",
"currency": "USD",
+ "purchaseId": "p101",
"products": [
{
"product_id": "123",
@@ -1205,7 +1205,7 @@
"JSON": {},
"JSON_ARRAY": {},
"XML": {
- "payload": "17941080sales campaignwebUSD127.0.0.1en-US12341234Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)https://www.google.com/search?q=estore+bestsellerroottval001RudderLabs JavaScript SDKocheckout startedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001scCheckoutGames;Monopoly;1;14.00,Games;UNO;2;6.90footlockerrudderstackpoc"
+ "payload": "17941080sales campaignwebUSD127.0.0.1en-USDalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)https://www.google.com/search?q=estore+bestsellerroottval001RudderLabs JavaScript SDKocheckout startedhttps://www.estore.com/best-seller/12020-01-09T10:01:53.558Zmktcloudid001p101scCheckoutGames;Monopoly;1;14.00,Games;UNO;2;6.90footlockerrudderstackpoc"
},
"FORM": {}
},
diff --git a/test/__tests__/data/af_input.json b/test/__tests__/data/af_input.json
index da46bae9cda..d5e2d6f16a6 100644
--- a/test/__tests__/data/af_input.json
+++ b/test/__tests__/data/af_input.json
@@ -265,7 +265,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com"
+ "email": "test@rudderstack.com"
},
"library": {
"name": "RudderLabs JavaScript SDK",
@@ -531,7 +531,9 @@
"app": {
"namespace": "com.rudderlabs.javascript"
},
- "os": { "name": "android" },
+ "os": {
+ "name": "android"
+ },
"traits": {
"anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
},
@@ -611,7 +613,9 @@
"app": {
"namespace": "com.rudderlabs.javascript"
},
- "os": { "name": "android" },
+ "os": {
+ "name": "android"
+ },
"traits": {
"anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
},
@@ -671,7 +675,9 @@
"app": {
"namespace": "com.rudderlabs.javascript"
},
- "os": { "name": "android" },
+ "os": {
+ "name": "android"
+ },
"traits": {
"anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
},
@@ -716,7 +722,9 @@
"app": {
"namespace": "com.rudderlabs.javascript"
},
- "os": { "name": "android" },
+ "os": {
+ "name": "android"
+ },
"traits": {
"anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
},
@@ -796,7 +804,9 @@
"app": {
"namespace": "com.rudderlabs.javascript"
},
- "os": { "name": "android" },
+ "os": {
+ "name": "android"
+ },
"traits": {
"anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
},
diff --git a/test/__tests__/data/af_router_input.json b/test/__tests__/data/af_router_input.json
index 7a6f260f24b..42e63e8aa2e 100644
--- a/test/__tests__/data/af_router_input.json
+++ b/test/__tests__/data/af_router_input.json
@@ -56,7 +56,7 @@
}
},
"metadata": {
- "jobId": 2
+ "jobId": 1
},
"destination": {
"Config": {
@@ -186,7 +186,7 @@
}
},
"metadata": {
- "jobId": 2
+ "jobId": 3
},
"destination": {
"Config": {
diff --git a/test/__tests__/data/af_router_output.json b/test/__tests__/data/af_router_output.json
index f2f6cbd8727..5719ee743f4 100644
--- a/test/__tests__/data/af_router_output.json
+++ b/test/__tests__/data/af_router_output.json
@@ -29,7 +29,7 @@
},
"metadata": [
{
- "jobId": 2
+ "jobId": 1
}
],
"batched": false,
@@ -116,7 +116,7 @@
},
"metadata": [
{
- "jobId": 2
+ "jobId": 3
}
],
"batched": false,
diff --git a/test/__tests__/data/algolia_input.json b/test/__tests__/data/algolia_input.json
deleted file mode 100644
index 67216fc8710..00000000000
--- a/test/__tests__/data/algolia_input.json
+++ /dev/null
@@ -1,804 +0,0 @@
-[
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product clicked",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "filters": ["field1:hello", "val1:val2"]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "cLick "
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": 7
- },
- {
- "objectId": "9780439784542",
- "position": 8
- }
- ],
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product list viewed",
- "to": "click"
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product clicked",
- "userId": "testuserId1",
- "properties": {
- "eventType": "click",
- "index": "products",
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa8"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": []
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "userId": "testuserId1",
- "event": "product clicked",
- "properties": {
- "index": "products",
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": []
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": 7
- },
- {
- "objectId": "9780439784542",
- "position": 8
- }
- ],
- "queryId": ""
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product list viewed",
- "to": "click"
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": 7
- },
- {
- "objectId": "9780439784542",
- "position": 8
- }
- ],
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product list viewed",
- "to": "view"
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": "7"
- },
- {
- "objectId": "9780439784542",
- "position": "a"
- }
- ],
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product list viewed",
- "to": "click"
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": "7"
- },
- {
- "objectId": "9780439784542",
- "position": "a"
- }
- ],
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product list viewed",
- "to": "check"
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product list viewed",
- "userId": "testuserId1",
- "properties": {
- "index": "products",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": "7"
- },
- {
- "objectId": "9780439784542",
- "position": "a"
- }
- ],
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product clicked",
- "userId": "testuserId1",
- "properties": {
- "filters": ["field1:hello", "val1:val2"]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "cLick "
- }
- ]
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": ["abc", "def"],
- "userId": "testuserId1",
- "properties": {
- "filters": ["field1:hello", "val1:val2"]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "cLick "
- }
- ]
- }
- }
- }
-]
diff --git a/test/__tests__/data/algolia_output.json b/test/__tests__/data/algolia_output.json
deleted file mode 100644
index ed02c274e14..00000000000
--- a/test/__tests__/data/algolia_output.json
+++ /dev/null
@@ -1,121 +0,0 @@
-[
- {
- "body": {
- "FORM": {},
- "JSON_ARRAY": {},
- "JSON": {
- "events": [
- {
- "eventName": "product clicked",
- "eventType": "click",
- "filters": ["field1:hello", "val1:val2"],
- "index": "products",
- "userToken": "testuserId1"
- }
- ]
- },
- "XML": {}
- },
- "endpoint": "https://insights.algolia.io/1/events",
- "files": {},
- "headers": {
- "X-Algolia-API-Key": "34d8efa09c5b048bbacc6af157f2e687",
- "X-Algolia-Application-Id": "O2YARRI15I"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- },
- {
- "body": {
- "FORM": {},
- "JSON_ARRAY": {},
- "JSON": {
- "events": [
- {
- "eventName": "product list viewed",
- "eventType": "click",
- "objectIDs": ["ecommerce-sample-data-919", "9780439784542"],
- "positions": [7, 8],
- "index": "products",
- "userToken": "testuserId1",
- "queryID": "43b15df305339e827f0ac0bdc5ebcaa7"
- }
- ]
- },
- "XML": {}
- },
- "endpoint": "https://insights.algolia.io/1/events",
- "files": {},
- "headers": {
- "X-Algolia-API-Key": "34d8efa09c5b048bbacc6af157f2e687",
- "X-Algolia-Application-Id": "O2YARRI15I"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- },
- {
- "statusCode": "400",
- "message": "Either filters or objectIds is required."
- },
- {
- "statusCode": "400",
- "message": "eventType is mandatory for track call"
- },
- {
- "statusCode": "400",
- "message": "for click eventType either both positions and queryId should be present or none"
- },
- {
- "body": {
- "FORM": {},
- "JSON_ARRAY": {},
- "JSON": {
- "events": [
- {
- "eventName": "product list viewed",
- "eventType": "view",
- "index": "products",
- "objectIDs": ["ecommerce-sample-data-919", "9780439784542"],
- "userToken": "testuserId1",
- "queryID": "43b15df305339e827f0ac0bdc5ebcaa7"
- }
- ]
- },
- "XML": {}
- },
- "endpoint": "https://insights.algolia.io/1/events",
- "files": {},
- "headers": {
- "X-Algolia-API-Key": "34d8efa09c5b048bbacc6af157f2e687",
- "X-Algolia-Application-Id": "O2YARRI15I"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- },
- {
- "statusCode": "400",
- "message": "for click eventType either both positions and queryId should be present or none"
- },
- {
- "statusCode": "400",
- "message": "eventType can be either click, view or conversion"
- },
- {
- "statusCode": "400",
- "message": "eventType is mandatory for track call"
- },
- {
- "statusCode": "400",
- "message": "Missing required value from \"properties.index\""
- },
- {
- "statusCode": "400",
- "message": "event name should be a string"
- }
-]
diff --git a/test/__tests__/data/algolia_router_input.json b/test/__tests__/data/algolia_router_input.json
deleted file mode 100644
index 88685fcefe0..00000000000
--- a/test/__tests__/data/algolia_router_input.json
+++ /dev/null
@@ -1,1902 +0,0 @@
-[
- [
- {
- "message": {
- "type": "track",
- "event": "product list viewed",
- "sentAt": "2021-10-25T09:40:08.880Z",
- "userId": "test-user-id1",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.1",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:5500/index.html",
- "path": "/index.html",
- "title": "Test",
- "search": "",
- "tab_url": "http://127.0.0.1:5500/index.html",
- "referrer": "http://127.0.0.1:5500/index.html",
- "initial_referrer": "http://127.0.0.1:5500/index.html",
- "referring_domain": "127.0.0.1:5500",
- "initial_referring_domain": "127.0.0.1:5500"
- },
- "locale": "en-GB",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 1440,
- "innerHeight": 335
- },
- "traits": {
- "city": "Brussels",
- "email": "testemail@email.com",
- "phone": "1234567890",
- "country": "Belgium",
- "firstName": "Tintin",
- "custom_date": 1574769933368,
- "custom_date1": "2019-10-14T11:15:53.296Z",
- "custom_flavor": "chocolate"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.1"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
- },
- "rudderId": "e3e907f1-f79a-444b-b91d-da47488f8273",
- "messageId": "8cdd3d2e-5e07-42ec-abdc-9b6bd4333840",
- "timestamp": "2021-10-25T15:10:08.888+05:30",
- "properties": {
- "index": "products",
- "queryId": "43b15df305339e827f0ac0bdc5ebcaa7",
- "products": [
- {
- "objectId": "ecommerce-sample-data-919",
- "position": 7
- },
- {
- "objectId": "9780439784542",
- "position": 8
- }
- ]
- },
- "receivedAt": "2021-10-25T15:10:08.889+05:30",
- "request_ip": "[::1]",
- "anonymousId": "7138f7d9-5dd2-4337-805d-ca17be59dc8e",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2021-10-25T09:40:08.879Z"
- },
- "metadata": {
- "jobId": 1
- },
- "destination": {
- "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V",
- "Name": "algolia-dev",
- "DestinationDefinition": {
- "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH",
- "Name": "ALGOLIA",
- "DisplayName": "Algolia",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "applicationId", "eventTypeSettings"]
- },
- "excludeKeys": [],
- "includeKeys": [],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey", "applicationId"],
- "supportedMessageTypes": ["track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "apiKey",
- "applicationId": "appId",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "click"
- },
- {
- "from": "product list viewed",
- "to": "view"
- }
- ]
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "type": "track",
- "event": "product clicked",
- "sentAt": "2021-10-25T09:40:08.886Z",
- "userId": "test-user-id1",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.1",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:5500/index.html",
- "path": "/index.html",
- "title": "Test",
- "search": "",
- "tab_url": "http://127.0.0.1:5500/index.html",
- "referrer": "http://127.0.0.1:5500/index.html",
- "initial_referrer": "http://127.0.0.1:5500/index.html",
- "referring_domain": "127.0.0.1:5500",
- "initial_referring_domain": "127.0.0.1:5500"
- },
- "locale": "en-GB",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 1440,
- "innerHeight": 335
- },
- "traits": {
- "city": "Brussels",
- "email": "testemail@email.com",
- "phone": "1234567890",
- "country": "Belgium",
- "firstName": "Tintin",
- "custom_date": 1574769933368,
- "custom_date1": "2019-10-14T11:15:53.296Z",
- "custom_flavor": "chocolate"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.1"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
- },
- "rudderId": "e3e907f1-f79a-444b-b91d-da47488f8273",
- "messageId": "7b58e140-b66b-4e88-a5ec-bd6811fc3836",
- "timestamp": "2021-10-25T15:10:08.943+05:30",
- "properties": {
- "index": "products",
- "filters": ["field1:hello", "val1:val2"]
- },
- "receivedAt": "2021-10-25T15:10:08.943+05:30",
- "request_ip": "[::1]",
- "anonymousId": "7138f7d9-5dd2-4337-805d-ca17be59dc8e",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2021-10-25T09:40:08.886Z"
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V",
- "Name": "algolia-dev",
- "DestinationDefinition": {
- "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH",
- "Name": "ALGOLIA",
- "DisplayName": "Algolia",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "applicationId", "eventTypeSettings"]
- },
- "excludeKeys": [],
- "includeKeys": [],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey", "applicationId"],
- "supportedMessageTypes": ["track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "apiKey-2",
- "applicationId": "appId-2",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "click"
- },
- {
- "from": "product list viewed",
- "to": "view"
- }
- ]
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "testone@gmail.com",
- "firstName": "test",
- "lastName": "one"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/destinations/ometria",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://docs.rudderstack.com/destinations/ometria",
- "category": "destination",
- "initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com"
- }
- },
- "type": "track",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "event": "product clicked",
- "userId": "testuserId1",
- "properties": {
- "filters": ["field1:hello", "val1:val2"]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "metadata": {
- "jobId": 3
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "cLick "
- }
- ]
- }
- }
- }
- ],
- [],
- {},
- [
- {
- "message": {
- "type": "track",
- "event": "Product List Viewed",
- "sentAt": "2023-06-19T22:22:34.928Z",
- "userId": "anonymous",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "version": "2.35.0",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "https://m2-staging.ecmdi.com/supplies/air-distribution/grilles",
- "path": "/supplies/air-distribution/grilles/",
- "title": "Grilles - Air Distribution - Supplies | East Coast Metal Distributors",
- "search": "",
- "tab_url": "https://m2-staging.ecmdi.com/supplies/air-distribution/grilles",
- "referrer": "https://m2-staging.ecmdi.com/",
- "initial_referrer": "https://m2-staging.ecmdi.com/",
- "referring_domain": "m2-staging.ecmdi.com",
- "initial_referring_domain": "m2-staging.ecmdi.com"
- },
- "locale": "en",
- "screen": {
- "width": 2560,
- "height": 1440,
- "density": 1,
- "innerWidth": 2514,
- "innerHeight": 567
- },
- "traits": {
- "loggedIn": false,
- "customerId": "anonymous"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "2.35.0"
- },
- "campaign": {},
- "sessionId": 1687204412379,
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/114.0",
- "trackingPlanId": "tp_2P3vmVzstHPms8hwcqHYwgBjIC7",
- "violationErrors": [
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/list_id/type",
- "instacePath": "/properties/list_id"
- },
- "type": "Datatype-Mismatch",
- "message": "must be string"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/0"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/1"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/2"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/3"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/4"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/5"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/6"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/7"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/8"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/9"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/10"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/11"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/12"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/13"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/14"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/15"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/16"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/17"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'bu_product_num'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'erp_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'list_name'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'location_id'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'mpn'"
- },
- {
- "meta": {
- "schemaPath": "#/properties/properties/properties/products/items/additionalProperties",
- "instacePath": "/properties/products/18"
- },
- "type": "Additional-Properties",
- "message": "must NOT have additional properties 'pim_id'"
- }
- ],
- "trackingPlanVersion": 2
- },
- "rudderId": "0d1f77df-5882-402a-a69f-d2dfe3175ebc",
- "timestamp": "2023-06-19T19:54:39.188Z",
- "properties": {
- "index": "ecm_stg_product",
- "list_id": 1100000063100,
- "queryId": "eafb6ef1081263626abce46671147dc0",
- "products": [
- {
- "mpn": "190RF14X20",
- "sku": "1367585787601",
- "name": "14\" x 20\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168782",
- "pim_id": "1367585787601",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 1,
- "list_name": "Grilles",
- "product_id": "49765",
- "location_id": 1,
- "bu_product_num": "49765"
- },
- {
- "mpn": "190RF20X20",
- "sku": "1367585788656",
- "name": "20\" x 20\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168790",
- "pim_id": "1367585788656",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 2,
- "list_name": "Grilles",
- "product_id": "49773",
- "location_id": 1,
- "bu_product_num": "49773"
- },
- {
- "mpn": "210VM10X04",
- "sku": "1367585790735",
- "name": "10\" x 4\" Bar Type Supply Sidewall/Ceiling Register - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "300529",
- "pim_id": "1367585790735",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 3,
- "list_name": "Grilles",
- "product_id": "300529A",
- "location_id": 1,
- "bu_product_num": "300529A"
- },
- {
- "mpn": "17014X06",
- "sku": "1367585782036",
- "name": "14\" x 6\" Stamped Face Return Air Grille - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168752",
- "pim_id": "1367585782036",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 4,
- "list_name": "Grilles",
- "product_id": "49741",
- "location_id": 1,
- "bu_product_num": "49741"
- },
- {
- "mpn": "17014X04",
- "sku": "1367585782285",
- "name": "14\" x 4\" Stamped Face Return Air Grille - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168751",
- "pim_id": "1367585782285",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 5,
- "list_name": "Grilles",
- "product_id": "49740",
- "location_id": 1,
- "bu_product_num": "49740"
- },
- {
- "mpn": "190RF14X14",
- "sku": "1367585790111",
- "name": "14\" x 14\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168781",
- "pim_id": "1367585790111",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 6,
- "list_name": "Grilles",
- "product_id": "49764",
- "location_id": 1,
- "bu_product_num": "49764"
- },
- {
- "mpn": "17014X10",
- "sku": "1367585783304",
- "name": "14\" x 10\" Stamped Face Return Air Grille - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168755",
- "pim_id": "1367585783304",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 7,
- "list_name": "Grilles",
- "product_id": "49743",
- "location_id": 1,
- "bu_product_num": "49743"
- },
- {
- "mpn": "210VM12X04",
- "sku": "1367585791531",
- "name": "12\" x 4\" Bar Type Supply Sidewall/Ceiling Register - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "240862",
- "pim_id": "1367585791531",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 8,
- "list_name": "Grilles",
- "product_id": "49934",
- "location_id": 1,
- "bu_product_num": "49934"
- },
- {
- "mpn": "190RF20X25",
- "sku": "1367585788307",
- "name": "20\" x 25\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168791",
- "pim_id": "1367585788307",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 9,
- "list_name": "Grilles",
- "product_id": "49774",
- "location_id": 1,
- "bu_product_num": "49774"
- },
- {
- "mpn": "190RF20X14",
- "sku": "1367585789457",
- "name": "20\" x 14\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168788",
- "pim_id": "1367585789457",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 10,
- "list_name": "Grilles",
- "product_id": "49771",
- "location_id": 1,
- "bu_product_num": "49771"
- },
- {
- "mpn": "401M10X04",
- "sku": "1367585800344",
- "name": "10\" x 4\" Stamped Curved Blade Supply Sidewall/Ceiling Register",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "300734",
- "pim_id": "1367585800344",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 11,
- "list_name": "Grilles",
- "product_id": "300734A",
- "location_id": 1,
- "bu_product_num": "300734A"
- },
- {
- "mpn": "190RF14X25",
- "sku": "1367585787467",
- "name": "14\" x 25\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168783",
- "pim_id": "1367585787467",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 12,
- "list_name": "Grilles",
- "product_id": "49766",
- "location_id": 1,
- "bu_product_num": "49766"
- },
- {
- "mpn": "17020X10",
- "sku": "1367585783058",
- "name": "20\" x 10\" Stamped Face Return Air Grille - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "219506",
- "pim_id": "1367585783058",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 13,
- "list_name": "Grilles",
- "product_id": "49881",
- "location_id": 1,
- "bu_product_num": "49881"
- },
- {
- "mpn": "17020X08",
- "sku": "1367585783494",
- "name": "20\" x 8\" Stamped Face Return Air Grille - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "210374",
- "pim_id": "1367585783494",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 14,
- "list_name": "Grilles",
- "product_id": "210374A",
- "location_id": 1,
- "bu_product_num": "210374A"
- },
- {
- "mpn": "190RF12X12",
- "sku": "1367585787042",
- "name": "12\" x 12\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168777",
- "pim_id": "1367585787042",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 15,
- "list_name": "Grilles",
- "product_id": "49761",
- "location_id": 1,
- "bu_product_num": "49761"
- },
- {
- "mpn": "210VM14X04",
- "sku": "1367585793228",
- "name": "14\" x 4\" Bar Type Supply Sidewall/Ceiling Register - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "232771",
- "pim_id": "1367585793228",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 16,
- "list_name": "Grilles",
- "product_id": "49907",
- "location_id": 1,
- "bu_product_num": "49907"
- },
- {
- "mpn": "17014X144",
- "sku": "1367585783124",
- "name": "14\" x 14\" Stamped Face Return Air Grille - White - 4 Holes",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168757",
- "pim_id": "1367585783124",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 17,
- "list_name": "Grilles",
- "product_id": "49744",
- "location_id": 1,
- "bu_product_num": "49744"
- },
- {
- "mpn": "190RF20X30",
- "sku": "1367585788366",
- "name": "20\" x 30\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168792",
- "pim_id": "1367585788366",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 18,
- "list_name": "Grilles",
- "product_id": "49775",
- "location_id": 1,
- "bu_product_num": "49775"
- },
- {
- "mpn": "190RF16X25",
- "sku": "1367585788996",
- "name": "16\" x 25\" Stamped Face Return Air Filter Grille with Removable Face - White",
- "brand": "TRUaire",
- "price": 0,
- "erp_id": "168786",
- "pim_id": "1367585788996",
- "list_id": 1100000063100,
- "category": "Grilles",
- "position": 19,
- "list_name": "Grilles",
- "product_id": "49769",
- "location_id": 1,
- "bu_product_num": "49769"
- }
- ],
- "eventName": "productListView",
- "eventType": "view",
- "list_name": "Grilles",
- "objectIds": [
- "1367585787601",
- "1367585788656",
- "1367585790735",
- "1367585782036",
- "1367585782285",
- "1367585790111",
- "1367585783304",
- "1367585791531",
- "1367585788307",
- "1367585789457",
- "1367585800344",
- "1367585787467",
- "1367585783058",
- "1367585783494",
- "1367585787042",
- "1367585793228",
- "1367585783124",
- "1367585788366",
- "1367585788996"
- ],
- "positions": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
- "userToken": "anonymous"
- },
- "receivedAt": "2023-06-19T22:22:32.431Z",
- "request_ip": "104.205.211.60",
- "anonymousId": "7b701174-5998-480e-a4df-b322d0ec9d1c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2023-06-19T19:54:41.686Z"
- },
- "destination": {
- "secretConfig": {},
- "Config": {
- "apiKey": "apiKey",
- "applicationId": "appId",
- "eventTypeSettings": [
- {
- "from": "productClicked",
- "to": "click"
- },
- {
- "from": "product list filtered",
- "to": "click"
- },
- {
- "from": "Product List Viewed",
- "to": "view"
- },
- {
- "from": "Order Completed",
- "to": "conversion"
- },
- {
- "from": "Product Added",
- "to": "click"
- }
- ],
- "oneTrustCookieCategories": [],
- "eventDelivery": false,
- "eventDeliveryTS": 1687213909459
- },
- "liveEventsConfig": {
- "eventDelivery": false,
- "eventDeliveryTS": 1687213909459
- },
- "id": "destId",
- "workspaceId": "wspId",
- "DestinationDefinition": {
- "Config": {
- "destConfig": {
- "defaultConfig": [
- "apiKey",
- "applicationId",
- "eventTypeSettings",
- "oneTrustCookieCategories"
- ]
- },
- "secretKeys": ["apiKey", "applicationId"],
- "excludeKeys": [],
- "includeKeys": ["oneTrustCookieCategories"],
- "transformAt": "router",
- "cdkV2Enabled": true,
- "transformAtV1": "router",
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova",
- "warehouse"
- ],
- "supportedMessageTypes": ["track"],
- "saveDestinationResponse": true
- },
- "configSchema": {},
- "responseRules": {},
- "options": null,
- "id": "1xrHTzX8VrnvL6FTGOrBBgT687S",
- "name": "ALGOLIA",
- "displayName": "Algolia",
- "category": null,
- "createdAt": "2021-09-08T13:04:58.041Z",
- "updatedAt": "2023-06-13T13:18:08.335Z"
- },
- "transformations": [],
- "isConnectionEnabled": true,
- "isProcessorEnabled": true,
- "name": "my_algolia",
- "enabled": true,
- "deleted": false,
- "createdAt": "2023-05-26T14:18:01.205Z",
- "updatedAt": "2023-06-19T22:31:49.460Z",
- "revisionId": "revisionId1",
- "secretVersion": 7
- },
- "metadata": {
- "sourceId": "srcId",
- "workspaceId": "wspId",
- "destinationId": "destId",
- "jobId": 12
- }
- }
- ]
-]
diff --git a/test/__tests__/data/algolia_router_output.json b/test/__tests__/data/algolia_router_output.json
deleted file mode 100644
index ad0159dcf6a..00000000000
--- a/test/__tests__/data/algolia_router_output.json
+++ /dev/null
@@ -1,288 +0,0 @@
-[
- [
- {
- "metadata": [
- {
- "jobId": 3
- }
- ],
- "batched": false,
- "statusCode": 400,
- "error": "Missing required value from \"properties.index\"",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- },
- "destination": {
- "Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
- "applicationId": "O2YARRI15I",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "cLick "
- }
- ]
- }
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://insights.algolia.io/1/events",
- "headers": {
- "X-Algolia-Application-Id": "appId",
- "X-Algolia-API-Key": "apiKey"
- },
- "params": {},
- "body": {
- "JSON": {
- "events": [
- {
- "index": "products",
- "userToken": "test-user-id1",
- "queryID": "43b15df305339e827f0ac0bdc5ebcaa7",
- "eventName": "product list viewed",
- "eventType": "view",
- "objectIDs": ["ecommerce-sample-data-919", "9780439784542"]
- },
- {
- "index": "products",
- "userToken": "test-user-id1",
- "filters": ["field1:hello", "val1:val2"],
- "eventName": "product clicked",
- "eventType": "click"
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 1
- },
- {
- "jobId": 2
- }
- ],
- "batched": true,
- "statusCode": 200,
- "destination": {
- "ID": "1zzHtStW2ZPlullmz6L7DGnmk9V",
- "Name": "algolia-dev",
- "DestinationDefinition": {
- "ID": "1zgVZhcj1Tij4qlKg7B1Jp16IrH",
- "Name": "ALGOLIA",
- "DisplayName": "Algolia",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "applicationId", "eventTypeSettings"]
- },
- "excludeKeys": [],
- "includeKeys": [],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey", "applicationId"],
- "supportedMessageTypes": ["track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "apiKey",
- "applicationId": "appId",
- "eventTypeSettings": [
- {
- "from": "product clicked",
- "to": "click"
- },
- {
- "from": "product list viewed",
- "to": "view"
- }
- ]
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- }
- ],
- {
- "message": "Invalid event array",
- "statusCode": 400
- },
- {
- "message": "Invalid event array",
- "statusCode": 400
- },
- [
- {
- "batched": true,
- "batchedRequest": {
- "body": {
- "FORM": {},
- "JSON": {
- "events": [
- {
- "eventName": "product list viewed",
- "eventType": "view",
- "index": "ecm_stg_product",
- "objectIDs": [
- "1367585787601",
- "1367585788656",
- "1367585790735",
- "1367585782036",
- "1367585782285",
- "1367585790111",
- "1367585783304",
- "1367585791531",
- "1367585788307",
- "1367585789457",
- "1367585800344",
- "1367585787467",
- "1367585783058",
- "1367585783494",
- "1367585787042",
- "1367585793228",
- "1367585783124",
- "1367585788366",
- "1367585788996"
- ],
- "queryID": "eafb6ef1081263626abce46671147dc0",
- "userToken": "anonymous"
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {}
- },
- "endpoint": "https://insights.algolia.io/1/events",
- "files": {},
- "headers": {
- "X-Algolia-API-Key": "apiKey",
- "X-Algolia-Application-Id": "appId"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- },
- "destination": {
- "Config": {
- "apiKey": "apiKey",
- "applicationId": "appId",
- "eventDelivery": false,
- "eventDeliveryTS": 1687213909459,
- "eventTypeSettings": [
- {
- "from": "productClicked",
- "to": "click"
- },
- {
- "from": "product list filtered",
- "to": "click"
- },
- {
- "from": "Product List Viewed",
- "to": "view"
- },
- {
- "from": "Order Completed",
- "to": "conversion"
- },
- {
- "from": "Product Added",
- "to": "click"
- }
- ],
- "oneTrustCookieCategories": []
- },
- "DestinationDefinition": {
- "Config": {
- "cdkV2Enabled": true,
- "destConfig": {
- "defaultConfig": [
- "apiKey",
- "applicationId",
- "eventTypeSettings",
- "oneTrustCookieCategories"
- ]
- },
- "excludeKeys": [],
- "includeKeys": ["oneTrustCookieCategories"],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey", "applicationId"],
- "supportedMessageTypes": ["track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova",
- "warehouse"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "category": null,
- "configSchema": {},
- "createdAt": "2021-09-08T13:04:58.041Z",
- "displayName": "Algolia",
- "id": "1xrHTzX8VrnvL6FTGOrBBgT687S",
- "name": "ALGOLIA",
- "options": null,
- "responseRules": {},
- "updatedAt": "2023-06-13T13:18:08.335Z"
- },
- "createdAt": "2023-05-26T14:18:01.205Z",
- "deleted": false,
- "enabled": true,
- "id": "destId",
- "isConnectionEnabled": true,
- "isProcessorEnabled": true,
- "liveEventsConfig": {
- "eventDelivery": false,
- "eventDeliveryTS": 1687213909459
- },
- "name": "my_algolia",
- "revisionId": "revisionId1",
- "secretConfig": {},
- "secretVersion": 7,
- "transformations": [],
- "updatedAt": "2023-06-19T22:31:49.460Z",
- "workspaceId": "wspId"
- },
- "metadata": [
- {
- "sourceId": "srcId",
- "workspaceId": "wspId",
- "destinationId": "destId",
- "jobId": 12
- }
- ],
- "statusCode": 200
- }
- ]
-]
diff --git a/test/__tests__/data/am_batch_input.json b/test/__tests__/data/am_batch_input.json
index f78de89451d..5b0440babf7 100644
--- a/test/__tests__/data/am_batch_input.json
+++ b/test/__tests__/data/am_batch_input.json
@@ -1,4 +1,67 @@
[
+ [
+ {
+ "message": {
+ "body": {
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {},
+ "JSON": {
+ "events": [
+ {
+ "ip": "0.0.0.0",
+ "time": 1603132665557,
+ "os_name": "",
+ "app_name": "RudderLabs JavaScript SDK",
+ "language": "en-US",
+ "library": "rudderstack",
+ "event_type": "$identify",
+ "os_version": "",
+ "session_id": -1,
+ "app_version": "1.1.5",
+ "user_properties": {
+ "name": "some campaign",
+ "plan": "Open source",
+ "term": "keyword",
+ "test": "other value",
+ "email": "test@rudderstack.com",
+ "logins": 5,
+ "medium": "medium",
+ "source": "google",
+ "content": "some content",
+ "category": "SampleIdentify",
+ "createdAt": 1599264000
+ }
+ }
+ ],
+ "api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
+ "options": {
+ "min_id_length": 1
+ }
+ }
+ },
+ "type": "REST",
+ "files": {},
+ "method": "POST",
+ "params": {},
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "version": "1",
+ "endpoint": "https://api.eu.amplitude.com/2/httpapi"
+ },
+ "metadata": {
+ "job_id": 1
+ },
+ "destination": {
+ "ID": "a",
+ "url": "a",
+ "Config": {
+ "residencyServer": "EU"
+ }
+ }
+ }
+ ],
[
{
"message": {
@@ -26,7 +89,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -37,7 +100,9 @@
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -45,15 +110,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api.eu.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 1 },
+ "metadata": {
+ "job_id": 1
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "EU" }
+ "Config": {
+ "residencyServer": "EU"
+ }
}
},
{
@@ -77,11 +148,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -89,15 +164,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 2 },
+ "metadata": {
+ "job_id": 2
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -121,11 +202,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -133,15 +218,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 3 },
+ "metadata": {
+ "job_id": 3
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -155,7 +246,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -166,11 +259,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -178,15 +275,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 4 },
+ "metadata": {
+ "job_id": 4
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -200,7 +303,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -211,11 +316,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -223,15 +332,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 5 },
+ "metadata": {
+ "job_id": 5
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -256,11 +371,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": { "job_id": 6 },
+ "metadata": {
+ "job_id": 6
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -283,11 +402,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": { "job_id": 7 },
+ "metadata": {
+ "job_id": 7
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
@@ -317,7 +440,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -327,7 +450,9 @@
}
},
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -335,15 +460,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 1 },
+ "metadata": {
+ "job_id": 1
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -366,10 +497,14 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
},
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -377,15 +512,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 2 },
+ "metadata": {
+ "job_id": 2
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -408,10 +549,14 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
},
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -419,15 +564,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 3 },
+ "metadata": {
+ "job_id": 3
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -440,7 +591,9 @@
"events": {
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -451,10 +604,14 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
},
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -462,15 +619,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 4 },
+ "metadata": {
+ "job_id": 4
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -483,7 +646,9 @@
"events": {
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -494,10 +659,14 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
},
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -505,15 +674,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 5 },
+ "metadata": {
+ "job_id": 5
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -538,11 +713,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": { "job_id": 6 },
+ "metadata": {
+ "job_id": 6
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -565,15 +744,18 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": { "job_id": 7 },
+ "metadata": {
+ "job_id": 7
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
-
[
{
"message": {
@@ -603,7 +785,9 @@
"device_manufacturer": "Google"
},
"api_key": "afasf",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -611,7 +795,9 @@
"method": "POST",
"params": {},
"userId": "anon_id",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
@@ -690,7 +876,9 @@
"device_manufacturer": "Google"
},
"api_key": "afasf",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -698,7 +886,9 @@
"method": "POST",
"params": {},
"userId": "anon_id",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
@@ -777,7 +967,9 @@
"device_manufacturer": "Google"
},
"api_key": "afasf",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -785,7 +977,9 @@
"method": "POST",
"params": {},
"userId": "anon_id",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
@@ -864,7 +1058,9 @@
"device_manufacturer": "Google"
},
"api_key": "afasf",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -872,7 +1068,9 @@
"method": "POST",
"params": {},
"userId": "anon_id",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
@@ -951,7 +1149,9 @@
"device_manufacturer": "Google"
},
"api_key": "afasf",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -959,7 +1159,9 @@
"method": "POST",
"params": {},
"userId": "anon_id",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
@@ -1011,7 +1213,6 @@
}
}
],
-
[
{
"message": {
@@ -1039,7 +1240,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -1050,7 +1251,9 @@
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1058,15 +1261,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 1 },
+ "metadata": {
+ "job_id": 1
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1090,11 +1299,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1102,15 +1315,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 2 },
+ "metadata": {
+ "job_id": 2
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1134,11 +1353,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1146,15 +1369,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 3 },
+ "metadata": {
+ "job_id": 3
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1168,7 +1397,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -1179,11 +1410,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1191,15 +1426,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 4 },
+ "metadata": {
+ "job_id": 4
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1213,7 +1454,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -1224,11 +1467,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1236,15 +1483,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 5 },
+ "metadata": {
+ "job_id": 5
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1269,11 +1522,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": { "job_id": 6 },
+ "metadata": {
+ "job_id": 6
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1296,15 +1553,18 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": { "job_id": 7 },
+ "metadata": {
+ "job_id": 7
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
-
[
{
"message": {
@@ -1331,7 +1591,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -1342,7 +1602,9 @@
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1350,15 +1612,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 1 },
+ "metadata": {
+ "job_id": 1
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1382,11 +1650,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1394,15 +1666,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 2 },
+ "metadata": {
+ "job_id": 2
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1426,11 +1704,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "event_properties": { "key": "val" }
+ "event_properties": {
+ "key": "val"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1438,15 +1720,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 3 },
+ "metadata": {
+ "job_id": 3
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1460,7 +1748,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -1471,11 +1761,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1483,15 +1777,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 4 },
+ "metadata": {
+ "job_id": 4
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1505,7 +1805,9 @@
{
"ip": "[::1]",
"time": 1603132726413,
- "groups": { "Company": "Comapny-ABC" },
+ "groups": {
+ "Company": "Comapny-ABC"
+ },
"os_name": "",
"user_id": "sampleusrRudder3",
"app_name": "RudderLabs JavaScript SDK",
@@ -1516,11 +1818,15 @@
"os_version": "",
"session_id": -1,
"app_version": "1.1.5",
- "user_properties": { "Company": "Comapny-ABC" }
+ "user_properties": {
+ "Company": "Comapny-ABC"
+ }
}
],
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "options": { "min_id_length": 1 }
+ "options": {
+ "min_id_length": 1
+ }
}
},
"type": "REST",
@@ -1528,15 +1834,21 @@
"method": "POST",
"params": {},
"userId": "my-anonymous-id-new",
- "headers": { "Content-Type": "application/json" },
+ "headers": {
+ "Content-Type": "application/json"
+ },
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": { "job_id": 5 },
+ "metadata": {
+ "job_id": 5
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1561,11 +1873,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": { "job_id": 6 },
+ "metadata": {
+ "job_id": 6
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1588,11 +1904,15 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": { "job_id": 7 },
+ "metadata": {
+ "job_id": 7
+ },
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
]
diff --git a/test/__tests__/data/am_batch_output.json b/test/__tests__/data/am_batch_output.json
index e4a581d04ba..32735b000fb 100644
--- a/test/__tests__/data/am_batch_output.json
+++ b/test/__tests__/data/am_batch_output.json
@@ -1,4 +1,18 @@
[
+ [
+ {
+ "batched": false,
+ "error": "Both userId and deviceId cannot be undefined",
+ "metadata": {
+ "job_id": 1
+ },
+ "statTags": {
+ "errorCategory": "dataValidation",
+ "errorType": "instrumentation"
+ },
+ "statusCode": 400
+ }
+ ],
[
{
"batchedRequest": {
@@ -26,7 +40,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -53,11 +67,17 @@
"version": "1",
"endpoint": "https://api.eu.amplitude.com/2/httpapi"
},
- "metadata": [{ "job_id": 1 }],
+ "metadata": [
+ {
+ "job_id": 1
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "EU" }
+ "Config": {
+ "residencyServer": "EU"
+ }
}
},
{
@@ -82,11 +102,17 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": [{ "job_id": 6 }],
+ "metadata": [
+ {
+ "job_id": 6
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -96,7 +122,9 @@
"JSON_ARRAY": {},
"FORM": {
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "mapping": ["{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"]
+ "mapping": [
+ "{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"
+ ]
},
"JSON": {}
},
@@ -109,11 +137,17 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": [{ "job_id": 7 }],
+ "metadata": [
+ {
+ "job_id": 7
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -213,11 +247,26 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/batch"
},
- "metadata": [{ "job_id": 2 }, { "job_id": 3 }, { "job_id": 4 }, { "job_id": 5 }],
+ "metadata": [
+ {
+ "job_id": 2
+ },
+ {
+ "job_id": 3
+ },
+ {
+ "job_id": 4
+ },
+ {
+ "job_id": 5
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
@@ -247,7 +296,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -273,11 +322,17 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/2/httpapi"
},
- "metadata": [{ "job_id": 1 }],
+ "metadata": [
+ {
+ "job_id": 1
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -302,11 +357,17 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/groupidentify"
},
- "metadata": [{ "job_id": 6 }],
+ "metadata": [
+ {
+ "job_id": 6
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -316,7 +377,9 @@
"JSON_ARRAY": {},
"FORM": {
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "mapping": ["{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"]
+ "mapping": [
+ "{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"
+ ]
},
"JSON": {}
},
@@ -329,11 +392,17 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/usermap"
},
- "metadata": [{ "job_id": 7 }],
+ "metadata": [
+ {
+ "job_id": 7
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -433,11 +502,26 @@
"version": "1",
"endpoint": "https://api2.amplitude.com/batch"
},
- "metadata": [{ "job_id": 2 }, { "job_id": 3 }, { "job_id": 4 }, { "job_id": 5 }],
+ "metadata": [
+ {
+ "job_id": 2
+ },
+ {
+ "job_id": 3
+ },
+ {
+ "job_id": 4
+ },
+ {
+ "job_id": 5
+ }
+ ],
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
@@ -621,14 +705,29 @@
"DisplayName": "Braze",
"Config": {
"destConfig": {
- "android": ["useNativeSDK"],
- "defaultConfig": ["appKey", "dataCenter", "restApiKey"],
- "ios": ["useNativeSDK"],
- "web": ["useNativeSDK"]
+ "android": [
+ "useNativeSDK"
+ ],
+ "defaultConfig": [
+ "appKey",
+ "dataCenter",
+ "restApiKey"
+ ],
+ "ios": [
+ "useNativeSDK"
+ ],
+ "web": [
+ "useNativeSDK"
+ ]
},
"excludeKeys": [],
- "includeKeys": ["appKey", "dataCenter"],
- "secretKeys": ["restApiKey"],
+ "includeKeys": [
+ "appKey",
+ "dataCenter"
+ ],
+ "secretKeys": [
+ "restApiKey"
+ ],
"supportedSourceTypes": [
"android",
"ios",
@@ -682,7 +781,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -692,7 +793,9 @@
"JSON_ARRAY": {},
"FORM": {
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "mapping": ["{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"]
+ "mapping": [
+ "{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"
+ ]
},
"JSON": {}
},
@@ -713,7 +816,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -741,7 +846,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -859,7 +964,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
],
@@ -889,7 +996,7 @@
"plan": "Open source",
"term": "keyword",
"test": "other value",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"logins": 5,
"medium": "medium",
"source": "google",
@@ -924,7 +1031,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -957,7 +1066,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -967,7 +1078,9 @@
"JSON_ARRAY": {},
"FORM": {
"api_key": "4c7ed7573eb73517ee4c26ed4bde9a85",
- "mapping": ["{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"]
+ "mapping": [
+ "{\"global_user_id\":\"newUserIdAlias\",\"user_id\":\"sampleusrRudder3\"}"
+ ]
},
"JSON": {}
},
@@ -988,7 +1101,9 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
},
{
@@ -1105,8 +1220,10 @@
"destination": {
"ID": "a",
"url": "a",
- "Config": { "residencyServer": "standard" }
+ "Config": {
+ "residencyServer": "standard"
+ }
}
}
]
-]
+]
\ No newline at end of file
diff --git a/test/__tests__/data/am_input.json b/test/__tests__/data/am_input.json
index 36a25bba5a5..2eecfb1d2c6 100644
--- a/test/__tests__/data/am_input.json
+++ b/test/__tests__/data/am_input.json
@@ -1,4 +1,214 @@
[
+ {
+ "message": {
+ "type": "track",
+ "sentAt": "2020-08-14T05:30:30.118Z",
+ "context": {
+ "source": "test",
+ "traits": {
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ "library": {
+ "name": "rudder-sdk-ruby-sync",
+ "version": "1.0.6"
+ }
+ },
+ "messageId": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "timestamp": "2020-08-14T05:30:30.118Z",
+ "properties": {
+ "tax": 2,
+ "total": 27.5,
+ "coupon": "hasbros",
+ "revenue": 48,
+ "revenue_type": "Purchased",
+ "quantity": 2,
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "shipping": 3,
+ "subtotal": 22.5,
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f"
+ },
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "integrations": {
+ "S3": false,
+ "All": true
+ }
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "groupTypeTrait": "email",
+ "groupValueTrait": "age",
+ "trackProductsOnce": true,
+ "trackRevenuePerProduct": false
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "UNSUPPORTED-TYPE",
+ "event": "Order Completed",
+ "sentAt": "2020-08-14T05:30:30.118Z",
+ "context": {},
+ "messageId": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "timestamp": "2020-08-14T05:30:30.118Z",
+ "properties": {},
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "integrations": {
+ "S3": false,
+ "All": true
+ }
+ },
+ "destination": {
+ "Config": {
+ "groupTypeTrait": "email",
+ "apiKey": "abcde",
+ "groupValueTrait": "age",
+ "trackProductsOnce": true,
+ "trackRevenuePerProduct": false
+ }
+ }
+ },
+ {
+ "message": {
+ "event": "Order Completed",
+ "sentAt": "2020-08-14T05:30:30.118Z",
+ "context": {},
+ "messageId": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "timestamp": "2020-08-14T05:30:30.118Z",
+ "properties": {},
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "integrations": {
+ "S3": false,
+ "All": true
+ }
+ },
+ "destination": {
+ "Config": {
+ "groupTypeTrait": "email",
+ "groupValueTrait": "age",
+ "trackProductsOnce": true,
+ "trackRevenuePerProduct": false
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "track",
+ "event": "Order Completed",
+ "sentAt": "2020-08-14T05:30:30.118Z",
+ "context": {
+ "source": "test",
+ "traits": {
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ "library": {
+ "name": "rudder-sdk-ruby-sync",
+ "version": "1.0.6"
+ }
+ },
+ "messageId": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "timestamp": "2020-08-14T05:30:30.118Z",
+ "properties": {
+ "tax": 2,
+ "total": 27.5,
+ "coupon": "hasbros",
+ "revenue": 48,
+ "revenue_type": "Purchased",
+ "quantity": 2,
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "shipping": 3,
+ "subtotal": 22.5,
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f"
+ },
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "integrations": {
+ "S3": false,
+ "All": true
+ }
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "groupTypeTrait": "email",
+ "groupValueTrait": "age",
+ "trackProductsOnce": true,
+ "trackRevenuePerProduct": false
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "track",
+ "event": "Order Completed",
+ "sentAt": "2020-08-14T05:30:30.118Z",
+ "context": {
+ "source": "test",
+ "traits": {
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ "library": {
+ "name": "rudder-sdk-ruby-sync",
+ "version": "1.0.6"
+ }
+ },
+ "messageId": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "timestamp": "2020-08-14T05:30:30.118Z",
+ "properties": {
+ "tax": 2,
+ "total": 27.5,
+ "coupon": "hasbros",
+ "revenue": 48,
+ "quantity": 2,
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "products": [
+ {
+ "sku": "45790-32",
+ "url": "https://www.example.com/product/path",
+ "name": "Monopoly: 3rd Edition",
+ "price": 19,
+ "category": "Games",
+ "quantity": 1,
+ "image_url": "https:///www.example.com/product/path.jpg",
+ "product_id": "507f1f77bcf86cd799439011"
+ },
+ {
+ "sku": "46493-32",
+ "name": "Uno Card Game",
+ "price": 3,
+ "category": "Games",
+ "quantity": 2,
+ "product_id": "505bd76785ebb509fc183733"
+ }
+ ],
+ "shipping": 3,
+ "subtotal": 22.5,
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f"
+ },
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "integrations": {
+ "S3": false,
+ "All": true
+ }
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "groupTypeTrait": "email",
+ "groupValueTrait": "age",
+ "trackProductsOnce": true,
+ "trackRevenuePerProduct": false
+ }
+ }
+ },
{
"message": {
"channel": "web",
@@ -19,7 +229,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -57,7 +267,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -116,7 +326,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -154,7 +364,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -200,7 +410,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"city": "kolkata",
"country": "India",
@@ -266,7 +476,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -333,7 +543,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -405,7 +615,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -502,7 +712,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"city": "kolkata",
"country": "India",
@@ -642,7 +852,92 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
+ "plan": "Open source",
+ "logins": 5,
+ "createdAt": 1599264000
+ },
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.1.5"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
+ "locale": "en-US",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 0.8999999761581421
+ },
+ "campaign": {
+ "source": "google",
+ "medium": "medium",
+ "term": "keyword",
+ "content": "some content",
+ "name": "some campaign",
+ "test": "other value"
+ },
+ "page": {
+ "path": "/destinations/amplitude",
+ "referrer": "",
+ "search": "",
+ "title": "",
+ "url": "https://docs.rudderstack.com/destinations/amplitude",
+ "category": "destination",
+ "initial_referrer": "https://docs.rudderstack.com",
+ "initial_referring_domain": "docs.rudderstack.com"
+ }
+ },
+ "type": "group",
+ "messageId": "e5034df0-a404-47b4-a463-76df99934fea",
+ "originalTimestamp": "2020-10-20T07:54:58.983Z",
+ "anonymousId": "my-anonymous-id-new",
+ "userId": "sampleusrRudder3",
+ "integrations": {
+ "All": true,
+ "Amplitude": {
+ "groups": {
+ "group_type": "Company",
+ "group_value": "ABC"
+ }
+ }
+ },
+ "groupId": "Sample_groupId23",
+ "traits": {
+ "KEY_3": {
+ "CHILD_KEY_92": "value_95",
+ "CHILD_KEY_102": "value_103"
+ },
+ "KEY_2": {
+ "CHILD_KEY_92": "value_95",
+ "CHILD_KEY_102": "value_103"
+ },
+ "name_trait": "Company",
+ "value_trait": "ABC"
+ },
+ "sentAt": "2020-10-20T07:54:58.983Z"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde"
+ }
+ }
+ },
+ {
+ "message": {
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.1.5"
+ },
+ "traits": {
+ "name": "Shehan Study",
+ "category": "SampleIdentify",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -698,7 +993,7 @@
"CHILD_KEY_102": "value_103"
},
"name_trait": "Company",
- "value_trait": "Comapny-ABC"
+ "value_trait": "ABC"
},
"sentAt": "2020-10-20T07:54:58.983Z"
},
@@ -723,7 +1018,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -779,7 +1074,7 @@
"CHILD_KEY_102": "value_103"
},
"name_trait": "Company",
- "value_trait": ["Comapny-ABC"]
+ "value_trait": ["ABC"]
},
"sentAt": "2020-10-20T07:54:58.983Z"
},
@@ -804,7 +1099,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -871,7 +1166,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -2854,7 +3149,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"city": "kolkata",
"country": "India",
@@ -3031,7 +3326,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "rohith@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -3069,7 +3364,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "rohith@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -3117,7 +3412,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -3173,7 +3468,7 @@
"CHILD_KEY_102": "value_103"
},
"name_trait": "Company",
- "value_trait": "Comapny-ABC"
+ "value_trait": "ABC"
},
"sentAt": "2020-10-20T07:54:58.983Z"
},
@@ -3199,7 +3494,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -3478,7 +3773,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -3516,7 +3811,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -3572,7 +3867,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -3610,7 +3905,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -3659,7 +3954,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -3718,7 +4013,7 @@
"CHILD_KEY_102": "value_103"
},
"name_trait": "Company",
- "value_trait": "Comapny-ABC"
+ "value_trait": "ABC"
},
"sentAt": "2020-10-20T07:54:58.983Z"
},
@@ -3771,7 +4066,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -3843,7 +4138,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -3965,6 +4260,68 @@
}
}
},
+ {
+ "message": {
+ "anonymousId": "5d205961641ee6c5",
+ "channel": "mobile",
+ "context": {
+ "app": {
+ "build": "6",
+ "name": "Sample Kotlin",
+ "namespace": "com.example.testapp1mg",
+ "version": "1.2"
+ },
+ "device": {
+ "id": "5d205961641ee6c5",
+ "manufacturer": "Google",
+ "model": "Android SDK built for x86",
+ "name": "generic_x86",
+ "type": "Android"
+ },
+ "library": {
+ "name": "com.rudderstack.android.sdk.core",
+ "version": "1.7.0"
+ },
+ "locale": "en-US",
+ "network": {
+ "carrier": "Android",
+ "bluetooth": false,
+ "cellular": true,
+ "wifi": true
+ },
+ "os": {
+ "name": "Android",
+ "version": "7.1.1"
+ },
+ "screen": {
+ "density": 440,
+ "height": 2148,
+ "width": 1080
+ },
+ "sessionId": "1662393792",
+ "timezone": "Asia/Kolkata",
+ "traits": {
+ "anonymousId": "5d205961641ee6c5",
+ "id": "User Android",
+ "userId": "User Android"
+ },
+ "userAgent": "Dalvik/2.1.0 (Linux; U; Android 7.1.1; Android SDK built for x86 Build/NYC)"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "1662393883248-509420bf-b812-4f8d-bdb2-8c811bfde87f",
+ "properties": {},
+ "originalTimestamp": "2022-09-05T16:04:43.250Z",
+ "type": "screen",
+ "userId": "User Android"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde"
+ }
+ }
+ },
{
"message": {
"channel": "web",
@@ -3985,7 +4342,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"country": "India",
"postalCode": 712136,
@@ -4024,7 +4381,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"city": "kolkata",
"address": {
"country": "India",
@@ -4131,7 +4488,7 @@
"traits": {
"name": "Shehan Study",
"category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
+ "email": "test@rudderstack.com",
"plan": "Open source",
"logins": 5,
"createdAt": 1599264000
@@ -4185,7 +4542,7 @@
"CHILD_KEY_102": "value_103"
},
"name_trait": "Company",
- "value_trait": "Comapny-ABC"
+ "value_trait": "ABC"
},
"sentAt": "2020-10-20T07:54:58.983Z"
},
@@ -4208,7 +4565,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -4280,7 +4637,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -4352,7 +4709,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -4424,7 +4781,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
@@ -4464,7 +4821,6 @@
"search": "",
"title": "",
"url": "https://docs.rudderstack.com/destinations/amplitude",
- "category": "destination",
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com"
},
@@ -4474,15 +4830,114 @@
"event_id": 2
}
},
- "name": "ApplicationLoaded",
"sentAt": "2019-10-14T11:15:53.296Z"
},
"destination": {
"Config": {
"apiKey": "abcde",
- "useUserDefinedPageEventName": true,
+ "useUserDefinedPageEventName": false,
"userProvidedPageEventString": "Viewed {{context.page.title}} event."
}
}
+ },
+ {
+ "message": {
+ "type": "screen",
+ "userId": "identified user id",
+ "anonymousId": "anon-id-new",
+ "event": "Screen View",
+ "properties": {
+ "prop1": "5"
+ },
+ "context": {
+ "ip": "14.5.67.21",
+ "library": {
+ "name": "http"
+ }
+ },
+ "timestamp": "2020-02-02T00:23:09.544Z"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "useUserDefinedScreenEventName": true,
+ "userProvidedScreenEventString": "My {{ event }} event."
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "screen",
+ "userId": "identified user id",
+ "anonymousId": "anon-id-new",
+ "event": "Screen View",
+ "properties": {
+ "prop1": "5"
+ },
+ "context": {
+ "ip": "14.5.67.21",
+ "library": {
+ "name": "http"
+ }
+ },
+ "timestamp": "2020-02-02T00:23:09.544Z"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "useUserDefinedScreenEventName": false,
+ "userProvidedScreenEventString": "My {{ event }} event."
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "screen",
+ "userId": "identified user id",
+ "anonymousId": "anon-id-new",
+ "event": "Screen same as event",
+ "properties": {
+ "prop1": "5"
+ },
+ "context": {
+ "ip": "14.5.67.21",
+ "library": {
+ "name": "http"
+ }
+ },
+ "timestamp": "2020-02-02T00:23:09.544Z"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "useUserDefinedScreenEventName": true,
+ "userProvidedScreenEventString": "{{ event }}"
+ }
+ }
+ },
+ {
+ "message": {
+ "type": "screen",
+ "userId": "identified user id",
+ "anonymousId": "anon-id-new",
+ "name": "Screen",
+ "properties": {
+ "prop1": "5"
+ },
+ "context": {
+ "ip": "14.5.67.21",
+ "library": {
+ "name": "http"
+ }
+ },
+ "timestamp": "2020-02-02T00:23:09.544Z"
+ },
+ "destination": {
+ "Config": {
+ "apiKey": "abcde",
+ "useUserDefinedScreenEventName": true,
+ "userProvidedScreenEventString": ""
+ }
+ }
}
]
diff --git a/test/__tests__/data/am_output.json b/test/__tests__/data/am_output.json
index 8104f4ec791..6744a9dcefd 100644
--- a/test/__tests__/data/am_output.json
+++ b/test/__tests__/data/am_output.json
@@ -1,4 +1,138 @@
[
+ {
+ "error": "Event not present. Please send event field"
+ },
+ {
+ "error": "message type not supported"
+ },
+ {
+ "error": "No API Key is Found. Please Configure API key from dashbaord"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "library": "rudderstack",
+ "event_type": "Order Completed",
+ "insert_id": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "event_properties": {
+ "tax": 2,
+ "total": 27.5,
+ "coupon": "hasbros",
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "revenue_type": "Purchased",
+ "shipping": 3,
+ "subtotal": 22.5,
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f"
+ },
+ "revenueType": "Purchased",
+ "price": 48,
+ "quantity": 1,
+ "revenue": 48,
+ "time": 1597383030118,
+ "user_properties": {
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ "session_id": -1
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "50be5c78-6c3f-4b60-be84-97805a316fb1",
+ "library": "rudderstack",
+ "event_type": "Order Completed",
+ "insert_id": "7208bbb6-2c4e-45bb-bf5b-ad426f3593e9",
+ "event_properties": {
+ "tax": 2,
+ "total": 27.5,
+ "coupon": "hasbros",
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "products": [
+ {
+ "category": "Games",
+ "image_url": "https:///www.example.com/product/path.jpg",
+ "name": "Monopoly: 3rd Edition",
+ "price": 19,
+ "product_id": "507f1f77bcf86cd799439011",
+ "quantity": 1,
+ "sku": "45790-32",
+ "url": "https://www.example.com/product/path"
+ },
+ {
+ "category": "Games",
+ "name": "Uno Card Game",
+ "price": 3,
+ "product_id": "505bd76785ebb509fc183733",
+ "quantity": 2,
+ "sku": "46493-32"
+ }
+ ],
+ "shipping": 3,
+ "subtotal": 22.5,
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f"
+ },
+ "revenueType": "Purchased",
+ "price": 48,
+ "quantity": 1,
+ "revenue": 48,
+ "time": 1597383030118,
+ "user_properties": {
+ "anonymousId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
+ "session_id": -1
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "50be5c78-6c3f-4b60-be84-97805a316fb1"
+ },
{
"version": "1",
"type": "REST",
@@ -21,14 +155,14 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "84e26acc-56a5-4835-8233-591137fca468",
"ip": "0.0.0.0",
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -77,14 +211,14 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "84e26acc-56a5-4835-8233-591137fca468",
"ip": "0.0.0.0",
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -137,11 +271,11 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"event_type": "$identify",
"user_properties": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -202,13 +336,13 @@
"initial_referring_domain": "docs.rudderstack.com",
"initial_referrer": "https://docs.rudderstack.com"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"ip": "1.1.1.1",
"time": 1571051718299,
"user_id": "12345",
"user_properties": {
"anonymousId": "12345",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"initial_referrer": "https://docs.rudderstack.com"
}
@@ -261,7 +395,7 @@
"initial_referring_domain": "docs.rudderstack.com",
"initial_referrer": "https://docs.rudderstack.com"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"ip": "1.1.1.1",
"groups": {
"Company": "ABC"
@@ -270,7 +404,7 @@
"user_id": "12345",
"user_properties": {
"anonymousId": "12345",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"initial_referrer": "https://docs.rudderstack.com"
}
@@ -312,7 +446,7 @@
"app_version": "1.0.0",
"language": "en-US",
"event_type": "test track event",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"event_properties": {
"user_actual_role": "system_admin",
"user_actual_id": 12345,
@@ -322,7 +456,7 @@
"user_id": "12345",
"user_properties": {
"anonymousId": "12345",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"initial_referrer": "https://docs.rudderstack.com"
},
@@ -366,11 +500,11 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"event_type": "$identify",
"user_properties": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -419,7 +553,7 @@
"timestamp": "2020-08-28 09:00:00"
},
"event_type": "$identify",
- "session_id": "1598597129",
+ "session_id": 1598597129,
"time": 0,
"user_id": "ubcdfghi0001"
}
@@ -450,7 +584,7 @@
"events": [
{
"device_id": "123456",
- "session_id": "1598597129",
+ "session_id": 1598597129,
"event_type": "$identify",
"library": "rudderstack",
"user_properties": {
@@ -555,6 +689,81 @@
"files": {},
"userId": "123456"
},
+ [
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "os_name": "Chrome",
+ "os_version": "85.0.4183.121",
+ "platform": "Web",
+ "library": "rudderstack",
+ "device_model": "Mac",
+ "device_id": "my-anonymous-id-new",
+ "app_name": "RudderLabs JavaScript SDK",
+ "app_version": "1.1.5",
+ "language": "en-US",
+ "event_type": "$identify",
+ "groups": {
+ "Company": "ABC"
+ },
+ "user_properties": {
+ "Company": "ABC",
+ "utm_content": "some content",
+ "utm_medium": "medium",
+ "utm_name": "some campaign",
+ "utm_source": "google",
+ "utm_term": "keyword",
+ "utm_test": "other value",
+ "initial_referring_domain": "docs.rudderstack.com",
+ "initial_referrer": "https://docs.rudderstack.com"
+ },
+ "time": 1603180498983,
+ "user_id": "sampleusrRudder3",
+ "session_id": -1
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "my-anonymous-id-new"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/groupidentify",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "api_key": "abcde",
+ "identification": ["{\"group_type\":\"Company\",\"group_value\":\"ABC\"}"]
+ }
+ },
+ "files": {},
+ "userId": "my-anonymous-id-new"
+ }
+ ],
[
{
"version": "1",
@@ -581,7 +790,7 @@
"language": "en-US",
"event_type": "$identify",
"user_properties": {
- "Company": "Comapny-ABC",
+ "Company": "ABC",
"utm_content": "some content",
"utm_medium": "medium",
"utm_name": "some campaign",
@@ -592,7 +801,7 @@
"initial_referrer": "https://docs.rudderstack.com"
},
"groups": {
- "Company": "Comapny-ABC"
+ "Company": "ABC"
},
"time": 1603180498983,
"user_id": "sampleusrRudder3",
@@ -624,7 +833,7 @@
"FORM": {
"api_key": "abcde",
"identification": [
- "{\"group_type\":\"Company\",\"group_value\":\"Comapny-ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"Comapny-ABC\"}}"
+ "{\"group_type\":\"Company\",\"group_value\":\"ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"ABC\"}}"
]
}
},
@@ -2244,7 +2453,7 @@
"event_type": "Order Completed",
"user_id": "userID123",
"revenueType": "Purchased",
- "price": 25,
+ "price": 25.0,
"quantity": 2,
"revenue": 48,
"time": 1597383030118,
@@ -2886,13 +3095,13 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"event_type": "$identify",
"device_brand": "testBrand",
"device_manufacturer": "testManufacturer",
"user_properties": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -3031,14 +3240,14 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "84e26acc-56a5-4835-8233-591137fca468",
"ip": "0.0.0.0",
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "rohith@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -3091,7 +3300,7 @@
"language": "en-US",
"event_type": "$identify",
"user_properties": {
- "Company": "Comapny-ABC",
+ "Company": "ABC",
"utm_content": "some content",
"utm_medium": "medium",
"utm_name": "some campaign",
@@ -3102,7 +3311,7 @@
"initial_referrer": "https://docs.rudderstack.com"
},
"groups": {
- "Company": "Comapny-ABC"
+ "Company": "ABC"
},
"time": 1603180498983,
"user_id": "sampleusrRudder3",
@@ -3134,7 +3343,7 @@
"FORM": {
"api_key": "abcde",
"identification": [
- "{\"group_type\":\"Company\",\"group_value\":\"Comapny-ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"Comapny-ABC\"}}"
+ "{\"group_type\":\"Company\",\"group_value\":\"ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"ABC\"}}"
]
}
},
@@ -3365,7 +3574,7 @@
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -3422,7 +3631,7 @@
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -3483,11 +3692,11 @@
"utm_content": "some content",
"utm_name": "some campaign",
"utm_test": "other value",
- "Company": "Comapny-ABC"
+ "Company": "ABC"
},
"event_type": "$identify",
"groups": {
- "Company": "Comapny-ABC"
+ "Company": "ABC"
},
"time": 1603180498983,
"user_id": "sampleusrRudder3",
@@ -3520,7 +3729,7 @@
"FORM": {
"api_key": "abcde",
"identification": [
- "{\"group_type\":\"Company\",\"group_value\":\"Comapny-ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"Comapny-ABC\"}}"
+ "{\"group_type\":\"Company\",\"group_value\":\"ABC\",\"group_properties\":{\"KEY_3\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"KEY_2\":{\"CHILD_KEY_92\":\"value_95\",\"CHILD_KEY_102\":\"value_103\"},\"name_trait\":\"Company\",\"value_trait\":\"ABC\"}}"
]
}
},
@@ -3603,14 +3812,14 @@
"initial_referring_domain": "docs.rudderstack.com",
"name": "ApplicationLoaded"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"event_id": 2,
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
@@ -3702,6 +3911,56 @@
"files": {},
"userId": "5d205961641ee6c5"
},
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "os_name": "Android",
+ "os_version": "7.1.1",
+ "device_model": "Android SDK built for x86",
+ "device_manufacturer": "Google",
+ "device_id": "5d205961641ee6c5",
+ "carrier": "Android",
+ "app_name": "Sample Kotlin",
+ "app_version": "1.2",
+ "platform": "Android",
+ "language": "en-US",
+ "event_properties": {},
+ "insert_id": "1662393883248-509420bf-b812-4f8d-bdb2-8c811bfde87f",
+ "user_properties": {
+ "anonymousId": "5d205961641ee6c5",
+ "id": "User Android",
+ "userId": "User Android"
+ },
+ "event_type": "Viewed Screen",
+ "user_id": "User Android",
+ "device_brand": "Google",
+ "time": 1662393883250,
+ "session_id": 1662393792,
+ "library": "rudderstack"
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "5d205961641ee6c5"
+ },
{
"version": "1",
"type": "REST",
@@ -3730,7 +3989,7 @@
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -3741,7 +4000,7 @@
"event_type": "$identify",
"time": 1571043797562,
"user_id": "123456",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": 1662393792,
"country": "India",
"city": "kolkata",
"library": "rudderstack"
@@ -3847,14 +4106,14 @@
"initial_referring_domain": "docs.rudderstack.com",
"name": "ApplicationLoaded"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"event_id": 2,
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
@@ -3907,14 +4166,14 @@
"initial_referring_domain": "docs.rudderstack.com",
"name": "ApplicationLoaded"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"event_id": 2,
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
@@ -3967,14 +4226,14 @@
"initial_referring_domain": "docs.rudderstack.com",
"name": "ApplicationLoaded"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"event_id": 2,
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
@@ -4015,26 +4274,24 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "event_type": "Viewed Home Page event.",
+ "event_type": "Viewed Page",
"event_properties": {
"path": "/destinations/amplitude",
"referrer": "",
"search": "",
"title": "",
"url": "https://docs.rudderstack.com/destinations/amplitude",
- "category": "destination",
"initial_referrer": "https://docs.rudderstack.com",
- "initial_referring_domain": "docs.rudderstack.com",
- "name": "ApplicationLoaded"
+ "initial_referring_domain": "docs.rudderstack.com"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"event_id": 2,
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
@@ -4052,5 +4309,161 @@
},
"files": {},
"userId": "00000000000000000000000000"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "anon-id-new",
+ "library": "rudderstack",
+ "event_properties": {
+ "prop1": "5",
+ "name": "Screen View"
+ },
+ "event_type": "My Screen View event.",
+ "time": 1580602989544,
+ "user_id": "identified user id",
+ "user_properties": {},
+ "session_id": -1,
+ "ip": "14.5.67.21"
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "anon-id-new"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "anon-id-new",
+ "library": "rudderstack",
+ "event_properties": {
+ "prop1": "5",
+ "name": "Screen View"
+ },
+ "event_type": "Viewed Screen View Screen",
+ "time": 1580602989544,
+ "user_id": "identified user id",
+ "user_properties": {},
+ "session_id": -1,
+ "ip": "14.5.67.21"
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "anon-id-new"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "anon-id-new",
+ "library": "rudderstack",
+ "event_properties": {
+ "prop1": "5",
+ "name": "Screen same as event"
+ },
+ "event_type": "Screen same as event",
+ "time": 1580602989544,
+ "user_id": "identified user id",
+ "user_properties": {},
+ "session_id": -1,
+ "ip": "14.5.67.21"
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "anon-id-new"
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api2.amplitude.com/2/httpapi",
+ "headers": {
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "api_key": "abcde",
+ "events": [
+ {
+ "device_id": "anon-id-new",
+ "library": "rudderstack",
+ "event_properties": {
+ "prop1": "5",
+ "name": "Screen"
+ },
+ "event_type": "Screen",
+ "time": 1580602989544,
+ "user_id": "identified user id",
+ "user_properties": {},
+ "session_id": -1,
+ "ip": "14.5.67.21"
+ }
+ ],
+ "options": {
+ "min_id_length": 1
+ }
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {},
+ "userId": "anon-id-new"
}
]
diff --git a/test/__tests__/data/am_router_input.json b/test/__tests__/data/am_router_input.json
index 47250ce1342..83314ae7de4 100644
--- a/test/__tests__/data/am_router_input.json
+++ b/test/__tests__/data/am_router_input.json
@@ -11,7 +11,7 @@
},
"traits": {
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"address": {
"city": "kolkata",
"country": "India",
@@ -59,7 +59,7 @@
"sentAt": "2019-10-14T09:03:22.563Z"
},
"metadata": {
- "jobId": 2
+ "jobId": 1
},
"destination": {
"Config": {
@@ -80,7 +80,7 @@
"version": "1.0.0"
},
"traits": {
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"library": {
diff --git a/test/__tests__/data/am_router_output.json b/test/__tests__/data/am_router_output.json
index 02f4881ea36..bfccb478b39 100644
--- a/test/__tests__/data/am_router_output.json
+++ b/test/__tests__/data/am_router_output.json
@@ -24,7 +24,7 @@
"app_name": "RudderLabs JavaScript SDK",
"app_version": "1.0.0",
"language": "en-US",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "84e26acc-56a5-4835-8233-591137fca468",
"city": "kolkata",
"country": "India",
@@ -32,7 +32,7 @@
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
"anonymousId": "123456",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"postalCode": 712136,
"state": "WB",
"street": "",
@@ -59,7 +59,7 @@
],
"metadata": [
{
- "jobId": 2
+ "jobId": 1
}
],
"batched": false,
@@ -109,13 +109,13 @@
"initial_referring_domain": "docs.rudderstack.com",
"name": "ApplicationLoaded"
},
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "session_id": -1,
"insert_id": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
"ip": "1.1.1.1",
"user_properties": {
"initial_referrer": "https://docs.rudderstack.com",
"initial_referring_domain": "docs.rudderstack.com",
- "email": "sayan@gmail.com",
+ "email": "test@rudderstack.com",
"anonymousId": "12345"
},
"user_id": "12345",
diff --git a/test/__tests__/data/appcenter_source_input.json b/test/__tests__/data/appcenter_source_input.json
index ae843ca0c08..1cde0666b1e 100644
--- a/test/__tests__/data/appcenter_source_input.json
+++ b/test/__tests__/data/appcenter_source_input.json
@@ -1,8 +1,8 @@
[
{
- "text": "Hello from your Anant-test app in App Center!",
+ "text": "Hello from your abc-test app in App Center!",
"sent_at": "2023-01-02T07: 53: 28.3117824Z",
- "url": "https://appcenter.ms/users/anant-rudderstack.com/apps/Anant-test"
+ "url": "https://appcenter.ms/users/abc-rudderstack.com/apps/abc-test"
},
{
"app_name": "MSAppCenterTesting",
diff --git a/test/__tests__/data/appcues_input.json b/test/__tests__/data/appcues_input.json
deleted file mode 100644
index 45875726803..00000000000
--- a/test/__tests__/data/appcues_input.json
+++ /dev/null
@@ -1,734 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "33787665-4168-4acc-8df7-17ba79325332",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "6a5f38c0-4e75-4268-a066-2b73fbcad01f",
- "originalTimestamp": "2021-01-04T08:25:04.780Z",
- "receivedAt": "2021-01-04T13:55:04.799+05:30",
- "request_ip": "[::1]",
- "rudderId": "79881a62-980a-4d76-89ca-7099440f8c13",
- "sentAt": "2021-01-04T08:25:04.781Z",
- "timestamp": "2021-01-04T13:55:04.798+05:30",
- "type": "identify",
- "userId": "onlyUserId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "33787665-4168-4acc-8df7-17ba79325332",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "first name": "John",
- "last name": "Abraham"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "57494c6a-3c62-4b30-83aa-6e821d37ac75",
- "originalTimestamp": "2021-01-04T08:25:04.786Z",
- "receivedAt": "2021-01-04T13:55:04.799+05:30",
- "request_ip": "[::1]",
- "rudderId": "ed2ed08a-3cd9-4b2c-9b04-7e3d3501fab7",
- "sentAt": "2021-01-04T08:25:04.787Z",
- "timestamp": "2021-01-04T13:55:04.798+05:30",
- "type": "identify",
- "userId": "userIdWithProperties"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "59f2911c-f050-497d-9f80-e1696a3c56aa",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "event": "eventWithoutProperties",
- "integrations": {
- "All": true
- },
- "messageId": "045f5107-6036-4557-ae17-6ddf5ee57eb6",
- "originalTimestamp": "2021-01-04T08:33:07.004Z",
- "properties": {},
- "receivedAt": "2021-01-04T14:03:07.009+05:30",
- "request_ip": "[::1]",
- "rudderId": "9b6b8204-292c-493b-9c08-2c3ec0ade688",
- "sentAt": "2021-01-04T08:33:07.005Z",
- "timestamp": "2021-01-04T14:03:07.008+05:30",
- "type": "track",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "59f2911c-f050-497d-9f80-e1696a3c56aa",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "event": "eventWithProperties",
- "integrations": {
- "All": true
- },
- "messageId": "4b99c45d-8591-473c-b79d-abd466f6f4d5",
- "originalTimestamp": "2021-01-04T08:33:07.006Z",
- "properties": {
- "category": "blah"
- },
- "receivedAt": "2021-01-04T14:03:07.026+05:30",
- "request_ip": "[::1]",
- "rudderId": "9b6b8204-292c-493b-9c08-2c3ec0ade688",
- "sentAt": "2021-01-04T08:33:07.006Z",
- "timestamp": "2021-01-04T14:03:07.026+05:30",
- "type": "track",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "a4a6304a-df41-4ca9-b2b7-4b0009dfddaa",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "75a9e08b-955a-4dc7-8a39-3f6fba9d7497",
- "originalTimestamp": "2021-01-04T08:43:05.783Z",
- "properties": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "receivedAt": "2021-01-04T14:13:05.800+05:30",
- "request_ip": "[::1]",
- "rudderId": "2d03081c-8053-4cce-9abf-bb024f747900",
- "sentAt": "2021-01-04T08:43:05.783Z",
- "timestamp": "2021-01-04T14:13:05.799+05:30",
- "type": "page",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "a4a6304a-df41-4ca9-b2b7-4b0009dfddaa",
- "category": "page category",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/testing",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://pagecall.com/testing"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "name": "page name",
- "originalTimestamp": "2021-01-04T08:43:05.784Z",
- "properties": {
- "category": "page category",
- "name": "page name",
- "path": "/testing",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "https://pagecall.com/testing"
- },
- "receivedAt": "2021-01-04T14:13:05.801+05:30",
- "request_ip": "[::1]",
- "rudderId": "2d03081c-8053-4cce-9abf-bb024f747900",
- "sentAt": "2021-01-04T08:43:05.784Z",
- "timestamp": "2021-01-04T14:13:05.801+05:30",
- "type": "page",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "a4a6304a-df41-4ca9-b2b7-4b0009dfddaa",
- "category": "page category",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/testing",
- "referrer": "",
- "search": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "name": "page name",
- "originalTimestamp": "2021-01-04T08:43:05.784Z",
- "properties": {
- "category": "page category",
- "name": "page name",
- "path": "/testing",
- "referrer": "",
- "search": "",
- "title": "properties title",
- "url": "https://pagecall.com/properties_url"
- },
- "receivedAt": "2021-01-04T14:13:05.801+05:30",
- "request_ip": "[::1]",
- "rudderId": "2d03081c-8053-4cce-9abf-bb024f747900",
- "sentAt": "2021-01-04T08:43:05.784Z",
- "timestamp": "2021-01-04T14:13:05.801+05:30",
- "type": "page",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "a4a6304a-df41-4ca9-b2b7-4b0009dfddaa",
- "category": "page category",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/testing",
- "referrer": "",
- "search": "",
- "title": "context title",
- "url": "https://pagecall.com/context_url"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "name": "page name",
- "originalTimestamp": "2021-01-04T08:43:05.784Z",
- "properties": {
- "category": "page category",
- "name": "page name",
- "path": "/testing",
- "referrer": "",
- "search": ""
- },
- "receivedAt": "2021-01-04T14:13:05.801+05:30",
- "request_ip": "[::1]",
- "rudderId": "2d03081c-8053-4cce-9abf-bb024f747900",
- "sentAt": "2021-01-04T08:43:05.784Z",
- "timestamp": "2021-01-04T14:13:05.801+05:30",
- "type": "page",
- "userId": "sampleId"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "5094f5704b9cf2b3",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "AppcuesIntegration",
- "namespace": "com.Appcues",
- "version": "1.0"
- },
- "device": {
- "id": "5094f5704b9cf2b3",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "1.0.1-beta.1"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "8.1.0"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5094f5704b9cf2b3"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)"
- },
- "event": "MainActivity",
- "integrations": {
- "All": true
- },
- "messageId": "id1",
- "properties": {
- "name": "MainActivity",
- "automatic": true
- },
- "originalTimestamp": "2020-03-12T09:05:03.421Z",
- "type": "screen",
- "userId": "sampleId",
- "sentAt": "2020-03-12T09:05:13.042Z"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "5094f5704b9cf2b3",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "AppcuesIntegration",
- "namespace": "com.Appcues",
- "version": "1.0"
- },
- "device": {
- "id": "5094f5704b9cf2b3",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "1.0.1-beta.1"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "8.1.0"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5094f5704b9cf2b3"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)"
- },
- "event": "MainActivity",
- "integrations": {
- "All": true
- },
- "messageId": "id1",
- "properties": {
- "name": "MainActivity",
- "automatic": true
- },
- "originalTimestamp": "2020-03-12T09:05:03.421Z",
- "type": "screen",
- "sentAt": "2020-03-12T09:05:13.042Z"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "5094f5704b9cf2b3",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "AppcuesIntegration",
- "namespace": "com.Appcues",
- "version": "1.0"
- },
- "device": {
- "id": "5094f5704b9cf2b3",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "1.0.1-beta.1"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "8.1.0"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5094f5704b9cf2b3"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.007)"
- },
- "event": "MainActivity",
- "integrations": {
- "All": true
- },
- "messageId": "id1",
- "properties": {
- "name": "MainActivity",
- "automatic": true
- },
- "originalTimestamp": "2020-03-12T09:05:03.421Z",
- "type": "",
- "userId": "sampleId",
- "sentAt": "2020-03-12T09:05:13.042Z"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.5"
- },
- "traits": {
- "name": "Shehan Study",
- "category": "SampleIdentify",
- "email": "chandra+r@rudderlabs.com",
- "plan": "Open source",
- "logins": 5,
- "createdAt": 1599264000
- },
- "library": { "name": "RudderLabs JavaScript SDK", "version": "1.1.5" },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
- "locale": "en-US",
- "os": { "name": "", "version": "" },
- "screen": { "density": 0.8999999761581421 },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign",
- "test": "other value"
- },
- "page": {
- "path": "/html/sajal.html",
- "referrer": "",
- "search": "?utm_source=google&utm_medium=medium&utm_term=keyword&utm_content=some%20content&utm_campaign=some%20campaign&utm_test=other%20value",
- "title": "",
- "url": "http://localhost:9116/html/sajal.html?utm_source=google&utm_medium=medium&utm_term=keyword&utm_content=some%20content&utm_campaign=some%20campaign&utm_test=other%20value"
- }
- },
- "type": "group",
- "messageId": "e5034df0-a404-47b4-a463-76df99934fea",
- "originalTimestamp": "2020-10-20T07:54:58.983Z",
- "anonymousId": "my-anonymous-id-new",
- "userId": "sampleusrRudder3",
- "integrations": { "All": true },
- "groupId": "Sample_groupId23",
- "traits": {
- "KEY_3": { "CHILD_KEY_92": "value_95", "CHILD_KEY_102": "value_103" },
- "KEY_2": { "CHILD_KEY_92": "value_95", "CHILD_KEY_102": "value_103" },
- "name_trait": "Company",
- "value_trait": "Comapny-ABC"
- },
- "sentAt": "2020-10-20T07:54:58.983Z"
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- }
-]
diff --git a/test/__tests__/data/appcues_output.json b/test/__tests__/data/appcues_output.json
deleted file mode 100644
index c8356726a2f..00000000000
--- a/test/__tests__/data/appcues_output.json
+++ /dev/null
@@ -1,320 +0,0 @@
-[
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "request_id": "6a5f38c0-4e75-4268-a066-2b73fbcad01f",
- "profile_update": {}
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/onlyUserId/activity"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "request_id": "57494c6a-3c62-4b30-83aa-6e821d37ac75",
- "profile_update": {
- "last name": "Abraham",
- "first name": "John"
- }
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/userIdWithProperties/activity"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "events": [
- {
- "name": "eventWithoutProperties",
- "timestamp": 1609749187,
- "attributes": {}
- }
- ],
- "request_id": "045f5107-6036-4557-ae17-6ddf5ee57eb6"
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "events": [
- {
- "name": "eventWithProperties",
- "timestamp": 1609749187,
- "attributes": {
- "category": "blah"
- }
- }
- ],
- "request_id": "4b99c45d-8591-473c-b79d-abd466f6f4d5"
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "events": [
- {
- "name": "Visited a Page",
- "context": {
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "timestamp": 1609749785,
- "attributes": {
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html",
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "_identity": {
- "userId": "sampleId"
- }
- }
- }
- ],
- "request_id": "75a9e08b-955a-4dc7-8a39-3f6fba9d7497",
- "profile_update": {
- "_appcuesId": "86086",
- "_updatedAt": "2021-01-04T14:13:05.799+05:30",
- "_userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
- "_currentPageUrl": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html",
- "_lastBrowserLanguage": "en-GB",
- "userId": "sampleId"
- }
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "events": [
- {
- "name": "Visited a Page",
- "context": {
- "url": "https://pagecall.com/testing"
- },
- "timestamp": 1609749785,
- "attributes": {
- "url": "https://pagecall.com/testing",
- "name": "page name",
- "path": "/testing",
- "category": "page category",
- "_identity": {
- "userId": "sampleId"
- }
- }
- }
- ],
- "request_id": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "profile_update": {
- "_appcuesId": "86086",
- "_updatedAt": "2021-01-04T14:13:05.801+05:30",
- "_userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
- "_currentPageUrl": "https://pagecall.com/testing",
- "_lastBrowserLanguage": "en-GB",
- "userId": "sampleId"
- }
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity",
- "headers": {
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "request_id": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "profile_update": {
- "userId": "sampleId",
- "_lastBrowserLanguage": "en-GB",
- "_updatedAt": "2021-01-04T14:13:05.801+05:30",
- "_userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
- "_currentPageTitle": "properties title",
- "_currentPageUrl": "https://pagecall.com/properties_url",
- "_appcuesId": "86086"
- },
- "events": [
- {
- "timestamp": 1609749785,
- "attributes": {
- "category": "page category",
- "name": "page name",
- "path": "/testing",
- "title": "properties title",
- "url": "https://pagecall.com/properties_url",
- "_identity": {
- "userId": "sampleId"
- }
- },
- "name": "Visited a Page",
- "context": {
- "url": "https://pagecall.com/properties_url"
- }
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity",
- "headers": {
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "request_id": "397fdf96-daee-46c8-ac38-5d717cd8cabd",
- "profile_update": {
- "userId": "sampleId",
- "_lastBrowserLanguage": "en-GB",
- "_updatedAt": "2021-01-04T14:13:05.801+05:30",
- "_userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
- "_currentPageTitle": "context title",
- "_currentPageUrl": "https://pagecall.com/context_url",
- "_appcuesId": "86086"
- },
- "events": [
- {
- "timestamp": 1609749785,
- "attributes": {
- "category": "page category",
- "name": "page name",
- "path": "/testing",
- "_identity": {
- "userId": "sampleId"
- }
- },
- "name": "Visited a Page",
- "context": {
- "url": "https://pagecall.com/context_url"
- }
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/sampleId/activity",
- "headers": {
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "request_id": "id1",
- "events": [
- {
- "name": "Viewed a Screen",
- "timestamp": 1584003903,
- "attributes": {
- "name": "MainActivity",
- "automatic": true
- }
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "User id is absent. Aborting event as userId is mandatory for Appcues"
- },
- {
- "statusCode": 400,
- "error": "Message Type is not present. Aborting message."
- },
- {
- "statusCode": 400,
- "error": "Message type is not supported"
- }
-]
diff --git a/test/__tests__/data/appcues_router_input.json b/test/__tests__/data/appcues_router_input.json
deleted file mode 100644
index 26413458634..00000000000
--- a/test/__tests__/data/appcues_router_input.json
+++ /dev/null
@@ -1,119 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "33787665-4168-4acc-8df7-17ba79325332",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "6a5f38c0-4e75-4268-a066-2b73fbcad01f",
- "originalTimestamp": "2021-01-04T08:25:04.780Z",
- "receivedAt": "2021-01-04T13:55:04.799+05:30",
- "request_ip": "[::1]",
- "rudderId": "79881a62-980a-4d76-89ca-7099440f8c13",
- "sentAt": "2021-01-04T08:25:04.781Z",
- "timestamp": "2021-01-04T13:55:04.798+05:30",
- "type": "identify",
- "userId": "onlyUserId"
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "message": {
- "anonymousId": "33787665-4168-4acc-8df7-17ba79325332",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.9"
- },
- "campaign": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.9"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/rudder-sdk-js/tests/html/script-test.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost:4321/rudder-sdk-js/tests/html/script-test.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "first name": "John",
- "last name": "Abraham"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "57494c6a-3c62-4b30-83aa-6e821d37ac75",
- "originalTimestamp": "2021-01-04T08:25:04.786Z",
- "receivedAt": "2021-01-04T13:55:04.799+05:30",
- "request_ip": "[::1]",
- "rudderId": "ed2ed08a-3cd9-4b2c-9b04-7e3d3501fab7",
- "sentAt": "2021-01-04T08:25:04.787Z",
- "timestamp": "2021-01-04T13:55:04.798+05:30",
- "type": "identify",
- "userId": "userIdWithProperties"
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- }
-]
diff --git a/test/__tests__/data/appcues_router_output.json b/test/__tests__/data/appcues_router_output.json
deleted file mode 100644
index 3b78f9ae5f4..00000000000
--- a/test/__tests__/data/appcues_router_output.json
+++ /dev/null
@@ -1,75 +0,0 @@
-[
- {
- "batchedRequest": {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "request_id": "6a5f38c0-4e75-4268-a066-2b73fbcad01f",
- "profile_update": {}
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/onlyUserId/activity"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- },
- {
- "batchedRequest": {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {},
- "JSON": {
- "request_id": "57494c6a-3c62-4b30-83aa-6e821d37ac75",
- "profile_update": {
- "last name": "Abraham",
- "first name": "John"
- }
- }
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json"
- },
- "version": "1",
- "endpoint": "https://api.appcues.com/v1/accounts/86086/users/userIdWithProperties/activity"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "accountId": "86086",
- "useNativeSDK": false
- }
- }
- }
-]
diff --git a/test/__tests__/data/attentive_tag_input.json b/test/__tests__/data/attentive_tag_input.json
deleted file mode 100644
index 3617e7489aa..00000000000
--- a/test/__tests__/data/attentive_tag_input.json
+++ /dev/null
@@ -1,1062 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5",
- "channel": "web",
- "context": {
- "locale": "en-GB",
- "traits": {
- "email": "alex13@gmail.com",
- "phone": "+16405273911",
- "customIdentifiers": [
- {
- "name": "string",
- "value": "string"
- }
- ]
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92",
- "receivedAt": "2019-10-14T09:03:17.562Z",
- "type": "identify"
- },
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "224"
- },
- {
- "type": "klaviyoId",
- "id": "132"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product,id": "r494",
- "quantity": "34",
- "variant": "f"
- },
- "event": "Order Shipped",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:17.562Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5",
- "channel": "web",
- "context": {
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "traits": {
- "company": {
- "id": "abc123"
- },
- "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "phone": "+16465453911"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
- },
- "integrations": {
- "All": true,
- "attentive_tag": {
- "signUpSourceId": "241654",
- "identifyOperation": "unsubscribe"
- }
- },
- "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92",
- "receivedAt": "2020-10-16T13:56:14.945+05:30",
- "type": "identify"
- },
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Order Completed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": 1
- },
- {
- "type": "shopifyId",
- "id": 1
- },
- {
- "type": "klaviyoId",
- "id": 1
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product List Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "224"
- },
- {
- "type": "klaviyoId",
- "id": "132"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34"
- },
- "event": "Order Shipped",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": 1
- },
- {
- "type": "shopifyId",
- "id": 1
- },
- {
- "type": "klaviyoId",
- "id": 1
- }
- ]
- },
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Order Completed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5",
- "channel": "web",
- "context": {
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "traits": {
- "company": {
- "id": "abc123"
- },
- "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "email": "test0@gmail.com",
- "phone": "+16465453911"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
- },
- "integrations": {
- "All": true,
- "attentive_tag": {
- "signUpSourceId": "241654",
- "identifyOperation": "subscribe"
- }
- },
- "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92",
- "receivedAt": "2020-10-16T13:56:14.945+05:30",
- "type": "identify"
- },
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "phone": "+16465053911"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- },
- "externalId": [
- {
- "type": "clientUserId",
- "id": "144"
- },
- {
- "type": "shopifyId",
- "id": "143"
- },
- {
- "type": "klaviyoId",
- "id": "142"
- }
- ]
- },
- "type": "track",
- "properties": {
- "price": "12",
- "curre,ncy": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Order Shipped",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- },
- {
- "message": {
- "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5",
- "channel": "web",
- "context": {
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "traits": {
- "company": {
- "id": "abc123"
- },
- "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "email": "test0@gmail.com",
- "phone": "+16465453911"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36"
- },
- "integrations": {
- "All": true,
- "attentive_tag": {
- "signUpSourceId": "241654"
- }
- },
- "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92",
- "receivedAt": "2020-10-16T13:56:14.945+05:30",
- "type": "identify"
- },
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "id": "72e528f869711c3d",
- "manufacturer": "Google",
- "model": "sdk_gphone_x86",
- "name": "generic_x86_arm",
- "token": "some_device_token",
- "type": "android"
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34",
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "variant": "green",
- "price": "19",
- "quantity": "2",
- "currency": "USD"
- }
- ]
- },
- "event": "Product Viewed",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "apiKey": "t1yurrb968zk",
- "signUpSourceId": "240654"
- }
- }
- }
-]
diff --git a/test/__tests__/data/attentive_tag_output.json b/test/__tests__/data/attentive_tag_output.json
deleted file mode 100644
index 52ebe42e8f7..00000000000
--- a/test/__tests__/data/attentive_tag_output.json
+++ /dev/null
@@ -1,368 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/subscriptions",
- "headers": {
- "Authorization": "Bearer d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16405273911",
- "email": "alex13@gmail.com"
- },
- "signUpSourceId": "241654",
- "externalIdentifiers": {
- "customIdentifiers": [
- {
- "name": "string",
- "value": "string"
- }
- ]
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "[Attentive Tag]:The event name contains characters which is not allowed"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/subscriptions/unsubscribe",
- "headers": {
- "Authorization": "Bearer d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465453911"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/ecommerce/purchase",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "email": "test@rudderlabs.com",
- "externalIdentifiers": {
- "clientUserId": "144",
- "shopifyId": "143",
- "klaviyoId": "142"
- }
- },
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "items": [
- {
- "productId": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "productVariantId": "green",
- "quantity": "2",
- "price": [
- {
- "value": 19,
- "currency": "USD"
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "[Attentive Tag] :: Event name is not present"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/ecommerce/product-view",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465053911",
- "email": "test@rudderlabs.com",
- "externalIdentifiers": {
- "clientUserId": "144",
- "shopifyId": "143",
- "klaviyoId": "142"
- }
- },
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "items": [
- {
- "productId": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "productVariantId": "green",
- "quantity": "2",
- "price": [
- {
- "value": 19,
- "currency": "USD"
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/ecommerce/product-view",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465053911",
- "email": "test@rudderlabs.com",
- "externalIdentifiers": {
- "clientUserId": "144",
- "shopifyId": "143",
- "klaviyoId": "142"
- }
- },
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "items": [
- {
- "productId": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "productVariantId": "green",
- "quantity": "2",
- "price": [
- {
- "value": 19,
- "currency": "USD"
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/custom",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465053911",
- "email": "test@rudderlabs.com",
- "externalIdentifiers": {
- "clientUserId": "144",
- "shopifyId": "224",
- "klaviyoId": "132"
- }
- },
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "properties": {
- "price": "12",
- "currency": "USD",
- "product_id": "r494",
- "quantity": "34"
- },
- "type": "Order Shipped"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Message Type is not present. Aborting message."
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/subscriptions",
- "headers": {
- "Authorization": "Bearer d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465453911",
- "email": "test0@gmail.com"
- },
- "signUpSourceId": "241654"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/ecommerce/product-view",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "externalIdentifiers": {
- "clientUserId": "144",
- "shopifyId": "143",
- "klaviyoId": "142"
- }
- },
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "items": [
- {
- "productId": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "productVariantId": "green",
- "quantity": "2",
- "price": [
- {
- "value": 19,
- "currency": "USD"
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Missing required value from \"product_id\""
- },
- {
- "statusCode": 400,
- "error": "Missing required value from \"variant\""
- },
- {
- "statusCode": 400,
- "error": "[Attentive Tag]:The event name contains characters which is not allowed"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/subscriptions",
- "headers": {
- "Authorization": "Bearer d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465453911",
- "email": "test0@gmail.com"
- },
- "signUpSourceId": "241654"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/events/ecommerce/product-view",
- "headers": {
- "Authorization": "Bearer t1yurrb968zk",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {},
- "occuredAt": "2019-10-14T09:03:17.562Z",
- "items": [
- {
- "productId": "507f1f77bcf86cd799439011",
- "name": "MOBILE",
- "productVariantId": "green",
- "quantity": "2",
- "price": [
- {
- "value": 19,
- "currency": "USD"
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
-]
diff --git a/test/__tests__/data/attentive_tag_router_input.json b/test/__tests__/data/attentive_tag_router_input.json
deleted file mode 100644
index 3ac3b904ab8..00000000000
--- a/test/__tests__/data/attentive_tag_router_input.json
+++ /dev/null
@@ -1,57 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- },
- "metadata": {
- "jobId": 1
- },
- "message": {
- "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5",
- "channel": "web",
- "context": {
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "traits": {
- "company": {
- "id": "abc123"
- },
- "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)",
- "email": "test0@gmail.com",
- "phone": "+16465453911"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36",
- "externalId": [
- {
- "type": "clientUsrId",
- "id": 1
- },
- {
- "type": "shopifyId",
- "id": 1
- },
- {
- "type": "klaviyoId",
- "id": 1
- }
- ]
- },
- "integrations": {
- "All": true,
- "attentive_tag": {
- "signUpSourceId": "241654",
- "identifyOperation": "unsubscribe"
- }
- },
- "messageId": "e108eb05-f6cd-4624-ba8c-568f2e2b3f92",
- "receivedAt": "2020-10-16T13:56:14.945+05:30",
- "type": "identify"
- }
- }
-]
diff --git a/test/__tests__/data/attentive_tag_router_output.json b/test/__tests__/data/attentive_tag_router_output.json
deleted file mode 100644
index 12878abc95e..00000000000
--- a/test/__tests__/data/attentive_tag_router_output.json
+++ /dev/null
@@ -1,40 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.attentivemobile.com/v1/subscriptions/unsubscribe",
- "headers": {
- "Authorization": "Bearer d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user": {
- "phone": "+16465453911",
- "email": "test0@gmail.com"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 1
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "apiKey": "d1cwZXF1eVZicnpPeGJ6M0JOTXFxTVN2QkdpWTJ3NENp",
- "signUpSourceId": "241654"
- }
- }
- }
-]
diff --git a/test/__tests__/data/auth0_source.json b/test/__tests__/data/auth0_source.json
index 95ab797abb5..d47d7e0180a 100644
--- a/test/__tests__/data/auth0_source.json
+++ b/test/__tests__/data/auth0_source.json
@@ -16,15 +16,15 @@
"user_agent": "unknown",
"details": {
"body": {
- "email": "bhalalamark+21@gmail.com",
+ "email": "testRudderlabs+21@gmail.com",
"tenant": "dev-cu4jy2zgao6yx15x",
- "password": "*****",
+ "password": "dummyPassword",
"client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt",
"connection": "Username-Password-Authentication"
}
},
- "user_id": "auth0|*****",
- "user_name": "bhalalamark+21@gmail.com",
+ "user_id": "auth0|dummyPassword",
+ "user_name": "testRudderlabs+21@gmail.com",
"strategy": "auth0",
"strategy_type": "database",
"log_id": "90020221031055712103169676686005480714681762668315934738"
@@ -45,9 +45,9 @@
"ip": "35.166.202.113",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
- "user_id": "auth0|*****"
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
+ "user_id": "auth0|dummyPassword"
},
"strategy": "jwt",
"credentials": {
@@ -187,8 +187,8 @@
}
},
"body": {
- "email": "bhalalamark+21@gmail.com",
- "password": "*****",
+ "email": "testRudderlabs+21@gmail.com",
+ "password": "dummyPassword",
"connection": "Username-Password-Authentication"
},
"path": "/api/v2/users",
@@ -199,15 +199,15 @@
},
"response": {
"body": {
- "name": "bhalalamark+21@gmail.com",
- "email": "bhalalamark+21@gmail.com",
+ "name": "testRudderlabs+21@gmail.com",
+ "email": "testRudderlabs+21@gmail.com",
"picture": "https://s.gravatar.com/avatar/0902f9d02b92aed9f0ac59aaf9475b60?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fbh.png",
- "user_id": "auth0|*****",
- "nickname": "bhalalamark+21",
+ "user_id": "auth0|dummyPassword",
+ "nickname": "testRudderlabs+21",
"created_at": "2022-10-31T05:57:06.864Z",
"identities": [
{
- "user_id": "auth0|*****",
+ "user_id": "auth0|dummyPassword",
"isSocial": false,
"provider": "auth0",
"connection": "Username-Password-Authentication"
@@ -219,7 +219,7 @@
"statusCode": 201
}
},
- "user_id": "auth0|*****",
+ "user_id": "auth0|dummyPassword",
"log_id": "90020221031055712103169676686007898566320991926665347090"
}
}
@@ -232,11 +232,11 @@
"connection": "Username-Password-Authentication",
"connection_id": "con_djwCjiwyID0vZy1S"
},
- "userId": "auth0|*****",
+ "userId": "auth0|dummyPassword",
"context": {
"traits": {
- "userId": "auth0|*****",
- "user_name": "bhalalamark+21@gmail.com"
+ "userId": "auth0|dummyPassword",
+ "user_name": "testRudderlabs+21@gmail.com"
},
"library": {
"name": "unknown",
@@ -252,9 +252,9 @@
"log_id": "90020221031055712103169676686005480714681762668315934738",
"details": {
"body": {
- "email": "bhalalamark+21@gmail.com",
+ "email": "testRudderlabs+21@gmail.com",
"tenant": "dev-cu4jy2zgao6yx15x",
- "password": "*****",
+ "password": "dummyPassword",
"client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt",
"connection": "Username-Password-Authentication"
}
@@ -272,14 +272,14 @@
"type": "track",
"event": "Success API Operation",
"sentAt": "2022-10-31T05:57:06.874Z",
- "userId": "auth0|*****",
+ "userId": "auth0|dummyPassword",
"context": {
"library": {
"name": "unknown",
"version": "unknown"
},
"traits": {
- "userId": "auth0|*****"
+ "userId": "auth0|dummyPassword"
},
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
"request_ip": "35.166.202.113",
@@ -294,9 +294,9 @@
"ip": "35.166.202.113",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
- "user_id": "auth0|*****"
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
+ "user_id": "auth0|dummyPassword"
},
"strategy": "jwt",
"credentials": {
@@ -436,8 +436,8 @@
}
},
"body": {
- "email": "bhalalamark+21@gmail.com",
- "password": "*****",
+ "email": "testRudderlabs+21@gmail.com",
+ "password": "dummyPassword",
"connection": "Username-Password-Authentication"
},
"path": "/api/v2/users",
@@ -448,15 +448,15 @@
},
"response": {
"body": {
- "name": "bhalalamark+21@gmail.com",
- "email": "bhalalamark+21@gmail.com",
+ "name": "testRudderlabs+21@gmail.com",
+ "email": "testRudderlabs+21@gmail.com",
"picture": "https://s.gravatar.com/avatar/0902f9d02b92aed9f0ac59aaf9475b60?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fbh.png",
- "user_id": "auth0|*****",
- "nickname": "bhalalamark+21",
+ "user_id": "auth0|dummyPassword",
+ "nickname": "testRudderlabs+21",
"created_at": "2022-10-31T05:57:06.864Z",
"identities": [
{
- "user_id": "auth0|*****",
+ "user_id": "auth0|dummyPassword",
"isSocial": false,
"provider": "auth0",
"connection": "Username-Password-Authentication"
@@ -497,8 +497,8 @@
"ip": "35.167.74.121",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
"user_id": "google-oauth2|123456"
},
"strategy": "jwt",
@@ -552,8 +552,8 @@
"ip": "35.167.74.121",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
"user_id": "google-oauth2|123456"
},
"strategy": "jwt",
@@ -604,8 +604,8 @@
"ip": "35.160.3.103",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
"user_id": "google-oauth2|123456"
},
"strategy": "jwt",
@@ -863,8 +863,8 @@
"ip": "35.160.3.103",
"auth": {
"user": {
- "name": "Bhalala Mihir",
- "email": "bhalalamark@gmail.com",
+ "name": "rudder test",
+ "email": "test@rudderstack.com",
"user_id": "google-oauth2|123456"
},
"strategy": "jwt",
diff --git a/test/__tests__/data/autopilot_cdk_output.json b/test/__tests__/data/autopilot_cdk_output.json
deleted file mode 100644
index ce81fe05c2e..00000000000
--- a/test/__tests__/data/autopilot_cdk_output.json
+++ /dev/null
@@ -1,108 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/contact",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "contact": {
- "Email": "testmp@rudderstack.com",
- "FirstName": "Test Kafka",
- "custom": {
- "age": 23
- }
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/trigger/00XX/contact/testmp@rudderstack.com",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "property": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "statusCode": 400,
- "error": "message type page is not supported"
- },
- {
- "statusCode": 400,
- "error": "Email is required for track calls"
- },
- {
- "statusCode": 400,
- "error": "message Type is not present. Aborting message."
- },
- {
- "statusCode": 400,
- "error": "message type group is not supported"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/contact",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "contact": {
- "Email": "abc@rudderstack.com",
- "FirstName": "Anuraj"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "statusCode": 400,
- "error": "message Type is not present. Aborting message."
- },
- {
- "statusCode": 400,
- "error": "message type group is not supported"
- },
- {
- "statusCode": 400,
- "error": "message type Tals is not supported"
- }
-]
diff --git a/test/__tests__/data/autopilot_input.json b/test/__tests__/data/autopilot_input.json
deleted file mode 100644
index 3bdd60ffa2a..00000000000
--- a/test/__tests__/data/autopilot_input.json
+++ /dev/null
@@ -1,796 +0,0 @@
-[
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
-
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "fad9b3fb-5778-4db3-9fb6-7168b554191f",
- "originalTimestamp": "2020-04-17T14:42:44.722Z",
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53513",
- "sentAt": "2020-04-17T14:42:44.722Z",
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "timestamp": "2020-04-17T20:12:44.758+05:30",
- "type": "identify",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "type": "track",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "type": "page",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "type": "track",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "type": "group",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "abc@rudderstack.com",
- "firstname": "Anuraj"
- },
-
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2020-04-17T14:42:44.722Z",
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53513",
- "sentAt": "2020-04-17T14:42:44.722Z",
- "timestamp": "2020-04-17T20:12:44.758+05:30",
- "type": "identify",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "abc@rudderstack.com",
- "firstname": "Anuraj"
- },
-
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2020-04-17T14:42:44.722Z",
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53513",
- "sentAt": "2020-04-17T14:42:44.722Z",
- "timestamp": "2020-04-17T20:12:44.758+05:30",
- "type": "group",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "cdkEnabled": true,
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "abc@rudderstack.com",
- "firstname": "Anuraj"
- },
-
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2020-04-17T14:42:44.722Z",
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53513",
- "sentAt": "2020-04-17T14:42:44.722Z",
- "timestamp": "2020-04-17T20:12:44.758+05:30",
- "type": "Tals",
- "userId": "user12345"
- }
- }
-]
diff --git a/test/__tests__/data/autopilot_output.json b/test/__tests__/data/autopilot_output.json
deleted file mode 100644
index 7c224addac6..00000000000
--- a/test/__tests__/data/autopilot_output.json
+++ /dev/null
@@ -1,108 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/contact",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "contact": {
- "Email": "testmp@rudderstack.com",
- "FirstName": "Test Kafka",
- "custom": {
- "age": 23
- }
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/trigger/00XX/contact/testmp@rudderstack.com",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "property": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "statusCode": 400,
- "error": "message type \"page\" not supported for \"autopilot\""
- },
- {
- "statusCode": 400,
- "error": "Email is required for track calls"
- },
- {
- "statusCode": 400,
- "error": "\"type\" is a required field and it must be a string"
- },
- {
- "statusCode": 400,
- "error": "message type \"group\" not supported for \"autopilot\""
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/contact",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "contact": {
- "Email": "abc@rudderstack.com",
- "FirstName": "Anuraj"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- {
- "statusCode": 400,
- "error": "\"type\" is a required field and it must be a string"
- },
- {
- "statusCode": 400,
- "error": "message type \"group\" not supported for \"autopilot\""
- },
- {
- "statusCode": 400,
- "error": "message type \"Tals\" not supported for \"autopilot\""
- }
-]
diff --git a/test/__tests__/data/autopilot_router_input.json b/test/__tests__/data/autopilot_router_input.json
deleted file mode 100644
index 3e2b2b05142..00000000000
--- a/test/__tests__/data/autopilot_router_input.json
+++ /dev/null
@@ -1,165 +0,0 @@
-[
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "fad9b3fb-5778-4db3-9fb6-7168b554191f",
- "originalTimestamp": "2020-04-17T14:42:44.722Z",
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53513",
- "sentAt": "2020-04-17T14:42:44.722Z",
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "timestamp": "2020-04-17T20:12:44.758+05:30",
- "type": "identify",
- "userId": "user12345"
- }
- },
- {
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1-rc.2"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1-rc.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index4.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index4.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "testmp@rudderstack.com",
- "firstname": "Test Kafka"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "37b75e61-9bd2-4fb8-91ed-e3a064905f3a",
- "originalTimestamp": "2020-04-17T14:42:44.724Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-04-17T20:12:44.758+05:30",
- "request_ip": "[::1]:53512",
- "sentAt": "2020-04-17T14:42:44.725Z",
- "timestamp": "2020-04-17T20:12:44.757+05:30",
- "type": "track",
- "userId": "user12345"
- }
- }
-]
diff --git a/test/__tests__/data/autopilot_router_output.json b/test/__tests__/data/autopilot_router_output.json
deleted file mode 100644
index 5c095d9fef6..00000000000
--- a/test/__tests__/data/autopilot_router_output.json
+++ /dev/null
@@ -1,125 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/contact",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "contact": {
- "Email": "testmp@rudderstack.com",
- "FirstName": "Test Kafka",
- "custom": {
- "age": 23
- }
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.autopilothq.com/v1/trigger/00XX/contact/testmp@rudderstack.com",
- "headers": {
- "autopilotapikey": "1d6583b196d34de28a3g19ahadde4b0z",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "property": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ac7722c2-ccb6-4ae2-baf6-1effe861f4cd"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "ID": "1afjtc6chkhdeKsXYrNFOzR5D9v",
- "Name": "Autopilot",
- "DestinationDefinition": {
- "ID": "1afjX4MlAucK57Q0ctTVlD27Tvo",
- "Name": "AUTOPILOT",
- "DisplayName": "Autopilot",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": {
- "apiKey": "1d6583b196d34de28a3g19ahadde4b0z",
- "customMappings": [
- {
- "from": "0001",
- "to": "Signup"
- }
- ],
- "triggerId": "00XX"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- }
-]
diff --git a/test/__tests__/data/azure_event_hub_input.json b/test/__tests__/data/azure_event_hub_input.json
deleted file mode 100644
index cc2ae736d65..00000000000
--- a/test/__tests__/data/azure_event_hub_input.json
+++ /dev/null
@@ -1,396 +0,0 @@
-[
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "Purchase",
- "integrations": {
- "All": true
- },
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "originalTimestamp": "2020-05-21T10:23:15.984Z",
- "properties": {
- "currency": "USD",
- "revenue": 100
- },
- "receivedAt": "2020-05-21T15:53:16.013+05:30",
- "request_ip": "[::1]:59371",
- "sentAt": "2020-05-21T10:23:15.985Z",
- "timestamp": "2020-05-21T15:53:16.012+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 46,
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "originalTimestamp": "2020-05-21T10:23:15.975Z",
- "properties": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:58616",
- "sentAt": "2020-05-21T10:23:15.975Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "page",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 47,
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "originalTimestamp": "2020-05-21T10:23:15.979Z",
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59372",
- "sentAt": "2020-05-21T10:23:15.979Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "identify",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 48,
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track without property",
- "integrations": {
- "All": true
- },
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "originalTimestamp": "2020-05-21T10:23:15.981Z",
- "properties": {},
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59374",
- "sentAt": "2020-05-21T10:23:15.981Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 49,
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "originalTimestamp": "2020-05-21T10:23:15.982Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59373",
- "sentAt": "2020-05-21T10:23:15.983Z",
- "timestamp": "2020-05-21T15:53:16.013+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 50,
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- }
-]
diff --git a/test/__tests__/data/azure_event_hub_output.json b/test/__tests__/data/azure_event_hub_output.json
deleted file mode 100644
index 7bac8eca74c..00000000000
--- a/test/__tests__/data/azure_event_hub_output.json
+++ /dev/null
@@ -1,276 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "Purchase",
- "integrations": {
- "All": true
- },
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "originalTimestamp": "2020-05-21T10:23:15.984Z",
- "properties": {
- "currency": "USD",
- "revenue": 100
- },
- "receivedAt": "2020-05-21T15:53:16.013+05:30",
- "request_ip": "[::1]:59371",
- "sentAt": "2020-05-21T10:23:15.985Z",
- "timestamp": "2020-05-21T15:53:16.012+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "originalTimestamp": "2020-05-21T10:23:15.975Z",
- "properties": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:58616",
- "sentAt": "2020-05-21T10:23:15.975Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "page",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "originalTimestamp": "2020-05-21T10:23:15.979Z",
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59372",
- "sentAt": "2020-05-21T10:23:15.979Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "identify",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track without property",
- "integrations": {
- "All": true
- },
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "originalTimestamp": "2020-05-21T10:23:15.981Z",
- "properties": {},
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59374",
- "sentAt": "2020-05-21T10:23:15.981Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "originalTimestamp": "2020-05-21T10:23:15.982Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59373",
- "sentAt": "2020-05-21T10:23:15.983Z",
- "timestamp": "2020-05-21T15:53:16.013+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- }
-]
diff --git a/test/__tests__/data/blueshift_input.json b/test/__tests__/data/blueshift_input.json
deleted file mode 100644
index 25b643cf535..00000000000
--- a/test/__tests__/data/blueshift_input.json
+++ /dev/null
@@ -1,1120 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "dataCenter": "standard"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.5"
- },
- "traits": {
- "name": "hardik",
- "email": "hardik@rudderstack.com",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.5"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- }
- },
- "type": "group",
- "messageId": "e5034df0-a404-47b4-a463-76df99934fea",
- "anonymousId": "my-anonymous-id-new",
- "userId": "sampleusrRudder7",
- "traits": {
- "groupType": "company",
- "name_trait": "Company",
- "value_trait": "Comapny-ABC"
- }
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.5"
- },
- "traits": {
- "name": "hardik",
- "email": "hardik@rudderstack.com",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830
- }
- },
- "type": "group",
- "userId": "rudderstack8",
- "groupId": "35838"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "context": {
- "ip": "14.5.67.21",
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 3
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "network": {
- "bluetooth": false,
- "carrier": "Android",
- "cellular": true,
- "wifi": true
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "state": "WB",
- "street": "rajnagar"
- }
- },
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "type": "track",
- "event": "identify",
- "userId": "sampleusrRudder7"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "type": "track",
- "event": "Product Viewed",
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123",
- "checkout_id": "C324532",
- "order_id": "T1230",
- "value": 15.98,
- "revenue": 16.98,
- "shipping": 3.0,
- "coupon": "FY21",
- "currency": "INR",
- "products": [
- {
- "product_id": "product-mixedfruit-jam",
- "sku": "sku-1",
- "category": "Food",
- "name": "Food/Drink",
- "brand": "Sample",
- "variant": "None",
- "price": 10.0,
- "quantity": 2,
- "currency": "INR",
- "position": 1,
- "value": 6.0,
- "typeOfProduct": "Food",
- "url": "https://www.example.com/product/bacon-jam",
- "image_url": "https://www.example.com/product/bacon-jam.jpg"
- }
- ]
- },
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- }
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "userId": "sampleRudderstack9"
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "type": "track",
- "event": "Products Searched",
- "properties": {
- "description": "Sneaker purchase",
- "brand": "Victory Sneakers",
- "colors": ["red", "blue"],
- "items": [
- {
- "text": "New Line Sneakers",
- "price": "$ 79.95"
- },
- {
- "text": "Old Line Sneakers",
- "price": "$ 79.95"
- },
- {
- "text": "Blue Line Sneakers",
- "price": "$ 79.95"
- }
- ],
- "name": "Hugh Manbeing",
- "userLocation": {
- "state": "CO",
- "zip": "80202"
- }
- },
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- }
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "userId": "sampleRudderstack9"
- },
- {
- "destination": {
- "Config": {
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "type": "track",
- "event": "Product_purchased",
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "context": {
- "ip": "14.5.67.21",
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 3
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "network": {
- "bluetooth": false,
- "carrier": "Android",
- "cellular": true,
- "wifi": true
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "state": "WB",
- "street": "rajnagar"
- }
- },
- "userId": "sampleRudderstack9"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "type": "identify",
- "event": "Product_purchased",
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "context": {
- "ip": "14.5.67.21",
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 3
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "network": {
- "bluetooth": false,
- "carrier": "Android",
- "cellular": true,
- "wifi": true
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "state": "WB",
- "street": "rajnagar"
- }
- },
- "userId": "sampleRudderstack9"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "anon_id",
- "type": "identify",
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe",
- "employed": true,
- "birthday": "1614775793",
- "education": "Science",
- "graduate": true,
- "married": true,
- "customerType": "Prime",
- "msg_push": true,
- "msgSms": true,
- "msgemail": true,
- "msgwhatsapp": false,
- "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
- "custom_mappings": {
- "Office": "Trastkiv",
- "Country": "Russia"
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "state": "WB",
- "street": ""
- }
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "anon_id",
- "type": "identify",
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe",
- "employed": true,
- "birthday": "1614775793",
- "education": "Science",
- "graduate": true,
- "married": true,
- "customerType": "Prime",
- "msg_push": true,
- "msgSms": true,
- "msgemail": true,
- "msgwhatsapp": false,
- "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
- "custom_mappings": {
- "Office": "Trastkiv",
- "Country": "Russia"
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "state": "WB",
- "street": ""
- }
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "ip": "0.0.0.0"
- },
- "type": "identify",
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe"
- }
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "ip": "0.0.0.0"
- },
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe"
- }
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "ip": "0.0.0.0"
- },
- "type": "page",
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe"
- }
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "type": "track",
- "event": "Order Completed",
- "properties": {
- "total": 1000,
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- },
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "quantity": "2",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- }
- ]
- },
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "userId": "sampleRudderstack11"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "context": {
- "ip": "14.5.67.21",
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 3
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "network": {
- "bluetooth": false,
- "carrier": "Android",
- "cellular": true,
- "wifi": true
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "state": "WB",
- "street": "rajnagar"
- }
- },
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "type": "track",
- "event": "Custom Events",
- "userId": "sampleusrRudder7"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "type": "track",
- "event": "Order 9Completed",
- "properties": {
- "total": 1000,
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- },
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "quantity": "2",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- }
- ]
- },
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "userId": "sampleRudderstack11"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "type": "track",
- "event": "Order.Completed",
- "properties": {
- "total": 1000,
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- },
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "quantity": "2",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- }
- ]
- },
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "userId": "sampleRudderstack11"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "standard"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "type": "group",
- "messageId": "e5034jh0-a404-47b4-a463-76df99934kl2",
- "userId": "sampleusrRudder1",
- "groupId": "group22222",
- "traits": {
- "name": "hardik",
- "email": "hardik@rudderstack.com",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830,
- "gender": "male"
- }
- }
- },
- {
- "destination": {
- "Config": {
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "dataCenter": "eu"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.rudderstack.demo.android",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android"
- },
- "library": {
- "name": "com.rudderstack.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "campaign": {
- "source": "google",
- "medium": "medium",
- "term": "keyword",
- "content": "some content",
- "name": "some campaign"
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Mumbai",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "type": "group",
- "messageId": "e5034jh0-a404-47b4-a463-76df99934kl2",
- "userId": "sampleusrRudder1",
- "groupId": "group22222",
- "traits": {
- "name": "hardik",
- "email": "hardik@rudderstack.com",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830,
- "gender": "male"
- }
- }
- }
-]
diff --git a/test/__tests__/data/blueshift_output.json b/test/__tests__/data/blueshift_output.json
deleted file mode 100644
index 189ad02aa3b..00000000000
--- a/test/__tests__/data/blueshift_output.json
+++ /dev/null
@@ -1,438 +0,0 @@
-[
- {
- "statusCode": 400,
- "error": "Missing required value from \"groupId\"",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "group_id": "35838",
- "customer_id": "rudderstack8",
- "email": "hardik@rudderstack.com",
- "event": "identify"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "ip": "14.5.67.21",
- "event": "identify",
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123",
- "os_name": "Android",
- "latitude": "37.7672319",
- "device_id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "longitude": "-122.4021353",
- "event_uuid": "34abcd-efghijkj-1234kf",
- "customer_id": "sampleusrRudder7",
- "device_idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_type": "Android",
- "network_carrier": "Android",
- "device_manufacturer": "Google"
- },
- "JSON_ARRAY": {}
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE="
- },
- "version": "1",
- "endpoint": "https://api.getblueshift.com/api/v1/event"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "event": "view",
- "device_type": "android",
- "device_id": "7e32188a4dab669f",
- "device_idfv": "7e32188a4dab669f",
- "device_manufacturer": "Google",
- "os_name": "Android",
- "network_carrier": "Android",
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123",
- "checkout_id": "C324532",
- "order_id": "T1230",
- "value": 15.98,
- "revenue": 16.98,
- "shipping": 3,
- "coupon": "FY21",
- "currency": "INR",
- "products": [
- {
- "product_id": "product-mixedfruit-jam",
- "sku": "sku-1",
- "category": "Food",
- "name": "Food/Drink",
- "brand": "Sample",
- "variant": "None",
- "price": 10,
- "quantity": 2,
- "currency": "INR",
- "position": 1,
- "value": 6,
- "typeOfProduct": "Food",
- "url": "https://www.example.com/product/bacon-jam",
- "image_url": "https://www.example.com/product/bacon-jam.jpg"
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.eu.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "event": "search",
- "device_type": "android",
- "device_id": "7e32188a4dab669f",
- "device_idfv": "7e32188a4dab669f",
- "device_manufacturer": "Google",
- "os_name": "Android",
- "network_carrier": "Android",
- "description": "Sneaker purchase",
- "brand": "Victory Sneakers",
- "colors": ["red", "blue"],
- "items": [
- {
- "text": "New Line Sneakers",
- "price": "$ 79.95"
- },
- {
- "text": "Old Line Sneakers",
- "price": "$ 79.95"
- },
- {
- "text": "Blue Line Sneakers",
- "price": "$ 79.95"
- }
- ],
- "name": "Hugh Manbeing",
- "userLocation": {
- "state": "CO",
- "zip": "80202"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "[BLUESHIFT] event Api Keys required for Authentication.",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "Missing required value from \"email\"",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.getblueshift.com/api/v1/customers",
- "headers": {
- "Authorization": "Basic YjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q5MjBlYzFlMmU=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "email": "chandan@companyname.com",
- "customer_id": "rudder123",
- "phone_number": "92374162212",
- "firstname": "James",
- "lastname": "Doe",
- "gender": "M",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "employed": true,
- "birthday": "1614775793",
- "education": "Science",
- "graduate": true,
- "married": true,
- "customerType": "Prime",
- "msg_push": true,
- "msgSms": true,
- "msgemail": true,
- "msgwhatsapp": false,
- "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
- "custom_mappings": {
- "Office": "Trastkiv",
- "Country": "Russia"
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "state": "WB",
- "street": ""
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "[BLUESHIFT] User API Key required for Authentication.",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.eu.getblueshift.com/api/v1/customers",
- "headers": {
- "Authorization": "Basic YjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q5MjBlYzFlMmU=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "email": "chandan@companyname.com",
- "customer_id": "rudder123",
- "phone_number": "92374162212",
- "firstname": "James",
- "lastname": "Doe",
- "gender": "M",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Message Type is not present. Aborting message.",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "Message type page not supported",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.eu.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "customer_id": "sampleRudderstack11",
- "event": "purchase",
- "device_type": "android",
- "device_id": "7e32188a4dab669f",
- "device_idfv": "7e32188a4dab669f",
- "device_manufacturer": "Google",
- "os_name": "Android",
- "network_carrier": "Android",
- "total": 1000,
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- },
- {
- "product_id": "507f1f77bcf86cd799439011",
- "sku": "45790-32",
- "name": "Monopoly: 3rd Edition",
- "price": "19",
- "quantity": "2",
- "position": "1",
- "category": "Games,Gifts,Entertainment,Toys",
- "url": "https://www.example.com/product/path",
- "image_url": "https://www.example.com/product/path.jpg"
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.eu.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "customer_id": "sampleusrRudder7",
- "event": "Custom_Events",
- "device_type": "Android",
- "device_id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_manufacturer": "Google",
- "os_name": "Android",
- "network_carrier": "Android",
- "ip": "14.5.67.21",
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "event_uuid": "34abcd-efghijkj-1234kf",
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "[Blueshift] Event shouldn't contain period(.), numeric value and contains not more than 64 characters",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "[Blueshift] Event shouldn't contain period(.), numeric value and contains not more than 64 characters",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "group_id": "group22222",
- "customer_id": "sampleusrRudder1",
- "email": "hardik@rudderstack.com",
- "device_type": "android",
- "device_id": "7e32188a4dab669f",
- "device_idfv": "7e32188a4dab669f",
- "device_manufacturer": "Google",
- "os_name": "Android",
- "network_carrier": "Android",
- "event_uuid": "e5034jh0-a404-47b4-a463-76df99934kl2",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "event": "identify",
- "name": "hardik",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830,
- "gender": "male"
- },
- "JSON_ARRAY": {}
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE="
- },
- "version": "1",
- "endpoint": "https://api.getblueshift.com/api/v1/event"
- },
- {
- "statusCode": 400,
- "error": "[BLUESHIFT] event API Key required for Authentication.",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- }
-]
diff --git a/test/__tests__/data/blueshift_router_input.json b/test/__tests__/data/blueshift_router_input.json
deleted file mode 100644
index 54012757710..00000000000
--- a/test/__tests__/data/blueshift_router_input.json
+++ /dev/null
@@ -1,167 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "datacenterEU": false
- }
- },
- "metadata": {
- "jobId": 1
- },
- "message": {
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.5"
- },
- "traits": {
- "name": "hardik",
- "email": "hardik@rudderstack.com",
- "cookie": "1234abcd-efghklkj-1234kfjadslk-34iu123",
- "industry": "Education",
- "employees": 399,
- "plan": "enterprise",
- "total billed": 830
- }
- },
- "type": "group",
- "userId": "rudderstack8",
- "groupId": "35838"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "datacenterEU": false
- }
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "context": {
- "ip": "14.5.67.21",
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 3
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "network": {
- "bluetooth": false,
- "carrier": "Android",
- "cellular": true,
- "wifi": true
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "latitude": "37.7672319",
- "longitude": "-122.4021353",
- "state": "WB",
- "street": "rajnagar"
- }
- },
- "properties": {
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123"
- },
- "messageId": "34abcd-efghijkj-1234kf",
- "type": "track",
- "event": "identify",
- "userId": "sampleusrRudder7"
- }
- },
- {
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "datacenterEU": false
- }
- },
- "metadata": {
- "jobId": 3
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "anon_id",
- "type": "identify",
- "traits": {
- "email": "chandan@companyname.com",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "phone": "92374162212",
- "gender": "M",
- "firstname": "James",
- "lastname": "Doe",
- "employed": true,
- "birthday": "1614775793",
- "education": "Science",
- "graduate": true,
- "married": true,
- "customerType": "Prime",
- "msg_push": true,
- "msgSms": true,
- "msgemail": true,
- "msgwhatsapp": false,
- "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
- "custom_mappings": {
- "Office": "Trastkiv",
- "Country": "Russia"
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "state": "WB",
- "street": ""
- }
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- }
- }
-]
diff --git a/test/__tests__/data/blueshift_router_output.json b/test/__tests__/data/blueshift_router_output.json
deleted file mode 100644
index 669f5014a5b..00000000000
--- a/test/__tests__/data/blueshift_router_output.json
+++ /dev/null
@@ -1,156 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.getblueshift.com/api/v1/event",
- "headers": {
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "group_id": "35838",
- "customer_id": "rudderstack8",
- "email": "hardik@rudderstack.com",
- "event": "identify"
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 1
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "datacenterEU": false
- }
- }
- },
- {
- "batchedRequest": {
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "ip": "14.5.67.21",
- "event": "identify",
- "cookie": "1234abcd-efghijkj-1234kfjadslk-34iu123",
- "os_name": "Android",
- "latitude": "37.7672319",
- "device_id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "longitude": "-122.4021353",
- "event_uuid": "34abcd-efghijkj-1234kf",
- "customer_id": "sampleusrRudder7",
- "device_idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "device_type": "Android",
- "network_carrier": "Android",
- "device_manufacturer": "Google"
- },
- "JSON_ARRAY": {}
- },
- "type": "REST",
- "files": {},
- "method": "POST",
- "params": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Basic ZWZlYjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q2MjBlYzE="
- },
- "version": "1",
- "endpoint": "https://api.getblueshift.com/api/v1/event"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "eventApiKey": "efeb4a29aba5e75d99c8a18acd620ec1",
- "usersApiKey": "b4a29aba5e75duic8a18acd920ec1e2e",
- "datacenterEU": false
- }
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.getblueshift.com/api/v1/customers",
- "headers": {
- "Authorization": "Basic YjRhMjlhYmE1ZTc1ZDk5YzhhMThhY2Q5MjBlYzFlMmU=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "email": "chandan@companyname.com",
- "customer_id": "rudder123",
- "phone_number": "92374162212",
- "firstname": "James",
- "lastname": "Doe",
- "gender": "M",
- "userId": "rudder123",
- "anonymousId": "anon_id",
- "name": "James Doe",
- "employed": true,
- "birthday": "1614775793",
- "education": "Science",
- "graduate": true,
- "married": true,
- "customerType": "Prime",
- "msg_push": true,
- "msgSms": true,
- "msgemail": true,
- "msgwhatsapp": false,
- "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
- "custom_mappings": {
- "Office": "Trastkiv",
- "Country": "Russia"
- },
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 789223,
- "state": "WB",
- "street": ""
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 3
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "eventApiKey": "a5e75d99c8a18acb4a29abd920ec1e2e",
- "usersApiKey": "b4a29aba5e75d99c8a18acd920ec1e2e",
- "datacenterEU": false
- }
- }
- }
-]
diff --git a/test/__tests__/data/branch_input.json b/test/__tests__/data/branch_input.json
deleted file mode 100644
index 8e8d2bba5fa..00000000000
--- a/test/__tests__/data/branch_input.json
+++ /dev/null
@@ -1,806 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": "14.4.1"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "properties": {
- "name": "sampath"
- },
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 2
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "identify",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "page",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "watchos"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "properties": {
- "name": "sampath"
- },
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "ipados"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "properties": {
- "name": "sampath"
- },
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "tvos"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "properties": {
- "name": "sampath"
- },
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": "14.4.1"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
-
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": "14.4.1"
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": "14.4.1"
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "Android",
- "attTrackingStatus": 2,
- "brand": "testBrand"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 2,
- "height": 1794,
- "width": 1080
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "identify",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "type": "ios",
- "attTrackingStatus": 2,
- "brand": "testBrand"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": "14.4.1"
- },
- "screen": {
- "density": 2,
- "height": 1794,
- "width": 1080
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "identify",
- "userId": "sampath"
- }
- }
-]
diff --git a/test/__tests__/data/branch_output.json b/test/__tests__/data/branch_output.json
deleted file mode 100644
index 8a57bf99d5b..00000000000
--- a/test/__tests__/data/branch_output.json
+++ /dev/null
@@ -1,385 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "branch_key": "",
- "name": "ADD_TO_CART",
- "content_items": [
- {
- "$product_name": "sampath"
- }
- ],
- "user_data": {
- "os": "iOS",
- "os_version": "14.4.1",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/custom",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "branch_key": "",
- "name": "sampath",
- "custom_data": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "content_items": [{}],
- "user_data": {
- "os": "Android",
- "os_version": "9",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "android_id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "aaid": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": true,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- { "statusCode": 400, "error": "Message type is not supported" },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "content_items": [
- {
- "$product_name": "sampath"
- }
- ],
- "user_data": {
- "os": "watchos",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
-
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "content_items": [
- {
- "$product_name": "sampath"
- }
- ],
- "user_data": {
- "os": "ipados",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "content_items": [
- {
- "$product_name": "sampath"
- }
- ],
- "user_data": {
- "os": "tvos",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user_data": {
- "os": "iOS",
- "os_version": "14.4.1",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user_data": {
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "user_data": {
- "os": "iOS",
- "os_version": "14.4.1",
- "developer_identity": "sampath",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": false,
- "model": "AOSP on IA Emulator",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "name": "ADD_TO_CART",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "statusCode": 400,
- "error": "Event name is required",
- "statTags": {
- "destination": "branch",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/custom",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "custom_data": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "content_items": [{}],
- "user_data": {
- "os": "Android",
- "os_version": "9",
- "app_version": "1.0.0",
- "model": "AOSP on IA Emulator",
- "brand": "testBrand",
- "screen_dpi": 2,
- "screen_height": 1794,
- "screen_width": 1080,
- "developer_identity": "sampath",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
- "android_id": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "aaid": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": true
- },
- "name": "sampath",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/custom",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "custom_data": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "content_items": [{}],
- "user_data": {
- "os": "iOS",
- "os_version": "14.4.1",
- "app_version": "1.0.0",
- "model": "AOSP on IA Emulator",
- "brand": "testBrand",
- "screen_dpi": 2,
- "screen_height": 1794,
- "screen_width": 1080,
- "developer_identity": "sampath",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36",
- "idfa": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "idfv": "3f034872-5e28-45a1-9eda-ce22a3e36d1a",
- "limit_ad_tracking": true
- },
- "name": "sampath",
- "branch_key": ""
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- }
-]
diff --git a/test/__tests__/data/branch_router_input.json b/test/__tests__/data/branch_router_input.json
deleted file mode 100644
index 2f78406325d..00000000000
--- a/test/__tests__/data/branch_router_input.json
+++ /dev/null
@@ -1,128 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "properties": {
- "name": "sampath"
- },
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "track",
- "userId": "sampath"
- }
- },
- {
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "sampath",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "iOS",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "identify",
- "userId": "sampath"
- }
- }
-]
diff --git a/test/__tests__/data/branch_router_output.json b/test/__tests__/data/branch_router_output.json
deleted file mode 100644
index 15f35bf348e..00000000000
--- a/test/__tests__/data/branch_router_output.json
+++ /dev/null
@@ -1,120 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/standard",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "branch_key": "",
- "name": "ADD_TO_CART",
- "content_items": [
- {
- "$product_name": "sampath"
- }
- ],
- "user_data": {
- "os": "iOS",
- "os_version": "",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api2.branch.io/v2/event/custom",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "branch_key": "",
- "name": "sampath",
- "custom_data": {
- "anonymousId": "sampath",
- "email": "sampath@gmail.com"
- },
- "content_items": [{}],
- "user_data": {
- "os": "iOS",
- "os_version": "",
- "app_version": "1.0.0",
- "screen_dpi": 2,
- "developer_identity": "sampath",
- "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- }
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "sampath"
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "branchKey": "",
- "useNativeSDK": false
- },
- "DestinationDefinition": {
- "DisplayName": "Branch Metrics",
- "ID": "1WTpBSTiL3iAUHUdW7rHT4sawgU",
- "Name": "BRANCH"
- },
- "Enabled": true,
- "ID": "1WTpIHpH7NTBgjeiUPW1kCUgZGI",
- "Name": "branch test",
- "Transformations": []
- }
- }
-]
diff --git a/test/__tests__/data/braze_input.json b/test/__tests__/data/braze_input.json
index b4f6e397adb..fb4e41b1890 100644
--- a/test/__tests__/data/braze_input.json
+++ b/test/__tests__/data/braze_input.json
@@ -2,7 +2,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -66,7 +66,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -122,7 +122,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -182,7 +182,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -246,7 +246,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "eu-01"
@@ -310,7 +310,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -372,7 +372,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"enableNestedArrayOperations": false
@@ -440,7 +440,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -607,7 +607,7 @@
},
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -672,7 +672,7 @@
},
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -690,7 +690,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -758,7 +758,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -853,7 +853,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -948,7 +948,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"enableNestedArrayOperations": true
@@ -1061,7 +1061,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"enableNestedArrayOperations": true
@@ -1168,7 +1168,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -1191,7 +1191,7 @@
"city": "Mathura",
"country": "India"
},
- "email": "anuj.kumar@gmail.com",
+ "email": "a@gmail.com",
"phone": "9988123321",
"firstName": "anuj",
"lastName": "kumar",
@@ -1235,7 +1235,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -1258,7 +1258,7 @@
"city": "Mathura",
"country": "India"
},
- "email": "anuj.kumar@gmail.com",
+ "email": "a@gmail.com",
"phone": "9988123321",
"firstName": "anuj",
"lastName": "kumar",
@@ -1302,7 +1302,7 @@
{
"destination": {
"Config": {
- "restApiKey": "abcd=",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "US-03"
@@ -1353,7 +1353,7 @@
{
"destination": {
"Config": {
- "restApiKey": "abcd=",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "US-03"
@@ -1403,7 +1403,7 @@
{
"destination": {
"Config": {
- "restApiKey": "abcd=",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "US-03"
@@ -1453,7 +1453,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -1477,7 +1477,7 @@
"channel": "web",
"context": {
"traits": {
- "email": "ANIL.KUMAR@HOTMAIL.COM",
+ "email": "A@HOTMAIL.COM",
"phone": "9988123321",
"firstName": "anil",
"lastName": "kumar",
@@ -1521,7 +1521,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"dataCenter": "us-01"
@@ -1663,7 +1663,7 @@
},
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"enableSubscriptionGroupInGroupCall": true
@@ -1731,7 +1731,7 @@
},
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false,
"enableSubscriptionGroupInGroupCall": true
@@ -1750,7 +1750,7 @@
{
"destination": {
"Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "restApiKey": "dummyApiKey",
"prefixProperties": true,
"useNativeSDK": false
},
@@ -1814,5 +1814,146 @@
"type": "track",
"userId": "mickeyMouse"
}
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "sendPurchaseEventWithExtraProperties": true
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.0.5"
+ },
+ "ip": "0.0.0.0",
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.0.5"
+ },
+ "locale": "en-GB",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 2
+ },
+ "traits": {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "firstname": "Mickey"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "event": "Order Completed",
+ "integrations": {
+ "All": true
+ },
+ "messageId": "aa5f5e44-8756-40ad-ad1e-b0d3b9fa710a",
+ "originalTimestamp": "2020-01-24T06:29:02.367Z",
+ "properties": {
+ "affiliation": "Google Store",
+ "checkout_id": "fksdjfsdjfisjf9sdfjsd9f",
+ "coupon": "hasbros",
+ "currency": "USD",
+ "discount": 2.5,
+ "order_id": "50314b8e9bcf000000000000",
+ "products": [
+ {
+ "category": "Games",
+ "image_url": "https:///www.example.com/product/path.jpg",
+ "name": "Monopoly: 3rd Edition",
+ "price": 0,
+ "product_id": "507f1f77bcf86cd799439023",
+ "quantity": 1,
+ "sku": "45790-32",
+ "url": "https://www.example.com/product/path"
+ },
+ {
+ "category": "Games",
+ "name": "Uno Card Game",
+ "price": 0,
+ "product_id": "505bd76785ebb509fc183724",
+ "quantity": 2,
+ "sku": "46493-32"
+ }
+ ],
+ "revenue": 25,
+ "shipping": 3,
+ "subtotal": 22.5,
+ "tax": 2,
+ "total": 27.5
+ },
+ "receivedAt": "2020-01-24T11:59:02.403+05:30",
+ "request_ip": "[::1]:53712",
+ "sentAt": "2020-01-24T06:29:02.368Z",
+ "timestamp": "2020-01-24T11:59:02.402+05:30",
+ "type": "track",
+ "userId": ""
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01"
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "traits": {
+ "city": "Disney",
+ "country": "USA",
+ "email": 123,
+ "firstname": "Mickey",
+ "closed_at": null,
+ "orderTotal": 0
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "2536eda4-d638-4c93-8014-8ffe3f083214",
+ "originalTimestamp": "2020-01-24T06:29:02.362Z",
+ "receivedAt": "2020-01-24T11:59:02.403+05:30",
+ "request_ip": "[::1]:53709",
+ "sentAt": "2020-01-24T06:29:02.363Z",
+ "timestamp": "2020-01-24T11:59:02.402+05:30",
+ "type": "identify",
+ "userId": ""
+ }
}
]
diff --git a/test/__tests__/data/braze_output.json b/test/__tests__/data/braze_output.json
index cf8b188dfd0..ed39930569f 100644
--- a/test/__tests__/data/braze_output.json
+++ b/test/__tests__/data/braze_output.json
@@ -7,7 +7,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -46,7 +46,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -78,7 +78,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -117,7 +117,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -157,7 +157,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -191,7 +191,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -241,7 +241,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -323,7 +323,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -351,7 +351,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -424,7 +424,7 @@
"files": {},
"headers": {
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "Authorization": "Bearer dummyApiKey",
"Content-Type": "application/json"
},
"method": "POST",
@@ -485,7 +485,7 @@
"files": {},
"headers": {
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "Authorization": "Bearer dummyApiKey",
"Content-Type": "application/json"
},
"method": "POST",
@@ -582,7 +582,7 @@
"headers": {
"Accept": "application/json",
"Content-Type": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"version": "1",
"endpoint": "https://rest.fra-01.braze.eu/users/track"
@@ -667,7 +667,7 @@
"headers": {
"Accept": "application/json",
"Content-Type": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"version": "1",
"endpoint": "https://rest.fra-01.braze.eu/users/track"
@@ -680,7 +680,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -689,7 +689,7 @@
{
"country": "India",
"dob": "01/01/1971",
- "email": "anuj.kumar@gmail.com",
+ "email": "a@gmail.com",
"first_name": "anuj",
"gender": "M",
"home_city": "Mathura",
@@ -719,7 +719,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -728,7 +728,7 @@
{
"country": "India",
"dob": "01/01/1971",
- "email": "anuj.kumar@gmail.com",
+ "email": "a@gmail.com",
"first_name": "anuj",
"gender": null,
"home_city": "Mathura",
@@ -776,7 +776,7 @@
"headers": {
"Accept": "application/json",
"Content-Type": "application/json",
- "Authorization": "Bearer abcd="
+ "Authorization": "Bearer dummyApiKey"
},
"version": "1",
"endpoint": "https://rest.iad-03.braze.com/users/merge"
@@ -797,7 +797,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -805,7 +805,7 @@
"attributes": [
{
"dob": "01/01/1971",
- "email": "anil.kumar@hotmail.com",
+ "email": "a@hotmail.com",
"first_name": "anil",
"gender": null,
"image_url": "https://i.kym-cdn.com/entries/icons/mobile/000/034/772/anuj-1.jpg",
@@ -834,7 +834,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -895,7 +895,7 @@
"files": {},
"headers": {
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "Authorization": "Bearer dummyApiKey",
"Content-Type": "application/json"
},
"method": "POST",
@@ -923,7 +923,7 @@
"files": {},
"headers": {
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256",
+ "Authorization": "Bearer dummyApiKey",
"Content-Type": "application/json"
},
"method": "POST",
@@ -939,7 +939,7 @@
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
+ "Authorization": "Bearer dummyApiKey"
},
"params": {},
"body": {
@@ -963,5 +963,80 @@
},
"files": {},
"userId": "mickeyMouse"
+ },
+ {
+ "body": {
+ "FORM": {},
+ "JSON": {
+ "attributes": [
+ {
+ "_update_existing_only": false,
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "firstname": "Mickey",
+ "user_alias": {
+ "alias_label": "rudder_id",
+ "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca"
+ }
+ }
+ ],
+ "partner": "RudderStack",
+ "purchases": [
+ {
+ "_update_existing_only": false,
+ "currency": "USD",
+ "price": 0,
+ "product_id": "507f1f77bcf86cd799439023",
+ "properties": {
+ "category": "Games",
+ "image_url": "https:///www.example.com/product/path.jpg",
+ "name": "Monopoly: 3rd Edition",
+ "url": "https://www.example.com/product/path"
+ },
+ "quantity": 1,
+ "time": "2020-01-24T11:59:02.402+05:30",
+ "user_alias": {
+ "alias_label": "rudder_id",
+ "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca"
+ }
+ },
+ {
+ "_update_existing_only": false,
+ "currency": "USD",
+ "price": 0,
+ "product_id": "505bd76785ebb509fc183724",
+ "properties": {
+ "category": "Games",
+ "name": "Uno Card Game"
+ },
+ "quantity": 2,
+ "time": "2020-01-24T11:59:02.402+05:30",
+ "user_alias": {
+ "alias_label": "rudder_id",
+ "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca"
+ }
+ }
+ ]
+ },
+ "JSON_ARRAY": {},
+ "XML": {}
+ },
+ "endpoint": "https://rest.fra-01.braze.eu/users/track",
+ "files": {},
+ "headers": {
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey",
+ "Content-Type": "application/json"
+ },
+ "method": "POST",
+ "params": {},
+ "type": "REST",
+ "userId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "version": "1"
+ },
+ {
+ "statusCode": 400,
+ "message": "Invalid email, email must be a valid string"
}
]
diff --git a/test/__tests__/data/braze_router.json b/test/__tests__/data/braze_router.json
new file mode 100644
index 00000000000..33c66bca6d4
--- /dev/null
+++ b/test/__tests__/data/braze_router.json
@@ -0,0 +1,1034 @@
+{
+ "simpleRouterTestData": [
+ {
+ "description": "simple router tests",
+ "input": [
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "eu-01"
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 1
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.0.5"
+ },
+ "ip": "0.0.0.0",
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.0.5"
+ },
+ "locale": "en-GB",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 2
+ },
+ "traits": {},
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "dd266c67-9199-4a52-ba32-f46ddde67312",
+ "originalTimestamp": "2020-01-24T06:29:02.358Z",
+ "properties": {
+ "path": "/tests/html/index2.html",
+ "referrer": "",
+ "search": "",
+ "title": "",
+ "url": "http://localhost/tests/html/index2.html"
+ },
+ "receivedAt": "2020-01-24T11:59:02.403+05:30",
+ "request_ip": "[::1]:53708",
+ "sentAt": "2020-01-24T06:29:02.359Z",
+ "timestamp": "2020-01-24T11:59:02.402+05:30",
+ "type": "page",
+ "userId": ""
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01"
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 2
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.0.5"
+ },
+ "ip": "0.0.0.0",
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.0.5"
+ },
+ "locale": "en-GB",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 2
+ },
+ "traits": {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "firstname": "Mickey"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "2536eda4-d638-4c93-8014-8ffe3f083214",
+ "originalTimestamp": "2020-01-24T06:29:02.362Z",
+ "receivedAt": "2020-01-24T11:59:02.403+05:30",
+ "request_ip": "[::1]:53709",
+ "sentAt": "2020-01-24T06:29:02.363Z",
+ "timestamp": "2020-01-24T11:59:02.402+05:30",
+ "type": "identify",
+ "userId": ""
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01",
+ "enableSubscriptionGroupInGroupCall": true
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 3
+ },
+ "message": {
+ "anonymousId": "56yrtsdfgbgxcb-22b4-401d-aae5-1b994be9a969",
+ "groupId": "c90f0fd2-2a02-4f2f-bf07-7e7d2c2ed2b1",
+ "traits": {
+ "phone": "5055077683",
+ "subscriptionState": "subscribed"
+ },
+ "userId": "user123",
+ "type": "group"
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01",
+ "enableSubscriptionGroupInGroupCall": true
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 4
+ },
+ "message": {
+ "anonymousId": "dfgdfgdfg-22b4-401d-aae5-1b994be9a969",
+ "groupId": "58d0a278-b55b-4f10-b7d2-98d1c5dd4c30",
+ "traits": {
+ "phone": "5055077683",
+ "subscriptionState": "subscribed"
+ },
+ "userId": "user877",
+ "type": "group"
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01",
+ "enableSubscriptionGroupInGroupCall": true
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 5
+ },
+ "message": {
+ "type": "alias",
+ "previousId": "adsfsaf",
+ "userId": "dsafsdf"
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "us-01",
+ "enableSubscriptionGroupInGroupCall": true
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ },
+ "metadata": {
+ "jobId": 6
+ },
+ "message": {
+ "type": "alias",
+ "previousId": "adsfsaf2",
+ "userId": "dsafsdf2"
+ }
+ }
+ ],
+ "output": [
+ {
+ "batchedRequest": [
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://rest.fra-01.braze.eu/users/track",
+ "headers": {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "partner": "RudderStack",
+ "events": [
+ {
+ "name": "Page Viewed",
+ "time": "2020-01-24T11:59:02.402+05:30",
+ "properties": {
+ "path": "/tests/html/index2.html",
+ "referrer": "",
+ "search": "",
+ "title": "",
+ "url": "http://localhost/tests/html/index2.html"
+ },
+ "_update_existing_only": false,
+ "user_alias": {
+ "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "alias_label": "rudder_id"
+ }
+ }
+ ],
+ "attributes": [
+ {
+ "email": "mickey@disney.com",
+ "city": "Disney",
+ "country": "USA",
+ "firstname": "Mickey",
+ "_update_existing_only": false,
+ "user_alias": {
+ "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "alias_label": "rudder_id"
+ }
+ }
+ ]
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {}
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://rest.fra-01.braze.eu/v2/subscription/status/set",
+ "headers": {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "subscription_groups": [
+ {
+ "external_id": ["user123"],
+ "phones": ["5055077683"],
+ "subscription_group_id": "c90f0fd2-2a02-4f2f-bf07-7e7d2c2ed2b1",
+ "subscription_state": "subscribed"
+ },
+ {
+ "external_id": ["user877"],
+ "phones": ["5055077683"],
+ "subscription_group_id": "58d0a278-b55b-4f10-b7d2-98d1c5dd4c30",
+ "subscription_state": "subscribed"
+ }
+ ]
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {}
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://rest.fra-01.braze.eu/users/merge",
+ "headers": {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "merge_updates": [
+ {
+ "identifier_to_keep": {
+ "external_id": "dsafsdf"
+ },
+ "identifier_to_merge": {
+ "external_id": "adsfsaf"
+ }
+ },
+ {
+ "identifier_to_keep": {
+ "external_id": "dsafsdf2"
+ },
+ "identifier_to_merge": {
+ "external_id": "adsfsaf2"
+ }
+ }
+ ]
+ },
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ ],
+ "metadata": [
+ {
+ "jobId": 1
+ },
+ {
+ "jobId": 2
+ },
+ {
+ "jobId": 3
+ },
+ {
+ "jobId": 4
+ },
+ {
+ "jobId": 5
+ },
+ {
+ "jobId": 6
+ }
+ ],
+ "batched": true,
+ "statusCode": 200,
+ "destination": {
+ "Config": {
+ "restApiKey": "dummyApiKey",
+ "prefixProperties": true,
+ "useNativeSDK": false,
+ "dataCenter": "eu-01"
+ },
+ "DestinationDefinition": {
+ "DisplayName": "Braze",
+ "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
+ "Name": "BRAZE"
+ },
+ "Enabled": true,
+ "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
+ "Name": "Braze",
+ "Transformations": []
+ }
+ }
+ ]
+ }
+ ],
+ "dedupEnabledRouterTestData": [
+ {
+ "description": "dedup enabled router tests",
+ "input": [
+ {
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ },
+ "metadata": {
+ "jobId": 1
+ },
+ "message": {
+ "type": "track",
+ "event": "Sign In Completed",
+ "sentAt": "2023-03-10T18:36:04.738Z",
+ "userId": "braze_test_user",
+ "channel": "web",
+ "context": {
+ "locale": "en-US",
+ "traits": {
+ "subscribe_once": true,
+ "pwa": true,
+ "email": "jackson24miranda@gmail.com",
+ "lastName": "Miranda",
+ "firstName": "Spencer",
+ "is_registered": true,
+ "last_identify": "GOOGLE_SIGN_IN",
+ "account_region": "ON",
+ "is_pickup_selected": "false",
+ "has_tradein_attempt": false,
+ "custom_obj_attr": {
+ "key1": "value1",
+ "key2": "value2",
+ "key4": "value4"
+ },
+ "custom_arr": [1, 2, "str1"]
+ },
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "2.9.5"
+ },
+ "campaign": {},
+ "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
+ },
+ "rudderId": "4118560d-e4fc-4fd1-a734-9c69eae2c047",
+ "messageId": "1a342814-a882-4b65-9cc9-347544997268",
+ "timestamp": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "receivedAt": "2023-03-18T01:41:42.257+05:30",
+ "request_ip": "[::1]",
+ "anonymousId": "77e278c9-e984-4cdd-950c-cd0b61befd03",
+ "originalTimestamp": "2023-03-10T18:36:04.733Z"
+ }
+ },
+ {
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ },
+ "metadata": {
+ "jobId": 2
+ },
+ "message": {
+ "type": "track",
+ "event": "Sign In Completed",
+ "sentAt": "2023-03-10T18:36:04.738Z",
+ "userId": "braze_test_user",
+ "channel": "web",
+ "context": {
+ "locale": "en-US",
+ "traits": {
+ "subscribe_once": true,
+ "pwa": true,
+ "email": "jackson24miranda@gmail.com",
+ "lastName": "Miranda 2",
+ "firstName": "Spencer",
+ "is_registered": true,
+ "last_identify": "GOOGLE_SIGN_IN",
+ "account_region": "ON",
+ "is_pickup_selected": "true",
+ "has_tradein_attempt": false,
+ "custom_obj_attr": {
+ "key1": "value1",
+ "key2": "value2",
+ "key4": "value4"
+ },
+ "custom_arr": ["1", "2", "str1"]
+ },
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "2.9.5"
+ },
+ "campaign": {},
+ "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
+ },
+ "rudderId": "4118560d-e4fc-4fd1-a734-9c69eae2c047",
+ "messageId": "1a342814-a882-4b65-9cc9-347544997268",
+ "timestamp": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "receivedAt": "2023-03-18T01:41:42.257+05:30",
+ "request_ip": "[::1]",
+ "anonymousId": "77e278c9-e984-4cdd-950c-cd0b61befd03",
+ "originalTimestamp": "2023-03-10T18:36:04.733Z"
+ }
+ },
+ {
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ },
+ "metadata": {
+ "jobId": 3
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.0.5"
+ },
+ "ip": "0.0.0.0",
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.0.5"
+ },
+ "locale": "en-GB",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 2
+ },
+ "traits": {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "firstName": "Mickey"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "2536eda4-d638-4c93-8014-8ffe3f083214",
+ "type": "identify",
+ "userId": "user@50"
+ }
+ },
+ {
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ },
+ "metadata": {
+ "jobId": 4
+ },
+ "message": {
+ "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
+ "channel": "web",
+ "context": {
+ "app": {
+ "build": "1.0.0",
+ "name": "RudderLabs JavaScript SDK",
+ "namespace": "com.rudderlabs.javascript",
+ "version": "1.0.5"
+ },
+ "ip": "0.0.0.0",
+ "library": {
+ "name": "RudderLabs JavaScript SDK",
+ "version": "1.0.5"
+ },
+ "locale": "en-GB",
+ "os": {
+ "name": "",
+ "version": ""
+ },
+ "screen": {
+ "density": 2
+ },
+ "traits": {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "firstName": "Mickey"
+ },
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
+ },
+ "integrations": {
+ "All": true
+ },
+ "messageId": "2536eda4-d638-4c93-8014-8ffe3f083214",
+ "type": "identify",
+ "userId": "user@50"
+ }
+ }
+ ],
+ "newTransformerOutput": [
+ {
+ "batchedRequest": [
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://rest.iad-03.braze.com/users/track",
+ "headers": {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "partner": "RudderStack",
+ "attributes": [
+ {
+ "first_name": "Spencer",
+ "subscribe_once": true,
+ "pwa": true,
+ "external_id": "braze_test_user",
+ "custom_obj_attr": {
+ "key1": "value1",
+ "key2": "value2",
+ "key4": "value4"
+ }
+ },
+ {
+ "last_name": "Miranda 2",
+ "is_pickup_selected": "true",
+ "external_id": "braze_test_user",
+ "custom_arr": ["1", "2", "str1"]
+ },
+ {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "external_id": "user@50",
+ "first_name": "Mickey"
+ }
+ ],
+ "events": [
+ {
+ "name": "Sign In Completed",
+ "time": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "external_id": "braze_test_user"
+ },
+ {
+ "name": "Sign In Completed",
+ "time": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "external_id": "braze_test_user"
+ }
+ ]
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ ],
+ "metadata": [
+ {
+ "jobId": 1
+ },
+ {
+ "jobId": 2
+ },
+ {
+ "jobId": 3
+ }
+ ],
+ "batched": true,
+ "statusCode": 200,
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ }
+ },
+ {
+ "error": "[Braze Deduplication]: Duplicate user detected, the user is dropped",
+ "statTags": {},
+ "statusCode": 298,
+ "batched": false,
+ "metadata": [
+ {
+ "jobId": 4
+ }
+ ],
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ }
+ }
+ ],
+ "oldTransformerOutput": [
+ {
+ "batchedRequest": [
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://rest.iad-03.braze.com/users/track",
+ "headers": {
+ "Content-Type": "application/json",
+ "Accept": "application/json",
+ "Authorization": "Bearer dummyApiKey"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "partner": "RudderStack",
+ "attributes": [
+ {
+ "first_name": "Spencer",
+ "subscribe_once": true,
+ "pwa": true,
+ "external_id": "braze_test_user",
+ "custom_obj_attr": {
+ "key1": "value1",
+ "key2": "value2",
+ "key4": "value4"
+ }
+ },
+ {
+ "last_name": "Miranda 2",
+ "is_pickup_selected": "true",
+ "external_id": "braze_test_user",
+ "custom_arr": ["1", "2", "str1"]
+ },
+ {
+ "city": "Disney",
+ "country": "USA",
+ "email": "mickey@disney.com",
+ "external_id": "user@50",
+ "first_name": "Mickey"
+ }
+ ],
+ "events": [
+ {
+ "name": "Sign In Completed",
+ "time": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "external_id": "braze_test_user"
+ },
+ {
+ "name": "Sign In Completed",
+ "time": "2023-03-10T18:36:05.028Z",
+ "properties": {
+ "cause": "/redirector",
+ "method": "GOOGLE",
+ "region": "ON",
+ "orderId": "6179367977099",
+ "order_id": "6179367977099",
+ "webhookurl": "https://my.test.com",
+ "countingMethod": "standard",
+ "is_first_time_signin": false
+ },
+ "external_id": "braze_test_user"
+ }
+ ]
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ ],
+ "metadata": [
+ {
+ "jobId": 1
+ },
+ {
+ "jobId": 2
+ },
+ {
+ "jobId": 3
+ }
+ ],
+ "batched": true,
+ "statusCode": 200,
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ }
+ },
+ {
+ "error": "[Braze Deduplication]: Duplicate user detected, the user is dropped",
+ "statTags": {
+ "errorCategory": "dataValidation",
+ "errorType": "instrumentation"
+ },
+ "statusCode": 400,
+ "batched": false,
+ "metadata": [
+ {
+ "jobId": 4
+ }
+ ],
+ "destination": {
+ "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
+ "Name": "Braze-Test",
+ "Config": {
+ "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
+ "blacklistedEvents": [],
+ "dataCenter": "US-03",
+ "enableNestedArrayOperations": false,
+ "enableSubscriptionGroupInGroupCall": false,
+ "eventFilteringOption": "disable",
+ "oneTrustCookieCategories": [],
+ "restApiKey": "dummyApiKey",
+ "supportDedup": true,
+ "trackAnonymousUser": true,
+ "whitelistedEvents": []
+ },
+ "Enabled": true,
+ "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
+ "Transformations": [],
+ "IsProcessorEnabled": true,
+ "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/__tests__/data/braze_router_input.json b/test/__tests__/data/braze_router_input.json
deleted file mode 100644
index edc167dc672..00000000000
--- a/test/__tests__/data/braze_router_input.json
+++ /dev/null
@@ -1,416 +0,0 @@
-{
- "simpleRouterRequests": [
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "eu-01"
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.5"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.5"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "dd266c67-9199-4a52-ba32-f46ddde67312",
- "originalTimestamp": "2020-01-24T06:29:02.358Z",
- "properties": {
- "path": "/tests/html/index2.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index2.html"
- },
- "receivedAt": "2020-01-24T11:59:02.403+05:30",
- "request_ip": "[::1]:53708",
- "sentAt": "2020-01-24T06:29:02.359Z",
- "timestamp": "2020-01-24T11:59:02.402+05:30",
- "type": "page",
- "userId": ""
- }
- },
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "us-01"
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.5"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.5"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "city": "Disney",
- "country": "USA",
- "email": "mickey@disney.com",
- "firstname": "Mickey"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "2536eda4-d638-4c93-8014-8ffe3f083214",
- "originalTimestamp": "2020-01-24T06:29:02.362Z",
- "receivedAt": "2020-01-24T11:59:02.403+05:30",
- "request_ip": "[::1]:53709",
- "sentAt": "2020-01-24T06:29:02.363Z",
- "timestamp": "2020-01-24T11:59:02.402+05:30",
- "type": "identify",
- "userId": ""
- }
- },
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "us-01",
- "enableSubscriptionGroupInGroupCall": true
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "56yrtsdfgbgxcb-22b4-401d-aae5-1b994be9a969",
- "groupId": "c90f0fd2-2a02-4f2f-bf07-7e7d2c2ed2b1",
- "traits": {
- "phone": "5055077683",
- "subscriptionState": "subscribed"
- },
- "userId": "user123",
- "type": "group"
- }
- },
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "us-01",
- "enableSubscriptionGroupInGroupCall": true
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "anonymousId": "dfgdfgdfg-22b4-401d-aae5-1b994be9a969",
- "groupId": "58d0a278-b55b-4f10-b7d2-98d1c5dd4c30",
- "traits": {
- "phone": "5055077683",
- "subscriptionState": "subscribed"
- },
- "userId": "user877",
- "type": "group"
- }
- },
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "us-01",
- "enableSubscriptionGroupInGroupCall": true
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "type": "alias",
- "previousId": "adsfsaf",
- "userId": "dsafsdf"
- }
- },
- {
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "us-01",
- "enableSubscriptionGroupInGroupCall": true
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "type": "alias",
- "previousId": "adsfsaf2",
- "userId": "dsafsdf2"
- }
- }
- ],
- "dedupEnabledRouterRequests": [
- {
- "destination": {
- "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
- "Name": "Braze-Test",
- "Config": {
- "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
- "blacklistedEvents": [],
- "dataCenter": "US-03",
- "enableNestedArrayOperations": false,
- "enableSubscriptionGroupInGroupCall": false,
- "eventFilteringOption": "disable",
- "oneTrustCookieCategories": [],
- "restApiKey": "0066a73e-d9b3-4d1f-b17d-8cf410505e36",
- "supportDedup": true,
- "trackAnonymousUser": true,
- "whitelistedEvents": []
- },
- "Enabled": true,
- "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
- "Transformations": [],
- "IsProcessorEnabled": true,
- "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
- },
- "metadata": {
- "jobId": 1
- },
- "message": {
- "type": "track",
- "event": "Sign In Completed",
- "sentAt": "2023-03-10T18:36:04.738Z",
- "userId": "braze_test_user",
- "channel": "web",
- "context": {
- "locale": "en-US",
- "traits": {
- "subscribe_once": true,
- "pwa": true,
- "email": "jackson24miranda@gmail.com",
- "lastName": "Miranda",
- "firstName": "Spencer",
- "is_registered": true,
- "last_identify": "GOOGLE_SIGN_IN",
- "account_region": "ON",
- "is_pickup_selected": "false",
- "has_tradein_attempt": false,
- "custom_obj_attr": {
- "key1": "value1",
- "key2": "value2",
- "key4": "value4"
- },
- "custom_arr": [1, 2, "str1"]
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "2.9.5"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
- },
- "rudderId": "4118560d-e4fc-4fd1-a734-9c69eae2c047",
- "messageId": "1a342814-a882-4b65-9cc9-347544997268",
- "timestamp": "2023-03-10T18:36:05.028Z",
- "properties": {
- "cause": "/redirector",
- "method": "GOOGLE",
- "region": "ON",
- "orderId": "6179367977099",
- "order_id": "6179367977099",
- "webhookurl": "https://my.test.com",
- "countingMethod": "standard",
- "is_first_time_signin": false
- },
- "receivedAt": "2023-03-18T01:41:42.257+05:30",
- "request_ip": "[::1]",
- "anonymousId": "77e278c9-e984-4cdd-950c-cd0b61befd03",
- "originalTimestamp": "2023-03-10T18:36:04.733Z"
- }
- },
- {
- "destination": {
- "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
- "Name": "Braze-Test",
- "Config": {
- "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
- "blacklistedEvents": [],
- "dataCenter": "US-03",
- "enableNestedArrayOperations": false,
- "enableSubscriptionGroupInGroupCall": false,
- "eventFilteringOption": "disable",
- "oneTrustCookieCategories": [],
- "restApiKey": "0066a73e-d9b3-4d1f-b17d-8cf410505e36",
- "supportDedup": true,
- "trackAnonymousUser": true,
- "whitelistedEvents": []
- },
- "Enabled": true,
- "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
- "Transformations": [],
- "IsProcessorEnabled": true,
- "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
- },
- "metadata": {
- "jobId": 2
- },
- "message": {
- "type": "track",
- "event": "Sign In Completed",
- "sentAt": "2023-03-10T18:36:04.738Z",
- "userId": "braze_test_user",
- "channel": "web",
- "context": {
- "locale": "en-US",
- "traits": {
- "subscribe_once": true,
- "pwa": true,
- "email": "jackson24miranda@gmail.com",
- "lastName": "Miranda 2",
- "firstName": "Spencer",
- "is_registered": true,
- "last_identify": "GOOGLE_SIGN_IN",
- "account_region": "ON",
- "is_pickup_selected": "true",
- "has_tradein_attempt": false,
- "custom_obj_attr": {
- "key1": "value1",
- "key2": "value2",
- "key4": "value4"
- },
- "custom_arr": ["1", "2", "str1"]
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "2.9.5"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
- },
- "rudderId": "4118560d-e4fc-4fd1-a734-9c69eae2c047",
- "messageId": "1a342814-a882-4b65-9cc9-347544997268",
- "timestamp": "2023-03-10T18:36:05.028Z",
- "properties": {
- "cause": "/redirector",
- "method": "GOOGLE",
- "region": "ON",
- "orderId": "6179367977099",
- "order_id": "6179367977099",
- "webhookurl": "https://my.test.com",
- "countingMethod": "standard",
- "is_first_time_signin": false
- },
- "receivedAt": "2023-03-18T01:41:42.257+05:30",
- "request_ip": "[::1]",
- "anonymousId": "77e278c9-e984-4cdd-950c-cd0b61befd03",
- "originalTimestamp": "2023-03-10T18:36:04.733Z"
- }
- }
- ]
-}
diff --git a/test/__tests__/data/braze_router_output.json b/test/__tests__/data/braze_router_output.json
deleted file mode 100644
index f539d9d977a..00000000000
--- a/test/__tests__/data/braze_router_output.json
+++ /dev/null
@@ -1,281 +0,0 @@
-{
- "simpleRouterResponse": [
- {
- "batchedRequest": [
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://rest.fra-01.braze.eu/users/track",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
- },
- "params": {},
- "body": {
- "JSON": {
- "partner": "RudderStack",
- "events": [
- {
- "name": "Page Viewed",
- "time": "2020-01-24T11:59:02.402+05:30",
- "properties": {
- "path": "/tests/html/index2.html",
- "referrer": "",
- "search": "",
- "title": "",
- "url": "http://localhost/tests/html/index2.html"
- },
- "_update_existing_only": false,
- "user_alias": {
- "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
- "alias_label": "rudder_id"
- }
- }
- ],
- "attributes": [
- {
- "email": "mickey@disney.com",
- "city": "Disney",
- "country": "USA",
- "firstname": "Mickey",
- "_update_existing_only": false,
- "user_alias": {
- "alias_name": "e6ab2c5e-2cda-44a9-a962-e2f67df78bca",
- "alias_label": "rudder_id"
- }
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://rest.fra-01.braze.eu/v2/subscription/status/set",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
- },
- "params": {},
- "body": {
- "JSON": {
- "subscription_groups": [
- {
- "external_id": ["user123"],
- "phones": ["5055077683"],
- "subscription_group_id": "c90f0fd2-2a02-4f2f-bf07-7e7d2c2ed2b1",
- "subscription_state": "subscribed"
- },
- {
- "external_id": ["user877"],
- "phones": ["5055077683"],
- "subscription_group_id": "58d0a278-b55b-4f10-b7d2-98d1c5dd4c30",
- "subscription_state": "subscribed"
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://rest.fra-01.braze.eu/users/merge",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json",
- "Authorization": "Bearer 9432f11f70f8ce386f5110c8c924b3ec4f825256"
- },
- "params": {},
- "body": {
- "JSON": {
- "merge_updates": [
- {
- "identifier_to_keep": {
- "external_id": "dsafsdf"
- },
- "identifier_to_merge": {
- "external_id": "adsfsaf"
- }
- },
- {
- "identifier_to_keep": {
- "external_id": "dsafsdf2"
- },
- "identifier_to_merge": {
- "external_id": "adsfsaf2"
- }
- }
- ]
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- }
- ],
- "metadata": [
- {
- "jobId": 2
- },
- {
- "jobId": 2
- },
- {
- "jobId": 2
- },
- {
- "jobId": 2
- },
- {
- "jobId": 2
- },
- {
- "jobId": 2
- }
- ],
- "batched": true,
- "statusCode": 200,
- "destination": {
- "Config": {
- "restApiKey": "9432f11f70f8ce386f5110c8c924b3ec4f825256",
- "prefixProperties": true,
- "useNativeSDK": false,
- "dataCenter": "eu-01"
- },
- "DestinationDefinition": {
- "DisplayName": "Braze",
- "ID": "1WhbSZ6uA3H5ChVifHpfL2H6sie",
- "Name": "BRAZE"
- },
- "Enabled": true,
- "ID": "1WhcOCGgj9asZu850HvugU2C3Aq",
- "Name": "Braze",
- "Transformations": []
- }
- }
- ],
- "dedupEnabledRouterResponse": [
- {
- "batchedRequest": [
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://rest.iad-03.braze.com/users/track",
- "headers": {
- "Content-Type": "application/json",
- "Accept": "application/json",
- "Authorization": "Bearer 0066a73e-d9b3-4d1f-b17d-8cf410505e36"
- },
- "params": {},
- "body": {
- "JSON": {
- "partner": "RudderStack",
- "attributes": [
- {
- "first_name": "Spencer",
- "subscribe_once": true,
- "pwa": true,
- "external_id": "braze_test_user",
- "custom_obj_attr": {
- "key1": "value1",
- "key2": "value2",
- "key4": "value4"
- }
- },
- {
- "last_name": "Miranda 2",
- "is_pickup_selected": "true",
- "external_id": "braze_test_user",
- "custom_arr": ["1", "2", "str1"]
- }
- ],
- "events": [
- {
- "name": "Sign In Completed",
- "time": "2023-03-10T18:36:05.028Z",
- "properties": {
- "cause": "/redirector",
- "method": "GOOGLE",
- "region": "ON",
- "orderId": "6179367977099",
- "order_id": "6179367977099",
- "webhookurl": "https://my.test.com",
- "countingMethod": "standard",
- "is_first_time_signin": false
- },
- "external_id": "braze_test_user"
- },
- {
- "name": "Sign In Completed",
- "time": "2023-03-10T18:36:05.028Z",
- "properties": {
- "cause": "/redirector",
- "method": "GOOGLE",
- "region": "ON",
- "orderId": "6179367977099",
- "order_id": "6179367977099",
- "webhookurl": "https://my.test.com",
- "countingMethod": "standard",
- "is_first_time_signin": false
- },
- "external_id": "braze_test_user"
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ],
- "metadata": [
- {
- "jobId": 1
- },
- {
- "jobId": 2
- }
- ],
- "batched": true,
- "statusCode": 200,
- "destination": {
- "ID": "2N9UakqKF0D35wfzSeofIxPdL8X",
- "Name": "Braze-Test",
- "Config": {
- "appKey": "0e5440c3-226b-45d0-91b5-c64da56cde16",
- "blacklistedEvents": [],
- "dataCenter": "US-03",
- "enableNestedArrayOperations": false,
- "enableSubscriptionGroupInGroupCall": false,
- "eventFilteringOption": "disable",
- "oneTrustCookieCategories": [],
- "restApiKey": "0066a73e-d9b3-4d1f-b17d-8cf410505e36",
- "supportDedup": true,
- "trackAnonymousUser": true,
- "whitelistedEvents": []
- },
- "Enabled": true,
- "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg",
- "Transformations": [],
- "IsProcessorEnabled": true,
- "RevisionID": "2N9Uaf2tWq2QRmatBWQm03Rz6qX"
- }
- }
- ]
-}
diff --git a/test/__tests__/data/campaign_manager.json b/test/__tests__/data/campaign_manager.json
deleted file mode 100644
index 562c889118e..00000000000
--- a/test/__tests__/data/campaign_manager.json
+++ /dev/null
@@ -1,360 +0,0 @@
-[
- {
- "description": "Track - batch insert Call",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": "34245",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "value": "756",
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "quantity": "455678",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT",
- "requestType": "batchinsert"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "profileId": "5343234",
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- }
- },
- "output": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/34245/conversions/batchinsert",
- "headers": {
- "Authorization": "Bearer abcd1234",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchInsertRequest",
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "conversions": [
- {
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "timestampMicros": "1668624722000000",
- "floodlightActivityId": "456543345245",
- "quantity": "455678",
- "value": 756,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "treatmentForUnderage": false,
- "nonPersonalizedAd": false
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- },
- {
- "description": "Track - batch update Call",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": "34245",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "value": "756",
- "quantity": "455678",
- "gclid": "string",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT",
- "requestType": "batchupdate"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "profileId": "5343234",
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- }
- },
- "output": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/34245/conversions/batchupdate",
- "headers": {
- "Authorization": "Bearer abcd1234",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchUpdateRequest",
- "conversions": [
- {
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "timestampMicros": "1668624722000000",
- "floodlightActivityId": "456543345245",
- "quantity": "455678",
- "value": 756,
- "gclid": "string",
- "treatmentForUnderage": false,
- "nonPersonalizedAd": false
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- },
- {
- "description": "Track - batch insert Call",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": "34245",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "mobileDeviceId": "string",
- "value": "756",
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "quantity": "455678",
- "gclid": "string",
- "matchId": "string",
- "dclid": "string",
- "impressionId": "string",
- "requestType": "batchinsert"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "profileId": "5343234",
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- }
- },
- "output": {
- "statusCode": 400,
- "error": "[CAMPAIGN MANAGER (DCM)]: If encryptedUserId or encryptedUserIdCandidates is used, provide proper values for properties.encryptionEntityType , properties.encryptionSource and properties.encryptionEntityId",
- "statTags": {
- "destination": "blueshift",
- "stage": "transform",
- "scope": "exception"
- }
- }
- }
-]
diff --git a/test/__tests__/data/campaign_manager_proxy_input.json b/test/__tests__/data/campaign_manager_proxy_input.json
deleted file mode 100644
index 5eb5f162038..00000000000
--- a/test/__tests__/data/campaign_manager_proxy_input.json
+++ /dev/null
@@ -1,96 +0,0 @@
-[
- {
- "request": {
- "body": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/437689/conversions/batchupdate",
- "headers": {
- "Authorization": "Bearer abcd1234",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchInsertRequest",
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "conversions": [
- {
- "timestampMicros": "1668624722000000",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "mobileDeviceId": "string",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "gclid": "string",
- "matchId": "string",
- "dclid": "string",
- "impressionId": "string",
- "limitAdTracking": true,
- "childDirectedTreatment": true
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- }
- },
- {
- "request": {
- "body": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/437689/conversions/batchupdate",
- "headers": {
- "Authorization": "Bearer fgvbjghv",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchUpdateRequest",
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "conversions": [
- {
- "timestampMicros": "1668624722000000",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "mobileDeviceId": "string",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "gclid": "string",
- "matchId": "string",
- "dclid": "string",
- "impressionId": "string",
- "limitAdTracking": true,
- "childDirectedTreatment": true
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- }
- }
-]
diff --git a/test/__tests__/data/campaign_manager_proxy_output.json b/test/__tests__/data/campaign_manager_proxy_output.json
deleted file mode 100644
index c5dcc4559f3..00000000000
--- a/test/__tests__/data/campaign_manager_proxy_output.json
+++ /dev/null
@@ -1,51 +0,0 @@
-[
- {
- "output": {
- "destinationResponse": {
- "error": {
- "code": 403,
- "message": "The caller does not have permission",
- "errors": [
- {
- "message": "Invalid Credentials",
- "domain": "global",
- "reason": "authError",
- "location": "Authorization",
- "locationType": "header"
- }
- ],
- "status": "PERMISSION_DENIED"
- }
- },
- "message": "Campaign Manager: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during CAMPAIGN_MANAGER response transformation",
- "statTags": {
- "destType": "CAMPAIGN_MANAGER",
- "errorAt": "proxy",
- "scope": "exception",
- "stage": "responseTransform"
- },
- "status": 403
- }
- },
- {
- "output": {
- "status": 200,
- "message": "[CAMPAIGN_MANAGER Response Handler] - Request Processed Successfully",
- "destinationResponse": {
- "response": [
- {
- "adjustmentType": "ENHANCEMENT",
- "conversionAction": "customers/7693729833/conversionActions/874224905",
- "adjustmentDateTime": "2021-01-01 12:32:45-08:00",
- "gclidDateTimePair": {
- "gclid": "1234",
- "conversionDateTime": "2021-01-01 12:32:45-08:00"
- },
- "orderId": "12345"
- }
- ],
- "status": 200
- }
- }
- }
-]
diff --git a/test/__tests__/data/campaign_manager_router_input.json b/test/__tests__/data/campaign_manager_router_input.json
deleted file mode 100644
index 1a6bb84c85b..00000000000
--- a/test/__tests__/data/campaign_manager_router_input.json
+++ /dev/null
@@ -1,277 +0,0 @@
-[
- {
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": 437689,
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "quantity": "455678",
- "floodlightActivityId": "456543345245",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "limitAdTracking": true,
- "childDirectedTreatment": true,
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT",
- "requestType": "batchinsert"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2022-11-17T00:22:02.903+05:30"
- }
- },
- {
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": 437689,
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "quantity": "455678",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "limitAdTracking": true,
- "childDirectedTreatment": true,
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT",
- "requestType": "batchupdate"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2022-11-17T00:22:02.903+05:30"
- }
- },
- {
- "metadata": {
- "secret": {
- "access_token": "abcd1234",
- "refresh_token": "efgh5678",
- "developer_token": "ijkl91011"
- }
- },
- "destination": {
- "Config": {
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- },
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "id": "0572f78fa49c648e",
- "name": "generic_x86_arm",
- "type": "Android",
- "model": "AOSP on IA Emulator",
- "manufacturer": "Google",
- "adTrackingEnabled": true,
- "advertisingId": "44c97318-9040-4361-8bc7-4eb30f665ca8"
- },
- "traits": {
- "email": "alex@example.com",
- "phone": "+1-202-555-0146",
- "firstName": "John",
- "lastName": "Gomes",
- "city": "London",
- "state": "England",
- "countryCode": "GB",
- "postalCode": "EC3M",
- "streetAddress": "71 Cherry Court SOUTHAMPTON SO53 5PD UK"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "event": "Promotion Clicked",
- "type": "track",
- "originalTimestamp": "2022-11-17T00:22:02.903+05:30",
- "properties": {
- "profileId": 437689,
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "floodlightActivityId": "456543345245",
- "mobileDeviceId": "string",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "gclid": "string",
- "matchId": "string",
- "dclid": "string",
- "quantity": "455678",
- "impressionId": "string",
- "limitAdTracking": true,
- "childDirectedTreatment": true,
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "requestType": "randomValue"
- },
- "type": "track",
- "event": "event test",
- "anonymousId": "randomId",
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2022-11-17T00:22:02.903+05:30"
- }
- }
-]
diff --git a/test/__tests__/data/campaign_manager_router_output.json b/test/__tests__/data/campaign_manager_router_output.json
deleted file mode 100644
index 4f101bbdae5..00000000000
--- a/test/__tests__/data/campaign_manager_router_output.json
+++ /dev/null
@@ -1,153 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/437689/conversions/batchinsert",
- "headers": {
- "Authorization": "Bearer abcd1234",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchInsertRequest",
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "conversions": [
- {
- "nonPersonalizedAd": false,
- "treatmentForUnderage": false,
- "timestampMicros": "1668624722000000",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "quantity": "455678",
- "floodlightActivityId": "456543345245",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"],
- "limitAdTracking": true,
- "childDirectedTreatment": true
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "secret": {
- "access_token": "abcd1234",
- "developer_token": "ijkl91011",
- "refresh_token": "efgh5678"
- }
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "childDirectedTreatment": false,
- "limitAdTracking": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK",
- "treatmentForUnderage": false
- }
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://dfareporting.googleapis.com/dfareporting/v4/userprofiles/437689/conversions/batchupdate",
- "headers": {
- "Authorization": "Bearer abcd1234",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "kind": "dfareporting#conversionsBatchUpdateRequest",
- "encryptionInfo": {
- "kind": "dfareporting#encryptionInfo",
- "encryptionSource": "AD_SERVING",
- "encryptionEntityId": "3564523",
- "encryptionEntityType": "DCM_ACCOUNT"
- },
- "conversions": [
- {
- "nonPersonalizedAd": false,
- "treatmentForUnderage": false,
- "timestampMicros": "1668624722000000",
- "floodlightConfigurationId": "213123123",
- "ordinal": "string",
- "quantity": "455678",
- "floodlightActivityId": "456543345245",
- "value": 7,
- "encryptedUserIdCandidates": ["dfghjbnm"]
- }
- ]
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "secret": {
- "access_token": "abcd1234",
- "developer_token": "ijkl91011",
- "refresh_token": "efgh5678"
- }
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "childDirectedTreatment": false,
- "limitAdTracking": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK",
- "treatmentForUnderage": false
- }
- }
- },
- {
- "destination": {
- "Config": {
- "treatmentForUnderage": false,
- "limitAdTracking": false,
- "childDirectedTreatment": false,
- "nonPersonalizedAd": false,
- "rudderAccountId": "2EOknn1JNH7WK1MfNku4fGYKkRK"
- }
- },
- "batched": false,
- "error": "[CAMPAIGN MANAGER (DCM)]: properties.requestType must be one of batchinsert or batchupdate.",
- "metadata": [
- {
- "secret": {
- "access_token": "abcd1234",
- "developer_token": "ijkl91011",
- "refresh_token": "efgh5678"
- }
- }
- ],
- "statusCode": 400,
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- }
-]
diff --git a/test/__tests__/data/candu_input.json b/test/__tests__/data/candu_input.json
deleted file mode 100644
index cafe4bbb175..00000000000
--- a/test/__tests__/data/candu_input.json
+++ /dev/null
@@ -1,938 +0,0 @@
-[
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "identify",
- "sentAt": "2022-01-20T13:39:21.033Z",
- "userId": "user123456001",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T13:39:21.032Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "track",
- "event": "testEventWithoutProp",
- "sentAt": "2022-01-20T14:32:51.506Z",
- "userId": "user123456001",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "properties": {},
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:32:51.506Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "track",
- "sentAt": "2022-01-20T14:42:59.775Z",
- "userId": "",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": "127.0.0.1:7307"
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "1877191c-3537-46dc-a35a-e2a4d13ed3f7",
- "messageId": "fea245ef-6150-42c4-84e0-51fa68e71a88",
- "properties": {},
- "anonymousId": "d18df757-34aa-4f71-91a8-7f9ef2940963",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:42:25.343Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "page",
- "sentAt": "2022-01-20T15:30:57.470Z",
- "userId": "testUser1234",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": "127.0.0.1:7307"
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 632
- },
- "traits": {},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "aa193f3b-6d42-466f-a781-6a666cfe17c3",
- "messageId": "bf869c14-5f96-4cbc-94b2-3de9252c216b",
- "properties": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": "127.0.0.1:7307"
- },
- "anonymousId": "d18df757-34aa-4f71-91a8-7f9ef2940963",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T15:30:57.470Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": " "
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "track",
- "event": "testEventWithoutProp",
- "sentAt": "2022-01-20T14:32:51.506Z",
- "userId": "user123456001",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "properties": {},
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:32:51.506Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "event": "testEventWithoutProp",
- "sentAt": "2022-01-20T14:32:51.506Z",
- "userId": "user123456001",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "properties": {},
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:32:51.506Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "identify",
- "sentAt": "2022-01-20T13:39:21.033Z",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female",
- "userId": 2399229
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T13:39:21.032Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "track",
- "event": "testEventWithoutProp",
- "sentAt": "2022-01-20T14:32:51.506Z",
- "userId": "user123456001",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "properties": ["1234", "5678", "91011"],
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:32:51.506Z"
- }
- },
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "type": "track",
- "event": "testEventWithoutProp",
- "sentAt": "2022-01-20T14:32:51.506Z",
- "userId": "",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.2.20",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "path": "/Testing/App_for_LaunchDarkly/ourSdk.html",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html",
- "referrer": "http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:7307",
- "initial_referring_domain": ""
- },
- "locale": "en-US",
- "screen": {
- "width": 1440,
- "height": 900,
- "density": 2,
- "innerWidth": 536,
- "innerHeight": 689
- },
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.2.20"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
- },
- "rudderId": "553b5522-c575-40a7-8072-9741c5f9a647",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "properties": [],
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2022-01-20T14:32:51.506Z"
- }
- }
-]
diff --git a/test/__tests__/data/candu_output.json b/test/__tests__/data/candu_output.json
deleted file mode 100644
index 5f6ee58825f..00000000000
--- a/test/__tests__/data/candu_output.json
+++ /dev/null
@@ -1,209 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "type": "identify",
- "userId": "user123456001",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04",
- "context": {
- "source": "RudderStack"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "type": "track",
- "event": "testEventWithoutProp",
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "properties": {},
- "userId": "user123456001",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "context": {
- "source": "RudderStack"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Missing required value from \"event\"",
- "statTags": {
- "destination": "candu",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "[CANDU]:: Message type page not supported.",
- "statTags": {
- "destination": "candu",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "[CANDU]:: apiKey cannot be empty.",
- "statTags": {
- "destination": "candu",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "statusCode": 400,
- "error": "[CANDU]:: Message Type is not present. Aborting message.",
- "statTags": {
- "destination": "candu",
- "stage": "transform",
- "scope": "exception"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female",
- "userId": 2399229
- },
- "userId": "2399229",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "messageId": "831f1fa5-de84-4f22-880a-4c3f23fc3f04",
- "type": "identify",
- "context": {
- "source": "RudderStack"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "event": "testEventWithoutProp",
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "properties": ["1234", "5678", "91011"],
- "userId": "user123456001",
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "type": "track",
- "context": {
- "source": "RudderStack"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "event": "testEventWithoutProp",
- "traits": {
- "city": "Pune",
- "name": "First User",
- "email": "firstUser@testmail.com",
- "title": "VP",
- "gender": "female"
- },
- "properties": [],
- "anonymousId": "bf412108-0357-4330-b119-7305e767823c",
- "messageId": "e9f3dfb4-562c-48f4-b0cf-85782dfc9b1e",
- "type": "track",
- "context": {
- "source": "RudderStack"
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
-]
diff --git a/test/__tests__/data/candu_router_input.json b/test/__tests__/data/candu_router_input.json
deleted file mode 100644
index 04eb5163278..00000000000
--- a/test/__tests__/data/candu_router_input.json
+++ /dev/null
@@ -1,105 +0,0 @@
-[
- {
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "FXLkLUEhGJyvmY4"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "metadata": {
- "jobId": 1
- },
- "message": {
- "anonymousId": "a1b2c3d4e5f6g7h8i9j10",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "device": {
- "adTrackingEnabled": true,
- "advertisingId": "",
- "id": "",
- "manufacturer": "Google",
- "model": "AOSP on IA Emulator",
- "name": "generic_x86_arm",
- "attTrackingStatus": 3
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "locale": "en-US",
- "os": {
- "name": "watchos"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "sampath@gmail.com",
- "name": "Joker",
- "Gender": "male",
- "foo": {
- "foo": "bar"
- }
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
- },
- "event": "product added",
- "integrations": {
- "All": true
- },
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "originalTimestamp": "2020-01-17T04:53:51.185Z",
- "receivedAt": "2020-01-17T10:23:52.688+05:30",
- "request_ip": "[::1]:64059",
- "sentAt": "2020-01-17T04:53:52.667Z",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "type": "identify",
- "userId": "sampath"
- }
- }
-]
diff --git a/test/__tests__/data/candu_router_output.json b/test/__tests__/data/candu_router_output.json
deleted file mode 100644
index ecabcbfa9ae..00000000000
--- a/test/__tests__/data/candu_router_output.json
+++ /dev/null
@@ -1,82 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.candu.ai/api/eventWebhook",
- "headers": {
- "Authorization": "Basic RlhMa0xVRWhHSnl2bVk0",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "traits": {
- "email": "sampath@gmail.com",
- "name": "Joker",
- "Gender": "male",
- "foo": { "foo": "bar" }
- },
- "type": "identify",
- "userId": "sampath",
- "anonymousId": "a1b2c3d4e5f6g7h8i9j10",
- "timestamp": "2020-01-17T10:23:51.206+05:30",
- "messageId": "ea5cfab2-3961-4d8a-8187-3d1858c90a9f",
- "context": { "source": "RudderStack" }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 1
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "ID": "23uZJcllEOBx8GbZ31qYzoML8Up",
- "Name": "Candu local",
- "DestinationDefinition": {
- "ID": "23uYPwdkxT7pUNDAiCVNK3aU0sT",
- "Name": "CANDU",
- "DisplayName": "Candu",
- "Config": {
- "destConfig": { "defaultConfig": ["apiKey"] },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "blackListedEvents",
- "whiteListedEvents",
- "oneTrustCookieCategories"
- ],
- "saveDestinationResponse": true,
- "secretKeys": ["apiKey"],
- "supportedMessageTypes": ["identify", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "transformAt": "router",
- "transformAtV1": "router"
- },
- "ResponseRules": {}
- },
- "Config": { "apiKey": "FXLkLUEhGJyvmY4" },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- }
-]
diff --git a/test/__tests__/data/canny_source_input.json b/test/__tests__/data/canny_source_input.json
index da172072daa..55474732099 100644
--- a/test/__tests__/data/canny_source_input.json
+++ b/test/__tests__/data/canny_source_input.json
@@ -4,11 +4,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -22,7 +22,13 @@
"category": null,
"commentCount": 0,
"created": "2022-07-28T10:52:46.172Z",
- "customFields": [{ "id": "62e13820d7949d44b92d3876", "name": "abc", "value": "123" }],
+ "customFields": [
+ {
+ "id": "62e13820d7949d44b92d3876",
+ "name": "abc",
+ "value": "123"
+ }
+ ],
"details": "Array of images",
"eta": null,
"id": "62e26a7e1d4ea13c124337bd",
@@ -45,11 +51,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -65,11 +71,11 @@
"created": "2022-07-26T08:18:52.459Z",
"deletedBy": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"details": "This is the post's details",
@@ -91,11 +97,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -119,7 +125,7 @@
"key": "TES-2",
"status": "To Do",
"summary": "Canny Source Testing",
- "url": "https://rudderstack-rohith.atlassian.net/browse/TES-2"
+ "url": "https://rudderstack-user.atlassian.net/browse/TES-2"
},
"owner": null,
"score": 2,
@@ -136,11 +142,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -164,7 +170,7 @@
"key": "TES-3",
"status": "To Do",
"summary": "Images testing",
- "url": "https://rudderstack-rohith.atlassian.net/browse/TES-3"
+ "url": "https://rudderstack-user.atlassian.net/browse/TES-3"
},
"owner": null,
"score": 1,
@@ -182,11 +188,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -206,11 +212,11 @@
"changer": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"commentCount": 1,
@@ -238,11 +244,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -261,11 +267,11 @@
"post": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -293,11 +299,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -314,11 +320,11 @@
"post": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -358,11 +364,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -383,11 +389,11 @@
"voter": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
}
},
@@ -411,11 +417,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -443,11 +449,11 @@
"voter": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
}
},
@@ -459,11 +465,11 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": "sampleuserId"
},
"board": {
@@ -477,7 +483,13 @@
"category": null,
"commentCount": 0,
"created": "2022-07-28T10:52:46.172Z",
- "customFields": [{ "id": "62e13820d7949d44b92d3876", "name": "abc", "value": "123" }],
+ "customFields": [
+ {
+ "id": "62e13820d7949d44b92d3876",
+ "name": "abc",
+ "value": "123"
+ }
+ ],
"details": "Array of images",
"eta": null,
"id": "62e26a7e1d4ea13c124337bd",
@@ -512,11 +524,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -537,11 +549,11 @@
"voter": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": "123"
}
},
@@ -565,11 +577,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -600,8 +612,8 @@
"email": null,
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
}
},
@@ -613,10 +625,10 @@
"object": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"board": {
@@ -632,11 +644,11 @@
"created": "2022-07-26T08:18:52.459Z",
"deletedBy": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"details": "This is the post's details",
diff --git a/test/__tests__/data/canny_source_output.json b/test/__tests__/data/canny_source_output.json
index 1c157df3778..67f919ba9bb 100644
--- a/test/__tests__/data/canny_source_output.json
+++ b/test/__tests__/data/canny_source_output.json
@@ -1,8 +1,10 @@
[
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "post.created",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -14,10 +16,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -41,7 +43,13 @@
"category": null,
"commentCount": 0,
"created": "2022-07-28T10:52:46.172Z",
- "customFields": [{ "id": "62e13820d7949d44b92d3876", "name": "abc", "value": "123" }],
+ "customFields": [
+ {
+ "id": "62e13820d7949d44b92d3876",
+ "name": "abc",
+ "value": "123"
+ }
+ ],
"details": "Array of images",
"eta": null,
"id": "62e26a7e1d4ea13c124337bd",
@@ -59,9 +67,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "post.deleted",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -73,10 +83,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -102,11 +112,11 @@
"created": "2022-07-26T08:18:52.459Z",
"deletedBy": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"details": "This is the post's details",
@@ -123,9 +133,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "post.jira_issue_linked",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -137,10 +149,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -174,7 +186,7 @@
"key": "TES-2",
"status": "To Do",
"summary": "Canny Source Testing",
- "url": "https://rudderstack-rohith.atlassian.net/browse/TES-2"
+ "url": "https://rudderstack-user.atlassian.net/browse/TES-2"
},
"objectType": "post",
"owner": null,
@@ -186,9 +198,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "post.jira_issue_unlinked",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -200,10 +214,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -217,7 +231,6 @@
"type": "track",
"properties": {
"objectType": "post",
-
"by": null,
"board": {
"created": "2022-07-25T12:11:19.895Z",
@@ -239,7 +252,7 @@
"key": "TES-3",
"status": "To Do",
"summary": "Images testing",
- "url": "https://rudderstack-rohith.atlassian.net/browse/TES-3"
+ "url": "https://rudderstack-user.atlassian.net/browse/TES-3"
},
"owner": null,
"score": 1,
@@ -250,9 +263,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "post.status_changed",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -265,10 +280,10 @@
"traits": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -282,7 +297,6 @@
"type": "track",
"properties": {
"objectType": "post",
-
"board": {
"created": "2022-07-25T12:11:19.895Z",
"id": "62de88676bc28b44aaaf25cc",
@@ -300,11 +314,11 @@
"changer": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"commentCount": 1,
@@ -326,9 +340,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "comment.created",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -340,10 +356,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -357,7 +373,6 @@
"type": "track",
"properties": {
"objectType": "comment",
-
"board": {
"created": "2022-07-25T12:11:19.895Z",
"id": "62de88676bc28b44aaaf25cc",
@@ -374,11 +389,11 @@
"post": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -400,9 +415,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "comment.deleted",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -414,10 +431,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -431,7 +448,6 @@
"type": "track",
"properties": {
"objectType": "comment",
-
"board": {
"created": "2022-07-25T12:11:19.895Z",
"id": "62de88676bc28b44aaaf25cc",
@@ -446,11 +462,11 @@
"post": {
"author": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -472,9 +488,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "vote.created",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -487,10 +505,10 @@
"traits": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -518,11 +536,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -543,9 +561,11 @@
}
},
{
- "anonymousId": "d6a9d06e8a464324d448003ff0467d971a55ca2950e11fc51faaec4e2850ecc6",
+ "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd",
"event": "vote.deleted",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -558,10 +578,10 @@
"traits": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -589,11 +609,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
@@ -623,7 +643,9 @@
{
"userId": "sampleuserId",
"event": "post.created",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -635,10 +657,10 @@
},
"traits": {
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -662,7 +684,13 @@
"category": null,
"commentCount": 0,
"created": "2022-07-28T10:52:46.172Z",
- "customFields": [{ "id": "62e13820d7949d44b92d3876", "name": "abc", "value": "123" }],
+ "customFields": [
+ {
+ "id": "62e13820d7949d44b92d3876",
+ "name": "abc",
+ "value": "123"
+ }
+ ],
"details": "Array of images",
"eta": null,
"id": "62e26a7e1d4ea13c124337bd",
@@ -682,7 +710,9 @@
{
"userId": "123",
"event": "vote.created",
- "integrations": { "Canny": false },
+ "integrations": {
+ "Canny": false
+ },
"context": {
"library": {
"name": "unknown",
@@ -695,10 +725,10 @@
"traits": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1"
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser"
},
"externalId": [
{
@@ -726,11 +756,11 @@
"author": {
"avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png",
"created": "2022-07-15T11:16:32.648Z",
- "email": "rohithkaza@rudderstack.com",
+ "email": "test@rudderstack.com",
"id": "62d14c90fff7c80d0ec08375",
"isAdmin": true,
- "name": "Rohith Kumar Kaza",
- "url": "https://rudder.canny.io/admin/users/rohith-kumar-kaza-1",
+ "name": "Rudder Test",
+ "url": "https://rudder.canny.io/admin/users/dummyUser",
"userID": null
},
"by": null,
diff --git a/test/__tests__/data/clevertap_input.json b/test/__tests__/data/clevertap_input.json
index e8aaa4b528f..e0bb1241e23 100644
--- a/test/__tests__/data/clevertap_input.json
+++ b/test/__tests__/data/clevertap_input.json
@@ -2,7 +2,56 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
+ "accountId": "476550467",
+ "trackAnonymous": true,
+ "enableObjectIdMapping": false
+ }
+ },
+ "message": {
+ "channel": "web",
+ "messageId": "84e26acc-56a5-4835-8233-591137fca468",
+ "session_id": "3049dc4c-5a95-4ccd-a3e7-d74a7e411f22",
+ "originalTimestamp": "2019-10-14T09:03:17.562Z",
+ "anonymousId": "anon_id",
+ "type": "identify",
+ "traits": {
+ "anonymousId": "anon_id",
+ "email": "jamesDoe@gmail.com",
+ "name": "James Doe",
+ "phone": "92374162212",
+ "gender": "M",
+ "employed": true,
+ "birthday": "1614775793",
+ "education": "Science",
+ "graduate": true,
+ "married": true,
+ "customerType": "Prime",
+ "msg_push": true,
+ "msgSms": true,
+ "msgemail": true,
+ "msgwhatsapp": false,
+ "custom_tags": ["Test_User", "Interested_User", "DIY_Hobby"],
+ "custom_mappings": {
+ "Office": "Trastkiv",
+ "Country": "Russia"
+ },
+ "address": {
+ "city": "kolkata",
+ "country": "India",
+ "postalCode": 789223,
+ "state": "WB",
+ "street": ""
+ }
+ },
+ "integrations": { "All": true },
+ "sentAt": "2019-10-14T09:03:22.563Z"
+ }
+ },
+ {
+ "destination": {
+ "Config": {
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -65,7 +114,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -91,7 +140,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -116,7 +165,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -139,7 +188,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -161,7 +210,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -184,7 +233,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -279,7 +328,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": false,
"enableObjectIdMapping": false
@@ -302,7 +351,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -365,7 +414,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -428,7 +477,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -499,7 +548,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -566,7 +615,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -587,7 +636,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -608,7 +657,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -682,7 +731,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -750,7 +799,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
@@ -772,7 +821,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -850,7 +899,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -930,7 +979,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": false
@@ -1015,7 +1064,7 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "passcode": "sample_passcode",
"accountId": "476550467",
"trackAnonymous": true,
"enableObjectIdMapping": true
diff --git a/test/__tests__/data/clevertap_output.json b/test/__tests__/data/clevertap_output.json
index fc6a4ee2c35..947cc2da216 100644
--- a/test/__tests__/data/clevertap_output.json
+++ b/test/__tests__/data/clevertap_output.json
@@ -6,7 +6,52 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
+ "Content-Type": "application/json"
+ },
+ "params": {},
+ "body": {
+ "JSON": {
+ "d": [
+ {
+ "type": "profile",
+ "profileData": {
+ "Email": "jamesDoe@gmail.com",
+ "Name": "James Doe",
+ "Phone": "92374162212",
+ "Gender": "M",
+ "Employed": true,
+ "DOB": "1614775793",
+ "Education": "Science",
+ "Married": true,
+ "Customer Type": "Prime",
+ "graduate": true,
+ "msg_push": true,
+ "msgSms": true,
+ "msgemail": true,
+ "msgwhatsapp": false,
+ "custom_tags": "[\"Test_User\",\"Interested_User\",\"DIY_Hobby\"]",
+ "custom_mappings": "{\"Office\":\"Trastkiv\",\"Country\":\"Russia\"}",
+ "address": "{\"city\":\"kolkata\",\"country\":\"India\",\"postalCode\":789223,\"state\":\"WB\",\"street\":\"\"}"
+ },
+ "identity": "anon_id"
+ }
+ ]
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ },
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://api.clevertap.com/1/upload",
+ "headers": {
+ "X-CleverTap-Account-Id": "476550467",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -69,7 +114,7 @@
"params": {},
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"version": "1",
@@ -99,7 +144,7 @@
"params": {},
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"version": "1",
@@ -130,7 +175,7 @@
"params": {},
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"version": "1",
@@ -149,7 +194,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -212,7 +257,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -257,7 +302,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -302,7 +347,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -334,7 +379,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -365,7 +410,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -414,7 +459,7 @@
"params": {},
"headers": {
"Content-Type": "application/json",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"X-CleverTap-Account-Id": "476550467"
},
"version": "1",
@@ -445,7 +490,7 @@
"params": {},
"headers": {
"Content-Type": "application/json",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"X-CleverTap-Account-Id": "476550467"
},
"version": "1",
@@ -458,7 +503,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -505,7 +550,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -537,7 +582,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -585,7 +630,7 @@
"params": {},
"headers": {
"Content-Type": "application/json",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"X-CleverTap-Account-Id": "476550467"
},
"version": "1",
@@ -598,7 +643,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
@@ -645,7 +690,7 @@
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
"X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Passcode": "sample_passcode",
"Content-Type": "application/json"
},
"params": {},
diff --git a/test/__tests__/data/clevertap_router_input.json b/test/__tests__/data/clevertap_router_input.json
index 8605531fc4e..af38871af94 100644
--- a/test/__tests__/data/clevertap_router_input.json
+++ b/test/__tests__/data/clevertap_router_input.json
@@ -2,8 +2,8 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
- "accountId": "476550467",
+ "passcode": "dummypasscode",
+ "accountId": "dummyAccountId",
"trackAnonymous": true,
"enableObjectIdMapping": true
}
@@ -87,8 +87,8 @@
{
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
- "accountId": "476550467",
+ "passcode": "dummypasscode",
+ "accountId": "dummyAccountId",
"trackAnonymous": true,
"enableObjectIdMapping": true
}
@@ -107,5 +107,33 @@
"type": "track",
"anonymousId": "cd3a4439-7df0-4475-acb9-6659c7c4dfe3"
}
+ },
+ {
+ "destination": {
+ "Config": {
+ "passcode": "dummypasscode",
+ "accountId": "dummyAccountId",
+ "trackAnonymous": true
+ }
+ },
+ "metadata": {
+ "jobId": 3
+ },
+ "message": {
+ "type": "group",
+ "anonymousId": "anon-id-new",
+ "name": "Rudder",
+ "properties": {
+ "title": "Home",
+ "path": "/"
+ },
+ "context": {
+ "ip": "14.5.67.21",
+ "library": {
+ "name": "http"
+ }
+ },
+ "timestamp": "2020-02-02T00:23:09.544Z"
+ }
}
]
diff --git a/test/__tests__/data/clevertap_router_output.json b/test/__tests__/data/clevertap_router_output.json
index 7c47dddbbda..3f726652e15 100644
--- a/test/__tests__/data/clevertap_router_output.json
+++ b/test/__tests__/data/clevertap_router_output.json
@@ -7,8 +7,8 @@
"batched": true,
"endpoint": "https://api.clevertap.com/1/upload",
"headers": {
- "X-CleverTap-Account-Id": "476550467",
- "X-CleverTap-Passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
+ "X-CleverTap-Account-Id": "dummyAccountId",
+ "X-CleverTap-Passcode": "dummypasscode",
"Content-Type": "application/json"
},
"params": {},
@@ -76,11 +76,32 @@
"statusCode": 200,
"destination": {
"Config": {
- "passcode": "fbee74a147828e2932c701d19dc1f2dcfa4ac0048be3aa3a88d427090a59dc1c0fa002f1",
- "accountId": "476550467",
+ "passcode": "dummypasscode",
+ "accountId": "dummyAccountId",
"trackAnonymous": true,
"enableObjectIdMapping": true
}
}
+ },
+ {
+ "metadata": [
+ {
+ "jobId": 3
+ }
+ ],
+ "batched": false,
+ "statusCode": 400,
+ "error": "Message type not supported",
+ "statTags": {
+ "errorCategory": "dataValidation",
+ "errorType": "instrumentation"
+ },
+ "destination": {
+ "Config": {
+ "passcode": "dummypasscode",
+ "accountId": "dummyAccountId",
+ "trackAnonymous": true
+ }
+ }
}
]
diff --git a/test/__tests__/data/confluent_cloud_input.json b/test/__tests__/data/confluent_cloud_input.json
deleted file mode 100644
index cc2ae736d65..00000000000
--- a/test/__tests__/data/confluent_cloud_input.json
+++ /dev/null
@@ -1,396 +0,0 @@
-[
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "Purchase",
- "integrations": {
- "All": true
- },
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "originalTimestamp": "2020-05-21T10:23:15.984Z",
- "properties": {
- "currency": "USD",
- "revenue": 100
- },
- "receivedAt": "2020-05-21T15:53:16.013+05:30",
- "request_ip": "[::1]:59371",
- "sentAt": "2020-05-21T10:23:15.985Z",
- "timestamp": "2020-05-21T15:53:16.012+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 46,
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "originalTimestamp": "2020-05-21T10:23:15.975Z",
- "properties": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:58616",
- "sentAt": "2020-05-21T10:23:15.975Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "page",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 47,
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "originalTimestamp": "2020-05-21T10:23:15.979Z",
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59372",
- "sentAt": "2020-05-21T10:23:15.979Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "identify",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 48,
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track without property",
- "integrations": {
- "All": true
- },
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "originalTimestamp": "2020-05-21T10:23:15.981Z",
- "properties": {},
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59374",
- "sentAt": "2020-05-21T10:23:15.981Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 49,
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- },
- {
- "destination": {
- "ID": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "Name": "Azure Event Hub",
- "DestinationDefinition": {
- "ID": "1cCs4qQ72QY8vovP7BlJ47mkjBh",
- "Name": "AZURE_EVENT_HUB",
- "DisplayName": "Azure Event Hub",
- "Config": {
- "excludeKeys": [],
- "includeKeys": []
- }
- },
- "Config": null,
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "originalTimestamp": "2020-05-21T10:23:15.982Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59373",
- "sentAt": "2020-05-21T10:23:15.983Z",
- "timestamp": "2020-05-21T15:53:16.013+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "metadata": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "destinationId": "1cCz8hts5rp3YWglzhU1GPmVdjE",
- "destinationType": "AZURE_EVENT_HUB",
- "jobId": 50,
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "sourceId": "1bqCEGibwCvR7F0acuLzbEMQYIC"
- }
- }
-]
diff --git a/test/__tests__/data/confluent_cloud_output.json b/test/__tests__/data/confluent_cloud_output.json
deleted file mode 100644
index 7bac8eca74c..00000000000
--- a/test/__tests__/data/confluent_cloud_output.json
+++ /dev/null
@@ -1,276 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "Purchase",
- "integrations": {
- "All": true
- },
- "messageId": "ce46866c-6f19-42f0-86cb-18c51863b817",
- "originalTimestamp": "2020-05-21T10:23:15.984Z",
- "properties": {
- "currency": "USD",
- "revenue": 100
- },
- "receivedAt": "2020-05-21T15:53:16.013+05:30",
- "request_ip": "[::1]:59371",
- "sentAt": "2020-05-21T10:23:15.985Z",
- "timestamp": "2020-05-21T15:53:16.012+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "e02dafb0-9df8-4fa2-becd-f4d8617956a4",
- "originalTimestamp": "2020-05-21T10:23:15.975Z",
- "properties": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:58616",
- "sentAt": "2020-05-21T10:23:15.975Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "page",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "integrations": {
- "All": true
- },
- "messageId": "41b62b30-db5d-450c-98ed-cec14ead27cc",
- "originalTimestamp": "2020-05-21T10:23:15.979Z",
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59372",
- "sentAt": "2020-05-21T10:23:15.979Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "identify",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track without property",
- "integrations": {
- "All": true
- },
- "messageId": "c409577d-5dd4-430a-8965-a20aed7b9c9e",
- "originalTimestamp": "2020-05-21T10:23:15.981Z",
- "properties": {},
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59374",
- "sentAt": "2020-05-21T10:23:15.981Z",
- "timestamp": "2020-05-21T15:53:16.014+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- },
- {
- "message": {
- "anonymousId": "d36981e7-6413-4862-9bb9-b8595fb3d0d4",
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.1"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.1"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "page": {
- "path": "/tests/html/index7.html",
- "referrer": "http://localhost:1111/tests/html/",
- "search": "",
- "title": "",
- "url": "http://localhost:1111/tests/html/index7.html"
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "age": 23,
- "email": "test@kinesis.com",
- "firstname": "Test Kinesis"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
- },
- "event": "test track with property",
- "integrations": {
- "All": true
- },
- "messageId": "f8b6e882-3186-446a-b589-51eba60930d7",
- "originalTimestamp": "2020-05-21T10:23:15.982Z",
- "properties": {
- "test_prop_1": "test prop",
- "test_prop_2": 1232
- },
- "receivedAt": "2020-05-21T15:53:16.014+05:30",
- "request_ip": "[::1]:59373",
- "sentAt": "2020-05-21T10:23:15.983Z",
- "timestamp": "2020-05-21T15:53:16.013+05:30",
- "type": "track",
- "userId": "user-12345"
- },
- "userId": "user-12345"
- }
-]
diff --git a/test/__tests__/data/courier.json b/test/__tests__/data/courier.json
deleted file mode 100644
index 980d6c4b68a..00000000000
--- a/test/__tests__/data/courier.json
+++ /dev/null
@@ -1,218 +0,0 @@
-[
- {
- "description": "Invalid Configuration (missing api key)",
- "input": {
- "message": {
- "type": "track",
- "channel": "web",
- "event": "Product Added",
- "properties": {},
- "context": {},
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35"
- },
- "destination": {
- "Config": {}
- }
- },
- "output": {
- "error": "apiKey is required"
- }
- },
- {
- "description": "Identify call",
- "input": {
- "message": {
- "context": {
- "ip": "8.8.8.8"
- },
- "traits": {
- "name": "Joe Doe",
- "email": "joe@example.com",
- "plan": "basic",
- "age": 27
- },
- "type": "identify",
- "userId": "userIdTest",
- "originalTimestamp": "2022-10-17T15:53:10.566+05:30",
- "messageId": "8d04cc30-fc15-49bd-901f-c5c3f72a7d82"
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- }
- },
- "output": {
- "body": {
- "FORM": {},
- "JSON": {
- "context": {
- "ip": "8.8.8.8"
- },
- "traits": {
- "name": "Joe Doe",
- "email": "joe@example.com",
- "plan": "basic",
- "age": 27
- },
- "type": "identify",
- "userId": "userIdTest",
- "originalTimestamp": "2022-10-17T15:53:10.566+05:30",
- "messageId": "8d04cc30-fc15-49bd-901f-c5c3f72a7d82"
- },
- "JSON_ARRAY": {},
- "XML": {}
- },
- "endpoint": "https://api.courier.com/inbound/rudderstack",
- "files": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Bearer test-api-key"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- }
- },
- {
- "description": "Identify call with traits inside context but not at root level",
- "input": {
- "message": {
- "context": {
- "ip": "8.8.8.8",
- "traits": {
- "name": "Joe Doe",
- "email": "joe@example.com",
- "plan": "basic",
- "age": 27
- }
- },
- "type": "identify",
- "userId": "userIdTest",
- "originalTimestamp": "2022-10-17T15:53:10.566+05:30",
- "messageId": "8d04cc30-fc15-49bd-901f-c5c3f72a7d82"
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- }
- },
- "output": {
- "body": {
- "FORM": {},
- "JSON": {
- "context": {
- "ip": "8.8.8.8",
- "traits": {
- "name": "Joe Doe",
- "email": "joe@example.com",
- "plan": "basic",
- "age": 27
- }
- },
- "traits": {
- "name": "Joe Doe",
- "email": "joe@example.com",
- "plan": "basic",
- "age": 27
- },
- "type": "identify",
- "userId": "userIdTest",
- "originalTimestamp": "2022-10-17T15:53:10.566+05:30",
- "messageId": "8d04cc30-fc15-49bd-901f-c5c3f72a7d82"
- },
- "JSON_ARRAY": {},
- "XML": {}
- },
- "endpoint": "https://api.courier.com/inbound/rudderstack",
- "files": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Bearer test-api-key"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- }
- },
- {
- "description": "Identify call without traits",
- "input": {
- "message": {
- "context": {
- "ip": "8.8.8.8"
- },
- "type": "identify",
- "userId": "userIdTest",
- "originalTimestamp": "2022-10-17T15:53:10.566+05:30",
- "messageId": "8d04cc30-fc15-49bd-901f-c5c3f72a7d82"
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- }
- },
- "output": {
- "error": "traits is a required field for identify call"
- }
- },
- {
- "description": "Track call",
- "input": {
- "message": {
- "context": {
- "ip": "8.8.8.8"
- },
- "event": "trackTest",
- "properties": {
- "activity": "checkout"
- },
- "userId": "userIdTest",
- "type": "track",
- "messageId": "3c0abc14-96a2-4aed-9dfc-ee463832cc24",
- "originalTimestamp": "2022-10-17T15:32:44.202+05:30"
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- }
- },
- "output": {
- "body": {
- "FORM": {},
- "JSON": {
- "context": {
- "ip": "8.8.8.8"
- },
- "event": "trackTest",
- "properties": {
- "activity": "checkout"
- },
- "userId": "userIdTest",
- "type": "track",
- "messageId": "3c0abc14-96a2-4aed-9dfc-ee463832cc24",
- "originalTimestamp": "2022-10-17T15:32:44.202+05:30"
- },
- "JSON_ARRAY": {},
- "XML": {}
- },
- "endpoint": "https://api.courier.com/inbound/rudderstack",
- "files": {},
- "headers": {
- "Content-Type": "application/json",
- "Authorization": "Bearer test-api-key"
- },
- "method": "POST",
- "params": {},
- "type": "REST",
- "version": "1"
- }
- }
-]
diff --git a/test/__tests__/data/courier_router.json b/test/__tests__/data/courier_router.json
deleted file mode 100644
index 54385c82713..00000000000
--- a/test/__tests__/data/courier_router.json
+++ /dev/null
@@ -1,120 +0,0 @@
-[
- {
- "input": [
- {
- "message": {
- "type": "track",
- "channel": "web",
- "event": "Product Added",
- "userId": "test123",
- "properties": { "price": 999, "quantity": 1 },
- "context": { "traits": { "firstName": "John", "age": 27 } },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35"
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- },
- "metadata": {
- "jobId": 1
- }
- },
- {
- "message": {
- "type": "track",
- "channel": "web",
- "event": "Product Added",
- "properties": {},
- "context": {},
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35"
- },
- "destination": {
- "Config": {
- "sdkKey": "test-sdk-key",
- "trackKnownUsers": false,
- "nonInteraction": false,
- "listen": false,
- "trackCategorizedPages": true,
- "trackNamedPages": true
- }
- },
- "metadata": {
- "jobId": 2
- }
- }
- ],
- "output": [
- {
- "batched": false,
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://api.courier.com/inbound/rudderstack",
- "headers": {
- "Authorization": "Bearer test-api-key",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "type": "track",
- "channel": "web",
- "event": "Product Added",
- "userId": "test123",
- "properties": { "price": 999, "quantity": 1 },
- "context": { "traits": { "firstName": "John", "age": 27 } },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35"
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {}
- },
- "destination": {
- "Config": {
- "apiKey": "test-api-key"
- }
- },
- "metadata": [
- {
- "jobId": 1
- }
- ],
- "statusCode": 200
- },
- {
- "batched": false,
- "error": "apiKey is required",
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "configuration"
- },
- "statusCode": 400,
- "destination": {
- "Config": {
- "sdkKey": "test-sdk-key",
- "trackKnownUsers": false,
- "nonInteraction": false,
- "listen": false,
- "trackCategorizedPages": true,
- "trackNamedPages": true
- }
- }
- }
- ]
- }
-]
diff --git a/test/__tests__/data/criteo_audience.json b/test/__tests__/data/criteo_audience.json
deleted file mode 100644
index bae8a8750bb..00000000000
--- a/test/__tests__/data/criteo_audience.json
+++ /dev/null
@@ -1,940 +0,0 @@
-[
- {
- "description": "Adding email audienceType",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21",
- "library": {
- "name": "http"
- }
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34894",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34894/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "email",
- "identifiers": ["alex@email.com", "amy@email.com", "van@email.com"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ]
- },
- {
- "description": "Adding madid audienceType",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21"
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34895",
- "audienceType": "madid"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34895/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "madid",
- "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ]
- },
- {
- "description": "Adding and removing madid audienceType",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ],
- "remove": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21"
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "madid"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "madid",
- "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "remove",
- "identifierType": "madid",
- "identifiers": ["sample_madid"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ]
- },
- {
- "description": "Adding and removing identityLink audienceType",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ],
- "remove": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21"
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "identityLink"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "identityLink",
- "identifiers": ["text.com", "yahoo.com", "abc.com"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "remove",
- "identifierType": "identityLink",
- "identifiers": ["text.com"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ]
- },
- {
- "description": "Adding and removing gum audienceType",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sample_gum1"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sample_gum2"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sample_gum3"
- }
- ],
- "remove": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sample_gum3"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21"
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "gum",
- "gumCallerId": "329739"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "gum",
- "identifiers": ["sample_gum1", "sample_gum2", "sample_gum3"],
- "internalIdentifiers": false,
- "gumCallerId": "329739"
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "remove",
- "identifierType": "gum",
- "identifiers": ["sample_gum3"],
- "internalIdentifiers": false,
- "gumCallerId": "329739"
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ]
- },
- {
- "description": "Unsupported message type",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "identify",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21",
- "library": {
- "name": "http"
- }
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": {
- "error": "Event type identify is not supported"
- }
- },
- {
- "description": "Properties is not present in the message",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- },
- "message": {
- "type": "audiencelist",
- "sentAt": "2021-01-03T17:02:53.195Z",
- "userId": "ujjwal27",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": "1.12.3"
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.1.11",
- "namespace": "com.rudderlabs.javascript"
- },
- "traits": {
- "brand": "John Players",
- "price": "15000",
- "firstName": "Ujjwal",
- "email": "ujjwal@rudderstack.com",
- "userId": "ujjwal27"
- },
- "locale": "en-US",
- "device": {
- "token": "token",
- "id": "id",
- "type": "ios"
- },
- "screen": {
- "density": 2
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.11"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"
- },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35",
- "originalTimestamp": "2021-01-03T17:02:53.193Z"
- }
- },
- "output": {
- "error": "Message properties is not present. Aborting message."
- }
- },
- {
- "description": "Payload without listData",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- },
- "message": {
- "event": "add_to_Cart",
- "type": "track",
- "sentAt": "2021-01-03T17:02:53.195Z",
- "userId": "ujjwal27",
- "channel": "web",
- "properties": {
- "brand": "Zara",
- "price": "12000"
- },
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.1.11",
- "namespace": "com.rudderlabs.javascript"
- },
- "locale": "en-US",
- "screen": {
- "density": 2
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.11"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"
- },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35",
- "originalTimestamp": "2021-01-03T17:02:53.193Z"
- }
- },
- "output": {
- "error": "listData is not present inside properties. Aborting message."
- }
- },
- {
- "description": "Response is empty",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {}
- },
- "context": {
- "ip": "14.5.67.21",
- "library": {
- "name": "http"
- }
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": {
- "error": "Payload could not be populated"
- }
- },
- {
- "description": "Message type not given",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- },
- "message": {
- "event": "add_to_Cart",
- "sentAt": "2021-01-03T17:02:53.195Z",
- "userId": "ujjwal27",
- "channel": "web",
- "properties": {
- "brand": "Zara",
- "price": "12000"
- },
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.1.11",
- "namespace": "com.rudderlabs.javascript"
- },
- "locale": "en-US",
- "screen": {
- "density": 2
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.11"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"
- },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35",
- "originalTimestamp": "2021-01-03T17:02:53.193Z"
- }
- },
- "output": {
- "error": "Message Type is not present. Aborting message."
- }
- },
- {
- "description": "Gum caller ID is not present",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "destination": {
- "Config": {
- "audienceId": "34893",
- "audienceType": "gum"
- },
- "ID": "sample_destinationId"
- },
- "message": {
- "event": "add_to_Cart",
- "sentAt": "2021-01-03T17:02:53.195Z",
- "userId": "ujjwal27",
- "type": "audiencelist",
- "channel": "web",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sample_gum1"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sample_gum2"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sample_gum3"
- }
- ]
- },
- "brand": "Zara",
- "price": "12000"
- },
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "build": "1.0.0",
- "version": "1.1.11",
- "namespace": "com.rudderlabs.javascript"
- },
- "locale": "en-US",
- "screen": {
- "density": 2
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.11"
- },
- "campaign": {},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"
- },
- "rudderId": "8f8fa6b5-8e24-489c-8e22-61f23f2e364f",
- "messageId": "2116ef8c-efc3-4ca4-851b-02ee60dad6ff",
- "anonymousId": "97c46c81-3140-456d-b2a9-690d70aaca35",
- "originalTimestamp": "2021-01-03T17:02:53.193Z"
- }
- },
- "output": {
- "error": "gumCallerId is required for audience type gum"
- }
- },
- {
- "description": "reuqired properties in listData are not present",
- "input": {
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- }
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21",
- "library": {
- "name": "http"
- }
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- },
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34894",
- "audienceType": "email"
- },
- "ID": "sample_destinationId"
- }
- },
- "output": {
- "error": "Required property for email type audience is not available in an object"
- }
- }
-]
diff --git a/test/__tests__/data/criteo_audience_proxy_input.json b/test/__tests__/data/criteo_audience_proxy_input.json
index 84f15fc4707..2aa292939bf 100644
--- a/test/__tests__/data/criteo_audience_proxy_input.json
+++ b/test/__tests__/data/criteo_audience_proxy_input.json
@@ -16,9 +16,7 @@
"attributes": {
"operation": "remove",
"identifierType": "gum",
- "identifiers": [
- "sample_gum3"
- ],
+ "identifiers": ["sample_gum3"],
"internalIdentifiers": false,
"gumCallerId": "329739"
}
@@ -33,6 +31,37 @@
"destination": "criteo_audience"
}
},
+ {
+ "version": "1",
+ "type": "REST",
+ "method": "PATCH",
+ "endpoint": "https://api.criteo.com/2022-10/audiences/3485/contactlist",
+ "headers": {
+ "Authorization": "Bearer success_access_token",
+ "Content-Type": "application/json",
+ "Accept": "application/json"
+ },
+ "body": {
+ "JSON": {
+ "data": {
+ "type": "ContactlistAmendment",
+ "attributes": {
+ "operation": "add",
+ "identifierType": "madid",
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
+ "internalIdentifiers": false
+ }
+ }
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {},
+ "params": {
+ "destination": "criteo_audience"
+ }
+ },
{
"version": "1",
"type": "REST",
@@ -50,11 +79,7 @@
"attributes": {
"operation": "add",
"identifierType": "madid",
- "identifiers": [
- "sample_madid",
- "sample_madid_1",
- "sample_madid_2"
- ],
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
"internalIdentifiers": false
}
}
@@ -85,11 +110,7 @@
"attributes": {
"operation": "add",
"identifierType": "madid",
- "identifiers": [
- "sample_madid",
- "sample_madid_1",
- "sample_madid_2"
- ],
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
"internalIdentifiers": false
}
}
@@ -120,11 +141,7 @@
"attributes": {
"operation": "add",
"identifierType": "madid",
- "identifiers": [
- "sample_madid",
- "sample_madid_1",
- "sample_madid_2"
- ],
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
"internalIdentifiers": false
}
}
@@ -155,11 +172,7 @@
"attributes": {
"operation": "add",
"identifierType": "madid",
- "identifiers": [
- "sample_madid",
- "sample_madid_1",
- "sample_madid_2"
- ],
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
"internalIdentifiers": false
}
}
@@ -190,11 +203,7 @@
"attributes": {
"operation": "add",
"identifierType": "madid",
- "identifiers": [
- "sample_madid",
- "sample_madid_1",
- "sample_madid_2"
- ],
+ "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
"internalIdentifiers": false
}
}
@@ -208,4 +217,4 @@
"destination": "criteo_audience"
}
}
-]
\ No newline at end of file
+]
diff --git a/test/__tests__/data/criteo_audience_proxy_output.json b/test/__tests__/data/criteo_audience_proxy_output.json
index 0508ec96328..a2d33fbb9a6 100644
--- a/test/__tests__/data/criteo_audience_proxy_output.json
+++ b/test/__tests__/data/criteo_audience_proxy_output.json
@@ -9,6 +9,34 @@
}
}
},
+ {
+ "output": {
+ "status": 401,
+ "authErrorCategory": "REFRESH_TOKEN",
+ "destinationResponse": {
+ "errors": [
+ {
+ "traceIdentifier": "80a1a0ba3981b04da847d05700752c77",
+ "type": "authorization",
+ "code": "authorization-token-expired",
+ "instance": "/2022-10/audiences/123/contactlist",
+ "title": "The authorization token has expired"
+ }
+ ]
+ },
+ "message": "The authorization token has expired during criteo_audience response transformation",
+ "statTags": {
+ "destType": "CRITEO_AUDIENCE",
+ "errorCategory": "network",
+ "destinationId": "Non-determininable",
+ "workspaceId": "Non-determininable",
+ "errorType": "aborted",
+ "feature": "dataDelivery",
+ "implementation": "native",
+ "module": "destination"
+ }
+ }
+ },
{
"output": {
"status": 401,
diff --git a/test/__tests__/data/criteo_audience_router_input.json b/test/__tests__/data/criteo_audience_router_input.json
deleted file mode 100644
index 25607ca936c..00000000000
--- a/test/__tests__/data/criteo_audience_router_input.json
+++ /dev/null
@@ -1,111 +0,0 @@
-[
- {
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "iwehr83843"
- },
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- },
- "jobId": 1
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21",
- "library": {
- "name": "http"
- }
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- }
- },
- {
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "madid"
- },
- "ID": "iwehr83843"
- },
- "metadata": {
- "secret": {
- "accessToken": "success_access_token"
- },
- "jobId": 2
- },
- "message": {
- "userId": "user 1",
- "type": "audiencelist",
- "properties": {
- "listData": {
- "add": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_1",
- "email": "amy@email.com",
- "identityLink": "yahoo.com",
- "gum": "sdjfds"
- },
- {
- "madid": "sample_madid_2",
- "email": "van@email.com",
- "identityLink": "abc.com",
- "gum": "sdjfds"
- }
- ],
- "remove": [
- {
- "madid": "sample_madid",
- "email": "alex@email.com",
- "identityLink": "text.com",
- "gum": "sdjfds"
- }
- ]
- }
- },
- "context": {
- "ip": "14.5.67.21"
- },
- "timestamp": "2020-02-02T00:23:09.544Z"
- }
- }
-]
diff --git a/test/__tests__/data/criteo_audience_router_output.json b/test/__tests__/data/criteo_audience_router_output.json
deleted file mode 100644
index 6c38b7460b7..00000000000
--- a/test/__tests__/data/criteo_audience_router_output.json
+++ /dev/null
@@ -1,135 +0,0 @@
-[
- {
- "batchedRequest": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "email",
- "identifiers": ["alex@email.com", "amy@email.com", "van@email.com"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ],
- "metadata": [
- {
- "jobId": 1,
- "secret": {
- "accessToken": "success_access_token"
- }
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "email"
- },
- "ID": "iwehr83843"
- }
- },
- {
- "batchedRequest": [
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "add",
- "identifierType": "madid",
- "identifiers": ["sample_madid", "sample_madid_1", "sample_madid_2"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PATCH",
- "endpoint": "https://api.criteo.com/2022-10/audiences/34893/contactlist",
- "headers": {
- "Authorization": "Bearer success_access_token",
- "Content-Type": "application/json",
- "Accept": "application/json"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "type": "ContactlistAmendment",
- "attributes": {
- "operation": "remove",
- "identifierType": "madid",
- "identifiers": ["sample_madid"],
- "internalIdentifiers": false
- }
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {}
- }
- ],
- "metadata": [
- {
- "jobId": 2,
- "secret": {
- "accessToken": "success_access_token"
- }
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "clientId": "abcdef8-f49-4cd6-b4c5-958b3d66d431",
- "clientSecret": "sjhdkhfrz6yc9LrRRIPimE9h53jADLccXTykHCcA6eEoFR4rXQg",
- "audienceId": "34893",
- "audienceType": "madid"
- },
- "ID": "iwehr83843"
- }
- }
-]
diff --git a/test/__tests__/data/customerio_input.json b/test/__tests__/data/customerio_input.json
deleted file mode 100644
index 14d9273f22e..00000000000
--- a/test/__tests__/data/customerio_input.json
+++ /dev/null
@@ -1,4898 +0,0 @@
-[
- {
- "message": {
- "channel": "web",
- "type": "identify",
- "userId": "cio_1234",
- "integrations": {
- "All": true
- },
- "traits": {
- "email": "updated_email@example.com",
- "id": "updated-id-value"
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "dot.name": "Arnab Pal",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "properties": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page",
- "url": "www.rudderlabs.com"
- },
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "anonymousId": "7e32188a4dab669f",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.torpedolabs.wynn.wscci.dev",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android",
- "token": "abcxyz"
- },
- "library": {
- "name": "com.rudderlabs.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "event": "Application Installed",
- "integrations": {
- "All": true
- },
- "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383",
- "properties": {
- "review_id": "some_review_id",
- "product_id": "some_product_id_a",
- "rating": 2.0,
- "review_body": "Some Review Body"
- },
- "userId": "12345",
- "originalTimestamp": "2020-01-09T10:01:53.558Z",
- "type": "track",
- "sentAt": "2020-01-09T10:02:03.257Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "anonymousId": "7e32188a4dab669f",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.torpedolabs.wynn.wscci.dev",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android",
- "token": "abcxyz"
- },
- "library": {
- "name": "com.rudderlabs.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "event": "Application Uninstalled",
- "integrations": {
- "All": true
- },
- "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383",
- "properties": {
- "review_id": "some_review_id",
- "product_id": "some_product_id_a",
- "rating": 2.0,
- "review_body": "Some Review Body"
- },
- "userId": "12345",
- "originalTimestamp": "2020-01-09T10:01:53.558Z",
- "type": "track",
- "sentAt": "2020-01-09T10:02:03.257Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "event": "Application Uninstalled",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Uninstalled",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Uninstalled",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Opened",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "sample_device_token"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Opened",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "sample_device_token"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Uninstalled",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "email": "test@gmail.com",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "properties": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page",
- "url": "www.rudderlabs.com"
- },
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "",
- "event": "test track event",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "anonymousId": "7e32188a4dab669f",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.torpedolabs.wynn.wscci.dev",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android",
- "token": "abcxyz"
- },
- "library": {
- "name": "com.rudderlabs.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "event": "Application Installed",
- "integrations": {
- "All": true
- },
- "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383",
- "properties": {
- "review_id": "some_review_id",
- "product_id": "some_product_id_a",
- "rating": 2.0,
- "review_body": "Some Review Body"
- },
- "userId": "12345",
- "originalTimestamp": "2020-01-09T10:01:53.558Z",
- "type": "track",
- "sentAt": "2020-01-09T10:02:03.257Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "anonymousId": "7e32188a4dab669f",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "RudderAndroidClient",
- "namespace": "com.torpedolabs.wynn.wscci.dev",
- "version": "1.0"
- },
- "device": {
- "id": "7e32188a4dab669f",
- "manufacturer": "Google",
- "model": "Android SDK built for x86",
- "name": "generic_x86",
- "type": "android",
- "token": "abcxyz"
- },
- "library": {
- "name": "com.rudderlabs.android.sdk.core",
- "version": "0.1.4"
- },
- "locale": "en-US",
- "network": {
- "carrier": "Android",
- "bluetooth": false,
- "cellular": true,
- "wifi": true
- },
- "os": {
- "name": "Android",
- "version": "9"
- },
- "screen": {
- "density": 420,
- "height": 1794,
- "width": 1080
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "7e32188a4dab669f"
- },
- "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)"
- },
- "event": "Application Uninstalled",
- "integrations": {
- "All": true
- },
- "messageId": "1578564113557-af022c68-429e-4af4-b99b-2b9174056383",
- "properties": {
- "review_id": "some_review_id",
- "product_id": "some_product_id_a",
- "rating": 2.0,
- "review_body": "Some Review Body"
- },
- "userId": "12345",
- "originalTimestamp": "2020-01-09T10:01:53.558Z",
- "type": "track",
- "sentAt": "2020-01-09T10:02:03.257Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "event": "Application Uninstalled",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Uninstalled",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "somel"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Installed",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Opened",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "sample_device_token"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Opened",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "mobile",
- "context": {
- "device": {
- "name": "test android",
- "id": "sample_device_id",
- "model": "some_model_device",
- "type": "mobile",
- "token": "sample_device_token"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "Application Uninstalled",
- "userId": "12345",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "https://www.stoodi.com.br/exershgcios/upe/2019/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "https://www.stoodi.com.br/exershgcios/upe/2019/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "screen",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "https://www.stoodi.com.br/exercicios/upe/2016/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "screen",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-10-14T11:15:18.300Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "event": "https://www.stoodi.com.br/exercicios/upe/2016/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/",
- "properties": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "anonymousId": "ruchira-100-anon",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "173",
- "name": "MyWallSt Debug",
- "namespace": "com.rubicoin.Invest",
- "version": "6.2"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "6fdb629d-4f18-4f3e-943a-3f6f482b331e",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "Ales' iPhone",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.0.19"
- },
- "locale": "en-DE",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "14.8"
- },
- "screen": {
- "density": 3,
- "height": 375,
- "width": 812
- },
- "timezone": "Europe/Prague",
- "traits": {
- "anonymousId": "6fdb629d-4f18-4f3e-943a-3f6f482b331e",
- "userId": "6a540d50-c4dc-4694-beca-d16de113a1c4-1618384106.8700438"
- }
- },
- "event": "Home: Viewed",
- "integrations": {
- "All": true
- },
- "messageId": "1632314412-e724167f-13bd-455b-943d-dd765a7810fe",
- "originalTimestamp": "2021-09-22T12:40:12.220Z",
- "properties": {},
- "rudderId": "782cdb50-e2b9-45fc-9d22-07fe792dcfba",
- "sentAt": "2021-09-22T12:40:14.453Z",
- "type": "track",
- "userId": "ruchira-user-id-100"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "abc",
- "apiKey": "xyz"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "ruchira-100-anon",
- "userId": "ruchira-user-id-100",
- "integrations": {
- "All": true
- },
- "traits": {
- "email": "test@gmail.com",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": true,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "sources",
- "context": {
- "externalId": [
- {
- "id": "xaviercharles@hotmail.com",
- "identifierType": "email",
- "type": "CUSTOMERIO-customers"
- }
- ],
- "mappedToDestination": "true",
- "sources": {
- "batch_id": "3d6f7aa8-9b70-4759-970d-212e6714ad22",
- "job_id": "1zDgnw7ZmHWR7gtY4niHYysL3zS/Syncher",
- "job_run_id": "c5shebbh9jqg10k8d21g",
- "task_id": "tt_10_rows",
- "task_run_id": "c5shebbh9jqg10k8d220",
- "version": "release.v1.6.8"
- }
- },
- "messageId": "d82a45e1-5a27-4c1d-af89-83bdbc6139d0",
- "originalTimestamp": "2021-10-27T09:09:56.673Z",
- "receivedAt": "2021-10-27T09:09:56.187Z",
- "recordId": "3",
- "request_ip": "10.1.85.177",
- "rudderId": "5b19a81b-df60-4ccd-abf0-fcfe2b7db054",
- "sentAt": "2021-10-27T09:09:56.673Z",
- "timestamp": "2021-10-27T09:09:56.186Z",
- "traits": {
- "last_name": "xavier",
- "first_name": "charles"
- },
- "type": "identify",
- "userId": "xaviercharles@hotmail.com"
- },
- "destination": {
- "ID": "1zgXcyv272oZA8HWqe7zInhJjPL",
- "Name": "ere",
- "DestinationDefinition": {
- "ID": "1iVQr671C0E8MVpzvCEegsLM2J5",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU"],
- "web": ["useNativeSDK"]
- },
- "excludeKeys": [],
- "includeKeys": ["apiKey", "siteID", "datacenterEU"],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor"
- },
- "ResponseRules": null
- },
- "Config": {
- "apiKey": "a292d85ac36de15fc219",
- "datacenterEU": false,
- "siteID": "eead090ab9e2e35004dc"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "libraries": [],
- "request": {
- "query": {}
- }
- },
- {
- "message": {
- "channel": "sources",
- "context": {
- "externalId": [
- {
- "id": "xaviercharles",
- "identifierType": "id",
- "type": "CUSTOMERIO-customers"
- }
- ],
- "mappedToDestination": "true",
- "sources": {
- "batch_id": "3d6f7aa8-9b70-4759-970d-212e6714ad22",
- "job_id": "1zDgnw7ZmHWR7gtY4niHYysL3zS/Syncher",
- "job_run_id": "c5shebbh9jqg10k8d21g",
- "task_id": "tt_10_rows",
- "task_run_id": "c5shebbh9jqg10k8d220",
- "version": "release.v1.6.8"
- }
- },
- "messageId": "d82a45e1-5a27-4c1d-af89-83bdbc6139d0",
- "originalTimestamp": "2021-10-27T09:09:56.673Z",
- "receivedAt": "2021-10-27T09:09:56.187Z",
- "recordId": "3",
- "request_ip": "10.1.85.177",
- "rudderId": "5b19a81b-df60-4ccd-abf0-fcfe2b7db054",
- "sentAt": "2021-10-27T09:09:56.673Z",
- "traits": {
- "last_name": "xavier",
- "first_name": "charles"
- },
- "type": "identify",
- "userId": "xaviercharles"
- },
- "destination": {
- "ID": "1zgXcyv272oZA8HWqe7zInhJjPL",
- "Name": "ere",
- "DestinationDefinition": {
- "ID": "1iVQr671C0E8MVpzvCEegsLM2J5",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU"],
- "web": ["useNativeSDK"]
- },
- "excludeKeys": [],
- "includeKeys": ["apiKey", "siteID", "datacenterEU"],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor"
- },
- "ResponseRules": null
- },
- "Config": {
- "apiKey": "a292d85ac36de15fc219",
- "datacenterEU": false,
- "siteID": "eead090ab9e2e35004dc"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- },
- "libraries": [],
- "request": {
- "query": {}
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "timestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:35:30.556+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:39:04.424+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "timestamp": "2022-01-10T20:39:03.955+05:30",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:41:30.970+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:44:52.784+05:30",
- "request_ip": "[::1]",
- "rudderId": "0aef312c-0dc0-4a49-b613-4f33fb4e9b46",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "timestamp": "2022-01-10T10:00:26.513Z",
- "receivedAt": "2022-01-10T20:47:36.180+05:30",
- "request_ip": "[::1]",
- "rudderId": "0aef312c-0dc0-4a49-b613-4f33fb4e9b46",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "device_token_registered",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:49:05.795+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "device_token_registered",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:50:17.090+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "timestamp": "2022-01-10T20:50:16.621+05:30",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0
- }
- },
- "event": "device_token_registered",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:52:19.147+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "timestamp": "2022-01-10T20:52:18.678+05:30",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "device_token_registered",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:53:43.680+05:30",
- "request_ip": "[::1]",
- "rudderId": "0aef312c-0dc0-4a49-b613-4f33fb4e9b46",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "iOS"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0,
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- }
- },
- "event": "device_token_registered",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "receivedAt": "2022-01-10T20:55:03.845+05:30",
- "request_ip": "[::1]",
- "rudderId": "0aef312c-0dc0-4a49-b613-4f33fb4e9b46",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "check for ipados apple family and default it to ios",
- "message": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "channel": "mobile",
- "context": {
- "app": {
- "build": "1",
- "name": "zx_userid_missing",
- "namespace": "org.reactjs.native.example.zx-userid-missing",
- "version": "1.0"
- },
- "device": {
- "attTrackingStatus": 0,
- "id": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "manufacturer": "Apple",
- "model": "iPhone",
- "name": "iPhone 13",
- "token": "deviceToken",
- "type": "ipados"
- },
- "library": {
- "name": "rudder-ios-library",
- "version": "1.3.1"
- },
- "locale": "en-US",
- "network": {
- "bluetooth": false,
- "carrier": "unavailable",
- "cellular": false,
- "wifi": true
- },
- "os": {
- "name": "iOS",
- "version": "15.2"
- },
- "screen": {
- "density": 3,
- "height": 390,
- "width": 844
- },
- "timezone": "Asia/Kolkata",
- "traits": {
- "anonymousId": "5d727a3e-a72b-4d00-8078-669c1494791d",
- "email": "sofia@gmail.com",
- "login_status": "Authenticated",
- "name": "Sofia",
- "phone_verified": 1,
- "selected_city": "",
- "selected_lat": 0,
- "selected_long": 0,
- "selected_neighborhood": "",
- "selected_number": "",
- "selected_postal_code": "",
- "selected_state": "",
- "selected_street": "",
- "signed_up_for_newsletters": 0
- }
- },
- "event": "Application Opened",
- "integrations": {
- "All": true
- },
- "messageId": "1641808826-28d23237-f4f0-4f65-baa2-99141e422a8f",
- "originalTimestamp": "2022-01-10T10:00:26.513Z",
- "properties": {
- "from_background": false
- },
- "receivedAt": "2022-01-10T20:41:30.970+05:30",
- "request_ip": "[::1]",
- "rudderId": "423cdf83-0448-4a99-b14d-36fcc63e6ea0",
- "sentAt": "2022-01-10T10:00:26.982Z",
- "type": "track",
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "DESAU SAI",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "DESU SAI"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with identify action",
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "identify"
- },
- "type": "group",
- "userId": "user@1"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with delete action",
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "delete"
- },
- "type": "group",
- "userId": "user@1"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with add_relationships action",
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "add_relationships"
- },
- "type": "group",
- "userId": "user@1"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with delete_relationships action",
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "delete_relationships"
- },
- "type": "group",
- "userId": "user@1"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with userId and groupId as an integer",
- "message": {
- "type": "group",
- "header": {
- "content-type": "application/json; charset=utf-8"
- },
- "sentAt": "2023-03-28T09:36:49.882Z",
- "traits": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "userId": 432,
- "channel": "server",
- "context": {
- "library": {
- "name": "rudder-analytics-php",
- "version": "2.0.1",
- "consumer": "LibCurl"
- }
- },
- "groupId": 306,
- "rudderId": "f5b46a12-2dab-4e24-a127-7316eed414fc",
- "messageId": "7032394c-e813-4737-bf52-622dbcefe849",
- "receivedAt": "2023-03-28T09:36:48.296Z",
- "request_ip": "18.195.235.225",
- "originalTimestamp": "2023-03-28T09:36:49.882Z"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with userId in email format ",
- "message": {
- "type": "group",
- "header": {
- "content-type": "application/json; charset=utf-8"
- },
- "sentAt": "2023-03-28T09:36:49.882Z",
- "traits": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "userId": "abc@xyz.com",
- "channel": "server",
- "context": {
- "library": {
- "name": "rudder-analytics-php",
- "version": "2.0.1",
- "consumer": "LibCurl"
- }
- },
- "groupId": 306,
- "rudderId": "f5b46a12-2dab-4e24-a127-7316eed414fc",
- "messageId": "7032394c-e813-4737-bf52-622dbcefe849",
- "receivedAt": "2023-03-28T09:36:48.296Z",
- "request_ip": "18.195.235.225",
- "originalTimestamp": "2023-03-28T09:36:49.882Z"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": false,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "description": "successful group call with eu as data center",
- "message": {
- "type": "group",
- "header": {
- "content-type": "application/json; charset=utf-8"
- },
- "sentAt": "2023-03-28T09:36:49.882Z",
- "traits": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "userId": 432,
- "channel": "server",
- "context": {
- "library": {
- "name": "rudder-analytics-php",
- "version": "2.0.1",
- "consumer": "LibCurl"
- }
- },
- "groupId": 306,
- "rudderId": "f5b46a12-2dab-4e24-a127-7316eed414fc",
- "messageId": "7032394c-e813-4737-bf52-622dbcefe849",
- "receivedAt": "2023-03-28T09:36:48.296Z",
- "request_ip": "18.195.235.225",
- "originalTimestamp": "2023-03-28T09:36:49.882Z"
- },
- "destination": {
- "ID": "23Mi76khsFhY7bh9ZyRcvR3pHDt",
- "Name": "Customer IO Dev",
- "DestinationDefinition": {
- "ID": "23MgSlHXsPLsiH7SbW7IzCP32fn",
- "Name": "CUSTOMERIO",
- "DisplayName": "Customer IO",
- "Config": {
- "destConfig": {
- "defaultConfig": ["apiKey", "siteID", "datacenterEU", "deviceTokenEventName"],
- "web": ["useNativeSDK", "blackListedEvents", "whiteListedEvents"]
- },
- "excludeKeys": [],
- "includeKeys": [
- "apiKey",
- "siteID",
- "datacenterEU",
- "blackListedEvents",
- "whiteListedEvents"
- ],
- "saveDestinationResponse": true,
- "secretKeys": [],
- "supportedMessageTypes": ["identify", "page", "screen", "track"],
- "supportedSourceTypes": [
- "android",
- "ios",
- "web",
- "unity",
- "amp",
- "cloud",
- "warehouse",
- "reactnative",
- "flutter",
- "cordova"
- ],
- "supportsVisualMapper": true,
- "transformAt": "processor",
- "transformAtV1": "processor"
- },
- "ResponseRules": {}
- },
- "Config": {
- "apiKey": "ef32c3f60fb98f39ef35",
- "datacenterEU": true,
- "deviceTokenEventName": "device_token_registered",
- "siteID": "c0efdbd20b9fbe24a7e2"
- },
- "Enabled": true,
- "Transformations": [],
- "IsProcessorEnabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "properties": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page",
- "url": "www.rudderlabs.com"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "properties": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "userId": "12345",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- }
-]
diff --git a/test/__tests__/data/customerio_output.json b/test/__tests__/data/customerio_output.json
deleted file mode 100644
index c1c598e9c4b..00000000000
--- a/test/__tests__/data/customerio_output.json
+++ /dev/null
@@ -1,1776 +0,0 @@
-[
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "email": "updated_email@example.com",
- "id": "updated-id-value"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/cio_1234",
- "userId": "cio_1234",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "message": "apiKey not found in Configs"
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "_timestamp": 1571043797,
- "anonymous_id": "123456",
- "city": "NY",
- "state": "CA",
- "street": "",
- "prop1": "val1",
- "prop2": "val2",
- "country": "USA",
- "postalCode": 712136,
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/123456",
- "userId": "123456",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "message": "userId or email is not present",
- "statusCode": 400
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "_timestamp": 1571043797,
- "anonymous_id": "123456",
- "city": "NY",
- "country": "USA",
- "dot.name": "Arnab Pal",
- "email": "test@gmail.com",
- "postalCode": 712136,
- "prop1": "val1",
- "prop2": "val2",
- "state": "CA",
- "street": ""
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/test@gmail.com",
- "userId": "123456",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "page",
- "data": {
- "url": "www.rudderlabs.com",
- "path": "/test",
- "search": "abc",
- "referrer": "Rudder",
- "title": "Test Page"
- },
- "timestamp": 1571051718,
- "name": "ApplicationLoaded"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/sayan@gmail.com/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "review_body": "Some Review Body",
- "rating": 2,
- "review_id": "some_review_id",
- "last_used": 1578564113,
- "platform": "android",
- "id": "abcxyz",
- "product_id": "some_product_id_a"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices/abcxyz",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices/somel",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/sayan@gmail.com/devices/somel",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "message": "userId/email or device_token not present",
- "statusCode": 400
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "id": "somel",
- "last_used": 1571051718,
- "platform": "mobile",
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/sayan@gmail.com/devices",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "name": "Application Installed",
- "timestamp": 1571051718,
- "type": "event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "last_used": 1571051718,
- "user_time_spent": 50000,
- "platform": "mobile",
- "id": "somel"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "Application Installed"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "Application Opened"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "last_used": 1571051718,
- "user_time_spent": 50000,
- "platform": "mobile",
- "id": "sample_device_token"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/devices/sample_device_token",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "_timestamp": 1571043797,
- "anonymous_id": "123456",
- "city": "NY",
- "state": "CA",
- "street": "",
- "prop1": "val1",
- "prop2": "val2",
- "country": "USA",
- "postalCode": 712136,
- "email": "test@gmail.com"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/123456",
- "userId": "123456",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "page",
- "data": {
- "url": "www.rudderlabs.com",
- "path": "/test",
- "search": "abc",
- "referrer": "Rudder",
- "title": "Test Page"
- },
- "timestamp": 1571051718,
- "name": "ApplicationLoaded"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/sayan@gmail.com/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "test track event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "review_body": "Some Review Body",
- "rating": 2,
- "review_id": "some_review_id",
- "last_used": 1578564113,
- "platform": "android",
- "id": "abcxyz",
- "product_id": "some_product_id_a"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices/abcxyz",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices/somel",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "message": "userId/email or device_token not present",
- "statusCode": 400
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "id": "somel",
- "last_used": 1571051718,
- "platform": "mobile",
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/sayan@gmail.com/devices",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "data": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "name": "Application Installed",
- "timestamp": 1571051718,
- "type": "event"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/events",
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "last_used": 1571051718,
- "user_time_spent": 50000,
- "platform": "mobile",
- "id": "somel"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "Application Installed"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "event",
- "data": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "user_time_spent": 50000
- },
- "timestamp": 1571051718,
- "name": "Application Opened"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "device": {
- "user_actual_id": 12345,
- "user_actual_role": "system_admin",
- "last_used": 1571051718,
- "user_time_spent": 50000,
- "platform": "mobile",
- "id": "sample_device_token"
- }
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "PUT",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {},
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track-eu.customer.io/api/v1/customers/12345/devices/sample_device_token",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "DELETE",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/events",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50
- },
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "name": "https://www.stoodi.com.br/exershgcios/upe/2019/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-s",
- "type": "event",
- "timestamp": 1571051718
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/sayan@gmail.com/events",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50
- },
- "name": "https://www.stoodi.com.br/exershgcios/upe/2019/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/",
- "type": "event",
- "timestamp": 1571051718
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/events",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "anonymous_id": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "name": "Viewed https://www.stoodi.com.br/exercicios/upe/2016/questao/gregorio-de-matos-poeta-baiano-q Screen",
- "type": "event",
- "timestamp": 1571051718
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/sayan@gmail.com/events",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "user_actual_role": "system_admin",
- "user_actual_id": 12345,
- "user_time_spent": 50000
- },
- "name": "Viewed https://www.stoodi.com.br/exercicios/upe/2016/questao/gregorio-de-matos-poeta-baiano-que-viveu-no-seculo-xvi/ Screen",
- "type": "event",
- "timestamp": 1571051718
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/ruchira-user-id-100/events",
- "headers": {
- "Authorization": "Basic YWJjOnh5eg=="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {},
- "name": "Home: Viewed",
- "type": "event",
- "timestamp": 1632314412
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ruchira-user-id-100",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track-eu.customer.io/api/v1/customers/ruchira-user-id-100",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": "",
- "email": "test@gmail.com",
- "_timestamp": 1571043797,
- "anonymous_id": "ruchira-100-anon"
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "ruchira-user-id-100",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/xaviercharles@hotmail.com",
- "headers": {
- "Authorization": "Basic ZWVhZDA5MGFiOWUyZTM1MDA0ZGM6YTI5MmQ4NWFjMzZkZTE1ZmMyMTk="
- },
- "params": {},
- "body": {
- "JSON": {
- "last_name": "xavier",
- "first_name": "charles",
- "email": "xaviercharles@hotmail.com",
- "_timestamp": 1635325796
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "xaviercharles@hotmail.com",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/xaviercharles",
- "headers": {
- "Authorization": "Basic ZWVhZDA5MGFiOWUyZTM1MDA0ZGM6YTI5MmQ4NWFjMzZkZTE1ZmMyMTk="
- },
- "params": {},
- "body": {
- "JSON": {
- "last_name": "xavier",
- "first_name": "charles",
- "id": "xaviercharles",
- "_timestamp": 1635325796
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "xaviercharles",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/events",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "from_background": false
- },
- "name": "Application Opened",
- "type": "event",
- "timestamp": 1641827343
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/events",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "from_background": false
- },
- "name": "device_token_registered",
- "type": "event",
- "timestamp": 1641828016
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641828138
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/e91e0378-63fe-11ec-82ac-0a028ee659c3/devices",
- "headers": {
- "Authorization": "Basic REVTVSBTQUk6REVTQVUgU0FJ"
- },
- "params": {},
- "body": {
- "JSON": {
- "device": {
- "from_background": false,
- "id": "deviceToken",
- "platform": "ios",
- "last_used": 1641808826
- }
- },
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {}
- },
- "files": {},
- "userId": "e91e0378-63fe-11ec-82ac-0a028ee659c3",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "identify",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": "user@1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "delete",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": "user@1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "add_relationships",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": "user@1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "delete_relationships",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": "user@1",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "identify",
- "attributes": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "identifiers": {
- "object_id": "306",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "432"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": 432,
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "identify",
- "attributes": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "identifiers": {
- "object_id": "306",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "email": "abc@xyz.com"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": "abc@xyz.com",
- "statusCode": 200
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track-eu.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic YzBlZmRiZDIwYjlmYmUyNGE3ZTI6ZWYzMmMzZjYwZmI5OGYzOWVmMzU="
- },
- "params": {},
- "body": {
- "XML": {},
- "FORM": {},
- "JSON": {
- "type": "object",
- "action": "identify",
- "attributes": {
- "city": "Frankfurt",
- "name": "rudder test",
- "state": "Hessen",
- "isFake": true,
- "address": "Solmsstraße 83",
- "country": "DE",
- "website": "http://www.rudderstack.com",
- "industry": "Waste and recycling",
- "postcode": "60486",
- "whiteLabel": "rudderlabs",
- "maxNbJobBoards": 2,
- "organisationId": 306,
- "pricingPackage": "packageExpert",
- "dateProTrialEnd": "2022-08-31T00:00:00+00:00",
- "isProTrialActive": true,
- "datetimeRegistration": "2020-07-01T10:23:41+00:00",
- "isPersonnelServiceProvider": false
- },
- "identifiers": {
- "object_id": "306",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "432"
- }
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {},
- "userId": 432,
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "page",
- "data": {
- "url": "www.rudderlabs.com",
- "path": "/test",
- "search": "abc",
- "referrer": "Rudder",
- "title": "Test Page"
- },
- "timestamp": 1571051718,
- "name": "www.rudderlabs.com"
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "page",
- "data": {
- "path": "/test",
- "search": "abc",
- "referrer": "Rudder",
- "title": "Test Page"
- },
- "timestamp": 1571051718
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- },
- {
- "body": {
- "XML": {},
- "JSON_ARRAY": {},
- "JSON": {
- "type": "page",
- "timestamp": 1571051718
- },
- "FORM": {}
- },
- "files": {},
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "userId": "12345",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "version": "1",
- "params": {},
- "type": "REST",
- "method": "POST",
- "statusCode": 200
- }
-]
\ No newline at end of file
diff --git a/test/__tests__/data/customerio_router_input.json b/test/__tests__/data/customerio_router_input.json
deleted file mode 100644
index b0d7b0b009e..00000000000
--- a/test/__tests__/data/customerio_router_input.json
+++ /dev/null
@@ -1,233 +0,0 @@
-[
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "anonymousId": "123456",
- "email": "sayan@gmail.com",
- "address": {
- "city": "kolkata",
- "country": "India",
- "postalCode": 712136,
- "state": "WB",
- "street": ""
- },
- "ip": "0.0.0.0",
- "age": 26
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "user_properties": {
- "prop1": "val1",
- "prop2": "val2"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-10-14T09:03:17.562Z",
- "anonymousId": "123456",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "traits": {
- "anonymousId": "anon-id",
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal",
- "address": {
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": ""
- }
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com",
- "anonymousId": "12345"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-10-14T11:15:18.299Z",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "properties": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page",
- "url": "www.rudderlabs.com"
- },
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "identify"
- },
- "type": "group",
- "userId": "user@1"
- },
- "metadata": {
- "jobId": 3
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.0-beta.2"
- },
- "ip": "0.0.0.0",
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.0-beta.2"
- },
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
- },
- "groupId": "group@1",
- "integrations": {
- "All": true
- },
- "traits": {
- "domainNames": "rudderstack.com",
- "email": "help@rudderstack.com",
- "name": "rudderstack",
- "action": "delete"
- },
- "type": "group",
- "userId": "user@1"
- },
- "metadata": {
- "jobId": 4
- },
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- }
-]
diff --git a/test/__tests__/data/customerio_router_output.json b/test/__tests__/data/customerio_router_output.json
deleted file mode 100644
index 4a050620c79..00000000000
--- a/test/__tests__/data/customerio_router_output.json
+++ /dev/null
@@ -1,175 +0,0 @@
-[
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "PUT",
- "endpoint": "https://track.customer.io/api/v1/customers/123456",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "anonymous_id": "123456",
- "city": "NY",
- "country": "USA",
- "postalCode": 712136,
- "state": "CA",
- "street": "",
- "email": "test@gmail.com",
- "dot.name": "Arnab Pal",
- "prop1": "val1",
- "prop2": "val2",
- "_timestamp": 1571043797
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "123456",
- "statusCode": 200
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v1/customers/12345/events",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY="
- },
- "params": {},
- "body": {
- "JSON": {
- "data": {
- "path": "/test",
- "referrer": "Rudder",
- "search": "abc",
- "title": "Test Page",
- "url": "www.rudderlabs.com"
- },
- "name": "ApplicationLoaded",
- "type": "page",
- "timestamp": 1571051718
- },
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {}
- },
- "files": {},
- "userId": "12345",
- "statusCode": 200
- },
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- },
- {
- "batchedRequest": {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://track.customer.io/api/v2/batch",
- "headers": {
- "Authorization": "Basic NDZiZTU0NzY4ZTdkNDlhYjI2Mjg6MTlmMGY3MzRlM2JiODdhNDQ1OTY=",
- "Content-Type": "application/json"
- },
- "params": {},
- "body": {
- "FORM": {},
- "XML": {},
- "JSON": {
- "batch": [
- {
- "type": "object",
- "action": "identify",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- },
- {
- "type": "object",
- "action": "delete",
- "attributes": {
- "name": "rudderstack",
- "email": "help@rudderstack.com",
- "domainNames": "rudderstack.com"
- },
- "identifiers": {
- "object_id": "group@1",
- "object_type_id": "1"
- },
- "cio_relationships": [
- {
- "identifiers": {
- "id": "user@1"
- }
- }
- ]
- }
- ]
- },
- "JSON_ARRAY": {}
- },
- "files": {}
- },
- "metadata": [
- {
- "jobId": 3
- },
- {
- "jobId": 4
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "datacenterEU": false,
- "siteID": "46be54768e7d49ab2628",
- "apiKey": "19f0f734e3bb87a44596"
- }
- }
- }
-]
diff --git a/test/__tests__/data/delighted_input.json b/test/__tests__/data/delighted_input.json
index fabfd6ee948..fa8b118387f 100644
--- a/test/__tests__/data/delighted_input.json
+++ b/test/__tests__/data/delighted_input.json
@@ -2,7 +2,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -42,7 +42,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -77,7 +77,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "Product Reviewed" }]
@@ -118,7 +118,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "Product Reviewed" }]
@@ -159,7 +159,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -200,7 +200,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "Product Reviewed" }]
@@ -241,7 +241,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -275,7 +275,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -311,7 +311,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -352,7 +352,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
diff --git a/test/__tests__/data/delighted_output.json b/test/__tests__/data/delighted_output.json
index d5228b32241..fc95d51bace 100644
--- a/test/__tests__/data/delighted_output.json
+++ b/test/__tests__/data/delighted_output.json
@@ -5,7 +5,7 @@
"method": "POST",
"endpoint": "https://api.delighted.com/v1/people.json",
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -40,7 +40,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -69,7 +69,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -99,7 +99,7 @@
"method": "POST",
"endpoint": "https://api.delighted.com/v1/people.json",
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
diff --git a/test/__tests__/data/delighted_router_input.json b/test/__tests__/data/delighted_router_input.json
index 4a342d894c7..4c39370e9ef 100644
--- a/test/__tests__/data/delighted_router_input.json
+++ b/test/__tests__/data/delighted_router_input.json
@@ -2,14 +2,14 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
}
},
"metadata": {
- "jobId": 2
+ "jobId": 1
},
"message": {
"channel": "web",
@@ -45,7 +45,7 @@
{
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
diff --git a/test/__tests__/data/delighted_router_output.json b/test/__tests__/data/delighted_router_output.json
index 856fdbae56a..40b770a3bdb 100644
--- a/test/__tests__/data/delighted_router_output.json
+++ b/test/__tests__/data/delighted_router_output.json
@@ -20,7 +20,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -28,14 +28,14 @@
},
"metadata": [
{
- "jobId": 2
+ "jobId": 1
}
],
"batched": false,
"statusCode": 200,
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
@@ -58,7 +58,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic b01BRU1OYjVxcGgxREFWUGZHcXJPRHFRQ0wyWU1pZUc=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -73,7 +73,7 @@
"statusCode": 200,
"destination": {
"Config": {
- "apiKey": "oMAEMNb5qph1DAVPfGqrODqQCL2YMieG",
+ "apiKey": "dummyApiKey",
"channel": "email",
"delay": 0,
"eventNamesSettings": [{ "event": "" }]
diff --git a/test/__tests__/data/drip_input.json b/test/__tests__/data/drip_input.json
index cf9ad0f1061..17ad0ce3766 100644
--- a/test/__tests__/data/drip_input.json
+++ b/test/__tests__/data/drip_input.json
@@ -2,7 +2,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
@@ -44,7 +44,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
@@ -86,7 +86,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
@@ -126,7 +126,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": true
@@ -168,7 +168,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": true
@@ -208,7 +208,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": true
@@ -248,7 +248,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -288,7 +288,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -326,7 +326,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -364,7 +364,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -404,7 +404,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -450,7 +450,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": false
@@ -491,7 +491,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
diff --git a/test/__tests__/data/drip_output.json b/test/__tests__/data/drip_output.json
index 47272c270fe..dbf9cf6a759 100644
--- a/test/__tests__/data/drip_output.json
+++ b/test/__tests__/data/drip_output.json
@@ -5,7 +5,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/subscribers",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -39,7 +39,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/subscribers",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -71,7 +71,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/campaigns/915194776/subscribers",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -96,7 +96,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/events",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -128,7 +128,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/events",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -157,7 +157,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/events",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -189,7 +189,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v3/1809802/shopper_activity/order",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -213,7 +213,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v3/1809802/shopper_activity/order",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -243,7 +243,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/events",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
@@ -272,7 +272,7 @@
"method": "POST",
"endpoint": "https://api.getdrip.com/v2/1809802/subscribers",
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"params": {},
diff --git a/test/__tests__/data/drip_router_input.json b/test/__tests__/data/drip_router_input.json
index 29b364a6bca..1cabfe9498f 100644
--- a/test/__tests__/data/drip_router_input.json
+++ b/test/__tests__/data/drip_router_input.json
@@ -2,14 +2,14 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
}
},
"metadata": {
- "jobId": 2
+ "jobId": 1
},
"message": {
"channel": "web",
@@ -47,7 +47,7 @@
{
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": true
diff --git a/test/__tests__/data/drip_router_output.json b/test/__tests__/data/drip_router_output.json
index bf6a8b8d5c6..d1efdf48f7c 100644
--- a/test/__tests__/data/drip_router_output.json
+++ b/test/__tests__/data/drip_router_output.json
@@ -25,7 +25,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -33,14 +33,14 @@
},
"metadata": [
{
- "jobId": 2
+ "jobId": 1
}
],
"batched": false,
"statusCode": 200,
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "",
"enableUserCreation": true
@@ -71,7 +71,7 @@
"method": "POST",
"params": {},
"headers": {
- "Authorization": "Basic ZTg1OTIyNDVlZTBmY2Y5ZTk5OTdkZmU1MzhmYjhiMjI=",
+ "Authorization": "Basic ZHVtbXlBcGlLZXk=",
"Content-Type": "application/json"
},
"version": "1",
@@ -86,7 +86,7 @@
"statusCode": 200,
"destination": {
"Config": {
- "apiKey": "e8592245ee0fcf9e9997dfe538fb8b22",
+ "apiKey": "dummyApiKey",
"accountId": "1809802",
"campaignId": "915194776",
"enableUserCreation": true
diff --git a/test/__tests__/data/dynamic_yield.json b/test/__tests__/data/dynamic_yield.json
index c76987af5bf..b7d066feca3 100644
--- a/test/__tests__/data/dynamic_yield.json
+++ b/test/__tests__/data/dynamic_yield.json
@@ -22,7 +22,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": true
}
}
@@ -34,7 +34,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -82,7 +82,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -94,7 +94,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -153,7 +153,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -165,7 +165,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -213,7 +213,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -225,7 +225,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -285,7 +285,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -297,7 +297,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -358,7 +358,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -370,7 +370,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -449,7 +449,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687",
+ "apiKey": "dummyApiKey",
"hashEmail": false
}
}
@@ -461,7 +461,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
@@ -523,7 +523,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687"
+ "apiKey": "dummyApiKey"
}
}
},
@@ -553,7 +553,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687"
+ "apiKey": "dummyApiKey"
}
}
},
@@ -623,7 +623,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687"
+ "apiKey": "dummyApiKey"
}
}
},
@@ -665,7 +665,7 @@
},
"destination": {
"Config": {
- "apiKey": "34d8efa09c5b048bbacc6af157f2e687"
+ "apiKey": "dummyApiKey"
}
}
},
@@ -676,7 +676,7 @@
"endpoint": "https://dy-api.com/v2/collect/user/event",
"headers": {
"Content-Type": "application/json",
- "DY-API-Key": "34d8efa09c5b048bbacc6af157f2e687"
+ "DY-API-Key": "dummyApiKey"
},
"params": {},
"body": {
diff --git a/test/__tests__/data/eloqua.json b/test/__tests__/data/eloqua.json
new file mode 100644
index 00000000000..ed64f74d093
--- /dev/null
+++ b/test/__tests__/data/eloqua.json
@@ -0,0 +1,359 @@
+[
+ {
+ "description": "identify payload pass",
+ "input": {
+ "message": {
+ "type": "identify",
+ "traits": {
+ "C_FirstName": "Test User",
+ "C_patient_id1": 1,
+ "C_MobilePhone": "+008822773355",
+ "C_City": "Scranton",
+ "C_date_of_birth_1life1": "22/12/01"
+ },
+ "userId": "testUser1234@keeptesting.com",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-contacts",
+ "identifierType": "C_EmailAddress"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerAccountId": "89236978",
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {
+ "identifierFieldName": "C_EmailAddress",
+ "data": {
+ "C_FirstName": "Test User",
+ "C_patient_id1": "1",
+ "C_MobilePhone": "+008822773355",
+ "C_City": "Scranton",
+ "C_date_of_birth_1life1": "22/12/01",
+ "C_EmailAddress": "testUser1234@keeptesting.com"
+ },
+ "customObjectId": "contacts",
+ "type": "identify"
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "type not correect",
+ "input": {
+ "message": {
+ "type": "audiencelist",
+ "traits": {
+ "C_FirstName": "Test User",
+ "C_patient_id1": 1,
+ "C_MobilePhone": "+008822773355",
+ "C_City": "Scranton",
+ "C_date_of_birth_1life1": "22/12/01"
+ },
+ "userId": "testUser1234@keeptesting.com",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-contacts",
+ "identifierType": "C_EmailAddress"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerAccountId": "89236978",
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "error": "Event type audiencelist is not supported. Aborting message."
+ }
+ },
+ {
+ "description": "traits not present",
+ "input": {
+ "message": {
+ "type": "identify",
+ "userId": "testUser1234@keeptesting.com",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-contacts",
+ "identifierType": "C_EmailAddress"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerAccountId": "89236978",
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "error": "Message traits/properties not present. Aborting message."
+ }
+ },
+ {
+ "description": "identify payload pass",
+ "input": {
+ "message": {
+ "type": "identify",
+ "traits": {
+ "C_FirstName": "Test User",
+ "C_patient_id1": 1,
+ "C_MobilePhone": "+008822773355",
+ "C_City": "Scranton",
+ "C_date_of_birth_1life1": "22/12/01"
+ },
+ "userId": "testUser1234@keeptesting.com",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-contacts",
+ "identifierType": "C_EmailAddress"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerAccountId": "89236978",
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {
+ "identifierFieldName": "C_EmailAddress",
+ "data": {
+ "C_FirstName": "Test User",
+ "C_patient_id1": "1",
+ "C_MobilePhone": "+008822773355",
+ "C_City": "Scranton",
+ "C_date_of_birth_1life1": "22/12/01",
+ "C_EmailAddress": "testUser1234@keeptesting.com"
+ },
+ "customObjectId": "contacts",
+ "type": "identify"
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "track payload pass",
+ "input": {
+ "message": {
+ "type": "track",
+ "properties": {
+ "key11": "Test User",
+ "key21": 1,
+ "contactID11": "+008822773355"
+ },
+ "userId": "testUser1234@keeptesting.com",
+ "channel": "sources",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-172",
+ "identifierType": "contactID1"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {
+ "identifierFieldName": "contactID1",
+ "data": {
+ "key11": "Test User",
+ "key21": "1",
+ "contactID11": "+008822773355",
+ "contactID1": "testUser1234@keeptesting.com"
+ },
+ "customObjectId": "172",
+ "type": "track"
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "track payload pass",
+ "input": {
+ "message": {
+ "type": "track",
+ "properties": {
+ "key11": "Test User",
+ "key21": 1,
+ "contactID11": "+008822773355"
+ },
+ "userId": "testUser1234@keeptesting.com",
+ "channel": "sources",
+ "context": {
+ "sources": {
+ "job_id": "2RVkqlV1adBiIpj33kWlQzchMP1/Syncher",
+ "version": "v1.28.0",
+ "job_run_id": "cja699onfuet3te5obc0",
+ "task_run_id": "cja699onfuet3te5obcg"
+ },
+ "externalId": [
+ {
+ "id": "testUser1234@keeptesting.com",
+ "type": "ELOQUA-1800",
+ "identifierType": "contactID112"
+ }
+ ],
+ "mappedToDestination": "true"
+ },
+ "recordId": "1",
+ "rudderId": "3606d3c7-8741-4245-a254-450e137d3866",
+ "messageId": "40def17a-1b6a-4d2d-a851-2a8d96f913bd"
+ },
+ "destination": {
+ "Config": {
+ "customerId": "78678678",
+ "audienceId": "564567",
+ "hashEmail": false
+ }
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {
+ "identifierFieldName": "contactID112",
+ "data": {
+ "key11": "Test User",
+ "key21": "1",
+ "contactID11": "+008822773355",
+ "contactID112": "testUser1234@keeptesting.com"
+ },
+ "customObjectId": "1800",
+ "type": "track"
+ },
+ "JSON_ARRAY": {},
+ "XML": {},
+ "FORM": {}
+ },
+ "files": {}
+ }
+ }
+]
diff --git a/test/__tests__/data/facebook_conversions.json b/test/__tests__/data/facebook_conversions.json
new file mode 100644
index 00000000000..cc4d9a1421e
--- /dev/null
+++ b/test/__tests__/data/facebook_conversions.json
@@ -0,0 +1,1157 @@
+[
+ {
+ "description": "Timestamp validation. Events must be sent within seven days of their occurrence or up to one minute in the future",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "randomevent",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-09-01T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ]
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "error": "Events must be sent within seven days of their occurrence or up to one minute in the future."
+ }
+ },
+ {
+ "description": "Track event without event property set",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "error": "'event' is required and should be a string"
+ }
+ },
+ {
+ "description": "Simple track event",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "spin_result",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"spin_result\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"value\":400,\"currency\":\"USD\"}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event products searched",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "products searched",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"Search\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event product added",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "product added",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"AddToCart\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event product viewed",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "product viewed",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"ViewContent\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event product list viewed",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "product list viewed",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0,
+ "products": [
+ {
+ "product_id": 1234,
+ "quantity": 5,
+ "price": 55
+ }
+ ]
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"ViewContent\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"products\":[{\"product_id\":1234,\"quantity\":5,\"price\":55}],\"content_ids\":[1234],\"contents\":[{\"id\":1234,\"quantity\":5,\"item_price\":55}],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event product list viewed without products array",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "product list viewed",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0,
+ "category": "randomCategory"
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"ViewContent\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"category\":\"randomCategory\",\"content_ids\":[\"randomCategory\"],\"contents\":[{\"id\":\"randomCategory\",\"quantity\":1}],\"content_type\":\"product_group\",\"content_category\":\"randomCategory\",\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event product added to wishlist",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "product added to wishlist",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"AddToWishlist\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event payment info entered",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "payment info entered",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"AddPaymentInfo\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"currency\":\"USD\",\"value\":400}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event order completed with delivery_category in products array",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "order completed",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0,
+ "products": [
+ {
+ "product_id": 1234,
+ "quantity": 5,
+ "price": 55,
+ "delivery_category": "home_delivery"
+ }
+ ]
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"Purchase\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"products\":[{\"product_id\":1234,\"quantity\":5,\"price\":55,\"delivery_category\":\"home_delivery\"}],\"content_ids\":[1234],\"contents\":[{\"id\":1234,\"quantity\":5,\"item_price\":55,\"delivery_category\":\"home_delivery\"}],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400,\"num_items\":1}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ },
+ {
+ "description": "Track event with standard event order completed with delivery_category in properties",
+ "input": {
+ "message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
+ "channel": "web",
+ "context": {
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
+ },
+ "network": {
+ "carrier": "Banglalink"
+ },
+ "os": {
+ "name": "android",
+ "version": "8.1.0"
+ },
+ "screen": {
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
+ }
+ },
+ "event": "order completed",
+ "integrations": {
+ "All": true
+ },
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0,
+ "delivery_category": "home_delivery",
+ "products": [
+ {
+ "product_id": 1234,
+ "quantity": 5,
+ "price": 55
+ }
+ ]
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
+ },
+ "destination": {
+ "Config": {
+ "limitedDataUsage": true,
+ "blacklistPiiProperties": [
+ {
+ "blacklistPiiProperties": "",
+ "blacklistPiiHash": false
+ }
+ ],
+ "accessToken": "09876",
+ "datasetId": "dummyID",
+ "eventsToEvents": [
+ {
+ "from": "",
+ "to": ""
+ }
+ ],
+ "eventCustomProperties": [
+ {
+ "eventCustomProperties": ""
+ }
+ ],
+ "removeExternalId": true,
+ "whitelistPiiProperties": [
+ {
+ "whitelistPiiProperties": ""
+ }
+ ],
+ "actionSource": "website"
+ },
+ "Enabled": true
+ }
+ },
+ "output": {
+ "version": "1",
+ "type": "REST",
+ "method": "POST",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
+ "headers": {},
+ "params": {},
+ "body": {
+ "JSON": {},
+ "XML": {},
+ "JSON_ARRAY": {},
+ "FORM": {
+ "data": [
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"Purchase\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"delivery_category\":\"home_delivery\",\"products\":[{\"product_id\":1234,\"quantity\":5,\"price\":55}],\"content_ids\":[1234],\"contents\":[{\"id\":1234,\"quantity\":5,\"item_price\":55,\"delivery_category\":\"home_delivery\"}],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400,\"num_items\":1}}"
+ ]
+ }
+ },
+ "files": {}
+ }
+ }
+]
diff --git a/test/__tests__/data/facebook_pixel_router_input.json b/test/__tests__/data/facebook_conversions_router_input.json
similarity index 62%
rename from test/__tests__/data/facebook_pixel_router_input.json
rename to test/__tests__/data/facebook_conversions_router_input.json
index 5e9adfcb93d..b8865d124ea 100644
--- a/test/__tests__/data/facebook_pixel_router_input.json
+++ b/test/__tests__/data/facebook_conversions_router_input.json
@@ -1,12 +1,11 @@
[
{
+ "metadata": {
+ "jobId": 1
+ },
"message": {
"anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
+ "channel": "web",
"context": {
"device": {
"id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
@@ -26,7 +25,10 @@
"density": 50
},
"traits": {
- "email": "abc@gmail.com",
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
"anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
}
},
@@ -39,12 +41,9 @@
"revenue": 400,
"additional_bet_index": 0
},
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
"type": "track"
},
- "metadata": {
- "jobId": 2
- },
"destination": {
"Config": {
"limitedDataUsage": true,
@@ -54,9 +53,8 @@
"blacklistPiiHash": false
}
],
- "removeExternalId": true,
"accessToken": "09876",
- "pixelId": "dfgdfgdgd",
+ "datasetId": "dummyID",
"eventsToEvents": [
{
"from": "",
@@ -68,69 +66,65 @@
"eventCustomProperties": ""
}
],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
+ "removeExternalId": true,
"whitelistPiiProperties": [
{
"whitelistPiiProperties": ""
}
- ]
+ ],
+ "actionSource": "website"
},
"Enabled": true
}
},
{
+ "metadata": {
+ "jobId": 2
+ },
"message": {
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
"channel": "web",
"context": {
- "traits": {
- "name": "Ruchira Moitra",
- "email": "abc@gmail.com",
- "firstname": "Ruchira",
- "lastname": "Moitra",
- "phone": 9000000000,
- "gender": "female"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
+ "device": {
+ "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
+ "manufacturer": "Xiaomi",
+ "model": "Redmi 6",
+ "name": "xiaomi"
},
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
+ "network": {
+ "carrier": "Banglalink"
},
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
"os": {
- "name": "",
- "version": ""
+ "name": "android",
+ "version": "8.1.0"
},
"screen": {
- "density": 2
+ "height": "100",
+ "density": 50
+ },
+ "traits": {
+ "email": " aBc@gmail.com ",
+ "address": {
+ "zip": 1234
+ },
+ "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
}
},
- "properties": {
- "plan": "ruchira plan",
- "name": "ruchira moitra"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
+ "event": "products searched",
"integrations": {
"All": true
},
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "metadata": {
- "jobId": 2
+ "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
+ "properties": {
+ "revenue": 400,
+ "additional_bet_index": 0
+ },
+ "timestamp": "2023-11-12T15:46:51.693229+05:30",
+ "type": "track"
},
"destination": {
"Config": {
+ "limitedDataUsage": true,
"blacklistPiiProperties": [
{
"blacklistPiiProperties": "",
@@ -138,7 +132,7 @@
}
],
"accessToken": "09876",
- "pixelId": "dfgdfgdgd",
+ "datasetId": "dummyID",
"eventsToEvents": [
{
"from": "",
@@ -150,13 +144,13 @@
"eventCustomProperties": ""
}
],
- "valueFieldIdentifier": "",
- "advancedMapping": true,
+ "removeExternalId": true,
"whitelistPiiProperties": [
{
"whitelistPiiProperties": ""
}
- ]
+ ],
+ "actionSource": "website"
},
"Enabled": true
}
diff --git a/test/__tests__/data/facebook_pixel_router_output.json b/test/__tests__/data/facebook_conversions_router_output.json
similarity index 59%
rename from test/__tests__/data/facebook_pixel_router_output.json
rename to test/__tests__/data/facebook_conversions_router_output.json
index c3581c74479..542c1730908 100644
--- a/test/__tests__/data/facebook_pixel_router_output.json
+++ b/test/__tests__/data/facebook_conversions_router_output.json
@@ -4,7 +4,7 @@
"version": "1",
"type": "REST",
"method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
"headers": {},
"params": {},
"body": {
@@ -13,7 +13,7 @@
"JSON_ARRAY": {},
"FORM": {
"data": [
- "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"value\":400}}"
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"spin_result\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"value\":400,\"currency\":\"USD\"}}"
]
}
},
@@ -21,7 +21,7 @@
},
"metadata": [
{
- "jobId": 2
+ "jobId": 1
}
],
"batched": false,
@@ -35,9 +35,8 @@
"blacklistPiiHash": false
}
],
- "removeExternalId": true,
"accessToken": "09876",
- "pixelId": "dfgdfgdgd",
+ "datasetId": "dummyID",
"eventsToEvents": [
{
"from": "",
@@ -49,13 +48,13 @@
"eventCustomProperties": ""
}
],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
+ "removeExternalId": true,
"whitelistPiiProperties": [
{
"whitelistPiiProperties": ""
}
- ]
+ ],
+ "actionSource": "website"
},
"Enabled": true
}
@@ -65,7 +64,7 @@
"version": "1",
"type": "REST",
"method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
+ "endpoint": "https://graph.facebook.com/v18.0/dummyID/events?access_token=09876",
"headers": {},
"params": {},
"body": {
@@ -74,7 +73,7 @@
"JSON_ARRAY": {},
"FORM": {
"data": [
- "{\"user_data\":{\"external_id\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"ph\":\"593a6d58f34eb5c3de4f47e38d1faaa7d389fafe332a85400b1e54498391c579\",\"ge\":\"252f10c83610ebca1a059c0bae8255eba2f95be4d1d7bcfa89d7248a82d9f111\",\"ln\":\"6c535a187517963217c07cbdb552cb8991987d6c33cbaecbe2fc7bc4199e156e\",\"fn\":\"d5c853a578ee28b6152606785eb8e2eb10a369b2903e8f8ee1ce761eaf9acd0c\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"identify\",\"event_time\":1567333011,\"event_id\":\"84e26acc-56a5-4835-8233-591137fca468\",\"action_source\":\"website\"}"
+ "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"Search\",\"event_time\":1699784211,\"action_source\":\"website\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0,\"content_ids\":[],\"contents\":[],\"content_type\":\"product\",\"currency\":\"USD\",\"value\":400}}"
]
}
},
@@ -89,6 +88,7 @@
"statusCode": 200,
"destination": {
"Config": {
+ "limitedDataUsage": true,
"blacklistPiiProperties": [
{
"blacklistPiiProperties": "",
@@ -96,7 +96,7 @@
}
],
"accessToken": "09876",
- "pixelId": "dfgdfgdgd",
+ "datasetId": "dummyID",
"eventsToEvents": [
{
"from": "",
@@ -108,13 +108,13 @@
"eventCustomProperties": ""
}
],
- "valueFieldIdentifier": "",
- "advancedMapping": true,
+ "removeExternalId": true,
"whitelistPiiProperties": [
{
"whitelistPiiProperties": ""
}
- ]
+ ],
+ "actionSource": "website"
},
"Enabled": true
}
diff --git a/test/__tests__/data/facebook_offline_conversions.json b/test/__tests__/data/facebook_offline_conversions.json
deleted file mode 100644
index e235f056ff8..00000000000
--- a/test/__tests__/data/facebook_offline_conversions.json
+++ /dev/null
@@ -1,1034 +0,0 @@
-[
- {
- "description": "No Message type",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "traits": {
- "age": 23,
- "email": "adc@test.com",
- "firstname": "Test",
- "birthday": "2022-05-13T12:51:01.470Z"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "Product Searched",
- "originalTimestamp": "2020-09-22T14:42:44.724Z",
- "timestamp": "2022-09-22T20:12:44.757+05:30",
- "userId": "user@1"
- },
- "destination": {
- "Config": {
- "accessToken": "ABC..."
- }
- },
- "metadata": {
- "secret": {
- "access_token": "ABC"
- }
- }
- },
- "output": {
- "error": "Message Type is not present. Aborting message."
- }
- },
- {
- "description": "Unsupported Event type",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "traits": {
- "age": 23,
- "email": "adc@test.com",
- "firstname": "Test",
- "birthday": "2022-05-13T12:51:01.470Z"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
- },
- "event": "Product Searched",
- "type": "identify",
- "originalTimestamp": "2020-09-22T14:42:44.724Z",
- "timestamp": "2022-09-22T20:12:44.757+05:30",
- "userId": "user@1"
- },
- "destination": {
- "Config": {
- "accessToken": "ABC..."
- }
- }
- },
- "output": {
- "error": "Message type identify not supported."
- }
- },
- {
- "description": "Event is not mapped with standard event",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "abc": "1234"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "product searched",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" },
- { "from": "AddToWishlist", "to": "506289934669334" }
- ]
- }
- }
- },
- "output": {
- "error": "Please Map Your Standard Events With Event Set Ids"
- }
- },
- {
- "description": "Standard event is not mapped with event set id",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "abc": "1234"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Button Clicked",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ]
- }
- }
- },
- "output": {
- "error": "Please Map Your Standard Events With Event Set Ids"
- }
- },
- {
- "description": "Track Call With 1:1 Mapping",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Product Viewed",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Viewed\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- }
- ]
- },
- {
- "description": "Track Call With 1:M Mapping",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Product Searched",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"Search\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- },
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"Search\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- }
- ]
- },
- {
- "description": "Track Call With Multiplexing",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Product Searched",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Searched" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- },
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- },
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "rudderstack"
- }
- ]
- },
- {
- "description": "Track Call With Different Upload Tag And Multiplexing",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Product Searched",
- "properties": {
- "upload_tag": "test campaign",
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Searched" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- },
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- },
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"order_id\":\"5241735\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Product Searched\",\"event_time\":1663761919,\"currency\":\"GBP\",\"value\":31.98,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"5241735\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"ViewContent\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- }
- ]
- },
- {
- "description": "Track Call With All Possible Traits",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "birthday": "2005-01-01T23:28:56.782Z",
- "firstName": "test",
- "name": "test rudderlabs",
- "address": {
- "city": "kalkata",
- "state": "west bangal",
- "country": "india",
- "zip": "123456"
- },
- "phone": "9886775586",
- "gender": "male"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- },
- "device": {
- "advertisingId": "apple@123"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Cart Checkout",
- "properties": {
- "upload_tag": "test campaign",
- "order_id": "485893487985894998",
- "value": 100,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "IND",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Searched" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"doby\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobm\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobd\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"phone\":[\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\"],\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":[\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\"],\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"ln\":\"dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251\"},\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"order_id\":\"485893487985894998\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Cart Checkout\",\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"phone\":\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\",\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"485893487985894998\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"ln\":\"dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"AddToCart\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- }
- ]
- },
- {
- "description": "Track Call with hashing is disabled",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "birthday": "2005-01-01T23:28:56.782Z",
- "firstName": "test",
- "name": "test rudderlabs",
- "address": {
- "city": "kalkata",
- "state": "west bangal",
- "country": "india",
- "zip": "123456"
- },
- "phone": "9886775586",
- "gender": "male"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- },
- "device": {
- "advertisingId": "apple@123"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Cart Checkout",
- "properties": {
- "upload_tag": "test campaign",
- "order_id": "485893487985894998",
- "value": 100,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "IND",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Searched" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": false
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"doby\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobm\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobd\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"extern_id\":\"user@1\",\"email\":[\"test@rudderlabs.com\"],\"phone\":[\"9886775586\"],\"gen\":\"male\",\"fn\":\"test\",\"ct\":\"kalkata\",\"zip\":[\"123456\"],\"madid\":\"apple@123\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"ln\":\"rudderlabs\"},\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"order_id\":\"485893487985894998\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Cart Checkout\",\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"email\":\"test@rudderlabs.com\",\"phone\":\"9886775586\",\"gen\":\"male\",\"fn\":\"test\",\"ct\":\"kalkata\",\"zip\":\"123456\",\"madid\":\"apple@123\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"485893487985894998\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"ln\":\"rudderlabs\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"AddToCart\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- }
- ]
- },
- {
- "description": "Track Call with custom content type",
- "input": {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "birthday": "2005-01-01T23:28:56.782Z",
- "firstName": "test",
- "name": "test rudderlabs",
- "address": {
- "city": "kalkata",
- "state": "west bangal",
- "country": "india",
- "zip": "123456"
- },
- "phone": "9886775586",
- "gender": "male"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- },
- "device": {
- "advertisingId": "apple@123"
- }
- },
- "integrations": {
- "FacebookOfflineConversions": {
- "contentType": "e-commerce"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Cart Checkout",
- "properties": {
- "upload_tag": "test campaign",
- "order_id": "485893487985894998",
- "value": 100,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "IND",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Searched" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "categoryToContent": [{ "from": "", "to": "" }],
- "isHashRequired": true
- }
- }
- },
- "output": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"doby\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobm\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobd\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"phone\":[\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\"],\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":[\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\"],\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"ln\":\"dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251\"},\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"order_id\":\"485893487985894998\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Cart Checkout\",\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"phone\":\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\",\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"485893487985894998\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"ln\":\"dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"AddToCart\",\"content_type\":\"e-commerce\"}]",
- "upload_tag": "test campaign"
- }
- ]
- }
-]
diff --git a/test/__tests__/data/facebook_offline_conversions_router.json b/test/__tests__/data/facebook_offline_conversions_router.json
deleted file mode 100644
index 41246a0beb9..00000000000
--- a/test/__tests__/data/facebook_offline_conversions_router.json
+++ /dev/null
@@ -1,460 +0,0 @@
-[
- {
- "description": "Router Test Case 1",
- "input": [
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "abc": "1234"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "product searched",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "metadata": {
- "jobId": 1
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" },
- { "from": "AddToWishlist", "to": "506289934669334" }
- ],
- "isHashRequired": true
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "abc": "1234"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Button Clicked",
- "properties": {
- "order_id": "5241735",
- "value": 31.98,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "GBP",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "metadata": {
- "jobId": 2
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.1.2"
- },
- "traits": {
- "email": "test@rudderlabs.com",
- "birthday": "2005-01-01T23:28:56.782Z",
- "firstName": "test",
- "lastName": "rudderstack",
- "initial": {
- "firstName": "rudderlabs"
- },
- "address": {
- "city": "kalkata",
- "state": "west bangal",
- "country": "india",
- "zip": "123456"
- },
- "phone": "9886775586",
- "gender": "male"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.1.2"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
- "locale": "en-GB",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "path": "/tests/html/ecomm_test.html",
- "referrer": "http://0.0.0.0:1112/tests/html/",
- "search": "",
- "title": "Fb Offline Conversion Ecommerce Test",
- "url": "http://0.0.0.0:1112/tests/html/ecomm_test.html"
- },
- "device": {
- "advertisingId": "apple@123"
- }
- },
- "type": "track",
- "messageId": "9116b734-7e6b-4497-ab51-c16744d4487e",
- "originalTimestamp": "2022-09-21T12:05:19.394Z",
- "userId": "user@1",
- "event": "Cart Checkout",
- "properties": {
- "upload_tag": "test campaign",
- "order_id": "485893487985894998",
- "value": 100,
- "revenue": 31.98,
- "shipping": 4,
- "coupon": "APPARELSALE",
- "currency": "IND",
- "products": [
- {
- "id": "product-bacon-jam",
- "category": "Merch",
- "brand": ""
- },
- {
- "id": "product-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- },
- {
- "id": "offer-t-shirt",
- "category": "Merch",
- "brand": "Levis"
- }
- ]
- }
- },
- "metadata": {
- "jobId": 3
- },
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- {
- "to": "ViewContent",
- "from": "Product Searched"
- },
- { "to": "AddToCart", "from": "Cart Checkout" },
- {
- "to": "AddPaymentInfo",
- "from": "Card Details Added"
- },
- { "to": "Lead", "from": "Order Completed" },
- {
- "to": "CompleteRegistration",
- "from": "Signup"
- },
- {
- "to": "AddToWishlist",
- "from": "Button Clicked"
- }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- {
- "from": "ViewContent",
- "to": "1166826033904512"
- },
- { "from": "AddToCart", "to": "1148872185708962" },
- {
- "from": "CompleteRegistration",
- "to": "597443908839411"
- },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- }
- ],
- "output": [
- {
- "error": "Please Map Your Standard Events With Event Set Ids",
- "metadata": [
- {
- "jobId": 1
- }
- ],
- "batched": false,
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "configuration"
- },
- "statusCode": 400,
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" },
- { "from": "AddToWishlist", "to": "506289934669334" }
- ],
- "isHashRequired": true
- }
- }
- },
- {
- "error": "Please Map Your Standard Events With Event Set Ids",
- "metadata": [
- {
- "jobId": 2
- }
- ],
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "configuration"
- },
- "batched": false,
- "statusCode": 400,
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- { "to": "ViewContent", "from": "Product Viewed" },
- { "to": "AddToCart", "from": "Cart Checkout" },
- { "to": "AddPaymentInfo", "from": "Card Details Added" },
- { "to": "Lead", "from": "Order Completed" },
- { "to": "CompleteRegistration", "from": "Signup" },
- { "to": "AddToWishlist", "from": "Button Clicked" }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- { "from": "ViewContent", "to": "1166826033904512" },
- { "from": "AddToCart", "to": "1148872185708962" },
- { "from": "CompleteRegistration", "to": "597443908839411" },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- },
- {
- "metadata": [
- {
- "jobId": 3
- }
- ],
- "data": [
- {
- "access_token": "ABC...",
- "data": "[{\"match_keys\":{\"doby\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobm\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"dobd\":\"f388bc7cd953b951ffdf8e06275d94946dc52f03ed96536497fbe534469d38d6\",\"extern_id\":\"user@1\",\"email\":[\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\"],\"phone\":[\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\"],\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"ln\":\"7fb35d4777487797615cfa7c57724a47ba99152485600ccdb98e3871a6d05b21\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":[\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\"],\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\"},\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"order_id\":\"485893487985894998\",\"contents\":[{\"id\":\"product-bacon-jam\",\"quantity\":1,\"brand\":\"\",\"category\":\"Merch\"},{\"id\":\"product-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"},{\"id\":\"offer-t-shirt\",\"quantity\":1,\"brand\":\"Levis\",\"category\":\"Merch\"}],\"custom_data\":{\"extern_id\":\"user@1\",\"event_name\":\"Cart Checkout\",\"event_time\":1663761919,\"currency\":\"IND\",\"value\":100,\"email\":\"f188486df6078f7450a12507395d47d06ece9487125bd776fbf676446855571f\",\"phone\":\"74a39482392f83119041d571d5dace439d315faea8214fe8e815c00261b80615\",\"gen\":\"0d248e82c62c9386878327d491c762a002152d42ab2c391a31c44d9f62675ddf\",\"ln\":\"7fb35d4777487797615cfa7c57724a47ba99152485600ccdb98e3871a6d05b21\",\"fn\":\"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08\",\"ct\":\"375aba919c30870659093b7ddcf6045ff7a8624dd4dba49ced8981bd4d0666e0\",\"zip\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"madid\":\"c20fa16907343eef642d10f0bdb81bf629e6aaf6c906f26eabda079ca9e5ab67\",\"contents\":[{\"id\":\"product-bacon-jam\",\"category\":\"Merch\",\"brand\":\"\"},{\"id\":\"product-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"},{\"id\":\"offer-t-shirt\",\"category\":\"Merch\",\"brand\":\"Levis\"}],\"order_id\":\"485893487985894998\",\"upload_tag\":\"test campaign\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36\",\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"shipping\":4,\"coupon\":\"APPARELSALE\"},\"event_source_url\":\"http://0.0.0.0:1112/tests/html/ecomm_test.html\",\"event_name\":\"AddToCart\",\"content_type\":\"product\"}]",
- "upload_tag": "test campaign"
- }
- ],
- "batched": false,
- "statusCode": 200,
- "destination": {
- "Config": {
- "accessToken": "ABC...",
- "valueFieldIdentifier": "properties.price",
- "eventsToStandard": [
- { "from": "Product Searched", "to": "Search" },
- {
- "to": "ViewContent",
- "from": "Product Searched"
- },
- { "to": "AddToCart", "from": "Cart Checkout" },
- {
- "to": "AddPaymentInfo",
- "from": "Card Details Added"
- },
- { "to": "Lead", "from": "Order Completed" },
- {
- "to": "CompleteRegistration",
- "from": "Signup"
- },
- {
- "to": "AddToWishlist",
- "from": "Button Clicked"
- }
- ],
- "eventsToIds": [
- { "from": "Search", "to": "582603376981640" },
- { "from": "Search", "to": "506289934669334" },
- {
- "from": "ViewContent",
- "to": "1166826033904512"
- },
- { "from": "AddToCart", "to": "1148872185708962" },
- {
- "from": "CompleteRegistration",
- "to": "597443908839411"
- },
- { "from": "Lead", "to": "1024592094903800" }
- ],
- "isHashRequired": true
- }
- }
- }
- ]
- }
-]
diff --git a/test/__tests__/data/facebook_pixel_input.json b/test/__tests__/data/facebook_pixel_input.json
deleted file mode 100644
index 2231e0dc2f0..00000000000
--- a/test/__tests__/data/facebook_pixel_input.json
+++ /dev/null
@@ -1,4092 +0,0 @@
-[
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "channel": "mobile",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": " aBc@gmail.com ",
- "address": {
- "zip": 1234
- },
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "removeExternalId": true,
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": " aBc@gmail.com ",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "group"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "traits": {
- "name": "Ruchira"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "properties": {
- "plan": "ruchira plan",
- "name": "ruchira moitra"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "traits": {
- "name": "Ruchira Moitra",
- "email": "abc@gmail.com",
- "firstname": "Ruchira ",
- "lastname": " Moitra",
- "phone": 9000000000,
- "gender": "female"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "properties": {
- "plan": "ruchira plan",
- "name": "ruchira moitra"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": true,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "traits": {
- "name": "Ruchira Moitra",
- "email": "abc@gmail.com",
- "phone": 9000000000,
- "address": {
- "postalCode": 1234
- },
- "gender": "female"
- },
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "properties": {
- "plan": "ruchira plan",
- "name": "ruchira moitra"
- },
- "type": "identify",
- "messageId": "84e26acc-56a5-4835-8233-591137fca468",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "123456",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T09:03:22.563Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": true,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0,
- "email": "abc@gmail.com"
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0,
- "email": "abc@gmail.com"
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0,
- "email": "abc@gmail.com",
- "phone": 9000000000
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0,
- "email": "abc@gmail.com",
- "phone": 9000000000
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "properties": {
- "path": "/abc",
- "referrer": "xyz",
- "search": "def",
- "title": "ghi",
- "url": "jkl"
- },
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "properties": {
- "path": "/abc",
- "referrer": "xyz",
- "search": "def",
- "title": "ghi",
- "url": "jkl"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product list viewed",
- "properties": {
- "phone": 9000000000,
- "email": "abc@gmail.com",
- "category": "cat 1",
- "list_id": "1234",
- "filters": [
- {
- "type": "department",
- "value": "beauty"
- },
- {
- "type": "price",
- "value": "under"
- }
- ],
- "sorts": [
- {
- "type": "price",
- "value": "desc"
- }
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product list viewed",
- "properties": {
- "phone": 9000000000,
- "email": "abc@gmail.com",
- "category": "cat 1",
- "list_id": "1234",
- "filters": [
- {
- "type": "department",
- "value": "beauty"
- },
- {
- "type": "price",
- "value": "under"
- }
- ],
- "sorts": [
- {
- "type": "price",
- "value": "desc"
- }
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product list viewed",
- "properties": {
- "email": "abc@gmail.com",
- "quantity": 2,
- "category": "cat 1",
- "list_id": "1234",
- "contentName": "nutrition",
- "value": 18.9,
- "filters": [
- {
- "type": "department",
- "value": "beauty"
- },
- {
- "type": "price",
- "value": "under"
- }
- ],
- "sorts": [
- {
- "type": "price",
- "value": "desc"
- }
- ],
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "productDimension": "My Product Dimension",
- "productMetric": "My Product Metric",
- "position": 10
- },
- {
- "product_id": "507f1f77bcf86cdef799439011",
- "productDimension": "My Product Dimension1",
- "productMetric": "My Product Metric1",
- "position": -10
- }
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "my product list",
- "properties": {
- "email": "abc@gmail.com",
- "quantity": 2,
- "category": "cat 1",
- "list_id": "1234",
- "filters": [
- {
- "type": "department",
- "value": "beauty"
- },
- {
- "type": "price",
- "value": "under"
- }
- ],
- "sorts": [
- {
- "type": "price",
- "value": "desc"
- }
- ],
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "productDimension": "My Product Dimension",
- "productMetric": "My Product Metric",
- "position": 10
- },
- {
- "product_id": "507f1f77bcf86cdef799439011",
- "productDimension": "My Product Dimension1",
- "productMetric": "My Product Metric1",
- "position": -10
- }
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "removeExternalId": false,
- "eventsToEvents": [
- {
- "from": "My product list",
- "to": "ViewContent"
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": "list_id"
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product viewed",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "price": 24.75,
- "name": "my product 1",
- "category": "clothing",
- "sku": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "removeExternalId": true,
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product added",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "value": 24.75,
- "category": "cat 1",
- "id": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "removeExternalId": false,
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.value",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "order completed",
- "properties": {
- "order_id": "ruchiraorder1",
- "total": 99.99,
- "revenue": 12.24,
- "shipping": 13.99,
- "tax": 20.99,
- "currency": "INR",
- "contentName": "all about nutrition",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 3,
- "price": 24.75,
- "name": "other product",
- "sku": "p-299"
- }
- ]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "checkout started",
- "properties": {
- "currency": "CAD",
- "category": "clothing",
- "contentName": "abc",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product 2",
- "sku": "p-299"
- }
- ],
- "step": 1,
- "paymentMethod": "Visa",
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": "contentName"
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "dataProcessingOptions": [["LDU"], 1, 1000],
- "fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
- "fbp": "fb.1.1554763741205.234567890",
- "fb_login_id": "fb_id",
- "lead_id": "lead_id",
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUSage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "dataProcessingOptions": [["LDU"], 1, 1000],
- "fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
- "fbp": "fb.1.1554763741205.234567890",
- "fb_login_id": "fb_id",
- "lead_id": "lead_id",
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUSage": false,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "products searched",
- "properties": {
- "product_id": "p-298",
- "quantity": 2,
- "price": 18.9,
- "category": "health",
- "value": 18.9,
- "query": "HDMI cable"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "products searched",
- "properties": {
- "query": "HDMI cable"
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "testDestination": true,
- "testEventCode": "TEST1001",
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "ip": "0.0.0.0",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "page",
- "messageId": "5e10d13a-bf9a-44bf-b884-43a9e591ea71",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "properties": {
- "path": "/abc",
- "referrer": "xyz",
- "search": "def",
- "title": "ghi",
- "url": "jkl"
- },
- "integrations": {
- "All": true
- },
- "name": "ApplicationLoaded",
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "standardPageCall": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "phone",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": "url"
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": "email"
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "track page",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "track page",
- "to": "PageView"
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": "additional_bet_index"
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "my product list",
- "properties": {
- "email": "abc@gmail.com",
- "quantity": 2,
- "category": "cat 1",
- "list_id": "1234",
- "filters": [
- {
- "type": "department",
- "value": "beauty"
- },
- {
- "type": "price",
- "value": "under"
- }
- ],
- "sorts": [
- {
- "type": "price",
- "value": "desc"
- }
- ],
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "productDimension": "My Product Dimension",
- "productMetric": "My Product Metric",
- "position": 10
- },
- {
- "product_id": "507f1f77bcf86cdef799439011",
- "productDimension": "My Product Dimension1",
- "productMetric": "My Product Metric1",
- "position": -10
- }
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "My product list",
- "to": "Schedule"
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": "list_id"
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product added",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "value": "35.753",
- "category": "cat 1",
- "id": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.value",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product added",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "value": "35.7A3",
- "category": "cat 1",
- "id": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.value",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product added",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "value": "ABC",
- "category": "cat 1",
- "id": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.value",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "order completed",
- "properties": {
- "category": ["clothing", "fishing"],
- "order_id": "ruchiraorder1",
- "total": 99.99,
- "revenue": 12.24,
- "shipping": 13.99,
- "tax": 20.99,
- "currency": "INR",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 3,
- "price": 24.75,
- "name": "other product",
- "sku": "p-299"
- }
- ]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "order completed",
- "properties": {
- "category": 100,
- "order_id": "ruchiraorder1",
- "total": 99.99,
- "revenue": 12.24,
- "shipping": 13.99,
- "tax": 20.99,
- "currency": "INR",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 3,
- "price": 24.75,
- "name": "other product",
- "sku": "p-299"
- }
- ]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "order completed",
- "properties": {
- "category": {
- "category1": "1"
- },
- "order_id": "ruchiraorder1",
- "total": 99.99,
- "revenue": 12.24,
- "shipping": 13.99,
- "tax": 20.99,
- "currency": "INR",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 3,
- "price": 24.75,
- "name": "other product",
- "sku": "p-299"
- }
- ]
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-09-01T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "spin_result",
- "to": "Schedule"
- },
- {
- "to": "Schedule"
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "timestamp": "2019-08-24T15:46:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "limitedDataUsage": true,
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "spin_result",
- "to": "Schedule"
- },
- {
- "to": "Schedule"
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1",
- "destination_props": {
- "Fb": {
- "app_id": "RudderFbApp"
- }
- },
- "context": {
- "device": {
- "id": "df16bffa-5c3d-4fbb-9bce-3bab098129a7R",
- "manufacturer": "Xiaomi",
- "model": "Redmi 6",
- "name": "xiaomi"
- },
- "network": {
- "carrier": "Banglalink"
- },
- "os": {
- "name": "android",
- "version": "8.1.0"
- },
- "screen": {
- "height": "100",
- "density": 50
- },
- "traits": {
- "email": "abc@gmail.com",
- "anonymousId": "c82cbdff-e5be-4009-ac78-cdeea09ab4b1"
- }
- },
- "event": "spin_result",
- "integrations": {
- "All": true
- },
- "message_id": "a80f82be-9bdc-4a9f-b2a5-15621ee41df8",
- "properties": {
- "revenue": 400,
- "additional_bet_index": 0
- },
- "originalTimestamp": "2019-04-16T15:50:51.693229+05:30",
- "type": "track"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "accessToken": "validToken",
- "pixelId": "658311142062817",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": true,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "products searched",
- "properties": {
- "query": {
- "key1": "HDMI cable"
- }
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "products searched",
- "properties": {
- "query": 50
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "url": "https://theminimstory.com/collections/summer-of-pearls?utm_source=facebook&utm_medium=paidsocial&utm_campaign=carousel&utm_content=ad1-jul&fbclid=IwAR2SsDcjzd_TLZN-e93kxOeGBYO4pQ3AiyeXSheHW5emDeLw8uTvo6lTMPI"
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "checkout started",
- "properties": {
- "currency": "CAD",
- "category": "clothing",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product 2",
- "sku": "p-299"
- }
- ],
- "step": 1,
- "paymentMethod": "Visa",
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "url": "https://theminimstory.com/collections/summer-of-pearls?utm_source=facebook&utm_medium=paidsocial&utm_campaign=carousel&utm_content=ad1-jul&fbclid=IwAR2SsDcjzd_TLZN-e93kxOeGBYO4pQ3AiyeXSheHW5emDeLw8uTvo6lTMPI"
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": {
- "name": "checkout started"
- },
- "properties": {
- "currency": "CAD",
- "category": "clothing",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product 2",
- "sku": "p-299"
- }
- ],
- "step": 1,
- "paymentMethod": "Visa",
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- },
- "page": {
- "url": "url in wrong format"
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "checkout started",
- "properties": {
- "currency": "CAD",
- "category": "clothing",
- "products": [
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- },
- {
- "quantity": 1,
- "price": 24.75,
- "name": "my product 2",
- "sku": "p-299"
- }
- ],
- "step": 1,
- "paymentMethod": "Visa",
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product viewed",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "price": 24.75,
- "name": "my product 1",
- "category": "clothing",
- "sku": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true,
- "Facebook_Pixel": {
- "contentType": "sending dedicated content type for this particular payload"
- }
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "removeExternalId": true,
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product viewed",
- "properties": {
- "currency": "CAD",
- "quantity": 1,
- "price": 24.75,
- "value": 18.9,
- "name": "my product 1",
- "category": "clothing",
- "sku": "p-298",
- "testDimension": true,
- "testMetric": true,
- "position": 4.5
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "removeExternalId": true,
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.value",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "traits": {
- "email": "sayan@gmail.com"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "order completed",
- "properties": {
- "order_id": "ruchiraorder1",
- "total": 99.99,
- "revenue": 12.24,
- "shipping": 13.99,
- "tax": 20.99,
- "currency": "INR",
- "contentName": "all about nutrition",
- "products": {
- "quantity": 1,
- "price": 24.75,
- "name": "my product",
- "sku": "p-298"
- }
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "categoryToContent": [
- {
- "from": "clothing",
- "to": "product"
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "product list viewed",
- "properties": {
- "email": "abc@gmail.com",
- "quantity": 2,
- "category": "cat 1",
- "list_id": "1234",
- "contentName": "nutrition",
- "value": 18.9,
- "products": [
- {
- "product_id": "507f1f77bcf86cd799439011",
- "productDimension": "My Product Dimension",
- "productMetric": "My Product Metric",
- "position": 10
- },
- [
- {
- "product_id": "507f1f77bcf86cdef799439011",
- "productDimension": "My Product Dimension1",
- "productMetric": "My Product Metric1",
- "position": -10
- }
- ]
- ],
- "testDimension": true,
- "testMetric": true
- },
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "accessToken": "09876",
- "pixelId": "dfgdfgdgd",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "eventCustomProperties": [
- {
- "eventCustomProperties": ""
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "custom",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "pixelId": "dfgdfgdgd",
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "message": {
- "channel": "web",
- "context": {
- "app": {
- "build": "1.0.0",
- "name": "RudderLabs JavaScript SDK",
- "namespace": "com.rudderlabs.javascript",
- "version": "1.0.0"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "1.0.0"
- },
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
- "locale": "en-US",
- "os": {
- "name": "",
- "version": ""
- },
- "screen": {
- "density": 2
- }
- },
- "type": "track",
- "messageId": "ec5481b6-a926-4d2e-b293-0b3a77c4d3be",
- "originalTimestamp": "2019-09-01T15:46:51.693229+05:30",
- "anonymousId": "00000000000000000000000000",
- "userId": "12345",
- "event": "custom",
- "integrations": {
- "All": true
- },
- "sentAt": "2019-10-14T11:15:53.296Z"
- },
- "destination": {
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": true
- }
- ],
- "valueFieldIdentifier": "",
- "advancedMapping": false,
- "whitelistPiiProperties": [
- {
- "whitelistPiiProperties": ""
- }
- ]
- },
- "Enabled": true
- }
- },
- {
- "metadata": {
- "jobId": 12
- },
- "destination": {
- "secretConfig": {},
- "Config": {
- "blacklistPiiProperties": [
- {
- "blacklistPiiProperties": "",
- "blacklistPiiHash": false
- }
- ],
- "pixelId": "12345555566",
- "eventsToEvents": [
- {
- "from": "",
- "to": ""
- }
- ],
- "valueFieldIdentifier": "properties.price",
- "advancedMapping": false,
- "whitelistPiiProperties": [],
- "limitedDataUSage": false,
- "accessToken": "Asdkjhbriufkjrvknkjfkjhkjf",
- "testDestination": false,
- "testEventCode": "",
- "standardPageCall": false,
- "blacklistedEvents": [],
- "whitelistedEvents": [],
- "eventFilteringOption": "disable",
- "removeExternalId": false,
- "useUpdatedMapping": false,
- "oneTrustCookieCategories": [],
- "useNativeSDK": false,
- "eventDelivery": false,
- "eventDeliveryTS": 1686748039135
- },
- "liveEventsConfig": {
- "eventDelivery": false,
- "eventDeliveryTS": 1686748039135
- },
- "id": "destId1",
- "workspaceId": "wsp2",
- "transformations": [],
- "isConnectionEnabled": true,
- "isProcessorEnabled": true,
- "name": "san-fb_pixel",
- "enabled": true,
- "deleted": false,
- "createdAt": "2023-06-06T13:36:08.579Z",
- "updatedAt": "2023-06-14T13:07:19.136Z",
- "revisionId": "revId2",
- "secretVersion": 3
- },
- "message": {
- "type": "page",
- "sentAt": "2019-09-01T15:46:51.000Z",
- "userId": "user@19",
- "channel": "web",
- "context": {
- "os": {
- "name": "",
- "version": ""
- },
- "app": {
- "name": "RudderLabs JavaScript SDK",
- "version": "dev-snapshot",
- "namespace": "com.rudderlabs.javascript"
- },
- "page": {
- "url": "http://127.0.0.1:8888/",
- "path": "/",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:8888/",
- "referrer": "http://127.0.0.1:8888/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:8888",
- "initial_referring_domain": ""
- },
- "locale": "en-GB",
- "screen": {
- "width": 1728,
- "height": 1117,
- "density": 2,
- "innerWidth": 547,
- "innerHeight": 915
- },
- "traits": {
- "name": false,
- "source": "rudderstack"
- },
- "library": {
- "name": "RudderLabs JavaScript SDK",
- "version": "dev-snapshot"
- },
- "campaign": {},
- "sessionId": 1687769234506,
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
- },
- "rudderId": "6bbfd003-c074-4ee9-8674-c132ded9ff04",
- "timestamp": "2019-09-01T15:46:51.000Z",
- "properties": {
- "url": "http://127.0.0.1:8888/",
- "path": "/",
- "title": "Document",
- "search": "",
- "tab_url": "http://127.0.0.1:8888/",
- "referrer": "http://127.0.0.1:8888/",
- "initial_referrer": "$direct",
- "referring_domain": "127.0.0.1:8888",
- "initial_referring_domain": ""
- },
- "receivedAt": "2019-09-01T15:46:51.000Z",
- "request_ip": "49.206.54.243",
- "anonymousId": "700ab220-faad-4cdf-8484-63e4c6bce6fe",
- "integrations": {
- "All": true
- },
- "originalTimestamp": "2019-09-01T15:46:51.000Z"
- }
- }
-]
diff --git a/test/__tests__/data/facebook_pixel_output.json b/test/__tests__/data/facebook_pixel_output.json
deleted file mode 100644
index 91fdb7dbdd4..00000000000
--- a/test/__tests__/data/facebook_pixel_output.json
+++ /dev/null
@@ -1,772 +0,0 @@
-[
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"app\",\"custom_data\":{\"additional_bet_index\":0,\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "error": "Message type group not supported",
- "statusCode": 400,
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "error": "For identify events, \"Advanced Mapping\" configuration must be enabled on the RudderStack dashboard",
- "statusCode": 400,
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "configuration"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"ph\":\"593a6d58f34eb5c3de4f47e38d1faaa7d389fafe332a85400b1e54498391c579\",\"ge\":\"252f10c83610ebca1a059c0bae8255eba2f95be4d1d7bcfa89d7248a82d9f111\",\"ln\":\"6c535a187517963217c07cbdb552cb8991987d6c33cbaecbe2fc7bc4199e156e\",\"fn\":\"d5c853a578ee28b6152606785eb8e2eb10a369b2903e8f8ee1ce761eaf9acd0c\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"identify\",\"event_time\":1567333011,\"event_id\":\"84e26acc-56a5-4835-8233-591137fca468\",\"action_source\":\"website\"}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"ph\":\"593a6d58f34eb5c3de4f47e38d1faaa7d389fafe332a85400b1e54498391c579\",\"ge\":\"252f10c83610ebca1a059c0bae8255eba2f95be4d1d7bcfa89d7248a82d9f111\",\"zp\":\"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\",\"fn\":\"d5c853a578ee28b6152606785eb8e2eb10a369b2903e8f8ee1ce761eaf9acd0c\",\"ln\":\"6c535a187517963217c07cbdb552cb8991987d6c33cbaecbe2fc7bc4199e156e\"},\"event_name\":\"identify\",\"event_time\":1567333011,\"event_id\":\"84e26acc-56a5-4835-8233-591137fca468\",\"action_source\":\"website\"}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"email\":\"abc@gmail.com\",\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"email\":\"abc@gmail.com\",\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"email\":\"abc@gmail.com\",\"phone\":\"593a6d58f34eb5c3de4f47e38d1faaa7d389fafe332a85400b1e54498391c579\",\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Viewed page ApplicationLoaded\",\"event_time\":1567333011,\"event_source_url\":\"jkl\",\"event_id\":\"5e10d13a-bf9a-44bf-b884-43a9e591ea71\",\"action_source\":\"website\",\"custom_data\":{\"path\":\"/abc\",\"referrer\":\"xyz\",\"search\":\"def\",\"title\":\"ghi\",\"url\":\"jkl\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Viewed a page\",\"event_time\":1567333011,\"event_source_url\":\"jkl\",\"event_id\":\"5e10d13a-bf9a-44bf-b884-43a9e591ea71\",\"action_source\":\"website\",\"custom_data\":{\"path\":\"/abc\",\"referrer\":\"xyz\",\"search\":\"def\",\"title\":\"ghi\",\"url\":\"jkl\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"phone\":\"593a6d58f34eb5c3de4f47e38d1faaa7d389fafe332a85400b1e54498391c579\",\"email\":\"abc@gmail.com\",\"category\":\"cat 1\",\"list_id\":\"1234\",\"filters[0].type\":\"department\",\"filters[0].value\":\"beauty\",\"filters[1].type\":\"price\",\"filters[1].value\":\"under\",\"sorts[0].type\":\"price\",\"sorts[0].value\":\"desc\",\"testDimension\":true,\"testMetric\":true,\"content_ids\":[\"cat 1\"],\"content_type\":\"product_group\",\"contents\":[{\"id\":\"cat 1\",\"quantity\":1}],\"content_category\":\"cat 1\",\"value\":0,\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"category\":\"cat 1\",\"list_id\":\"1234\",\"filters[0].type\":\"department\",\"filters[0].value\":\"beauty\",\"filters[1].type\":\"price\",\"filters[1].value\":\"under\",\"sorts[0].type\":\"price\",\"sorts[0].value\":\"desc\",\"testDimension\":true,\"testMetric\":true,\"content_ids\":[\"cat 1\"],\"content_type\":\"product_group\",\"contents\":[{\"id\":\"cat 1\",\"quantity\":1}],\"content_category\":\"cat 1\",\"value\":0,\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"quantity\":2,\"category\":\"cat 1\",\"list_id\":\"1234\",\"contentName\":\"nutrition\",\"value\":18.9,\"filters[0].type\":\"department\",\"filters[0].value\":\"beauty\",\"filters[1].type\":\"price\",\"filters[1].value\":\"under\",\"sorts[0].type\":\"price\",\"sorts[0].value\":\"desc\",\"products[0].product_id\":\"507f1f77bcf86cd799439011\",\"products[0].productDimension\":\"My Product Dimension\",\"products[0].productMetric\":\"My Product Metric\",\"products[0].position\":10,\"products[1].product_id\":\"507f1f77bcf86cdef799439011\",\"products[1].productDimension\":\"My Product Dimension1\",\"products[1].productMetric\":\"My Product Metric1\",\"products[1].position\":-10,\"testDimension\":true,\"testMetric\":true,\"content_ids\":[\"507f1f77bcf86cd799439011\",\"507f1f77bcf86cdef799439011\"],\"content_type\":\"product\",\"contents\":[{\"id\":\"507f1f77bcf86cd799439011\",\"quantity\":2},{\"id\":\"507f1f77bcf86cdef799439011\",\"quantity\":2}],\"content_category\":\"cat 1\",\"content_name\":\"nutrition\",\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"quantity\":2,\"category\":\"cat 1\",\"list_id\":\"1234\",\"filters[0].type\":\"department\",\"filters[0].value\":\"beauty\",\"filters[1].type\":\"price\",\"filters[1].value\":\"under\",\"sorts[0].type\":\"price\",\"sorts[0].value\":\"desc\",\"products[0].product_id\":\"507f1f77bcf86cd799439011\",\"products[0].productDimension\":\"My Product Dimension\",\"products[0].productMetric\":\"My Product Metric\",\"products[0].position\":10,\"products[1].product_id\":\"507f1f77bcf86cdef799439011\",\"products[1].productDimension\":\"My Product Dimension1\",\"products[1].productMetric\":\"My Product Metric1\",\"products[1].position\":-10,\"testDimension\":true,\"testMetric\":true,\"content_ids\":[\"507f1f77bcf86cd799439011\",\"507f1f77bcf86cdef799439011\"],\"content_type\":\"product\",\"contents\":[{\"id\":\"507f1f77bcf86cd799439011\",\"quantity\":2},{\"id\":\"507f1f77bcf86cdef799439011\",\"quantity\":2}],\"content_category\":\"cat 1\",\"value\":0,\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"price\":24.75,\"name\":\"my product 1\",\"category\":\"clothing\",\"sku\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"product\",\"content_name\":\"my product 1\",\"content_category\":\"clothing\",\"value\":24.75,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"AddToCart\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"value\":24.75,\"category\":\"cat 1\",\"id\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"product\",\"content_name\":\"\",\"content_category\":\"cat 1\",\"contents\":[{\"id\":\"p-298\",\"quantity\":1}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Purchase\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"order_id\":\"ruchiraorder1\",\"total\":99.99,\"revenue\":12.24,\"shipping\":13.99,\"tax\":20.99,\"currency\":\"INR\",\"contentName\":\"all about nutrition\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":3,\"products[1].price\":24.75,\"products[1].name\":\"other product\",\"products[1].sku\":\"p-299\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":12.24,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":3,\"item_price\":24.75}],\"num_items\":2,\"content_name\":\"all about nutrition\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"InitiateCheckout\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"category\":\"clothing\",\"contentName\":\"abc\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":1,\"products[1].price\":24.75,\"products[1].name\":\"my product 2\",\"products[1].sku\":\"p-299\",\"step\":1,\"paymentMethod\":\"Visa\",\"testDimension\":true,\"testMetric\":true,\"content_category\":\"clothing\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":0,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":1,\"item_price\":24.75}],\"num_items\":2}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"fbc\":\"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890\",\"fbp\":\"fb.1.1554763741205.234567890\",\"lead_id\":\"lead_id\",\"fb_login_id\":\"fb_id\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"data_processing_options\":[\"LDU\"],\"data_processing_options_country\":1,\"data_processing_options_state\":1000,\"custom_data\":{\"additional_bet_index\":0,\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\",\"fbc\":\"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890\",\"fbp\":\"fb.1.1554763741205.234567890\",\"lead_id\":\"lead_id\",\"fb_login_id\":\"fb_id\"},\"event_name\":\"spin_result\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"additional_bet_index\":0,\"value\":400}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Search\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"product_id\":\"p-298\",\"quantity\":2,\"price\":18.9,\"category\":\"health\",\"value\":18.9,\"query\":\"HDMI cable\",\"content_ids\":[\"p-298\"],\"content_category\":\"health\",\"contents\":[{\"id\":\"p-298\",\"quantity\":2,\"item_price\":18.9}],\"search_string\":\"HDMI cable\",\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Search\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"query\":\"HDMI cable\",\"content_ids\":[],\"content_category\":\"\",\"value\":0,\"contents\":[],\"search_string\":\"HDMI cable\",\"currency\":\"USD\"}}"
- ],
- "test_event_code": "TEST1001"
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_ip_address\":\"0.0.0.0\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"PageView\",\"event_time\":1567333011,\"event_source_url\":\"jkl\",\"event_id\":\"5e10d13a-bf9a-44bf-b884-43a9e591ea71\",\"action_source\":\"website\",\"custom_data\":{\"path\":\"/abc\",\"referrer\":\"xyz\",\"search\":\"def\",\"title\":\"ghi\",\"url\":\"jkl\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"PageView\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Schedule\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"quantity\":2,\"category\":\"cat 1\",\"list_id\":\"1234\",\"filters[0].type\":\"department\",\"filters[0].value\":\"beauty\",\"filters[1].type\":\"price\",\"filters[1].value\":\"under\",\"sorts[0].type\":\"price\",\"sorts[0].value\":\"desc\",\"products[0].product_id\":\"507f1f77bcf86cd799439011\",\"products[0].productDimension\":\"My Product Dimension\",\"products[0].productMetric\":\"My Product Metric\",\"products[0].position\":10,\"products[1].product_id\":\"507f1f77bcf86cdef799439011\",\"products[1].productDimension\":\"My Product Dimension1\",\"products[1].productMetric\":\"My Product Metric1\",\"products[1].position\":-10,\"testDimension\":true,\"testMetric\":true}}"
- ]
- }
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "'event' is required",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"AddToCart\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"value\":35.75,\"category\":\"cat 1\",\"id\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"product\",\"content_name\":\"\",\"content_category\":\"cat 1\",\"contents\":[{\"id\":\"p-298\",\"quantity\":1}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"AddToCart\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"value\":35.7,\"category\":\"cat 1\",\"id\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"product\",\"content_name\":\"\",\"content_category\":\"cat 1\",\"contents\":[{\"id\":\"p-298\",\"quantity\":1}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Revenue could not be converted to number",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Purchase\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"category[0]\":\"clothing\",\"category[1]\":\"fishing\",\"order_id\":\"ruchiraorder1\",\"total\":99.99,\"revenue\":12.24,\"shipping\":13.99,\"tax\":20.99,\"currency\":\"INR\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":3,\"products[1].price\":24.75,\"products[1].name\":\"other product\",\"products[1].sku\":\"p-299\",\"content_category\":\"clothing,fishing\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":12.24,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":3,\"item_price\":24.75}],\"num_items\":2}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Purchase\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"category\":100,\"order_id\":\"ruchiraorder1\",\"total\":99.99,\"revenue\":12.24,\"shipping\":13.99,\"tax\":20.99,\"currency\":\"INR\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":3,\"products[1].price\":24.75,\"products[1].name\":\"other product\",\"products[1].sku\":\"p-299\",\"content_category\":\"100\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":12.24,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":3,\"item_price\":24.75}],\"num_items\":2}}"
- ]
- }
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "'properties.category' must be either be a string or an array",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"6dc8118ec743f5f3b758939714193f547f4a674c68757fa80d7c9564dc093b0a\",\"em\":\"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08\"},\"event_name\":\"Schedule\",\"event_time\":1567333011,\"action_source\":\"other\",\"custom_data\":{\"revenue\":400,\"additional_bet_index\":0}}"
- ]
- }
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "Events must be sent within seven days of their occurrence or up to one minute in the future.",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "statusCode": 400,
- "error": "Events must be sent within seven days of their occurrence or up to one minute in the future.",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "statusCode": 400,
- "error": "'query' should be in string format only",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"Search\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"query\":50,\"content_ids\":[],\"content_category\":\"\",\"value\":0,\"contents\":[],\"search_string\":50,\"currency\":\"USD\"}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\",\"fbc\":\"fb.1.1567333011693.IwAR2SsDcjzd_TLZN-e93kxOeGBYO4pQ3AiyeXSheHW5emDeLw8uTvo6lTMPI\"},\"event_name\":\"InitiateCheckout\",\"event_time\":1567333011,\"event_source_url\":\"https://theminimstory.com/collections/summer-of-pearls?utm_source=facebook&utm_medium=paidsocial&utm_campaign=carousel&utm_content=ad1-jul&fbclid=IwAR2SsDcjzd_TLZN-e93kxOeGBYO4pQ3AiyeXSheHW5emDeLw8uTvo6lTMPI\",\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"category\":\"clothing\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":1,\"products[1].price\":24.75,\"products[1].name\":\"my product 2\",\"products[1].sku\":\"p-299\",\"step\":1,\"paymentMethod\":\"Visa\",\"testDimension\":true,\"testMetric\":true,\"content_category\":\"clothing\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":0,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":1,\"item_price\":24.75}],\"num_items\":2}}"
- ]
- }
- },
- "files": {}
- },
- {
- "statusCode": 400,
- "error": "event name should be string",
- "statTags": {
- "errorCategory": "dataValidation",
- "errorType": "instrumentation"
- }
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "JSON_ARRAY": {},
- "XML": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"external_id\":\"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5\",\"em\":\"4e59b5130b3a248457336e2fe5e40a3e8604f28d1804be14e6b227e2d88d7ce2\",\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"InitiateCheckout\",\"event_time\":1567333011,\"event_source_url\":\"url in wrong format\",\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"category\":\"clothing\",\"products[0].quantity\":1,\"products[0].price\":24.75,\"products[0].name\":\"my product\",\"products[0].sku\":\"p-298\",\"products[1].quantity\":1,\"products[1].price\":24.75,\"products[1].name\":\"my product 2\",\"products[1].sku\":\"p-299\",\"step\":1,\"paymentMethod\":\"Visa\",\"testDimension\":true,\"testMetric\":true,\"content_category\":\"clothing\",\"content_ids\":[\"p-298\",\"p-299\"],\"content_type\":\"product\",\"value\":0,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75},{\"id\":\"p-299\",\"quantity\":1,\"item_price\":24.75}],\"num_items\":2}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"price\":24.75,\"name\":\"my product 1\",\"category\":\"clothing\",\"sku\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"sending dedicated content type for this particular payload\",\"content_name\":\"my product 1\",\"content_category\":\"clothing\",\"value\":24.75,\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "version": "1",
- "type": "REST",
- "method": "POST",
- "endpoint": "https://graph.facebook.com/v17.0/dfgdfgdgd/events?access_token=09876",
- "headers": {},
- "params": {},
- "body": {
- "JSON": {},
- "XML": {},
- "JSON_ARRAY": {},
- "FORM": {
- "data": [
- "{\"user_data\":{\"client_user_agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\"},\"event_name\":\"ViewContent\",\"event_time\":1567333011,\"event_id\":\"ec5481b6-a926-4d2e-b293-0b3a77c4d3be\",\"action_source\":\"website\",\"custom_data\":{\"currency\":\"CAD\",\"quantity\":1,\"price\":24.75,\"value\":18.9,\"name\":\"my product 1\",\"category\":\"clothing\",\"sku\":\"p-298\",\"testDimension\":true,\"testMetric\":true,\"position\":4.5,\"content_ids\":[\"p-298\"],\"content_type\":\"product\",\"content_name\":\"my product 1\",\"content_category\":\"clothing\",\"contents\":[{\"id\":\"p-298\",\"quantity\":1,\"item_price\":24.75}]}}"
- ]
- }
- },
- "files": {}
- },
- {
- "error": "'properties.products' is not sent as an Array